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

        buildbot: Fix mixing of tabs and spaces after r214172
        https://bugs.webkit.org/show_bug.cgi?id=169793

        Unreviewed.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.evaluateCommand):

2017-03-22  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an option to exclude overflow when snapshotting a WKWebProcessPlugInNodeHandle
        https://bugs.webkit.org/show_bug.cgi?id=169991
        <rdar://problem/30141083>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptions.mm: Added.
        (-[RenderedImageWithOptionsObject didRenderImageWithSize:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptionsPlugIn.mm: Added.
        (-[RenderedImageWithOptionsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RenderedImageWithOptionsPlugIn webProcessPlugInBrowserContextController:didFinishLoadForFrame:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptionsProtocol.h: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/rendered-image-excluding-overflow.html: Added.

2017-03-22  Matt Rajca  <mrajca@apple.com>

        Only run volume-related autoplay policy tests on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=169969

        Reviewed by Alex Christensen.

        iOS does not support volume changes to media elements so these tests are timing out.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST):

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

        [Linux] determineArchitecture is not cross-compile aware
        https://bugs.webkit.org/show_bug.cgi?id=169886

        Reviewed by Michael Catanzaro.

        Try to detect the target architecture name from the GCC triplet
        when cross-building.

        The aarch64 architecture is renamed to arm64 (this is coherent with
        the rest of the perl tooling that consults the architecture determined
        in determineArchitecture(), the check for this arch is always done
        with the arm64 name).

        * Scripts/webkitdirs.pm: Remove the isARM() function: its dead code
        and not cross-build aware.
        (determineArchitecture): When crossbuilding, try to detect the target
        architecture name from the GCC triplet.
        Remove also the fallback option to run the arch command, because this
        command doesn't print the expected on Mac/BSD, and on Linux is the
        same than uname -m. See https://bugs.webkit.org/show_bug.cgi?id=152958#c6
        (isCrossCompilation): Some cross-compilers (buildroot one for example)
        don't define the --host option. Add another option to detect that
        we are cross-building by building a dummy program and checking if
        we can run it.

2017-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Several WPT tests are failing since they were added in the last update in r213882
        https://bugs.webkit.org/show_bug.cgi?id=169915

        Reviewed by Michael Catanzaro.

        Add libsoup patch to not fail loads when there's no empty line after the headers in responses with no body.

        * gtk/jhbuild.modules:
        * gtk/patches/libsoup-soup-message-io-Do-not-fail-when-there-s-no-empty-li.patch: Added.

2017-03-20  Matt Rajca  <mrajca@apple.com>

        Loosen audio playback restrictions when the volume is 0.
        https://bugs.webkit.org/show_bug.cgi?id=169897

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/autoplay-zero-volume-check.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST):

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

        EWS fails to parse_bug_id_from_attachment_page after bugzilla upgrade
        https://bugs.webkit.org/show_bug.cgi?id=169937
        <rdar://problem/31181859>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._parse_bug_id_from_attachment_page): Since rel tag is no longer present, parsing the bug id from bug_title. 
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Fixed unit test.

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

        ews should indicate in logs when it fails to parse_bug_id_from_attachment_page
        https://bugs.webkit.org/show_bug.cgi?id=169927

        Reviewed by  Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._parse_bug_id_from_attachment_page): Added log statement.

2017-03-20  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace point for memory warning handling
        https://bugs.webkit.org/show_bug.cgi?id=169893

        Reviewed by Zalan Bujtas.

        Describe the new trace points.

        * Tracing/SystemTracePoints.plist:

2017-03-20  Alex Christensen  <achristensen@webkit.org>

        WebPageProxy DecidePolicyForNavigationAction and DecidePolicyForResponseSync should be Delayed reply messages
        https://bugs.webkit.org/show_bug.cgi?id=167183
        <rdar://problem/30203539>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):

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

        webkitpy: Work around simctl launch returning dead processes
        https://bugs.webkit.org/show_bug.cgi?id=169878

        Reviewed by Daniel Bates.

        simctl launch will sometimes give the PID of a process which has just been terminated.
        To work around this, we will always check if the returned PID is of a process which is
        still running.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.Popen.__init__): Accept device argument.
        (SimulatorProcess.Popen.poll): Call device.poll().
        (SimulatorProcess._start): Pass device into Popen object.
        * Scripts/webkitpy/xcode/device.py:
        (Device.poll): Added.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Change attempts to timeout.
        (SimulatedDevice.launch_app): Check that the process being returned is active, use a
        timeout instead of attempts.
        (SimulatedDevice):
        (SimulatedDevice.poll): Added.

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

        buildbot: run-webkit-tests should display test failures and run exceptions differently
        https://bugs.webkit.org/show_bug.cgi?id=169793
        <rdar://problem/30987863>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.evaluateCommand): Return EXCEPTION when run-webkit-tests returns with a code of 254.

2017-03-17  Michael Saboff  <msaboff@apple.com>

        Use USE_INTERNAL_SDK to compute ENABLE_FAST_JIT_PERMISSIONS instead of HAVE_INTERNAL_SDK
        https://bugs.webkit.org/show_bug.cgi?id=169817

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-03-16  Simon Fraser  <simon.fraser@apple.com>

        Improve the system tracing points
        https://bugs.webkit.org/show_bug.cgi?id=169790

        Reviewed by Zalan Bujtas.

        Use a more cohesive set of system trace points that give a good overview of what
        WebKit is doing. Added points for resource loading, render tree building, sync messages
        to the web process, async image decode, WASM and fetching cookies.

        * Tracing/SystemTracePoints.plist:

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

        Wrap legacy WebRTC API in runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=169646

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebRTCLegacyAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-03-16  Brady Eidson  <beidson@apple.com>

        Update the WKHTTPCookieStore API to be simpler and add observers.
        <rdar://problem/31096000> and https://bugs.webkit.org/show_bug.cgi?id=169776

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStorage.mm.
        (-[CookieObserver cookiesDidChangeInCookieStore:]):
        (TEST): Also test delete and observers.

2017-03-16  Kocsen Chung  <kocsen_chung@apple.com>

        Fix quotes around --pretty format git flag.
        https://bugs.webkit.org/show_bug.cgi?id=169712

        Reviewed by Ryosuke Niwa.

        Remove double quotes from command list element '--pretty="format:%ct"' since it will cause
        subprocess to not work as expected.
        Additionally, take advantage of `git -C` flag.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.native_revision):
        Take advantage of `git -C` flag.
        (Git.timestamp_of_native_revision):
        Take advantage of `git -C` flag and remove double quotes from git formatter.
        We know this works from `committer_email_for_revision()` function.

2017-03-16  Alex Christensen  <achristensen@webkit.org>

        Clean up WKContentExtension API
        https://bugs.webkit.org/show_bug.cgi?id=169772

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:
        (TEST_F):
        (-[ContentExtensionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

2017-03-16  Jonathan Bedard  <jbedard@apple.com>

        webktpy: Fix device regular expression for parsing simctl output
        https://bugs.webkit.org/show_bug.cgi?id=169757

        Reviewed by Alex Christensen.

        If a device is unavailable, the changes in r213164 mean that the
        name of the device will consume the UDID and return the state as
        the device UDID and the availability string as the device state.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Make UDID regular expression more strict.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Test an unavailable device.

2017-03-15  Tim Horton  <timothy_horton@apple.com>

        Null deref under callAfterNextPresentationUpdate
        https://bugs.webkit.org/show_bug.cgi?id=169710
        <rdar://problem/30987863>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/DoAfterNextPresentationUpdateAfterCrash.mm: Added.
        (TEST):

2017-03-15  Chris Dumez  <cdumez@apple.com>

        Document state (e.g. form data) is lost after a tab is terminated in the background for power reasons
        https://bugs.webkit.org/show_bug.cgi?id=169635
        <rdar://problem/31046729>

        Reviewed by Andreas Kling.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/mac/RestoreStateAfterTermination.mm: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::didFinishLoad):
        (TestWebKitAPI::didCrash):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/simple-form.html:

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

        Compiled content extensions should include the JSON source
        https://bugs.webkit.org/show_bug.cgi?id=169643

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:
        (TEST_F):

2017-03-15  Kocsen Chung  <kocsen_chung@apple.com>

        Use git's -C flag when possible in VCSUtils.pm
        https://bugs.webkit.org/show_bug.cgi?id=169003

        Reviewed by Sam Weinig.

        Use the git -C flag where appropriate to perform the
        operation on a target directory and avoid unnecessary logic
        to `cd` in and out of the target directory.

        * Scripts/VCSUtils.pm:
        (isGitDirectory):
        (isGitSVNDirectory):
        (svnRevisionForDirectory):
        (svnInfoForPath):
        For all four subroutines, use git's -C flag and strip `cd` logic.

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

        start-queue-mac.sh should create logs directory if it doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=169634

        Reviewed by Alexey Proskuryakov.

        * EWSTools/start-queue-mac.sh: Creating logs directory if it doesn't exist.

2017-03-14  Andy Estes  <aestes@apple.com>

        [iOS] -[WKWebView _dataForDisplayedPDF] returns nil when called before an encrypted PDF has been unlocked
        https://bugs.webkit.org/show_bug.cgi?id=169653
        <rdar://problem/24137675>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/encrypted.pdf: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm: Added.
        (runTest):
        (TEST):

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

        Rename WKHTTPCookieStorage to WKHTTPCookieStore.
        https://bugs.webkit.org/show_bug.cgi?id=169630

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStorage.mm:
        (TEST):

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

        webkitpy: Efficient app installation for device testing
        https://bugs.webkit.org/show_bug.cgi?id=169054
        <rdar://problem/30790207>

        Reviewed by Daniel Bates.

        We should only install an app on a device once, not every time the app is run.
        Move app installation to setup.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.setup_test_run): Install app to device.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.__init__): Remove app installation.

2017-03-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        Nwtr ignores ImageDiff's errors for ref tests
        https://bugs.webkit.org/show_bug.cgi?id=168033

        Reviewed by Alexey Proskuryakov.

        Nwtr checks ImageDiff's errors only for pixel tests, but for ref
        tests. Those errors of ref tests also should be checked.

        In the current implementation of expected mismatch ref tests,
        diff_image was called if the image hashes match. This is useless
        because two images are ensured identical in that case. Calling
        image_hash is considered unnecessary for expected mismatch ref
        tests. Do not call diff_image for them.

        As the result, check the error only for expected match ref tests.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image): Rename a variable 'err_str' to 'error_string'.
        (SingleTestRunner._compare_output_with_reference): Do not call
        diff_image for expected mismatch ref tests. Check the error and
        marked the test failed for expected match ref tests.

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

        REGRESSION (r213877): WebKit2.CookieManager fails.
        https://bugs.webkit.org/show_bug.cgi?id=169581

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Reenable the test.

2017-03-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Data interaction tests occasionally hit assertions in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=169002
        <rdar://problem/30994806>

        Reviewed by Tim Horton.

        Reenables and refactors data interaction tests.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator _advanceProgress]):

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

        REGRESSION (r213877): WebKit2.CookieManager fails.
        https://bugs.webkit.org/show_bug.cgi?id=169581

        Unreviewed gardening

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Skip for now until I can fix.

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

        [WTF] Clean up RunLoop and WorkQueue with Seconds and Function
        https://bugs.webkit.org/show_bug.cgi?id=169537

        Reviewed by Carlos Garcia Campos.

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

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

        WKWebView provides no access to cookies.
        https://bugs.webkit.org/show_bug.cgi?id=140191

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        [GTK] install-dependencies needs to install Perl CGI modules on Debian based distros
        https://bugs.webkit.org/show_bug.cgi?id=169563

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2017-03-13  Devin Rousso  <webkit@devinrousso.com>

        Unreviewed, fix accidental comma.

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

2017-03-13  Devin Rousso  <webkit@devinrousso.com>

        Unreviewed, change my email.

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

2017-03-13  Anders Carlsson  <andersca@apple.com>

        Fix build warnings.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate openDocument:]):
        * MiniBrowser/mac/ExtensionManagerWindowController.m:
        (-[ExtensionManagerWindowController add:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2017-03-13  Martin Robinson  <mrobinson@igalia.com>

        Remove my email from some of the watchlists
        https://bugs.webkit.org/show_bug.cgi?id=169541

        Reviewed by Manuel Rego Casasnovas.

        * Scripts/webkitpy/common/config/watchlist: Remove my name from some lists.

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

        [WTF] Clean up RunLoop and WorkQueue with Seconds and Function
        https://bugs.webkit.org/show_bug.cgi?id=169537

        Reviewed by Sam Weinig.

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

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

        [GTK] Remove dead code from previous autotools build in build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=169555

        Reviewed by Carlos Garcia Campos.

        * Scripts/build-jsc:
        (buildMyProject):

2017-03-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        MiniBrowser: a tab closed from javascript always closes the window
        https://bugs.webkit.org/show_bug.cgi?id=169415

        Reviewed by Michael Catanzaro.

        When I implemented tabs support in MiniBrowser I forgot about web view close. We connect to the signal (only for
        the active tab) and close the window. That worked when we didn't have tabs, but now we should close the tab, or
        the window if it's the last tab.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewClose): Destroy the window if therte's only one tab, otherwise search for the tab corresponding to the web
        view and destroy it.
        (browserWindowSwitchTab): Re-connect to close signal, we want to handle close on all tabs.

2017-03-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Enable async image decoding for large images
        https://bugs.webkit.org/show_bug.cgi?id=165039

        Reviewed by Simon Fraser.

        Disable LargeImageAsyncDecoding for DRT/WTR.

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

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

        Fix watch and tv builds after r213294
        https://bugs.webkit.org/show_bug.cgi?id=169508

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-03-10  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        checkpatchrelevance: Exception message is printed twice due to ScriptError handler
        https://bugs.webkit.org/show_bug.cgi?id=169496

        Unreviewed fix.

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Add --quiet flag to expected logs.

2017-03-10  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        checkpatchrelevance: Exception message is printed twice due to ScriptError handler
        https://bugs.webkit.org/show_bug.cgi?id=169496

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._check_patch_relevance): Pass --quiet flag.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance.options): Accept options.quiet to prevent duplicate output to stdout.

2017-03-10  Ryan Haddad  <ryanhaddad@apple.com>

        Add new EWS queues to bot watcher's dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=169485

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Add Bindings and JSC EWS queues.

2017-03-10  Andy Estes  <aestes@apple.com>

        Skip an API test that isn't expected to pass on iOS 10.

        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm:

2017-03-10  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add bindings-ews to queue status server
        https://bugs.webkit.org/show_bug.cgi?id=169307

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py: Add "bindings-ews" to the list of ewses.

2017-03-10  Andy Estes  <aestes@apple.com>

        [QuickLook] Add WKNavigationDelegate SPI to notify when a password is requested
        https://bugs.webkit.org/show_bug.cgi?id=169459
        <rdar://problem/30621913>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm:
        (runTest):
        (TEST):
        (-[QuickLookPasswordNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]):

2017-03-10  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add support for Bindings EWS
        https://bugs.webkit.org/show_bug.cgi?id=169308

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/ews.json: Add bindings-ews. Can test without building; should_build = False.
        * Scripts/webkitpy/common/net/bindingstestresults.py:
        (BindingsTestResults.__init__): Removed 'errors'.
        (BindingsTestResults.results_from_string): Ditto.
        (BindingsTestResults.is_subset): Ditto.
        (BindingsTestResults.equals): Ditto.
        (BindingsTestResults.all_passed): Ditto.
        (BindingsTestResults.failing_tests): Ditto.
        * Scripts/webkitpy/common/net/bindingstestresults_unittest.py:
        (BindingsTestResultsTest.test_results_from_string): Removed 'errors'.
        (BindingsTestResultsTest.test_results_from_string_success): Removed 'errors'.
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        (EarlyWarningSystemTask.__init__): Add should_build parameter.
        (EarlyWarningSystemTask.run): Check should_build before calling self._build().
        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py: Renamed from Tools/Scripts/webkitpy/tool/bot/jscews_unittest.py.
        (MockBindingsEarlyWarningSystem): Based of MockJSCEarlyWarningSystem. Mocked so we can provide test results.
        (MockBindingsEarlyWarningSystem.__init__): Sets attributes.
        (MockBindingsEarlyWarningSystem.test_results): Returns test results provided by us, instead of JSON output.
        (BindingsEarlyWarningSystemTest): Class to test retry logic in below situations.
        (BindingsEarlyWarningSystemTest._results_indicate_all_passed): False if None or or has failures, else True.
        (BindingsEarlyWarningSystemTest._create_task):
        (BindingsEarlyWarningSystemTest.test_success_case): Clean patch on clean tree.
        (BindingsEarlyWarningSystemTest.test_test_failure): Red patch on clean tree.
        (BindingsEarlyWarningSystemTest.test_fix): Clean patch on red tree.
        (BindingsEarlyWarningSystemTest.test_ineffective_patch): Red patch on red tree.
        (BindingsEarlyWarningSystemTest.test_partially_effective_patch): Red patch on redder tree.
        (BindingsEarlyWarningSystemTest.test_different_test_failures_in_patch_and_tree): Red patch on red tree.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._build_and_test_without_patch): Don't build if should_build is False (eg. on Bindings EWS).
        (PatchAnalysisTask._retry_bindings_tests): Retry logic for Bindings tests.
        (PatchAnalysisTask._test_patch): If tests failed on Bindings EWS, and call _retry_bindings_tests.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.begin_work_queue): Use BindingsTestResultsReader on Bindings EWS.
        (AbstractEarlyWarningSystem._create_task): Pass should_build argument.
        (AbstractEarlyWarningSystem.load_ews_classes): Add should_build argument (True by default).
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (TestBindingsEWS): Bindings EWS class, derived from AbstractEarlyWarningSystem.
        (AbstractEarlyWarningSystemTest.test_failing_bindings_tests_message): Unit test message posted to Bugzilla.
        (EarlyWarningSystemTest._default_expected_logs): Not building on all ewses anymore; make build line optional.
        (EarlyWarningSystemTest.test_ews_name): Add bindings-ews.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance): Add bindings paths.
        (CheckPatchRelevance._changes_are_relevant): Cleaner way to check if we should perform this step.
        * Scripts/webkitpy/tool/steps/steps_unittest.py: Add unit tests for Bindings EWS patch relevance.
        (test_patch_relevant_bindings): Test for patch relevant to bindings.
        (test_patch_not_relevant_bindings): Test for patch not relevant to bindings.

2017-03-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Layer content blurry with nested perspective and transforms
        https://bugs.webkit.org/show_bug.cgi?id=169457
        rdar://problem/29879484

        Reviewed by Tim Horton.

        We set rasterizationScale on CALayers to the same values as contentsScale, to
        avoid blurry layers when CA rasterizes, which often happens with nested perspective
        transforms.

        However, in UI-side compositing, if the page is not zoomed, we never applied the
        rasterizationScale in the UI process. This happened because the PlatformCALayerRemote
        constructor set m_properties.contentsScale, but did not set the dirty bit that
        triggers the application of contentsScale and rasterizationScale in RemoteLayerTreePropertyApplier.
        The fix is to set this dirty bit.

        The rest of the changes are for testing. Internals now exposes layerIDForElement()
        for returns an internal (non-stable-across-loads) layerID, which can be passed
        to UIScriptController.propertiesOfLayerWithID() in the UI process, which inspects
        the built layer (UIView) hierarchy. propertiesOfLayerWithID() returns a dictionary
        which the test can dump as JSON, or pull values out of.

        A few #pragma once cleanups also.

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

2017-03-10  Commit Queue  <commit-queue@webkit.org>

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

        Suspect this is the cause of a large memory regression
        (Requested by jonlee_ on #webkit).

        Reverted changeset:

        "Enable async image decoding for large images"
        https://bugs.webkit.org/show_bug.cgi?id=165039
        http://trac.webkit.org/changeset/213618

2017-03-09  Brian Nicholson  <bnicholson@mozilla.com> and Alex Christensen  <achristensen@webkit.org>

        Expose public APIs for content filters
        https://bugs.webkit.org/show_bug.cgi?id=150479

        Reviewed by Brady Eidson and Geoff Garen.

        Keep the existing tests to verify that I made the wrapper classes for the old SPI work correctly.
        Add new identical tests for the new API are added with the new names.
        We should keep both until we migrate from and remove the old SPI.
        Enum error code values and strings have changed, but the API is source compatible.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm: Copied from Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm.
        (WKUserContentExtensionStoreTest::SetUp):
        (TEST_F):
        (checkDomain):
        (_WKUserContentExtensionStoreTest::SetUp): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:
        (checkDomain):

2017-03-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the WebKit2 test bots following <https://trac.webkit.org/changeset/213676>
        (https://bugs.webkit.org/show_bug.cgi?id=169364)

        Create new WebView with Credential Management enabled when the enableCredentialManagement
        WebKitTestRunner option is specified.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):

2017-03-09  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove statistics data as part of full website data removal
        https://bugs.webkit.org/show_bug.cgi?id=169448

        Reviewed by Alex Christensen.

        This patch adds infrastructure for the new TestRunner function
        statisticsClearInMemoryAndPersistentStore().

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

2017-03-09  Dean Jackson  <dino@apple.com>

        WebGPU: Backend - Buffers
        https://bugs.webkit.org/show_bug.cgi?id=169451
        <rdar://problem/30959168>

        Reviewed by Tim Horton.

        Test for GPUBuffer object.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm: Added.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:

2017-03-09  Daniel Bates  <dabates@apple.com>

        Guard Credential Management implementation behind a runtime enabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169364
        <rdar://problem/30957425>

        Reviewed by Brent Fulgham.

        Add a new test option header, enableCredentialManagement, to DumpRenderTree/WebKitTestRunner
        to enable Credential Management.

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

2017-03-09  Anders Carlsson  <andersca@apple.com>

        Add delegate support to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169427
        Part of rdar://problem/28880714.

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-03-09  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Introduce if-top-url and unless-top-url
        https://bugs.webkit.org/show_bug.cgi?id=169433

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Add tests for new functionality and new failure types.

2017-03-09  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        JSC EWS repeat the log message thrice about patch not being relevant
        https://bugs.webkit.org/show_bug.cgi?id=169330

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance.run): Change log level to 'debug' to reduce stdout traffic.

2017-03-08  Matt Rajca  <mrajca@apple.com>

        Let clients control autoplay quirks with website policies.
        https://bugs.webkit.org/show_bug.cgi?id=169390

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit2/autoplay-check.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2017-03-09  Devin Rousso  <dcrousso+webkit@gmail.com>

        Unreviewed, change my status to be a WebKit reviewer

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

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

        Standardize device/simulator naming conventions
        https://bugs.webkit.org/show_bug.cgi?id=169083
        <rdar://problem/30810466>

        Reviewed by Alexey Proskuryakov.

        * Scripts/build-webkit: Document --ios-device and --simulator options.
        * Scripts/package-root:
        (usage): Ditto.
        * Scripts/run-api-tests: Document --simulator option.
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Use --ios-device by default rather than --device.
        (determineXcodeSDK): Parse --ios-device and --simulator options.
        * Scripts/webkitpy/common/config/ews.json: Change port name from ios to ios-device.
        * Scripts/webkitpy/common/config/ports.py: Ditto.
        (DeprecatedPort.port):
        (IOSPort): Change port name from ios to ios-device. 
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add --simulator option.
        (PortFactory): Update comment.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Change port name from ios to ios-device.
        (IOSDevicePort.operating_system): Ditto.

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

        webkitpy: Add unit test to prevent breakage of EWS
        https://bugs.webkit.org/show_bug.cgi?id=169385

        Reviewed by Alexey Proskuryakov.

        Prevent <http://trac.webkit.org/changeset/213545> from happening in the future.

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name): Added.

2017-03-08  Dean Jackson  <dino@apple.com>

        WebGPU: Backend - Library and Functions
        https://bugs.webkit.org/show_bug.cgi?id=169371
        <rdar://problem/30928792>

        Reviewed by Tim Horton.

        Add tests for GPULibrary and GPUFunction.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::TEST): Deleted.
        * TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm: Copied from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm: Copied from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPUTest.h: Copied from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm.
        (TestWebKitAPI::GPU::librarySourceCode):

2017-03-08  Filip Pizlo  <fpizlo@apple.com>

        WTF should make it super easy to do ARM concurrency tricks
        https://bugs.webkit.org/show_bug.cgi?id=169300

        Reviewed by Mark Lam.
        
        This vastly simplifies the consume API. The new API is thoroughly tested by being used
        in the GC's guts. I think that unit tests are a pain to maintain, so we shouldn't have
        them unless we are legitimately worried about coverage. We're not in this case.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Consume.cpp: Removed.

2017-03-08  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Fix error/warning duplication in JSON bindings results
        https://bugs.webkit.org/show_bug.cgi?id=169305

        Reviewed by Alexey Proskuryakov.

        The distinction between failures and errors is not meaningful, since all errors will also be failures.
        As a result, we only need to keep track of failures.
        
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.__init__): Remove errors.
        (BindingsTests.detect_changes): Remove errors.
        (BindingsTests.main): Remove errors.

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

        [JSC] Add helpers to run Six Speed to run-jsc-benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=169351

        Reviewed by Saam Barati.

        This patch adds an ability to run six-speed microbenchmarks
        from run-jsc-benchmarks by specifying six-speed directory in
        arewefastyet repository.

        While it is a collection of microbenchmarks, it is useful
        to ensure that our ES6 optimization covers major use cases.
        For the macrobenchmark, we already have ARES-6.

        * Scripts/run-jsc-benchmarks:

2017-03-08  Sam Weinig  <sam@webkit.org>

        import-w3c-tests doesn't work with svn repositories.
        https://bugs.webkit.org/show_bug.cgi?id=169190

        Reviewed by Tim Horton.

        The script assumed you had WebKit checked-out as a git repository, but
        there was no reason for that.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.clone):
        Add a class method to clone a repository which does not require 
        an existing checkout.

        (Git.fetch):
        (Git.checkout):
        Add methods needed for test_downloader.py, so it doesn't have to use
        the internal _run_git 

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.checkout_test_repository):
        Switch to using Git.clone(), which doesn't require an existing git
        directory, and then also adopt non private methods to fetch/checkout.

2017-03-08  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Communicate to the network process which domains to partition
        https://bugs.webkit.org/show_bug.cgi?id=169322
        <rdar://problem/30768921>

        Reviewed by Alex Christensen.

        These changes add support for two new TestRunner functions:
        - setCookieStoragePartitioningEnabled()
        - statisticsFireShouldPartitionCookiesHandler()

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

2017-03-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Enable async image decoding for large images
        https://bugs.webkit.org/show_bug.cgi?id=165039

        Reviewed by Simon Fraser.

        Disable LargeImageAsyncDecoding for DRT/WTR.

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

2017-03-08  Matt Rajca  <mrajca@apple.com>

        Add support for updating autoplay policies after a page has been loaded.
        https://bugs.webkit.org/show_bug.cgi?id=169360

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2/autoplay-check.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST):

2017-03-08  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r213545.

        iOS EWS broken by this change

        Reverted changeset:

        "Standardize device/simulator naming conventions"
        https://bugs.webkit.org/show_bug.cgi?id=169083
        http://trac.webkit.org/changeset/213545

2017-03-07  Kocsen Chung  <kocsen_chung@apple.com>

        Perf and layout test results should report using correct scm revision.
        https://bugs.webkit.org/show_bug.cgi?id=169171

        Reviewed by Ryosuke Niwa.

        For accurate record keeping, perf test and layout test results should
        report using the native scm revision as an identifier.
        To do so we introduce a new scm functions:
            `native_revision()` and `timestamp_of_native_revision()`.
        The former is responsible for returning a git hash if scm.git or an
        svn revision if scm.svn. The latter is responsible for retrieving the correct timestamp.
        We also add the corresponding tests and a helper function `_most_recent_log_for_revision`.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.run):
        Drive-by indentation fix to adhere to WebKit style conventions.
        (SCM.svn_revision):
        Remove superfluous comment.
        (SCM.native_revision):
        Add new abstract function `native_revision` and make it a `_subclass_must_implement()`
        as we want to closely mimic `svn_revision()` function due to their similar behavior.
        (SCM.timestamp_of_native_revision):
        Add new abstract function `timestamp_of_native_revision` to closely mimic `timestamp_of_revision`.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._most_recent_log_for_revision):
        New helper function similar to `_most_recent_log_matching` that is git hash friendly.
        (Git.native_revision):
        Implement new function `native_revision()`. Get the native_revision by running:

            `git log -1 --pretty=format:%H`

        and thus returning the latest git hash (in long format).
        (Git.timestamp_of_native_revision):
        Since perftestrunner and layout_test.controllers.manager use the new native_revision
        function, we create a new native_revision timestamp retriever.
        You will notice this uses a far more simplified way to retrieve UTC strict-ISO timestamp
        than its non-native counterpart: `timestamp_of_revision()`.
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.native_revision):
        Implement native_revision for SVN: simply return self.svn_revision()
        (SVN.timestamp_of_native_revision):
        Implement timestamp_of_native_revision for SVN: simply return self.timestamp_of_revision()

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (test_native_revision):
        [SVN] Confirm that svn_revision == native_revision. And that native_revision returns 5.
        Use '.' as the path parameter instead of svn_checkout_path to avoid violating pylint/E1101
        and since we are guaranteed by test setUp to be in the correct SVN dir.
        (GitTest.test_native_revision):
        [Git] Confirm that `git rev-parse HEAD` is equal to newly implemented native_revision().
        (GitSVNTest.test_native_revision):
        [Git] Confirm that `git rev-parse HEAD` is equal to newly implemented native_revision().
        (test_timestamp_of_native_revision):
        Test new function `timestamp_of_native_revision`. Very similar fashion to
        `test_timestamp_of_revision`.

        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.native_revision):
        Add MockSCM.native_revision to behave like svn.py (default).
        (MockSCM.test_native_revision):
        Add MockSCM.test_native_revision to behave like its non-native counterpart.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.upload_results):
        When iterating through a list of projects, make sure we use the project's new native revision.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict):
        As per the FIXME in manager.py, we have duplicate code in perftestsrunner.py.
        So make the same exact change here.

2017-03-07  Tim Horton  <timothy_horton@apple.com>

        Fix the TestWebKitAPI build

        Rubber-stamped by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        (TestWebKitAPI::TEST_F):
        Fix a new warning about default argument promotion and va_start by
        making this a enum class.

2017-03-07  Dean Jackson  <dino@apple.com>

        Some platforms won't be able to create a GPUDevice
        https://bugs.webkit.org/show_bug.cgi?id=169314
        <rdar://problems/30907521>

        Reviewed by Jon Lee.

        Protect for the case where the hardware doesn't support Metal.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
        (TestWebKitAPI::TEST):

2017-03-07  Maureen Daum  <mdaum@apple.com>

        Correctly check for an empty database file.
        <rdar://problem/30542242> Removing Website Data not working (WebSQL directories being left behind)
        https://bugs.webkit.org/show_bug.cgi?id=169256

        Reviewed by Brady Eidson.

        Add a test for DatabaseTracker::deleteDatabaseFileIfEmpty that verifies
        that if we pass in an empty file it actually gets deleted.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add TestWebKitAPI/Tests/WebCore/DatabaseTrackerTest.cpp.
        * TestWebKitAPI/Tests/WebCore/DatabaseTrackerTest.cpp: Added.
        (TestWebKitAPI::TEST):

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

        [URLParser] Fix file URLs that are just file:// and a Windows drive letter
        https://bugs.webkit.org/show_bug.cgi?id=169242

        Reviewed by Tim Horton.

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

2017-03-07  Jonathan Bedard  <jbedard@apple.com>

        Standardize device/simulator naming conventions
        https://bugs.webkit.org/show_bug.cgi?id=169083
        <rdar://problem/30810466>

        Reviewed by Alexey Proskuryakov.

        * Scripts/build-webkit: Document --ios-device and --simulator options.
        * Scripts/package-root:
        (usage): Ditto.
        * Scripts/run-api-tests: Document --simulator option.
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Use --ios-device by default rather than --device.
        (determineXcodeSDK): Parse --ios-device and --simulator options.
        * Scripts/webkitpy/common/config/ews.json: Change port name from ios to ios-device.
        * Scripts/webkitpy/common/config/ports.py: Ditto.
        (DeprecatedPort.port):
        (IOSPort): Change port name from ios to ios-device. 
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add --simulator option.
        (PortFactory): Update comment.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Change port name from ios to ios-device.
        (IOSDevicePort.operating_system): Ditto.

2017-03-07  Dean Jackson  <dino@apple.com>

        Add GPUDevice implementation and WebGPULayer
        https://bugs.webkit.org/show_bug.cgi?id=169219
        <rdar://problem/30879048>

        Reviewed by Sam Weinig.

        Test for WebCore's GPUDevice class.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm: Added.
        (TestWebKitAPI::TEST):

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

        [Content Extensions] Rename "Domain" to "Condition" where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=169297

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::TEST_F):

2017-03-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Refactor setup_test_run for IOSPort and IOSSimulator
        https://bugs.webkit.org/show_bug.cgi?id=169220
        <rdar://problem/30879645>

        Reviewed by Daniel Bates.

        Provide more specific port setup functions for iOS ports to allow more sharing of common code.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort._create_devices): Added.
        (IOSPort.setup_test_run): Shared iOS device setup code.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Renamed from setup_test_run.
        (IOSSimulatorPort.setup_test_run): Renamed as _create_devices.

2017-03-07  Anders Carlsson  <andersca@apple.com>

        Rewrite the DRT Pasteboard implementation to use UTIs and WTF types
        https://bugs.webkit.org/show_bug.cgi?id=169289

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard initWithName:]):
        (-[LocalPasteboard name]):
        (-[LocalPasteboard declareTypes:owner:]):
        (isUTI):
        (toUTI):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard changeCount]):
        (-[LocalPasteboard types]):
        (-[LocalPasteboard availableTypeFromArray:]):
        (-[LocalPasteboard setData:forType:]):
        (-[LocalPasteboard dataForType:]):
        (-[LocalPasteboard writeObjects:]):
        (-[LocalPasteboard dealloc]): Deleted.

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

        Add David Jonathan Ross to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=169265

        Unreviewed.

        David Jonathan Ross very kindly offered to create and contribute his Boxis font in r211060,
        which is used for testing font variations.

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

2017-03-07  Youenn Fablet  <youennf@gmail.com>

        W3C importer should be able to update the import expectations file
        https://bugs.webkit.org/show_bug.cgi?id=168037

        Reviewed by Ryosuke Niwa.

        Changing import expectations from an array to a map.
        Marking all test paths as import and updating import expectations file accordingly.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.__init__):
        (TestDownloader._init_paths_from_expectations):
        (TestDownloader):
        (TestDownloader.update_import_expectations):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.do_import):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:

2017-03-07  Philip Rogers  <pdr@google.com>

        Add pdr to the rendering watchlist
        https://bugs.webkit.org/show_bug.cgi?id=167298

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/common/config/contributors.json: Switch to pdr+autocc@chromium.org
        * Scripts/webkitpy/common/config/watchlist: Add pdr to the rendering watchlist.

2017-03-07  Mario Sanchez Prada  <mario@webkit.org>

        Unreviewed. Removed myself from the Accessibility watch list

        * Scripts/webkitpy/common/config/watchlist: Removed myself.

2017-03-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add Fujii Hironori to contributor's list
        https://bugs.webkit.org/show_bug.cgi?id=169261

        Reviewed by Yusuke Suzuki.

        Add myself to the contributor's lists so that my e-mail autocompletes for CC

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

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

        [GTK] Mark WTF_Lock.ContendedLongSection and WTF_WordLock.ContendedLongSection as slow.

        Unreviewed test gardening.

        The ContendedShortSection version of this tests were already marked as slow.
        And the ContendedLongSection version takes more or less the same time to run.
        They cause time outs on the bot sometimes.

        * Scripts/run-gtk-tests:
        (TestRunner):

2017-03-06  Michael Saboff  <msaboff@apple.com>

        Take advantage of fast permissions switching of JIT memory for devices that support it
        https://bugs.webkit.org/show_bug.cgi?id=169155

        Reviewed by Saam Barati.

        Updated the Xcode config files to match what is in the JavaScriptCore ones.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-03-06  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=169234
        torchmobile.com.cn is no longer a registered domain. These email addresses will bounce, so clean them up.

        Reviewed by Alexey Proskuryakov.

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

2017-03-03  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when the user never plays a media element that was prevented from auto-playing
        https://bugs.webkit.org/show_bug.cgi?id=169150

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Added.

2017-03-06  Alex Christensen  <achristensen@webkit.org>

        Fix URLs relative to file URLs with paths beginning with Windows drive letters
        https://bugs.webkit.org/show_bug.cgi?id=169178

        Reviewed by Tim Horton.

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

2017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Expand font-weight and font-stretch to take any number
        https://bugs.webkit.org/show_bug.cgi?id=168889

        Reviewed by Simon Fraser.

        Migrate off old enum types.

        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
        (TestWebKitAPI::createPlatformFont):
        (TestWebKitAPI::compareFonts):
        (TestWebKitAPI::TEST_F):

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

        [GTK][JSCOnly] Enable WebAssembly on Linux environment
        https://bugs.webkit.org/show_bug.cgi?id=164032

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:
        Enable WASM tests.

        * Scripts/webkitperl/FeatureList.pm:
        Enable WebAssembly.

2017-03-04  Lucas Forschler  <lforschler@apple.com>

        Test commit against svn.webkit.org after SHA-1 cleanup.
        
        Unreviewed.

2017-03-03  Dean Jackson  <dino@apple.com>

        Add WebGPU compile flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169161
        <rdar://problem/30846689>

        Reviewed by Tim Horton.

        Add ENABLE_WEBGPU, an experimental feature flag, a RuntimeEnabledFeature,
        and an InternalSetting.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebGL2Enabled):
        (WTR::TestRunner::setWebGPUEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-03-03  Dean Jackson  <dino@apple.com>

        Add a script to synchronize FeatureDefines.xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=169151
        <rdar://problem/30841856>

        Reviewed by Simon Fraser.

        I got sick of manually copying the FeatureDefines.xcconfig
        files, so I added a script to do it. As long as you
        run this after you've edited one, it will take the most
        recently updated and copy it to all the others.

        * Scripts/sync-feature-defines: Added.
        * Scripts/webkitpy/style/checkers/featuredefines.py:
        (FeatureDefinesChecker.check): Export the list of files,
        and give a suggestion to use the sync script.

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

        [URLParser] Fix file: as a relative file URL
        https://bugs.webkit.org/show_bug.cgi?id=169122

        Reviewed by Tim Horton.

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

2017-03-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate font-stretch to use fixed-point values
        https://bugs.webkit.org/show_bug.cgi?id=169107

        Reviewed by Dean Jackson.

        Update to new types.

        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
        (TestWebKitAPI::createPlatformFont):

2017-03-02  Brady Eidson  <beidson@apple.com>

        Update WKWebsiteDatastoreConfiguration SPI.
        https://bugs.webkit.org/show_bug.cgi?id=169102

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (-[WebsiteDataStoreCustomPathsMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2017-03-02  Jer Noble  <jer.noble@apple.com>

        Sufficently large timeValue and timeScale arguments to MediaTime will cause wrapping in toTimeScale().
        https://bugs.webkit.org/show_bug.cgi?id=169098

        Reviewed by Keith Miller.

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

2017-03-02  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add ability to read bindings test results
        https://bugs.webkit.org/show_bug.cgi?id=169063

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bindingstestresults.py: Added.
        (BindingsTestResults): Conforms to the AbstractTestResults interface.
        (BindingsTestResults.__init__): Constructor.
        (BindingsTestResults.results_from_string): Generates BindingsTestResults object from JSON string.
        (BindingsTestResults.is_subset): Compare failing tests in two BindingsTestResults objects.
        (BindingsTestResults.equals): Checks if two BindingsTestResults objects contain the same failing test names.
        (BindingsTestResults.all_passed): Return True if all bindings tests passed.
        (BindingsTestResults.failing_tests): Returns a list of failing tests.
        (BindingsTestResults.did_exceed_test_failure_limit): Always returns False, exists to conform to the interface.
        * Scripts/webkitpy/common/net/bindingstestresults_unittest.py: Added.
        (BindingsTestResultsTest): Class to test BindingsTestResults.
        (BindingsTestResultsTest.test_results_from_string): Unit tests string -> BindingsTestResults conversion.
        (BindingsTestResultsTest.test_results_from_string_success): Ditto, for success cases.
        * Scripts/webkitpy/tool/bot/bindingstestresultsreader.py: Added.
        (BindingsTestResultsReader): Conforms to the AbstractTestResultsReader interface.
        (BindingsTestResultsReader.results): Reads the results file and returns a BindingsTestResults object.

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

        Move stringMatchesWildcardString from WebKit2 to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169065

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Moved StringUtilities.mm
        * TestWebKitAPI/Tests/WebCore/StringUtilities.mm: Copied from Tools/TestWebKitAPI/Tests/WebKit2/mac/StringUtilities.mm.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mac/StringUtilities.mm: Removed.

2017-02-28  Matt Rajca  <mrajca@apple.com>

        Media: send "did interfere with playback" events when the user pauses an autoplaying element
        https://bugs.webkit.org/show_bug.cgi?id=169006

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2/js-play-with-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Added.

2017-03-02  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Refactor test results classes in webkitpy to enable faster EWS iteration
        https://bugs.webkit.org/show_bug.cgi?id=169053

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/abstracttestresults.py:
        (AbstractTestResults): Import json for parse_json_string().
        (AbstractTestResults.parse_json_string): Abstracted out from JSCTestResults.results_from_string().
        * Scripts/webkitpy/common/net/abstracttestresults_unittest.py: Added.
        (AbstractTestResultsTest): Class that tests AbstractTestResults.
        (AbstractTestResultsTest.test_parse_json_string_invalid_inputs): Move unit tests from JSCTestResultsTest.
        (AbstractTestResultsTest.test_parse_json_string_valid_input): Add a unit test for a success case.
        * Scripts/webkitpy/common/net/jsctestresults.py:
        (JSCTestResults.results_from_string): Call parse_json_string because it was abstracted out.
        * Scripts/webkitpy/common/net/jsctestresults_unittest.py:
        (JSCTestResultsTest.test_results_from_string): Remove JSON parsing unit tests, because they were moved.
        * Scripts/webkitpy/tool/bot/abstracttestresultsreader.py: Added.
        (AbstractTestResultsReader): Generic TestResultsReader with functions common to jsc, bindings etc.
        (AbstractTestResultsReader.__init__): Moved from JSCTestResultsReader.__init__().
        (AbstractTestResultsReader._read_file_contents): Moved from JSCTestResultsReader._read_file_contents().
        (AbstractTestResultsReader.results): Stub.
        * Scripts/webkitpy/tool/bot/jsctestresultsreader.py:
        (JSCTestResultsReader): Now inherits from AbstractTestResultsReader.
        (JSCTestResultsReader.__init__): Deleted.
        (JSCTestResultsReader._read_file_contents): Deleted.
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader): Now inherits from AbstractTestResultsReader.

2017-03-02  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-03-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213281.

        This change caused API test WebKit2.UserMediaBasic to time
        out.

        Reverted changeset:

        "[MediaStream] UIClient may not be notified of capture state
        change when leaving a page"
        https://bugs.webkit.org/show_bug.cgi?id=169014
        http://trac.webkit.org/changeset/213281

2017-03-02  Tomas Popela  <tpopela@redhat.com>

        [WK2] Keyboard menu key should show context menu
        https://bugs.webkit.org/show_bug.cgi?id=72099

        Show the context menu when the GtkWidget::popup-menu signal is
        emitted. This signal is triggered by pressing a key (usually
        the Menu key or the Shift + F10 shortcut) or it could be emitted on
        WebKitWebView.

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuDefaultMenu):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::emitPopupMenuSignal):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

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

        Replace -[WKWebView adjustedDataInteractionItemProviders:] with a UI delegate method
        https://bugs.webkit.org/show_bug.cgi?id=169013

        Reviewed by Dan Bernstein.

        Adjusts TestWebKitAPI for changes in WebKit2. See Source/WebKit2/ChangeLog for more details.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        (-[CustomItemProviderWebView _adjustedDataInteractionItemProviders:]): Deleted.
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator dealloc]):
        (-[DataInteractionSimulator _webView:adjustedDataInteractionItemProviders:]):

2017-03-01  Per Arne Vollan  <pvollan@apple.com>

        [Win] DRT should not dispatch messages after test is done.
        https://bugs.webkit.org/show_bug.cgi?id=169026

        Reviewed by Brent Fulgham.

        Exiting the message loop with PostQuitMessage will leave room for
        a few messages to be dispatched after the test is done.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (runTest):

2017-03-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement font-stretch for installed fonts
        https://bugs.webkit.org/show_bug.cgi?id=168888

        Reviewed by Darin Adler and Dave Hyatt.

        Update TestWebKitAPI tests to test font-stretch too.

        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
        (TestWebKitAPI::createPlatformFont):
        (TestWebKitAPI::compareFonts):
        (TestWebKitAPI::TEST_F):

2017-03-01  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r213259.

        Broke an internal build

        Reverted changeset:

        "Continue enabling WebRTC"
        https://bugs.webkit.org/show_bug.cgi?id=169056
        http://trac.webkit.org/changeset/213259

2017-03-01  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-02-28  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplayed media is muted
        https://bugs.webkit.org/show_bug.cgi?id=168987

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2/js-play-with-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Added.

2017-03-01  Brady Eidson  <beidson@apple.com>

        Add SPI to create WebsiteDataStore objects pointing to custom paths.
        https://bugs.webkit.org/show_bug.cgi?id=169044

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm: Added.
        (-[WebsiteDataStoreCustomPathsMessageHandler userContentController:didReceiveScriptMessage:]):
        (getNextMessage):
        (TEST):

2017-03-01  Simon Fraser  <simon.fraser@apple.com>

        Add a way to watch the CSSProperties.json file, and add me and Dan Bates to watch it.

        * Scripts/webkitpy/common/config/watchlist:

2017-03-01  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Move some device management from iOSSimulatorPort to iOSPort class
        https://bugs.webkit.org/show_bug.cgi?id=168681

        Reviewed by Daniel Bates.

        This patch moves high-level device management into iOSPort and adds a new iOSDevicePort class
        which inherits from iOSPort.  Additionally, this change renames device_id_for_worker_number to
        device_for_worker_number and manages devices by object instead of by UDID.

        * Scripts/webkitpy/port/factory.py:
        (PortFactory): Correct import path for IOSSimulatorPort and IOSDevicePort.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.__init__): Define variables shared between iOS ports.
        (IOSPort.driver_cmd_line_for_logging): From IOSSimulatorPort.
        (IOSPort.driver_name): From IOSSimulatorPort.
        (IOSPort.using_multiple_devices): Check if this port supports multiple devices.
        (IOSPort._testing_device): Map worker number to device.
        (IOSPort.device_for_worker_number): Return _testing_device() or _current_device based on using_multiple_devices. 
        (IOSSimulatorPort): Moved to ios_simulator.py
        * Scripts/webkitpy/port/ios_device.py: Added.
        (IOSDevicePort): Moved functionality from IOSPort.
        (IOSDevicePort.determine_full_port_name): Moved from IOSPort.
        (IOSDevicePort._build_driver_flags): Ditto.
        (IOSDevicePort.operating_system): Ditto.
        * Scripts/webkitpy/port/ios_simulator.py: Added.
        (IOSSimulatorPort): Moved from ios.py.
        (IOSSimulatorPort.__init__): Init parent class, setup device map.
        (IOSSimulatorPort._create_simulators): Use object over unbound methods.
        (IOSSimulatorPort.setup_test_run): Ditto.
        (IOSSimulatorPort.using_multiple_devices): True if we are managing the simulators.
        (IOSSimulatorPort._create_device): Use object over unbound methods.
        (IOSSimulatorPort._remove_device): Ditto.
        (IOSSimulatorPort.driver_name): Moved to parent class.
        (IOSSimulatorPort.driver_cmd_line_for_logging): Ditto.
        (IOSSimulatorPort.child_processes): Ditto.
        (IOSSimulatorPort._testing_device): Ditto.
        (IOSSimulatorPort.device_id_for_worker_number): Renamed as device_for_worker_number.
        (SimulatorProcess.__init__): Call find_device_by_udid, device_id_for_worker_number has been removed.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Make _managed_devices public.
        (Simulator.create_device): Ditto.
        (Simulator.remove_device): Ditto.
        (Simulator.device_number): Ditto.

2017-03-01  Alexey Proskuryakov  <ap@apple.com>

        IndexedDB.IndexedDBMultiProcess is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=160780

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm: Releasing the object
        once doesn't necessarily deallocate the object, there can be other references.
        We can use -[WKWebView _close] or -[WKWebView _killWebContentProcessAndResetState].
        The latter seems more appropriate, because "kill" is what the comment says.

2017-02-28  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add ability for webkitpy to run bindings tests
        https://bugs.webkit.org/show_bug.cgi?id=168979

        Reviewed by Alexey Proskuryakov.

        This allows the below command to run bindings tests with json output, and is a required part
        of adding an EWS for bindings tests. (Note: this won't build because --build is not passed).
        webkit-patch build-and-test --no-clean --no-update  --test --non-interactive --group="bindings"

        * Scripts/webkitpy/port/base.py:
        (Port.bindings_results_directory): Return the directory to place JSON results for bindings tests.
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Checks if we should be running bindings tests.
        (RunTests._run_bindings_tests): Generates the command for bindings tests, and executes it.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (test_runtests_bindings): Unit test for the generated run-bindings-tests command.

2017-02-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Test fix after r213163
        https://bugs.webkit.org/show_bug.cgi?id=168678

        Unreviewed.

        Tests and builds are timing out because this file is gigantic.

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

2017-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction should support attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=168916
        <rdar://problem/30664519>

        Reviewed by Ryosuke Niwa.

        Adds a new unit test verifying that a client injected bundle is able to augment UIItemProvider data vended to
        the UI process.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/attachment-element.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (-[CustomItemProviderWebView _adjustedDataInteractionItemProviders:]):
        (TestWebKitAPI::TEST):

2017-02-28  Chris Dumez  <cdumez@apple.com>

        [iOS] Throttle requestAnimationFrame to 30fps in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=168837
        <rdar://problem/30700929>

        Reviewed by Simon Fraser.

        Add unit test for -= operator on WTF::OptionSet.

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

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

        webkitpy: Regular expression for parsing simctl device information is wrong for iPad Pro
        https://bugs.webkit.org/show_bug.cgi?id=168394

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Allow for parenthesis in device name.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Add iPad Pro to test.

2017-02-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] Migrate off of CTFontCreateForCSS
        https://bugs.webkit.org/show_bug.cgi?id=168678

        Reviewed by David Hyatt.

        Exhaustively test the font matching algorithm on Sierra.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FontCache.cpp: Added.
        (TestWebKitAPI::FontCacheTest::SetUp):
        (TestWebKitAPI::createPlatformFont):
        (TestWebKitAPI::compareFonts):
        (TestWebKitAPI::TEST_F):

2017-02-28  Basuke Suzuki  <Basuke.Suzuki@am.sony.com>

        Windows build doesn't start build if the git branch is not master
        https://bugs.webkit.org/show_bug.cgi?id=168843

        Reviewed by Myles C. Maxfield.

        Use correct value for product base dir.

        * Scripts/build-webkit:

2017-02-24  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplayed media ends without being paused
        https://bugs.webkit.org/show_bug.cgi?id=168852

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2/js-play-with-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Added.

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

        webkitpy: jsc-ews should run when Makefiles and build scripts are changed
        https://bugs.webkit.org/show_bug.cgi?id=168950

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance): Add makefiles and build scripts to jsc_paths.

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        Begin enabling WebRTC on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=168915

        Reviewed by Eric Carlson.

        * Scripts/build-webkit:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-02-27  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Windows regression: webkitpy.tool.steps.steps_unittest.StepsTest.test_runtests_jsc[_debug]
        https://bugs.webkit.org/show_bug.cgi?id=168628

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests._run_javascriptcore_tests): Pass options to the Base instance.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest._step_options): Add a new 'root' option that's passed through to the Base instance.
        (test_runtests_jsc): Not running webkit-build-directory anymore, and changed json output directory.
        (test_runtests_jsc_debug): Ditto

2017-02-27  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add machine-readable results for bindings tests
        https://bugs.webkit.org/show_bug.cgi?id=168626

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-bindings-tests:
        (main): Add optional --json-output command-line parameter.
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.__init__): Add variables to store machine-readable results.
        (BindingsTests.detect_changes): Store results in machine-readable form if applicable.
        (BindingsTests.main): Write data to JSON file if applicable.

2017-02-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, roll out r213065.

        We need these temporary fixes to keep the perf bots running.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _advanceProgress]):

2017-02-27  Simon Fraser  <simon.fraser@apple.com>

        Add specification and status metadata to CSSProperties.json, and validate it
        https://bugs.webkit.org/show_bug.cgi?id=168901

        Reviewed by Darin Adler.

        Enhance check-webkit-style to validate the status and spec data in CSSProperties.json.
        
        Current validation is basic type validation and some cross-referencing, but could be
        enhanced.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check):
        (JSONCSSPropertiesChecker.check_category):
        (JSONCSSPropertiesChecker):
        (JSONCSSPropertiesChecker.check_categories):
        (JSONCSSPropertiesChecker.validate_url):
        (JSONCSSPropertiesChecker.validate_status_type):
        (JSONCSSPropertiesChecker.validate_comment):
        (JSONCSSPropertiesChecker.validate_status):
        (JSONCSSPropertiesChecker.validate_property_category):
        (JSONCSSPropertiesChecker.validate_property_specification):
        (JSONCSSPropertiesChecker.check_property):

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

        Unreviewed. Fix two GTK+ unit tests failing after r213062.

        We were building wrong Content-Disposition headers that libsoup doesn't parse correctly.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (addContentDispositionHTTPHeaderToResponse):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (serverCallback):

2017-02-24  Jer Noble  <jer.noble@apple.com>

        Add public method to MediaTime for doing timeScale conversion.
        https://bugs.webkit.org/show_bug.cgi?id=168860

        Reviewed by Eric Carlson.

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

2017-02-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, revert all temporary build fixes for data interaction

        Rolls out r212990, r212988 and r212984.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _advanceProgress]):

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        [libwebrtc] Enable WebRTC in some Production Builds
        https://bugs.webkit.org/show_bug.cgi?id=168858

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-02-27  Andy Estes  <aestes@apple.com>

        Add a way to test file input without relying on drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=168848
        <rdar://problem/22258242>

        Reviewed by Tim Horton.

        Existing layout tests relied on drag and drop support in EventSender to configure a file
        input element for testing. This had several problems:

        1. WebKitTestRunner has no support for beginDragWithFiles(), and DumpRenderTree doesn't
           support it on iOS.
        2. We have no test coverage for selecting files via the runOpenPanel UI delegate, leading to
           bugs like webkit.org/b/159686.

        Even if we fixed (1), we'd still have a test coverage gap due to (2), so this patch
        introduces a way for a test to specify the list of files that should be selected by the
        runOpenPanel UI delegate: TestRunner.setOpenPanelFiles(). It also creates versions of a
        number of existing file input tests using TestRunner.setOpenPanelFiles() instead of
        EventSender.beginDragWithFiles().

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        (-[DumpRenderTreeBrowserView webView:runOpenPanelForFileButtonWithResultListener:configuration:]):
        Overrode to call the corresponding method on UIDelegate.
        * DumpRenderTree/TestRunner.cpp:
        (setOpenPanelFilesCallback): Added to call TestRunner::setOpenPanelFiles().
        (TestRunner::staticFunctions): Registered setOpenPanelFiles.
        (TestRunner::setOpenPanelFiles): Added. Converts the JavaScript array of file paths to a
        std::vector of std::strings.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::openPanelFiles):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        Added. Converts the array of file paths to an NSArray of NSURLs, resolving the file paths
        relative to the current test URL. Returns either the first item or all items depending on
        the value of allowMultipleFiles.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Defined setOpenPanelFiles.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFiles): Added. Converts the JavaScript array of file paths to
        a WKArray of WKURLs, resolving the file paths relative to the current test URL, and sends
        the WKArray to the UI process with the "SetOpenPanelFileURLs" message.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::runOpenPanel): Calls the WKOpenPanelResultListener with either the first item or all
        items, depending on the value of WKOpenPanelParametersGetAllowsMultipleFiles().
        (WTR::TestController::resetStateToConsistentValues): Clear m_openPanelFileURLs.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::openPanelFileURLs):
        (WTR::TestController::setOpenPanelFileURLs):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Added code to handle the
        "SetOpenPanelFileURLs" message.

2017-02-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r211312): Double-clicking a word selects it along with the space that follows it
        https://bugs.webkit.org/show_bug.cgi?id=168821
        <rdar://problem/30690431>

        Reviewed by Tim Horton.

        Adds the ability for TestWKWebView to send a sequence of clicks to its window, and uses this capability to
        verify that double clicking to select a word in a WKWebView on Mac selects just the word, and not a trailing
        space along with it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/double-click-does-not-select-trailing-space.html: Added.
        * TestWebKitAPI/Tests/mac/WKWebViewSelectionTests.mm: Copied from Tools/TestWebKitAPI/cocoa/TestWKWebView.h.
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:]):
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:clickCount:]):
        (-[TestWKWebView mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebView mouseUpAtPoint:]):
        (-[TestWKWebView sendClicksAtPoint:numberOfClicks:]):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:]): Deleted.
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:]): Deleted.

2017-02-25  Simon Fraser  <simon.fraser@apple.com>

        Make check-webkit-style do some basic validation for CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=168874

        Reviewed by Zalan Bujtas.

        Do checking of the keys and the value types.
        
        Print exceptions if they occur; previously, coding errors caused silent failure.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONFeaturesChecker.check):
        (JSONCSSPropertiesChecker):
        (JSONCSSPropertiesChecker.check):
        (JSONCSSPropertiesChecker.validate_comment):
        (JSONCSSPropertiesChecker.validate_type):
        (JSONCSSPropertiesChecker.validate_boolean):
        (JSONCSSPropertiesChecker.validate_string):
        (JSONCSSPropertiesChecker.validate_array):
        (JSONCSSPropertiesChecker.validate_codegen_properties):
        (JSONCSSPropertiesChecker.check_property):
        (JSONCSSPropertiesChecker.check_codegen_properties):

2017-02-26  Chris Dumez  <cdumez@apple.com>

        HitTestResult's linkSuggestedFilename should sanitize download attribute
        https://bugs.webkit.org/show_bug.cgi?id=168856
        <rdar://problem/30683109>

        Reviewed by Antti Koivisto.

        Add test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/link-with-download-attribute-with-slashes.html: Added.
        * TestWebKitAPI/Tests/WebKit2/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::decideDestinationWithSuggestedFilenameContainingSlashes):
        (TestWebKitAPI::TEST):

2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Media elements initiated loads should set the initiatorType to their element name (video/audio)
        https://bugs.webkit.org/show_bug.cgi?id=168680

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        Include a dummy HTMLVideoElement.

2017-02-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, temporarily disable all data interaction tests.

        They will be reenabled once the bots are ready to build and run them.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:

2017-02-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal build.

        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _advanceProgress]):

2017-02-24  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplay is denied
        https://bugs.webkit.org/show_bug.cgi?id=168840

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (handleAutoplayEvent):
        (runUntilReceivesAutoplayEvent):
        (TEST): Added.

2017-02-23  Matt Rajca  <mrajca@apple.com>

        API test WebKit2.WebsitePoliciesPlayAfterPreventedAutoplay is timing out
        https://bugs.webkit.org/show_bug.cgi?id=167466

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Use the correct API version.

2017-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor data interaction to use new WKDataInteraction SPI
        https://bugs.webkit.org/show_bug.cgi?id=168602
        Work towards <rdar://problem/30313681>

        Reviewed by Tim Horton.

        Update DataInteractionSimulator to simulate data interaction using updated SPI. See changes in WebKit2 for more details.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator _currentLocation]):
        (-[DataInteractionSimulator _finishDataInteraction]): Deleted.
        (-[DataInteractionSimulator webViewDidSendDataInteractionStartRequest:]): Deleted.
        (-[DataInteractionSimulator webView:didReceiveDataInteractionStartResponse:]): Deleted.

2017-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove the data interaction gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=168600
        <rdar://problem/30313681>

        Reviewed by Anders Carlsson.

        Adjust TestWebKitAPI for changes in WebKit2.

        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator _finishDataInteraction]):
        (-[MockLongPressGestureRecognizer initWithWindow:]): Deleted.
        (-[MockLongPressGestureRecognizer locationInView:]): Deleted.
        (-[MockLongPressGestureRecognizer state]): Deleted.
        (-[MockLongPressGestureRecognizer numberOfTouches]): Deleted.
        (-[DataInteractionSimulator _recognizeGestureAtLocation:withState:]): Deleted.
        (-[DataInteractionSimulator dataInteractionGestureRecognizer]): Deleted.
        (-[DataInteractionSimulator webView:beginDataInteractionWithSourceIndex:gestureRecognizer:]): Deleted.

2017-02-24  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>
        <rdar://problem/30646710>
        <rdar://problem/30660708>

        Reviewed by Alex Christensen.

        Added three testRunner functions to facilitate layout tests:
        - setStatisticsSubframeUnderTopFrameOrigin()
        - setStatisticsSubresourceUnderTopFrameOrigin()
        - setStatisticsSubresourceUniqueRedirectTo()

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

2017-02-23  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Add Experimental Feature Flag
        https://bugs.webkit.org/show_bug.cgi?id=167147

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        Put experimental flags in the experimental section.

2017-02-23  Beth Dakin  <bdakin@apple.com> + Dan Saunders  <dasau@microsoft.com>

        No reliable way to get a snapshot of WKWebView (macOS)
        https://bugs.webkit.org/show_bug.cgi?id=161450
        -and corresponding-
        <rdar://problem/23846039>

        Reviewed by Tim Horton.

        Test for WKWebView’s new API takeSnapshotWithConfiguration:completionHandler:

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewSnapshot.mm: Added.
        (convertToCGImage):
        (getPixelIndex):
        (TEST):

2017-02-23  Saam Barati  <sbarati@apple.com>

        Speculative fix for jsc timing out tests
        https://bugs.webkit.org/show_bug.cgi?id=168791

        Rubber Stamped by Keith Miller.

        Play musical chairs with IRC and Briggs options on
        ftl-eager and ftl-eager-no-cjit.

        * Scripts/run-jsc-stress-tests:

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

        Improve error message when the WPT server fails to start.
        https://bugs.webkit.org/show_bug.cgi?id=168759

        Reviewed by Ryosuke Niwa.

        Check if the WPT server is running after 1 second, and if is not
        print useful information for helping the user to debug the issue.

        Using check_running_pid() to check if the process is still running
        doesn't work. A process started via subprocess popen that has ended
        will be in a zombie state until a call to wait/communicate/poll
        is done, or until the object is deleted or garbage collected.

        This adds also support for testing the behaviour of subprocess
        poll() on the unit tests that use MockProcess.

        A new test is added also for the battery of tests for the WPT
        server.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__):
        (MockProcess.wait):
        (MockProcess.communicate):
        (MockProcess.poll):
        (MockExecutive.popen):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__):
        (WebPlatformTestServer._prepare_config):
        (WebPlatformTestServer._spawn_process):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_corrupted_subserver_files):
        (TestWebPlatformTestServer):
        (TestWebPlatformTestServer.test_server_fails_to_start_throws_exception):

2017-02-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, temporarily disable DataInteractionTests in TestWebKitAPI.

        These will be reenabled in https://bugs.webkit.org/show_bug.cgi?id=168602.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:

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

        Data interaction causes selection to fall out of sync between web/UI processes
        https://bugs.webkit.org/show_bug.cgi?id=168735
        <rdar://problem/30657817>

        Reviewed by Tim Horton.

        Adds a new method to TestWKWebView for querying selection view rects from the UI process and augments data
        interaction unit tests to check for selection rects using this new hook.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (makeCGRectValue):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView selectionRectsAfterPresentationUpdate]):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator finalSelectionRects]):

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Better handle Thread and RunLoop initialization
        https://bugs.webkit.org/show_bug.cgi?id=167828

        Reviewed by Yusuke Suzuki.

        Remove unnecessary calls to WTF::initializeMainThread().

        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        (TestWebKitAPI::ComplexTextControllerTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::ContentExtensionTest::SetUp):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2017-02-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Remove Yosemite-specific font lookup code
        https://bugs.webkit.org/show_bug.cgi?id=168682

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (fontWhitelist):
        (adjustFonts):
        (createWebViewAndOffscreenWindow):
        (drt_NSFontManager_availableFontFamilies): Deleted.
        (drt_NSFontManager_availableFonts): Deleted.
        (swizzleNSFontManagerMethods): Deleted.
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::activateFonts):
        (WTR::allowedFontFamilySet): Deleted.
        (WTR::systemHiddenFontFamilySet): Deleted.
        (WTR::wtr_NSFontManager_availableFontFamilies): Deleted.
        (WTR::wtr_NSFontManager_availableFonts): Deleted.
        (WTR::swizzleNSFontManagerMethods): Deleted.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateWhitelist):
        (WTR::TestController::platformInitializeContext):

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

        AutoInstaller should not skip the install step if the package is downloaded but not installed
        https://bugs.webkit.org/show_bug.cgi?id=168737

        Reviewed by Ryosuke Niwa.

        Don't skip the install step if the package target path don't exists.
        Fix the description for "should_refresh" optional argument.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller.install):

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not use g_return_if_fail in EventSenderProxy::continuousMouseScrollBy
        https://bugs.webkit.org/show_bug.cgi?id=168721

        Reviewed by Michael Catanzaro.

        Use WTFLogAlways instead. It's still shown in stderr, but it won't crash if we ever run tests with fatal
        criticals.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::continuousMouseScrollBy):

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293
        <rdar://problem/30401864>

        Reviewed by Alex Christensen.

        Fixing paths to allow loading libwebrtc.dylib successfully.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (setupMacWebKitEnvironment):
        (setupIOSWebKitEnvironment):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-02-21  Saam Barati  <sbarati@apple.com>

        Add the Briggs optimistic allocator to run on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=168454

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2017-02-20  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.
        
        Make more tests collect continuously.

        * Scripts/run-jsc-stress-tests:

2017-02-20  Simon Fraser  <simon.fraser@apple.com>

        Add support to PlatformCALayer/GraphicsLayerCA for subpixel-antialiased text, with a Setting and a MiniBrowser switch
        https://bugs.webkit.org/show_bug.cgi?id=168620
        <rdar://problem/30617772>

        Reviewed by Tim Horton.
        
        Add a setting that allows one to toggle subpixel-antialiased layer text on and off.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleSubpixelAntialiasedLayerTextEnabled:]):
        (-[SettingsController subpixelAntialiasedLayerTextEnabled]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-02-21  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Refactor Device class
        https://bugs.webkit.org/show_bug.cgi?id=168332

        Reviewed by Alexey Proskuryakov.

        Separate the more specific SimulatedDevice from the abstract
        idea of a device.

        * Scripts/webkitpy/xcode/device.py: Added.
        (Device):  Base device class.
        (Device.__init__): Initialize _host, name and udid.
        (Device.install_app): Function declaration.
        (Device.launch_app): Ditto.
        (Device.__eq__): Compare two devices by udid.
        (Device.__ne__): Ditto.
        (Device.__repr__): Return device name and udid in formatted string.
        * Scripts/webkitpy/xcode/simulated_device.py: Copied from Tools/Scripts/webkitpy/xcode/simulator.py.
        (SimulatedDevice):
        (SimulatedDevice.__init__): Call Device.__init__ first.
        (SimulatedDevice.delete): Device -> SimulatedDevice.
        (SimulatedDevice.reset): Ditto.
        (SimulatedDevice.__eq__): Moved to device.py.
        (SimulatedDevice.__ne__): Ditto.
        (SimulatedDevice.__repr__): Call Device __repr__ first.
        (DeviceType): Kept in Scripts/webkitpy/xcode/simulator.py.
        (Runtime): Kept in Scripts/webkitpy/xcode/simulator.py.
        (Device): Renamed SimulatedDevice.
        (Simulator): Kept in Scripts/webkitpy/xcode/simulator.py.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Define Simulator.Device class as None.
        (Simulator.__init__): Import SimulatedDevice as Simulator.Device.
        (Simulator.delete_device): Use Simulator.Device.
        (Simulator.reset_device): Ditto.
        (Simulator._parse_devices): Ditto.
        (Simulator.lookup_or_create_device): Make 
        (Device): Moved to simulated_device as SimulatedDevice.

2017-02-21  JF Bastien  <jfbastien@apple.com>

        Fix cmake build
        https://bugs.webkit.org/show_bug.cgi?id=168665

        Reviewed by Mark Lam.

        It was broken by r212555 and r212681.

        * DumpRenderTree/PlatformMac.cmake:

2017-02-21  Alexey Proskuryakov  <ap@apple.com>

        Improve bot watcher's dashboard performance
        https://bugs.webkit.org/show_bug.cgi?id=168624
        <rdar://problem/30190109>

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        There was an unnecessary linear complexity algorithm in indexOfRevision().

2017-02-21  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212699.

        Internal build not ready

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212699

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

        Remove ENABLE_THREADED_COMPOSITOR build option
        https://bugs.webkit.org/show_bug.cgi?id=168606

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2017-02-20  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293
        <rdar://problem/30401864>

        Reviewed by Alex Christensen.

        Fixing paths to allow loading libwebrtc.dylib successfully.

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

2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212685.

        This change broke the 32-bit Sierra build.

        Reverted changeset:

        "Resource Load Statistics: Add alternate classification
        method"
        https://bugs.webkit.org/show_bug.cgi?id=168347
        http://trac.webkit.org/changeset/212685

2017-02-20  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>

        Reviewed by Alex Christensen.

        Added three testRunner functions to facilitate layout tests:
        - setStatisticsSubframeUnderTopFrameOrigin()
        - setStatisticsSubresourceUnderTopFrameOrigin()
        - setStatisticsSubresourceUniqueRedirectTo()

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

2017-02-20  Anders Carlsson  <andersca@apple.com>

        Use the new drag code path when dragging links
        https://bugs.webkit.org/show_bug.cgi?id=168612

        Reviewed by Tim Horton.

        If a type is not dynamic, just use the static UTI.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard writeObjects:]):

2017-02-17  Anders Carlsson  <andersca@apple.com>

        Add a new drag code path and use it for dragging plain text
        https://bugs.webkit.org/show_bug.cgi?id=168534

        Reviewed by Geoffrey Garen.

        Update the testing infrastructure to handle NSDraggingSession.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm: Renamed from Tools/DumpRenderTree/mac/DumpRenderTreePasteboard.m.
        (-[LocalPasteboard writeObjects:]):
        Implement this in terms of the legacy pasteboard API.

        * DumpRenderTree/mac/EventSendingController.mm:
        (drt_WebHTMLView_beginDraggingSessionWithItemsEventSource):
        (+[EventSendingController initialize]):
        Swizzle the drag method instead of adding a delegate method (like the old code does).

2017-02-20  Florian Bruhin  <git@the-compiler.org>

        Handle EINTR during webkitpy server process select()
        https://bugs.webkit.org/show_bug.cgi?id=168361

        Reviewed by Michael Catanzaro.

        Otherwise, on my machine, resizing the terminal run-webkit-tests is running in
        makes it die.

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

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

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/default-menu.

        It can happen that the window onload event is dispatched after the load finished is received in the UI
        process. Move the script to select the text to the body instead of using a window onload handler.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuDefaultMenu):

2017-02-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Remove compilation flag ENABLE_CSS_GRID_LAYOUT
        https://bugs.webkit.org/show_bug.cgi?id=167693

        Reviewed by Sergio Villar Senin.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebCore/CSSParser.cpp:
        (TestWebKitAPI::computeNumberOfTracks):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/GridPosition.cpp:
        (TestWebKitAPI::TEST):

2017-02-19  Commit Queue  <commit-queue@webkit.org>

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

        causes crashes on AArch64 on linux, maybe it's causing crashes
        on iOS too (Requested by pizlo on #webkit).

        Reverted changeset:

        "The collector thread should only start when the mutator
        doesn't have heap access"
        https://bugs.webkit.org/show_bug.cgi?id=167737
        http://trac.webkit.org/changeset/212466

2017-02-17  Aakash Jain  <aakash_jain@apple.com>

        Fix failure from r212579.

        Unreviewed build-fix.

        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance._changes_are_relevant): Return true for all groups others than jsc for now.

2017-02-17  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        EWS should run JavaScriptCore tests
        https://bugs.webkit.org/show_bug.cgi?id=162458

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py: Add jsc-ews queue.
        * QueueStatusServer/model/queuestatus.py:
        (QueueStatus.did_skip): Returns whether patch was skipped, based on status.
        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._should_show_bubble_for): Add logic to hide jsc-ews bubble if the patch does not touch jsc.
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.__init__): Add _mockChangedFiles variable.
        (MockSCM.changed_files): Change to use _mockChangedFiles variables.
        * Scripts/webkitpy/common/config/ews.json: Add config info for JSC EWS.
        * Scripts/webkitpy/common/config/ports.py: Add support for JSC EWS in Mac Port.
        (DeprecatedPort._append_build_style_flag): Helper function to append build_style to a command.
        (DeprecatedPort.build_jsc_command): Added - command to build JSC only (quicker than building all of WebKit).
        (DeprecatedPort.run_javascriptcore_tests_command): Allow JSC EWS to only run JSC tests.
        (MacPort.run_webkit_tests_command): Check for JSC.
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_javascriptcore_tests_command): Add build_style argument.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_mac_port): Add unit tests for build-jsc shell command.
        * Scripts/webkitpy/common/net/abstracttestresults.py: Added.
        (AbstractTestResults): Abstract superclass of JSCTestResults and JSCTestResults.
        (AbstractTestResults.test_results): Stub.
        (AbstractTestResults.failing_tests): Stub.
        (AbstractTestResults.did_exceed_test_failure_limit): Stub.
        * Scripts/webkitpy/common/net/jsctestresults.py: Added.
        (JSCTestResults): Added.
        (JSCTestResults.intersection): Return a JSCTestResults object with failures common to both input objects.
        (JSCTestResults.results_from_string): Use json library to parse results.
        (JSCTestResults.__init__): Initialize members.
        (JSCTestResults.equals): This enables unit testing.
        (JSCTestResults.is_subset): Checks if one set of failures is a subset of another.
        (JSCTestResults.all_passed): Getter.
        (JSCTestResults.failing_tests): Getter.
        (JSCTestResults.did_exceed_test_failure_limit): Getter.
        * Scripts/webkitpy/common/net/jsctestresults_unittest.py: Added.
        (JSCTestResultsTest): Class to test JSCTestResults.
        (JSCTestResultsTest.test_results_from_string): Tests parsing.
        (JSCTestResultsTest.test_intersection_api_tests): Unit test for intersection() class method.
        (JSCTestResultsTest.test_intersection_stress_tests): Unit test for intersection() class method.
        (JSCTestResultsTest.test_intersection_general_case): Unit test for intersection() class method.
        * Scripts/webkitpy/port/base.py:
        (Port.jsc_results_directory): Returns the directory for the JSC test results JSON file.
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        (EarlyWarningSystemTask.run): Add check_patch_relevance step.
        * Scripts/webkitpy/tool/bot/jscews_unittest.py: Added.
        (MockPatchAnalysisTask): Mocked-out version of PatchAnalysisTask that doesn't run commands.
        (MockPatchAnalysisTask.__init__): Sets attributes.
        (MockPatchAnalysisTask._test): Override to not run command.
        (MockPatchAnalysisTask._build_and_test_without_patch): Override to not run command.
        (MockPatchAnalysisTask.validate): Assume mocked patch is valid for purposes of testing retry logic.
        (MockPatchAnalysisTask.test_run_count): Specific to the mocked version, to test retry logic.
        (MockJSCEarlyWarningSystem): Mocked-out version of AbstarctEarlyWarningSystem so we can provide test results.
        (MockJSCEarlyWarningSystem.__init__): Sets attributes, also sets group to jsc.
        (MockJSCEarlyWarningSystem.test_results): Returns test results provided by us, instead of using a JSON reader.
        (JSCEarlyWarningSystemTest): Class to test retry logic in below situations.
        (JSCEarlyWarningSystemTest._create_task): Helper function to abstract out common code.
        (JSCEarlyWarningSystemTest._results_indicate_all_passed): False if input is None or has failures, else True.
        (JSCEarlyWarningSystemTest.test_success_case): Clean patch on clean tree.
        (JSCEarlyWarningSystemTest.test_test_failure): Failed patch on clean tree.
        (JSCEarlyWarningSystemTest.test_fix): Patch that fixes all tree redness.
        (JSCEarlyWarningSystemTest.test_ineffective_patch): Patch that has same failures as tree.
        (JSCEarlyWarningSystemTest.test_partially_effective_patch): Patch fixes some failures but adds no new failures.
        (JSCEarlyWarningSystemTest.test_different_test_failures_in_patch_and_tree): Patch has some failures not in tree.
        (JSCEarlyWarningSystemTest.test_first_results_could_not_be_read): Patch results not readable.
        (JSCEarlyWarningSystemTest.test_second_results_could_not_be_read): Patch results not readable on second run.
        (JSCEarlyWarningSystemTest.test_clean_results_could_not_be_read): Results from clean tree not readable.
        (JSCEarlyWarningSystemTest.test_flaky_results_on_clean_tree_pass): Patch has one flake and no failures.
        (JSCEarlyWarningSystemTest.test_flaky_results_on_clean_tree_pass_v2): Patch has one flake and no failures.
        (JSCEarlyWarningSystemTest.test_flaky_results_on_clean_tree_failure): Patch has flakes and failed tests.
        (JSCEarlyWarningSystemTest.test_flaky_results_on_red_tree_pass): Patch has same failures as tree, plus a flake.
        * Scripts/webkitpy/tool/bot/jsctestresultsreader.py: Added.
        (JSCTestResultsReader): Reads results file.
        (JSCTestResultsReader.__init__): Sets attributes.
        (JSCTestResultsReader._read_file_contents): Reads file.
        (JSCTestResultsReader.results): Reads the results file and returns a JSCTestResults object.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchIsNotApplicable): Exception for when patch doesn't have relevant changes.
        (PatchAnalysisTask._check_patch_relevance): Added.
        (PatchAnalysisTask._build): Check for JSC.
        (PatchAnalysisTask._build_without_patch): Check for JSC.
        (PatchAnalysisTask._test): Check for JSC.
        (PatchAnalysisTask._build_and_test_without_patch): Check for JSC.
        (PatchAnalysisTask._retry_jsc_tests): Retry logic for JSC EWS.
        (PatchAnalysisTask._retry_layout_tests): Retry logic for layout tests EWS.
        (PatchAnalysisTask._test_patch): Add retry logic for JSC.
        * Scripts/webkitpy/tool/commands/download.py:
        (CheckPatchRelevance): Add check-patch-relevance command.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem._create_task): Abstract out to enable mocking.
        (AbstractEarlyWarningSystem.begin_work_queue): Use JSCTestResultsReader not LayoutTestResultsReader in JSC EWS.
        (AbstractEarlyWarningSystem.review_patch): Handle PatchIsApplicable.
        (AbstractEarlyWarningSystem.test_results): _layout_test_results_reader -> _test_results_reader.
        (AbstractEarlyWarningSystem.archive_last_test_results): _layout_test_results_reader -> _test_results_reader.
        (AbstractEarlyWarningSystem.group): This attribute determines the type of EWS (eg. JSC).
        (AbstractEarlyWarningSystem.load_ews_classes): Add _group, and make classes of type cls to enable mocking.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (TestEWS): Sample layout test EWS class used for unit testing.
        (TestJSCEWS): Sample JSC EWS class used for unit testing.
        (AbstractEarlyWarningSystemTest.test_failing_tests_message.TestEWS): Add _group.
        (AbstractEarlyWarningSystemTest.test_failing_jsc_tests_message.TestEWS): Added test for jsc failures message.
        (AbstractEarlyWarningSystemTest): Add _group variable.
        (EarlyWarningSystemTest._default_expected_logs): Add check-patch-relevance step, inconclusive logs, and group.
        (EarlyWarningSystemTest._test_ews): Add logs_are_conclusive option to pass through to default_expected_logs().
        (EarlyWarningSystemTest.test_inconclusive_test_results): Test not removing patch from queue if not conclusive.
        (MockAbstractEarlyWarningSystemForInconclusiveJSCResults): Added.
        (MockAbstractEarlyWarningSystemForInconclusiveJSCResults._test_patch): Simulates running tests but not getting a conclusive result.
        (MockEarlyWarningSystemTaskForInconclusiveJSCResults): Added.
        (MockEarlyWarningSystemTaskForInconclusiveJSCResults._create_task): Use MockEarlyWarningSystemTask (not EarlyWarningSystemTask).
        * Scripts/webkitpy/tool/steps/__init__.py: Add CheckPatchRelevance import.
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.options): Check for JSC.
        (Build.build): Check for JSC.
        (Build.run): Check for JSC.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py: Added.
        (CheckPatchRelevance): Added.
        (CheckPatchRelevance._does_contain_change_in_paths): Abstract function to perform regex matching.
        (CheckPatchRelevance.run): Check if changed files in patch belong in certain folders.
        * Scripts/webkitpy/tool/steps/options.py:
        (Options): Add --group command line option.
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.options): Add group.
        (RunTests.run): Check for JSC.
        (RunTests._run_webkit_tests): Check for JSC.
        (RunTests): Add _group attribute.
        (RunTests._run_javascriptcore_tests): New.
        * Scripts/webkitpy/tool/steps/steps_unittest.py: Unit tests.

2017-02-17  Aakash Jain  <aakash_jain@apple.com>

        Fix tools that were broken by Efl removal
        https://bugs.webkit.org/show_bug.cgi?id=168496

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/loader_unittests.js:

2017-02-16  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=168442
        Move the SVN checkout from http -> https.
        Update unit tests.

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CheckOutSource.__init__):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (SVNMirrorTest.get_SVNMirrorFromConfig):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:

2017-02-16  Commit Queue  <commit-queue@webkit.org>

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

        broke test runner (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Remove EFL-specific files in Tools."
        http://trac.webkit.org/changeset/212514

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove EFL-specific files in Tools.

        Rubber-stamped by Anders Carlsson.

        * ImageDiff/efl: Removed.
        * ImageDiff/efl/ImageDiff.cpp: Removed.
        * MiniBrowser/efl: Removed.
        * MiniBrowser/efl/CMakeLists.txt: Removed.
        * MiniBrowser/efl/main.c: Removed.
        * Scripts/run-efl-tests: Removed.
        * Scripts/update-webkitefl-libs: Removed.
        * Scripts/webkitpy/port/efl.py: Removed.
        * Scripts/webkitpy/port/efl_unittest.py: Removed.
        * TestWebKitAPI/Tests/WebKit2/efl: Removed.
        * 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: Removed.
        * TestWebKitAPI/efl/InjectedBundleController.cpp: Removed.
        * TestWebKitAPI/efl/PlatformUtilities.cpp: Removed.
        * TestWebKitAPI/efl/PlatformWebView.cpp: Removed.
        * TestWebKitAPI/efl/main.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/efl: Removed.
        * 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/efl: Removed.
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp: Removed.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp: Removed.
        * WebKitTestRunner/efl/TestControllerEfl.cpp: Removed.
        * WebKitTestRunner/efl/main.cpp: Removed.
        * efl: Removed.
        * efl/install-dependencies: Removed.
        * efl/jhbuild-optional.modules: Removed.
        * efl/jhbuild.modules: Removed.
        * efl/jhbuildrc: Removed.
        * efl/patches: 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.

2017-02-16  Myles C. Maxfield  <mmaxfield@apple.com>

        font-weight in @font-face can cause a font to be downloaded even when it's not used
        https://bugs.webkit.org/show_bug.cgi?id=168114
        <rdar://problem/30301317>

        Reviewed by Darin Adler.

        LastResort needs to be usable in tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove old URL parser
        https://bugs.webkit.org/show_bug.cgi?id=168483

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):

2017-02-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add additional test infrastructure and unit tests for data interaction
        https://bugs.webkit.org/show_bug.cgi?id=168439
        <rdar://problem/30557942>

        Reviewed by Tim Horton.

        Adds test support for additional data interaction scenarios that we currently cannot test, and also adds 7 new
        test cases to DataInteractionTests. Most of the changes here refactor and augment DataInteractionSimulator to
        support data interaction from  See per-method descriptions below for more details.

        * Configurations/TestWebKitAPI.xcconfig:

        Add MobileCoreServices to the list of additional frameworks to link against on iOS.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        Add a new build phase that copies additional resources from WebKitAdditions/Resources/TestWebKitAPI and dumps
        them into TestWebKitAPI.resources/ in the build directory, if the WebKitAdditions folder exists.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (-[TestWKWebView editorContainsImageElement]):
        (-[TestWKWebView editorValue]):

        New helper methods for querying information from the "editor" element in a test page.

        (TestWebKitAPI::TEST):
        (TestWebKitAPI::runTestsExpectingToObserveEvents): Deleted.

        Moves logic for capturing events during a simulated data interaction run from the test file to
        DataInteractionSimulator. See -[DataInteractionSimulator observedEventNames].

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestMessageHandler removeMessage:]):
        (-[TestWKWebView clearMessageHandlers:]):

        Add the ability to clear message handlers from the TestWKWebView.

        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (dataInteractionEventNames):
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator _resetSimulatedState]):

        Moves logic to clear test harness state from any previous runs into a helper. Called at the beginning when
        simulating data interaction.

        (-[DataInteractionSimulator observedEventNames]):

        Returns a list of the names of events relevant to data interaction that were observed over the course of the
        most recent run.

        (-[DataInteractionSimulator runFrom:to:]):

        Changes -run to -runFrom:to:, which takes window-relative start and end locations. This allows the test harness
        to run the same data interaction for multiple simulated gestures.

        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator _finishDataInteraction]):
        (-[DataInteractionSimulator externalItemProvider]):
        (-[DataInteractionSimulator setExternalItemProvider:]):

        Adds the -externalItemProvider property to DataInteractionSimulator. Setting this skips the gesture recognition
        phase of a test run.

        (-[DataInteractionSimulator webViewDidPerformDataInteractionControllerOperation:]):
        (-[DataInteractionSimulator webView:beginDataInteractionWithSourceIndex:gestureRecognizer:]):
        (-[DataInteractionSimulator webViewDidSendDataInteractionStartRequest:]):
        (-[DataInteractionSimulator webView:didReceiveDataInteractionStartResponse:]):

        While a request to start data interaction is in flight, put the remainder of the test on hold until the web
        process returns. Then continue the test by scheduling a progress advance call. This addresses a race condition
        wherein the the web process might take longer than usual to process the request to start data interaction, and
        in the meantime, DataInteractionSimulator would end up completing the rest of the test before a response from
        the web process is received, which then causes no simulated delegate methods to be fired.

        (-[DataInteractionSimulator initWithWebView:startLocation:endLocation:]): Deleted.
        (-[DataInteractionSimulator run]): Deleted.

2017-02-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove unused test pages in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=168462

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/autofocus-contenteditable.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/background-image-link-and-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-contenteditable.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-textarea.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-input.html: Removed.

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Special URLs without a host are invalid
        https://bugs.webkit.org/show_bug.cgi?id=168461

        Reviewed by Tim Horton.

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

2017-02-10  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.
        
        Make more tests collect continuously.

        * Scripts/run-jsc-stress-tests:

2017-02-16  Tim Horton  <timothy_horton@apple.com>

        WKWebView inside a UICollectionView flashes when items are inserted above it
        https://bugs.webkit.org/show_bug.cgi?id=168376
        <rdar://problem/29322051>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _setStableStateOverride:]):
        Update the one external caller of this internal method...

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAfterVisibleContentRectUpdate):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAfterVisibleContentRectUpdate):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::doAfterVisibleContentRectUpdate):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAfterVisibleContentRectUpdate):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAfterVisibleContentRectUpdate):
        Expose doAfterVisibleContentRectUpdate to DRT and WKTR. It is called
        back after we dispatch a visible content rect update from the UI process
        to the Web Content process, so any messages sent from the block will arrive
        after the visible content rect update.

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

        [GTK] Add two new buildbots that build-only test on Debian stable and Ubuntu LTS.
        https://bugs.webkit.org/show_bug.cgi?id=168321

        This bots should be added to the trunk build scheduler.
        Unreviewed fix after r212429.

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

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

        [GTK] Add two new buildbots that build-only test on Debian stable and Ubuntu LTS
        https://bugs.webkit.org/show_bug.cgi?id=168321

        Reviewed by Michael Catanzaro.

        The additionalArgument --default-cmake-features is used both to
        skip the JHBuild (InstallGtkDependencies) build step and to build
        with the default features from the CMake config.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Factory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2017-02-15  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=168386
        Remove EFL from build.webkit.org

        Reviewed by Alex Christensen

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DeleteStaleBuildFiles.start):
        (appendCustomBuildFlags):
        (RunWebKitTests.start):
        (RunBuiltinsTests):
        (Factory.__init__):
        (TestFactory.__init__):
        (loadBuilderConfig):
        (InstallEflDependencies): Deleted.
        (RunEflAPITests): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * 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/MetricsAnalyzer.js:
        (Analyzer.prototype._triggeringQueue):
        * 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-efl img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):

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

        Unreviewed, rolling out r212169.

        Broke iOS WebInspector

        Reverted changeset:

        "WebInspector: refactor RemoteInspector to move cocoa specific
        code to their own files"
        https://bugs.webkit.org/show_bug.cgi?id=166681
        http://trac.webkit.org/changeset/212169

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

        webkitpy: Fix DarwinPort._get_crash_log()
        https://bugs.webkit.org/show_bug.cgi?id=168372
        <rdar://problem/30535156>

        Reviewed by Daniel Bates.

        Callers of _get_crash_log expect a pair to be returned and do not check it's return value.  
        DarwinPort should return the expected return value for _get_crash_log.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._get_crash_log): Call parent class's implementation of _get_crash_log.

2017-02-15  Chris Dumez  <cdumez@apple.com>

        [iOS] Form Validation Bubble should be sensitive to Dynamic Type
        https://bugs.webkit.org/show_bug.cgi?id=168291
        <rdar://problem/30508593>

        Reviewed by Tim Horton.

        Drop overridePreference() implementation in iOS's UIScriptController
        as it was only used for the minimum font size setting and this setting
        is not exposed on iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::overridePreference):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:

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

        webkitpy: Memoize app_identifier_from_bundle for efficiency, call parent class for _get_crash_log
        https://bugs.webkit.org/show_bug.cgi?id=168329
        <rdar://problem/30518832>

        Reviewed by Daniel Bates.

        When testing on device, app_identifier_from_bundle is repeatedly called but the return value will
        never change given the same input arguments.  Memoize function for efficiency.

        * Scripts/webkitpy/port/darwin.py: Add memoized import.
        (DarwinPort):
        (DarwinPort.app_identifier_from_bundle): Memoize to avoid extra executions of PlistBuddy.
        

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

        webkitpy: Remove unused import from darwin.py
        https://bugs.webkit.org/show_bug.cgi?id=168371

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/port/darwin.py: Remove unused 'time' module.

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

        [SOUP] Credentials stored by libsoup are used even StoredCredentials policy is DoNotAllowStoredCredentials
        https://bugs.webkit.org/show_bug.cgi?id=168364

        Reviewed by Michael Catanzaro.

        This can happen if a previous load with allowed to use stored credentials authenticated successfully, saving the
        credentials in libsoup. It's actually a libsoup bug, but since it's causing layout test failures and we have
        patches for them, let's patch out jhbuild until we have a new libsoup version to depend on.

        Fixes: http/tests/security/credentials-from-different-domains.html
               http/tests/xmlhttprequest/cross-origin-no-authorization.html

        * gtk/jhbuild.modules:
        * gtk/patches/libsoup-auth-Fix-async-authentication-when-flag-SOUP_MESSAGE.patch: Added.
        * gtk/patches/libsoup-auth-do-not-use-cached-credentials-in-lookup-method-.patch: Added.

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

        [GTK] Update cookie manager API to properly work with ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=168230

        Reviewed by Michael Catanzaro.

        Update unit tests and add new cases for the new API.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
        (testCookieManagerEphemeral):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextEphemeral):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewEphemeral):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:
        (serverCallback):
        (testWebsiteDataEphemeral):
        (testWebsiteDataCookies):
        (beforeAll):

2017-02-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Support data interaction on links
        https://bugs.webkit.org/show_bug.cgi?id=168331
        <rdar://problem/30200837>

        Reviewed by Tim Horton.

        Adds 2 unit tests checking that data interaction from a link (with or without a background image) into an
        editable area results in the link URL being inserted.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/background-image-link-and-input.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-input.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-02-14  Jason Rinn  <jrinn@apple.com>

        Add a test for new WebKit Cocoa API, _getContentsAsString.
        https://bugs.webkit.org/show_bug.cgi?id=168147
        <rdar://problem/30502539>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewGetContents.mm: Added.
        (TEST):

2017-02-14  Matt Rajca  <mrajca@apple.com>

        Website policies: iframes should respect the autoplay policy of the top-level document
        https://bugs.webkit.org/show_bug.cgi?id=168333

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2/autoplay-check-frame.html: Added.
        * TestWebKitAPI/Tests/WebKit2/autoplay-check-in-iframe.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2017-02-14  Chris Dumez  <cdumez@apple.com>

        HTML Form Validation bubble should take minimum font size setting into consideration
        https://bugs.webkit.org/show_bug.cgi?id=168271
        <rdar://problem/29869869>

        Reviewed by Simon Fraser.

        Extend UIScriptController's contentsOfUserInterfaceItem() to also return the
        font size of the validation bubble.

        Add an overridePreference() method to UIScriptController. This is currently
        used to override the value of the minimumFontSize setting. testRunner's
        overridePreference() is not usable on WK2 because it does not update the
        value of the preference on the UIProcess side.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::overridePreference):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::overridePreference):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::overridePreference):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::contentsOfUserInterfaceItem):
        (WTR::UIScriptController::overridePreference):

2017-02-14  Florian Bruhin  <git@the-compiler.org>

        Use a set instead of a list for tests when parsing expectations
        https://bugs.webkit.org/show_bug.cgi?id=168304

        In _collect_matching_tests, a lot of membership tests are done on a giant list
        of strings. By making it a set instead, we can make those much faster, and
        there's no reason for it to be a list.

        With ~45k tests and some 1000 expectations, this reduces the parse time from 34s
        to 3s on my machine.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.__init__):
        (TestExpectationParser._collect_matching_tests):

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

        Unreviewed build-fix after r212297.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop): Should return value of the ServerProcess's stop.

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

        [CMake] build-webkit should allow building with the default cmake configuration
        https://bugs.webkit.org/show_bug.cgi?id=168323

        Reviewed by Michael Catanzaro.

        Add a --default-cmake-features switch that makes the script pass
        no value for any of the features defined by build-webkit, that
        way the default values from the port cmake config will be used.

        * Scripts/build-webkit:
        (cMakeArgsFromFeatures):

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

        Unreviewed build-fix after r212297.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop): Handle case where there is no process to kill.

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

        [CMake] build-webkit should print the cmake command executed
        https://bugs.webkit.org/show_bug.cgi?id=168318

        Reviewed by Michael Catanzaro.

        Run the cmake commands to configure or start the build through
        a wrapper that prints the command before executing it.

        * Scripts/webkitdirs.pm:
        (systemVerbose):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeGeneratedProject):
        (cleanCMakeGeneratedProject):

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

        run-webkit-tests for iOS Simulator always complains that stopping WebKitTestRunnerApp.app times out
        https://bugs.webkit.org/show_bug.cgi?id=168150

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop): Close app before calling ServerProcess's stop.
        (SimulatorProcess._kill): Move closing of app into stop().
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.launch_app):
        (Device.terminate_app): Deleted.

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

        REGRESSION(r212192): [GTK] Broke downloads API tests
        https://bugs.webkit.org/show_bug.cgi?id=168193

        Unreviewed. Update test expectations after r212192.

        The suggested filename now includes a file extensions if the MIME type is known.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testDownloadRemoteFile):
        (testDownloadMIMEType):

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

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

        This was a wrong fix (Requested by rniwa on #webkit).

        Reverted changeset:

        "Nwtr unexpectedly passes mismatch ref test if the hashes
        doesn't match but no diff"
        https://bugs.webkit.org/show_bug.cgi?id=168221
        http://trac.webkit.org/changeset/212237

2017-02-13  Alex Christensen  <achristensen@webkit.org>

        URLs with an invalid IPv4 address should be invalid
        https://bugs.webkit.org/show_bug.cgi?id=168260

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        Update tests to reflect new correct behavior.

2017-02-13  Don Olmstead  <don.olmstead@am.sony.com>

        [WinCairo] Add Build Slave
        https://bugs.webkit.org/show_bug.cgi?id=168263

        Reviewed by Lucas Forschler.

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

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

        Fix the build after r212254

        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _currentLocation]):

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

        [WK2] Add test infrastructure and unit tests for data interaction
        https://bugs.webkit.org/show_bug.cgi?id=168159
        <rdar://problem/30477634>

        Reviewed by Tim Horton.

        Uses the testing delegate introduced in WebKit2 to override the gesture recognizer used to initiate data
        interaction. Instead of being driven by UIKit, the DataInteractionSimulator drives this overridden gesture
        recognizer by making the WKContentView call its dataInteractionGestureRecognized method. To simulate an actual
        gesture being performed, we fire the gesture recognizer (or call the data interaction delegate methods, if the
        gesture has already been recognized) at regular intervals over the course of the test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/autofocus-contenteditable.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-contenteditable.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-textarea.html: Added.

        New test pages for data interaction.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm: Added.
        (TestWebKitAPI::runTestsExpectingToObserveEvents):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView stringByEvaluatingJavaScript:]):
        * TestWebKitAPI/ios/DataInteractionSimulator.h: Added.
        * TestWebKitAPI/ios/DataInteractionSimulator.mm: Added.
        (-[MockLongPressGestureRecognizer initWithWindow:]):
        (-[MockLongPressGestureRecognizer locationInView:]):
        (-[MockLongPressGestureRecognizer state]):
        (-[MockLongPressGestureRecognizer numberOfTouches]):
        (-[DataInteractionSimulator initWithWebView:startLocation:endLocation:]):
        (-[DataInteractionSimulator dealloc]):
        (-[DataInteractionSimulator run]):

        Performs a data interaction gesture from the start location to the end location with linear interpolation. For
        now, the timestep and progress per tick are 30ms and 3.33%, respectively, which means that tests should complete
        in a little under 1 second, though this can be easily changed to be configurable in the future if needed.

        (-[DataInteractionSimulator _advanceProgress]):

        Fired periodically to drive the data interaction gesture. Schedules a call of itself until the test is
        completed, and calls _finishDataInteraction when progress is at 1.

        (-[DataInteractionSimulator _finishDataInteraction]):
        (-[DataInteractionSimulator _currentLocation]):
        (-[DataInteractionSimulator _scheduleAdvanceProgress]):
        (-[DataInteractionSimulator _recognizeGestureAtLocation:withState:]):
        (-[DataInteractionSimulator dataInteractionGestureRecognizer]):
        (-[DataInteractionSimulator webViewDidPerformDataInteractionControllerOperation:]):
        (-[DataInteractionSimulator webView:beginDataInteractionWithSourceIndex:gestureRecognizer:]):

2017-02-13  Alex Christensen  <achristensen@webkit.org>

        Percent should be allowed in non-special URL hosts
        https://bugs.webkit.org/show_bug.cgi?id=168255

        Reviewed by Tim Horton.

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

2017-02-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Nwtr unexpectedly passes mismatch ref test if the hashes doesn't match but no diff
        https://bugs.webkit.org/show_bug.cgi?id=168221

        Reviewed by Ryosuke Niwa.

        There is a logic error in comparing mismatch ref test images. In
        mismatch ref tests, it should be failed if two images has no diff.
        But, if the hashes are different, nwtr unexpectedly pass the
        mismatch ref test.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_output_with_reference): Fail the
        mismatch ref test if hashes of two images are equal. Invoke
        ImageDiff if the hashes don't match.

2017-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Update custom line breaking iterators to the latest version of Unicode
        https://bugs.webkit.org/show_bug.cgi?id=168182

        Reviewed by Zalan Bujtas.

        Treat the system's ICU as the source of truth to compare breaking positions against.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/LineBreaking.mm: Added.
        (generateJavaScriptForTest):
        (breakingLocationsFromICU):
        (testAFewStrings):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/AllAhem.svg: Renamed from LayoutTests/css3/line-break/resources/AllAhem.svg.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LineBreaking.html: Added.

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

        [GTK] Several failing WebViewEditor API tests
        https://bugs.webkit.org/show_bug.cgi?id=161608

        Reviewed by Carlos Garcia Campos.

        Selection.collapse() requires arguments; passing no arguments means the JS that selects the
        text range here never gets evaluated. Perhaps there was a DOM API change? Changing it to use
        Selection.removeAllRanges(), which seems like a better function anyway, fixes all the tests
        except the first one, which is still broken due to unrelated bug #151654.

        * Scripts/run-gtk-tests:
        (TestRunner):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:

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

        Unreviewed, skip flaky WebKitPrintOperation/custom-widget test

        * Scripts/run-gtk-tests:
        (TestRunner):

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

        Unreviewed, skip flaky form-controls-associated-signal test

        * Scripts/run-gtk-tests:
        (TestRunner):

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

        [GTK] Handle caps lock indicator in event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=168186

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::webkitModifiersToGDKModifiers): Handle kWKEventModifiersCapsLockKey.

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

        MiniBrowser WK1 fails to update URL for within-page navigations
        https://bugs.webkit.org/show_bug.cgi?id=168173

        Reviewed by Tim Horton.
        
        Implement -webView:didChangeLocationWithinPageForFrame: so that clicking on named
        anchors updates the URL field.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:didChangeLocationWithinPageForFrame:]):

2017-02-10  John Wilander  <wilander@apple.com>

        Updates to Resource Load Statistics: Get the right website data store and introduce timeout for user interaction
        https://bugs.webkit.org/show_bug.cgi?id=167474
        <rdar://problem/24681808>
        <rdar://problem/24703286>
        <rdar://problem/30290270>

        This patch adds test infrastructure to allow testing 
        of the various rules in place for data records removal.

        Reviewed by Andy Estes.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
            Callback mechanism to tell pages that a website data store
            scan has happened.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::setStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestRunner::installStatisticsDidModifyDataRecordsCallback):
        (WTR::TestRunner::statisticsDidModifyDataRecordsCallback):
        (WTR::TestRunner::statisticsFireDataModificationHandler):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestRunner::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestRunner::setStatisticsMinimumTimeBetweeenDataRecordsRemoval):
        (WTR::TestRunner::statisticsResetToConsistentState):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsPrevalentResource):
        (WTR::TestController::isStatisticsPrevalentResource):
        (WTR::TestController::setStatisticsHasHadUserInteraction):
        (WTR::TestController::isStatisticsHasHadUserInteraction):
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestController::statisticsFireDataModificationHandler):
        (WTR::TestController::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestController::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestController::setStatisticsMinimumTimeBetweeenDataRecordsRemoval):
        (WTR::TestController::statisticsResetToConsistentState):
        * WebKitTestRunner/TestController.h:
            These are all configuration and test functions.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        REGRESSION(r182916) run-perf-tests never timeouts
        https://bugs.webkit.org/show_bug.cgi?id=167626

        Reviewed by Ryosuke Niwa.

        The --time-out-ms value (defaults to 600 seconds) of run-perf-tests
        was beeing ignored because the driver was created with no_timeout=True
        unconditionally.
        This adds a new parameter --no-timeout (disabled by default), that
        allows to use the driver with the expected timeout values.
        It also passes --no-timeout to DRT/WTR to ensure that timeouts
        are always controlled by the Python Driver.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._create_driver): Only disable timeout if --no-timeout is passed.
        (PerfTest.run): Disabling timeout should be done when the Driver is created.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__): Ensure --no-timeout is passed to DRT/WTR
        (PerfTestsRunner._parse_args): Add a --no-timeout parameter.
        (_run_tests_set): Pass the no-timeout parameter.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_drt_notimeout): Test --no-timeout is passed to DRT/WTR
        (MainTest.test_default_args): Test default values for additional_drt_flag and no_timeout.
        (MainTest.test_parse_args): Test that the argument no-timeout.

2017-02-10  Daniel Bates  <dabates@apple.com>

        Detach frame from document when entering page cache
        https://bugs.webkit.org/show_bug.cgi?id=166774
        <rdar://problem/29904368>

        Reviewed by Chris Dumez.

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

2017-02-10  Tim Horton  <timothy_horton@apple.com>

        Infinite UI process hang under ensurePositionInformationIsUpToDate
        https://bugs.webkit.org/show_bug.cgi?id=168154
        <rdar://problem/30428673>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/InteractionDeadlockAfterCrash.mm: Added.
        (recursiveFindHighlightLongPressRecognizer):
        (TEST):
        Add a somewhat nasty test that does an async interaction information update, but
        kills the Web process before it arrives, and then does a sync interaction
        information update, which will wait for the oustanding async interaction
        information update if we still think it's coming. Before the patch, this
        test times out with the UI process stuck under ensurePositionInformationIsUpToDate.

2017-02-10  Simon Fraser  <simon.fraser@apple.com>

        Make sure the "inwindow" flag propagates to TiledBackings for masks and reflections
        https://bugs.webkit.org/show_bug.cgi?id=168127
        rdar://problem/30467120

        Reviewed by Tim Horton.

        Reparent the web view before we try to fetch it via:
            [[[window contentView] subviews] objectAtIndex:0];
        which would throw an exception if the test unparented it.

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

2017-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Enable Resource Timing by default in Tests
        https://bugs.webkit.org/show_bug.cgi?id=168145

        Reviewed by Ryosuke Niwa.

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

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

        Removing LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=165927

        Reviewed by Daniel Bates.
        Part 2

        LayoutTestRelay uses SPI, since recent versions of the iOS SDK allow for installing apps on
        simulators through simctl (iOS 10 and later), use this functionality instead.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): Remove archiving of LayoutTestRelay as it is no longer being built.
        Added a FIXME that we will need to implement similar archiving machinery once we build
        ImageDiff for Mac when building WebKit for iOS. Currently ImageDiff is built with the iOS SDK.
        * BuildSlaveSupport/kill-old-processes:
        (main): Remove LayoutTestRelay from list of processes.
        * LayoutTestRelay: Removed LayoutTestRelay.
        * Makefile:
        * Scripts/build-layouttestrelay: Removed.
        * Scripts/build-webkit: Removed LayoutTestRelay references.

2017-02-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Add WebCryptoAPI to watchlist
        https://bugs.webkit.org/show_bug.cgi?id=168138

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/common/config/watchlist:

2017-02-10  Brady Eidson  <beidson@apple.com>

        Replace all WebKit Library Version checks in WK2 with SDK version checks.
        https://bugs.webkit.org/show_bug.cgi?id=168124

        Reviewed by Geoffrey Garen.

        For each of our tools that use WebKit2, opt them in to the new linkedOnOrAfter(Everything) setting.
        
        * MiniBrowser/mac/main.m:
        (main):
        * MobileMiniBrowser/MobileMiniBrowser/main.m:
        (main):
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):
        * WebKitTestRunner/ios/mainIOS.mm:
        (main):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

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

        Fix El Capitan build.

        * Scripts/build-webkit:
        Don't build libwebrtc anywhere for now.

2017-02-10  Andy Estes  <aestes@apple.com>

        Move two MiniBrowserBundle settings out of the .pbxproj
        https://bugs.webkit.org/show_bug.cgi?id=168106

        Reviewed by Tim Horton.

        INFOPLIST_FILE was specified in MiniBrowserBundle.xcconfig but overridden to "" in
        the project file. This removes the project file override.

        WRAPPER_EXTENSION was moved from the project file to MiniBrowserBundle.xcconfig.

        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:

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

        Fix 32-and-64-bit build on El Capitan.

        * Scripts/build-webkit:
        Somebody's building with something like this:
        build-webkit ARCHS="i386 x86_64"
        We want this to also not build libwebrtc for now.

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

        Fix 32-bit build on El Capitan.

        * Scripts/build-webkit:
        The bot uses ARCHS=i386 instead of --32-bit.
        This is a hack, but it should fix the bot until I can do a better fix in the morning.

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

        Fix 32-bit build on El Capitan.

        * Scripts/build-webkit:
        Don't build i386 libwebrtc.

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212040.

        Broke build.  I'm not surprised

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212040

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Build libwebrtc on bots without using it yet
        https://bugs.webkit.org/show_bug.cgi?id=168062

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Don't build libwebrtc.

        * Scripts/build-webkit:
        Not ready yet.  It broke El Capitan and iOS.

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Build libwebrtc on bots without using it yet
        https://bugs.webkit.org/show_bug.cgi?id=168062

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Rename isAppleMacWebKit to isAppleCocoaWebKit
        https://bugs.webkit.org/show_bug.cgi?id=168075

        Reviewed by Geoffrey Garen.

        It returns true for Mac and iOS.  "isAppleMacWebKit" is confusing and wrong.

        * Scripts/build-api-tests:
        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        (buildMyProject):
        * Scripts/build-layouttestrelay:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/run-api-tests:
        (isSupportedPlatform):
        (runTest):
        (listAllTests):
        (prepareEnvironmentForRunningTestTool):
        * Scripts/run-content-extension-tester:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-minibrowser:
        * Scripts/show-pretty-diff:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (determineArchitecture):
        (determinePassedArchitecture):
        (safariPath):
        (builtDylibPathForName):
        (checkFrameworks):
        (isAppleWebKit):
        (isAppleCocoaWebKit):
        (determineNmPath):
        (launcherName):
        (wrapperPrefixIfNeeded):
        (isCMakeBuild):
        (mobileSafariBundle):
        (debugSafari):
        (runSafari):
        (runMiniBrowser):
        (debugMiniBrowser):
        (runWebKitTestRunner):
        (debugWebKitTestRunner):
        (isAppleMacWebKit): Deleted.
        * Scripts/webkitperl/FeatureList.pm:

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Revert r211991
        https://bugs.webkit.org/show_bug.cgi?id=168062

        * Scripts/build-webkit:
        Not quite ready yet.

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Build libwebrtc on bots without using it yet
        https://bugs.webkit.org/show_bug.cgi?id=168062

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:
        Build libwebrtc on Mac when we build ANGLE.

2017-02-09  Youenn Fablet  <youenn@apple.com>

        Improve W3C importer command line options
        https://bugs.webkit.org/show_bug.cgi?id=167448

        Reviewed by Ryosuke Niwa.

        Making the list of test paths to import the main arguments of the script.
        Allow passing the source directory to import as a -s option.
        Adding a warning when given test paths are skipped by default in ImportExpectations.

        Making link conversion off by default when importing from a specific directory since this script is mostly used with web-platform-tests.
        Link conversion rules do not change when imported tests are downloaded by the script.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (parse_args):
        (TestImporter.__init__):
        (TestImporter.do_import):
        (TestImporter):
        (TestImporter.check_imported_expectations):

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

        Update web-platform-tests resources
        https://bugs.webkit.org/show_bug.cgi?id=168026

        Reviewed by Youenn Fablet.

        Stop copying testharness.js from resources/ to web-platform-tests/resources.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files):

2017-02-08  Andy Estes  <aestes@apple.com>

        Custom protocols should not continue loading after a network process crash
        https://bugs.webkit.org/show_bug.cgi?id=168028
        <rdar://problem/27607520>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (processGroup):
        (-[CloseWhileStartingProtocol startLoading]):
        (-[CloseWhileStartingProtocol stopLoading]):
        (TestWebKitAPI::runTest):
        (TestWebKitAPI::TEST):

2017-02-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKRemoteObjectCoder doesn’t handle CGSize
        https://bugs.webkit.org/show_bug.cgi?id=168031

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn takeSize:completionHandler:]):

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

        Use smaller tiles in windows that are not active to facilitate App Napping
        https://bugs.webkit.org/show_bug.cgi?id=167997
        <rdar://problem/30358835>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setWindowIsKey):
        Actually update windowIsKey state of NSWindow so the WebView
        properly updates its activity state.

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

        Add kUTTypeUTF8PlainText and kUTTypeJPEG to the list of compatible content types in DragData
        https://bugs.webkit.org/show_bug.cgi?id=167942
        <rdar://problem/30315079>

        Reviewed by Tim Horton.

        Adds a new test case that simulates dragging from a source that only vends JPEG images or UTF8 plaintext into a
        contenteditable area. An image element and the plain text content, respectively, should be inserted into the
        contenteditable in these cases.

        The DragSource and DragInfo are used to mock dragging into the WebView. There is no reliance on using mouse
        events in this test, since we call the dragging delegate methods (draggingEntered:, draggingUpdated:, and
        performDragOperation:) directly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DragAndDropPasteboardTests.mm: Added.
        (+[FrameLoadCompletionListener listenerWithCompletionBlock:]):
        (-[FrameLoadCompletionListener initWithCompletionBlock:]):
        (-[FrameLoadCompletionListener webView:didFinishLoadForFrame:]):
        (-[DragSource draggingSourceOperationMaskForLocal:]):
        (-[DragInfo initWithImage:offset:pasteboard:source:destinationWindow:]):
        (-[DragInfo lastMousePosition]):
        (-[DragInfo setLastMousePosition:]):
        (-[DragInfo draggingDestinationWindow]):
        (-[DragInfo draggingSourceOperationMask]):
        (-[DragInfo draggingLocation]):
        (-[DragInfo draggedImageLocation]):
        (-[DragInfo draggedImage]):
        (-[DragInfo draggingPasteboard]):
        (-[DragInfo draggingSource]):
        (-[DragInfo draggingSequenceNumber]):
        (-[DragInfo slideDraggedImageTo:]):
        (-[DragInfo namesOfPromisedFilesDroppedAtDestination:]):
        (-[DragInfo draggingFormation]):
        (-[DragInfo setDraggingFormation:]):
        (-[DragInfo animatesToDestination]):
        (-[DragInfo setAnimatesToDestination:]):
        (-[DragInfo numberOfValidItemsForDrop]):
        (-[DragInfo setNumberOfValidItemsForDrop:]):
        (-[DragInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        (-[DragInfo springLoadingHighlight]):
        (-[DragInfo resetSpringLoading]):
        (TestWebKitAPI::getTestImage):
        (TestWebKitAPI::webViewAfterPerformingDragOperation):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/full-page-contenteditable.html: Added.

2017-02-08  Jer Noble  <jer.noble@apple.com>

        Move FullscreenClient creation into WebViewImpl, for use in (deprecated) WKView.
        https://bugs.webkit.org/show_bug.cgi?id=168007

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenDelegate.mm:
        (didFinishLoadForFrame):
        (TestWebKitAPI::TEST):

2017-02-08  Commit Queue  <commit-queue@webkit.org>

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

        It's in jhbuild for consistent layout tests (Requested by
        mcatanzaro on #webkit).

        Reverted changeset:

        "[GTK] Add icu packages to Tools/gtk/install-dependencies"
        https://bugs.webkit.org/show_bug.cgi?id=167993
        http://trac.webkit.org/changeset/211873

2017-02-08  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Add icu packages to Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=167993

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: Add "icu" to the list of required packages (or "icu-dev", or "icu-devel"
        depending in the GNU/Linux distribution)

2017-02-07  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration.
        https://bugs.webkit.org/show_bug.cgi?id=167957

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2017-02-07  Ryan Haddad  <ryanhaddad@apple.com>

        Replace a bot that has an incorrect configuration.
        https://bugs.webkit.org/show_bug.cgi?id=167747

        Rubber-stamped by Alexey Proskuryakov.

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

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

        [Win] [GTK] [EFL] Compile (but don't use, yet) the platform-independent piece of ComplexTextController
        https://bugs.webkit.org/show_bug.cgi?id=167927

        Reviewed by Brent Fulgham.

        Enable ComplexTextController API tests on the Win and GTK ports.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:

2017-02-07  Jonathan Bedard  <jbedard@apple.com>

        File index appended to previous file in svn-create-patch with SVN 1.9
        https://bugs.webkit.org/show_bug.cgi?id=167903
        <rdar://problem/30387395>

        Reviewed by Daniel Bates.

        * Scripts/VCSUtils.pm:
        (fixSVNPatchForAdditionWithHistory): Append a trailing newline character.
        * Scripts/webkitperl/VCSUtils_unittest/fixSVNPatchForAdditionWithHistory.pl: Do not remove
        trailing newline character from the expected result before comparing it to the actual result.

2017-02-07  Olivier Blin  <olivier.blin@softathome.com>

        [webkitdirs] remove unused host_processor variable in determineArchitecture()
        https://bugs.webkit.org/show_bug.cgi?id=167936

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        The host_processor variable in webkitdirs.pm's determineArchitecture() is not used anymore,
        since r195083.

2017-02-07  Youenn Fablet  <youenn@apple.com>

        Use a JSON file to define which WPT files/folders to import
        https://bugs.webkit.org/show_bug.cgi?id=167923

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.__init__):
        (TestDownloader._init_paths_from_expectations):
        * Scripts/webkitpy/w3c/test_importer.py:
        (parse_args):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:

2017-02-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] jhbuild fails: mesa-11.0.6.tar.xz: 404 Not Found
        https://bugs.webkit.org/show_bug.cgi?id=167916

        Reviewed by Carlos Garcia Campos.

        URL of mesa-11.0.6.tar.xz has been moved.

        * gtk/jhbuild.modules: Fix the module path.

2017-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Static Analyzer: Address some leaks in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=167897

        Reviewed by Alexey Proskuryakov.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController sharingService:transitionImageForShareItem:contentRect:]):
        * MiniBrowser/mac/ExtensionManagerWindowController.m:
        (-[ExtensionManagerWindowController add:]):
        (-[ExtensionManagerWindowController remove:]):
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController togglePerWindowWebProcessesDisabled:]):
        Address obvious leaks caught by the static analyzer.

2017-02-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate ComplexTextController to use platform-independent types
        https://bugs.webkit.org/show_bug.cgi?id=167833

        Reviewed by Brent Fulgham.

        Migrate tests away from platform-dependent types.

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

2017-02-06  Brent Fulgham  <bfulgham@apple.com>

        Correct File Path Handling in SecurityOrigin and FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=167894
        <rdar://problem/30380080>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebCore/FileSystem.cpp: Don't encode the temporary files,
        and perform same-volume checks using filesystem-compatible paths.        
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp: Create SecurityOrigins from
        filesystem paths, and perform validation of same-volume checks.
        (TestWebKitAPI::SecurityOriginTest::tempFilePath): Added.
        (TestWebKitAPI::SecurityOriginTest::spaceContainingFilePath): Added.
        (TestWebKitAPI::SecurityOriginTest::bangContainingFilePath): Added.
        (TestWebKitAPI::SecurityOriginTest::quoteContainingFilePath): Added.

2017-02-06  Jer Noble  <jer.noble@apple.com>

        Playback stalls when a SourceBuffer append causes frame eviction
        https://bugs.webkit.org/show_bug.cgi?id=167834

        Reviewed by Eric Carlson.

        Add new correctness tests for the Webcore::SampleMap class. Add additional subtests
        for the WTF::MediaTime class.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/SampleMap.cpp: Added.
        (WTF::operator<<):
        (TestWebKitAPI::TestSample::create):
        (TestWebKitAPI::TestSample::TestSample):
        (TestWebKitAPI::TEST_F):

2017-02-06  Ryan Haddad  <ryanhaddad@apple.com>

        Change capitalization in platform name after r211735.

        Unreviewed dashboard fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

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

        Move the Leaks bot to Sierra
        https://bugs.webkit.org/show_bug.cgi?id=167886

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._displayURLPrompt):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2017-02-06  Jonathan Bedard  <jbedard@apple.com>

        Prevent app crash on launch during simctl install workaround
        https://bugs.webkit.org/show_bug.cgi?id=167685

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.__init__): Pass environment to install.
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.install_app): Accept environment, pass environment to launch.

2017-02-06  Alex Christensen  <achristensen@webkit.org>

        Rebase API tests after r211638
        https://bugs.webkit.org/show_bug.cgi?id=167779

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        URLs with non-special schemes and characters like % in the host now fail to parse,
        more like their special counterparts and according to spec.

2017-02-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial fix after r211697.
        https://bugs.webkit.org/show_bug.cgi?id=167863

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Renamed ES6SampleBench to ARES-6.

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

        Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays
        https://bugs.webkit.org/show_bug.cgi?id=167850

        Reviewed by Tim Horton.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings.

2017-02-04  Andreas Kling  <akling@apple.com>

        Plug some leaks in TestController and UIScriptContext.
        <https://webkit.org/b/167839>

        Reviewed by Alexey Proskuryakov.

        Fix a couple of the leaks seen on the leaks bot.

        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::runUIScript):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin):
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):

2017-02-03  Jeremy Jones  <jeremyj@apple.com>

        WK1 mouse events are missing movementX and movementY for pointerlock.
        https://bugs.webkit.org/show_bug.cgi?id=167775
        rdar://problem/30343810

        Reviewed by Alexey Proskuryakov.

        Set kCGMouseEventDeltaX and kCGMouseEventDeltaY when synthesizing mouse move events.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseMoveToX:Y:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):

2017-02-03  Simon Fraser  <simon.fraser@apple.com>

        Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic
        https://bugs.webkit.org/show_bug.cgi?id=167774

        Reviewed by Tim Horton.

        Implement UIScriptController removeViewFromWindow() and addViewToWindow(), and hook
        up for Mac WK1 and WK2, and iOS WK2. It takes a callback because view state updates to the
        web process are async, so the callback fires after the web process gets the new state.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::removeFromWindow):
        (WTR::PlatformWebView::addToWindow):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::removeFromWindow):
        (WTR::PlatformWebView::addToWindow):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):

2017-02-03  Alexey Proskuryakov  <ap@apple.com>

        Remove check for SkipSafariExecutableEntitlementChecks
        https://bugs.webkit.org/show_bug.cgi?id=167762

        Reviewed by Dan Bernstein.

        Follow-up fix: don't break internal behavior.

        * Scripts/webkitdirs.pm:
        (safariPath):
        (executableHasEntitlements): Deleted.
        (safariPathFromSafariBundle): Deleted.
        (installedSafariPath): Deleted.

2017-02-03  Daniel Bates  <dabates@apple.com>

        [Mac][WK2] Add SPI to override the Content Security Policy of a page
        https://bugs.webkit.org/show_bug.cgi?id=167810
        <rdar://problem/30102568>

        Reviewed by Anders Carlsson.

        Add tests to ensure that we do not regress -[WKWebView _setOverrideContentSecurityPolicy:].

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/OverrideContentSecurityPolicy.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-with-csp-iframe.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-with-csp.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-without-csp-iframe.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-without-csp.html: Added.

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

        URLParser: Fix parsing invalid IPv4 addresses with non-ASCII characters
        https://bugs.webkit.org/show_bug.cgi?id=167773
        <rdar://problem/30221102>

        Reviewed by Ryosuke Niwa.

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

2017-02-02  Alexey Proskuryakov  <ap@apple.com>

        Remove check for SkipSafariExecutableEntitlementChecks
        https://bugs.webkit.org/show_bug.cgi?id=167762
        rdar://problem/22480673

        Reviewed by Dan Bernstein.

        * Scripts/webkitdirs.pm:
        (safariPathFromSafariBundle):
        (skipSafariExecutableEntitlementChecks): Deleted.

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

        Undefined subroutine in svn-create-patch
        https://bugs.webkit.org/show_bug.cgi?id=167742

        Unreviewed build-fix after r211543.

        * Scripts/VCSUtils.pm: fixSVNPatchForAdditionWithHistory was not exported.

2017-02-02  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fix jhbuild dependencies build.

        * gtk/patches/gst-plugins-good-0004-qtdemux-add-context-for-a-preferred-protection.patch:
        Patch updated.

2017-02-02  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME][GStreamer] Fixed decryptor selection
        https://bugs.webkit.org/show_bug.cgi?id=167588

        Reviewed by Žan Doberšek.

        This patches are pending at https://bugzilla.gnome.org/show_bug.cgi?id=770107

        * gtk/jhbuild.modules: Added patches to gstreamer and
        gst-plugins-good packages.
        * gtk/patches/gst-plugins-good-0004-qtdemux-add-context-for-a-preferred-protection.patch: Added.
        * gtk/patches/gstreamer-0001-protection-added-function-to-filter-system-ids.patch: Added.

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

        Make run-benchmark script supports 'config' key in test plan.
        https://bugs.webkit.org/show_bug.cgi?id=167715

        Reviewed by Ryosuke Niwa.

        Add support for 'config' key in test paln.
        'config' key is a dictionary that specifies environment configurations while test is running.
        Specifies orientation to be portrait in MotionMark benchmark.

        * Scripts/webkitpy/benchmark_runner/README.md:
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner._run_benchmark):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.prepare_env):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py:
        (LinuxBrowserDriver.prepare_env):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepare_env):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.prepare_env):
        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark.plan:

2017-02-01  Daniel Bates  <dabates@apple.com>

        REGRESSION (r210820): svn-create-patch does not emit property change only diff
        https://bugs.webkit.org/show_bug.cgi?id=167169

        Reviewed by David Kilzer.

        More directly handle the SVN 1.9 or newer syntax change for a diff of a copied or moved file
        - a SVN diff header and an empty body. In particular, remove a duplicate leading SVN diff
        header from the output of "svn diff" on a file that was copied or moved.

        Following r210820 svn-create-patch emits to standard output a diff only if it has at least one
        chunk range line (e.g. @@ -0,0 +1,7 @@) as a means to workaround a syntax change in the diff
        output of a copied or moved file in SVN version 1.9 or newer. In SVN 1.9 or newer "svn diff"
        of a copied or moved file always emits to standard output a leading SVN diff header (an "Index:"
        line followed by a separator line) with an empty body; => no chunk range lines. However a diff
        of a file with only a property change also does not contain any chunk range lines. Therefore
        svn-create-patch no longer emitted to standard output such a diff. Instead of indirectly detecting
        a SVN diff header with an empty body by counting the number of chunk range lines in the diff
        we should directly test for the presence of a leading SVN diff header with an empty body and
        remove such lines from the diff.

        * Scripts/VCSUtils.pm:
        (fixSVNPatchForAdditionWithHistory): Added.
        * Scripts/svn-create-patch:
        (generateDiff): Pass the output from "svn diff" to fixSVNPatchForAdditionWithHistory() when
        we have a non empty patch for an added file with history (i.e. a copied or moved file).
        * Scripts/webkitperl/VCSUtils_unittest/fixSVNPatchForAdditionWithHistory.pl: Added.

2017-02-01  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update CARingBuffer class
        https://bugs.webkit.org/show_bug.cgi?id=167656

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp: Added.
        (TestWebKitAPI::CARingBufferTest::SetUp):
        (TestWebKitAPI::CARingBufferTest::setup):
        (TestWebKitAPI::CARingBufferTest::setListDataBuffer):
        (TestWebKitAPI::CARingBufferTest::description):
        (TestWebKitAPI::CARingBufferTest::bufferList):
        (TestWebKitAPI::CARingBufferTest::ringBuffer):
        (TestWebKitAPI::CARingBufferTest::capacity):
        (TestWebKitAPI::CARingBufferTest::audioBufferListSizeForStream):
        (TestWebKitAPI::CARingBufferTest::configureBufferListForStream):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::MixingTest::run):

2017-02-01  Alexey Proskuryakov  <ap@apple.com>

        [Mac] TestWebKitAPI includes system frameworks incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=167703
        rdar://problem/30301498

        Reviewed by Ryosuke Niwa.

        FRAMEWORK_SEARCH_PATH results in frameworks being treated as user ones, not system.
        Make TestWebKitAPI use -iframework instead, like the rest of WebKit does.

        Also, reduced the number of subframework search paths, looks like we only need one now.

        * TestWebKitAPI/Configurations/Base.xcconfig:

2017-02-01  Brent Fulgham  <bfulgham@apple.com>

        Correct "filesHaveSameVolume" predicate
        https://bugs.webkit.org/show_bug.cgi?id=167696
        <rdar://problem/30298722>

        Reviewed by David Kilzer.

        Add new tests that confirm that the 'filesHaveSamePath' predicate properly handles
        percent-escaped path inputs.

        * TestWebKitAPI/Tests/WebCore/FileSystem.cpp:
        (TestWebKitAPI::FileSystemTest::spaceContainingFilePath):
        (TestWebKitAPI::FileSystemTest::bangContainingFilePath):
        (TestWebKitAPI::FileSystemTest::quoteContainingFilePath):
        (TestWebKitAPI::TEST_F):

2017-02-01  Tomas Popela  <tpopela@redhat.com>

        Unreviewed. Fix coding style in MiniBrowser

        * MiniBrowser/gtk/BrowserWindow.c:
        (editingCommandCallback):
        (insertImageCommandCallback):
        (insertLinkCommandCallback):

2017-02-01  Tomas Popela  <tpopela@redhat.com>

        [GTK] Add an API to add a custom tab into the print dialog
        https://bugs.webkit.org/show_bug.cgi?id=151998

        Reviewed by Carlos Garcia Campos.

        Add a new WebKitPrintOperation/custom-widget test in TestPrinting
        that is testing a newly added API.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        (testPrintCustomWidget):
        (beforeAll):

2017-02-01  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] qtdemux: Update the tfdt patch to the version finally accepted upstream
        https://bugs.webkit.org/show_bug.cgi?id=166529

        Reviewed by Xabier Rodriguez-Calvar.

        * gtk/patches/gst-plugins-good-use-the-tfdt-decode-time.patch:
        New patch version accepted in GStreamer upstream.

2017-02-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Install either libxfont1-dev or libxfont-dev as dependency
        https://bugs.webkit.org/show_bug.cgi?id=167498

        Reviewed by Carlos Garcia Campos.

        Depending on the distro version you can need either libxfont1-dev
        or libfont-dev to build with jhbuild.

        * gtk/install-dependencies:

2017-01-31  Ryan Haddad  <ryanhaddad@apple.com>

        Disable API test WebKit2.WKWebProcessPlugInRangeHandle
        https://bugs.webkit.org/show_bug.cgi?id=167594

        Unreviewed test gardening.

        Disabling this test while we investigate the cause of a timeout on ios-simulator.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm:
        (TEST):

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

        Move slow-running microbenchmarks out of JSTests/microbenchmarks
        https://bugs.webkit.org/show_bug.cgi?id=167676

        Reviewed by Saam Barati.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Add slowMicrobenchmarks.yaml.

2017-01-31  Megan Gardner  <megan_gardner@apple.com>

        Make Dump Render Tree not crash
        https://bugs.webkit.org/show_bug.cgi?id=167667

        DumpRenderTree is crashing when running WK2 tests that it's not supposed to be running. 
        DumpRenderTree uses RunLoop::main.dispatch(), but that crashes because it's not set up on iOS.
        So we're making use of RunWebThread, which is the correct thing to do on iOS, and it doesn't crash.
        This does not fix any tests, it just fixes the crash.
        
        Reviewed by Simon Fraser.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::callUIScriptCallback):

2017-01-31  Jonathan Bedard  <jbedard@apple.com>

        Workaround for simctl install failing to report install failure
        https://bugs.webkit.org/show_bug.cgi?id=167654

        Reviewed by Daniel Bates.

        simctl install will sometimes report success even though install has failed.
        To workaround this bug, we attempt an app launch after install to ensure
        install has succeeded.

        * Scripts/webkitpy/xcode/simulator.py:
        (Device.install_app): Attempt app launch after install, retry install if launch fails.
        (Device.launch_app): Correct comment.

2017-01-31  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed webkitpy fix after r211405.

        * Scripts/webkitpy/xcode/simulator.py:
        (Device.launch_app): Remove @staticmethod on _log_debug_error.

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

        Unreviewed. Do not include libwebrtc and qunit in GTK+ tarballs.

        * gtk/manifest.txt.in:

2017-01-31  Chris Fleizach  <cfleizach@apple.com>

        AX: enable search predication for iOS
        https://bugs.webkit.org/show_bug.cgi?id=167558
        <rdar://problem/30251367>

        Reviewed by Joanmarie Diggs.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityCommonMac.h:
        * DumpRenderTree/mac/AccessibilityCommonMac.mm:
        (searchPredicateParameterizedAttributeForSearchCriteria):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (searchPredicateParameterizedAttributeForSearchCriteria): Deleted.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria): Deleted.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2017-01-30  Jonathan Bedard  <jbedard@apple.com>

        Workaround for simctl launch bug
        https://bugs.webkit.org/show_bug.cgi?id=167613

        Reviewed by Daniel Bates.

        simctl launch will sometimes fail because of a race condition when many
        simulators are being run simultaneously. These failures will always have
        an exit code of 1. This change attempts to launch an app multiple times
        before reporting a failure to workaround this bug.

        * Scripts/webkitpy/xcode/simulator.py:
        (Device.launch_app): Execute multiple launch attempts, better logging of failures.

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

        Commit queue fails to look at real name aliases for the reviewer
        https://bugs.webkit.org/show_bug.cgi?id=167422

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_has_valid_reviewer): Added tests.

        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList._name_to_contributor_map):
        Made _name_to_contributor_map include alias names.

        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest.test_contributors_by_fuzzy_match):
        Removed subtests that are now obsolete, as these matches are strict. It is not
        obvious if distance based fuzzy matching for names is useful at all, but we can
        look into that some other time.

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

        QueueStatusServer should have an explicit timeout for _fetch_url
        https://bugs.webkit.org/show_bug.cgi?id=167467

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer._fetch_url): Add an explicit timeout of 300s.

2017-01-30  Kocsen Chung  <kocsen_chung@apple.com>

        Add support for Trac instances that host multiple projects.
        https://bugs.webkit.org/show_bug.cgi?id=167524

        Reviewed by Alexey Proskuryakov.

        When multiple projects are hosted on a single Trac instance, the current
        behavior will retrieve changesets from all tracked projects.
        This patch teaches Trac.js to get project-specific changesets from Trac.
        We do this by replacing the parameter `changeset=on` to `repo-projectname=on`
        when querying the Trac timeline.

        To tell Trac to be aware of multi-project instances we leverage the 
        `options` parameter when creating a new instance: 

            new Trac("https://mytrac.com/", { projectIdentifier: "tracProjectName" });

        If this option is not provided, the original behaviour will prevail.
        Additionally, add corresponding tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac): Reason about new optional parameter 'projectIdentifier'.
        (Trac.prototype.revisionURL): Given a projectIdentifier, append it to the end of the URL.
        (Trac.prototype._xmlTimelineURL): Given a projectIdentifier,
        replace default parameter `changeset=on` with `repo-projectname=on`.
        (Trac.prototype._convertCommitInfoElementToObject): Fix missing ';'.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockTrac.js:
        (MockTrac): Add support for instantiating Trac with a projectIdentifier.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js:
        (setup): Provide a multiple-project MockTrac instance to all test cases for testing.
        Add the following tests:
            test("revisionURL")
            test("revisionURL with Trac Identifier")
            test("_xmlTimelineURL")
            test("_xmlTimelineURL with Trac Identifier")
        (this.view._latestProductiveIteration): Fix missing ';'.

2017-01-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Correct spacing regression on inter-element complex path shaping on some fonts
        https://bugs.webkit.org/show_bug.cgi?id=166013

        Reviewed by Simon Fraser.

        Unskip existing tests and make some new tests:
        - Testing complex text with no origins
        - Testing initial expansions
        - Testing the sign of vertical advances

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

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

        [GTK][EFL] Avoid using a thin directory to create the built product on the archive-built-product step.
        https://bugs.webkit.org/show_bug.cgi?id=167596

        Reviewed by Daniel Bates.

        We avoid needing a thin directory by invoking the zip program with
        the list of directories from the build directory to be zipped,
        and by using the zip feature to exclude files matching a pattern.

        * BuildSlaveSupport/built-product-archive:
        (copyBuildFiles):
        (createZipFromList):
        (archiveBuiltProduct):

2017-01-30  Jonathan Bedard  <jbedard@apple.com>

        Use simctl instead of LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=165927

        Reviewed by Daniel Bates.

        Part 1

        LayoutTestRelay uses SPI, since recent versions of the iOS SDK allow for installing apps on
        simulators through simctl (iOS 10 and later), use this functionality instead.

        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Added _test_runner_process_constructor.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.app_identifier_from_bundle): Added function to extract bundle ID from plist.
        * Scripts/webkitpy/port/driver.py:
        (Driver._start): Pass worker_number to server_process so we can look up the correct simulator device to use.
        (IOSSimulatorDriver): Deleted.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_stop_cleans_up_properly): Set _test_runner_process_constructor for testing.
        (DriverTest.test_two_starts_cleans_up_properly): Ditto.
        (DriverTest.test_start_actually_starts): Ditto.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort): Remove relay_name.
        (IOSSimulatorPort.__init__): Set _test_runner_process_constructor to SimulatorProcess for IOSSimulatorPort.
        (IOSSimulatorPort._create_simulators): Formatting change.
        (IOSSimulatorPort.relay_path): Deleted.
        (IOSSimulatorPort._check_relay): Deleted.
        (IOSSimulatorPort._check_port_build): Deleted. Use base class implementation
        (IOSSimulatorPort._build_relay): Deleted.
        (IOSSimulatorPort._build_driver): Deleted. Use base class implementation
        (IOSSimulatorPort._driver_class): Deleted. Use base class implementation
        * Scripts/webkitpy/port/ios_unittest.py:
        (iosTest.test_32bit): Update test.
        (iosTest.test_64bit): Update test.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Added argument worker_number. This class does not make use of it. We will make use of this argument in SimulatorProcess to lookup the associated simulator device.
        (ServerProcess._set_file_nonblocking): Added to share common code.
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.__init__): Added argument worker_number.
        * Scripts/webkitpy/port/simulator_process.py: Added.
        (SimulatorProcess): Added.
        (SimulatorProcess.Popen): Added.
        (SimulatorProcess.Popen.__init__): Added. Initialize Popen structure with stdin, stdout, stderr and pid.
        (SimulatorProcess.Popen.poll): Added. Check if the process is running.
        (SimulatorProcess.Popen.wait): Added. Wait for process to close.
        (SimulatorProcess.__init__): Added. Install app to device specified through port and worker_number.
        (SimulatorProcess._reset): Added. Unlink fifos.
        (SimulatorProcess._start): Added. Launch app on simulator, link fifos.
        (SimulatorProcess._kill): Added. Shutdown app on simulator.
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.__init__): Accept host to run install/launch/terminate.
        (Device.install_app): Install app to target Device.
        (Device.launch_app): Launch app on target Device.
        (Device.terminate_app): Shutdown app on target Device.
        (Simulator._parse_devices): Pass host to Device.

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

        [GTK] pixman fails to compile on Raspberry Pi (GCC crash)
        https://bugs.webkit.org/show_bug.cgi?id=167411

        Reviewed by Michael Catanzaro.

        Disable the ARM iwMMXt fast path for pixman, because it triggers
        a GCC bug on the RPi with Raspbian/PIXEL causing a build failure.

        * gtk/jhbuild.modules:

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

        [GTK] Add API to handle the accelerated compositing policy
        https://bugs.webkit.org/show_bug.cgi?id=167509

        Reviewed by Michael Catanzaro.

        Handle new setting in MiniBrowser. The settings dialog doesn't support enum settings so it needs to be handled
        as a special case. Also add test cases to the get/set API.

        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (hardwareAccelerationPolicyToString):
        (stringToHardwareAccelerationPolicy):
        (cellRendererChanged):
        (browserSettingsDialogConstructed):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettings):

2017-01-29  Andy Estes  <aestes@apple.com>

        [QuickLook] Add a WebPreference to enable saving QuickLook documents in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=167563
        <rdar://problem/30253207>

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm:
        (-[QuickLookNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[QuickLookNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (runTest):
        (-[QuickLookFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TEST):

2017-01-29  Dan Bernstein  <mitz@apple.com>

        [iOS] Expose WebCore::DataDetection::detectContentInRange WKWebProcessPlugInRangeHandle
        https://bugs.webkit.org/show_bug.cgi?id=167565

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm: Added.
        (-[BundleRangeHandleRemoteObject textFromBodyRange:]):
        (-[BundleRangeHandleRemoteObject bodyInnerHTMLAfterDetectingData:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandlePlugIn.mm: Added.
        (-[BundleRangeHandlePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleRangeHandlePlugIn webProcessPlugInBrowserContextController:didFinishDocumentLoadForFrame:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandleProtocol.h: Added.

2017-01-28  Yoav Weiss  <yoav@yoav.ws>

        Add Link Preload as an off-by-default experimental feature menu item.
        https://bugs.webkit.org/show_bug.cgi?id=167201

        Reviewed by Ryosuke Niwa.

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

2017-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Add User Timing Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=167542
        <rdar://problem/22746307>

        Reviewed by Ryosuke Niwa.

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

2017-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Patch Review: EWS Bubbles wrap to multiple lines but can fit on one line
        https://bugs.webkit.org/show_bug.cgi?id=167519

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/templates/statusbubble.html:
        To measure the bubbleContainer's width, it must not be wrapping based
        on its parent container. So when measuring the width temporarily set
        the parent to a very large width so as to not artificially wrap us.
        Restore the parent's width after measuring.

2017-01-27  Andy Estes  <aestes@apple.com>

        [iOS] Add a test for _WKNSFileManagerExtras
        https://bugs.webkit.org/show_bug.cgi?id=167478

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/NSFileManagerExtras.mm: Added.
        (expectAttributes):
        (TEST):

2017-01-27  Keith Miller  <keith_miller@apple.com>

        run-benchmarks should make sure it passes the test url to the right application
        https://bugs.webkit.org/show_bug.cgi?id=167533

        Reviewed by Joseph Pecoraro.

        This fixes an issue when trying to run-benchmark script with the
        system default browser set to STP. Previously, it would run
        the test in STP rather than the provided build. Now, it should run
        in the provided build.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url):

2017-01-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Prepare ComplexTextController for unit testing
        https://bugs.webkit.org/show_bug.cgi?id=167493

        Reviewed by Simon Fraser.

        Addressing post-review comments from Simon Fraser.

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

2017-01-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Prepare ComplexTextController for unit testing
        https://bugs.webkit.org/show_bug.cgi?id=167493

        Reviewed by Dean Jackson.

        Create four unit tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp: Added.
        (TestWebKitAPI::ComplexTextControllerTest::SetUp):
        (TestWebKitAPI::TEST_F):

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Crash when navigating back to a page in PacheCache when one of its frames has been removed
        https://bugs.webkit.org/show_bug.cgi?id=167421
        <rdar://problem/30188490>

        Reviewed by Darin Adler.

        Add a new setting allowing layout tests to enable PageCache in a window
        that has an opener, for convenience.

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

2017-01-26  Keith Miller  <keith_miller@apple.com>

        classInfo should take a VM so it is not materialized from the object on each call
        https://bugs.webkit.org/show_bug.cgi?id=167424

        Rubber Stamped by Michael Saboff.

        Previously, classInfo() would get the VM from the target's
        MarkedBlock.  Most callers already have a VM on hand, so it is
        wasteful to compute the VM from the marked block every time. This
        patch refactors some of the most common callers of classInfo(),
        jsDynamicCast and inherits to take a VM as well.

        * DumpRenderTree/TestRunner.cpp:
        (setAudioResultCallback):

2017-01-26  Jer Noble  <jer.noble@apple.com>

        Autoplay muted videos stop playback of any streaming app in the background
        https://bugs.webkit.org/show_bug.cgi?id=163993
        <rdar://problem/29020431>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ios/video-with-muted-audio-and-webaudio.html: Added.

2017-01-26  Ryan Haddad  <ryanhaddad@apple.com>

        Disable API test WebKit2.WebsitePoliciesPlayAfterPreventedAutoplay.
        https://bugs.webkit.org/show_bug.cgi?id=167466

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST):

2017-01-26  Matt Rajca  <mrajca@apple.com>

        Notify clients when the user plays media otherwise prevented from autoplaying
        https://bugs.webkit.org/show_bug.cgi?id=167390

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/autoplay-with-controls.html: Added.
        * TestWebKitAPI/Tests/WebKit2/js-play-with-controls.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (didPlayMediaPreventedFromPlayingWithoutUserGesture):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:]):
        (-[TestWKWebView waitForLoad]):
        (-[TestWKWebView mouseUpAtPoint:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2017-01-26  Per Arne Vollan  <pvollan@apple.com>

        Crash when setting custom scale factor.
        https://bugs.webkit.org/show_bug.cgi?id=167369

        Reviewed by Sam Weinig.

        Added API test.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebKit/win/ScaleWebView.cpp: Added.
        (TestWebKitAPI::WebKitCreateInstance):
        (TestWebKitAPI::ScaleWebView::SetUp):
        (TestWebKitAPI::ScaleWebView::TearDown):
        (TestWebKitAPI::TEST_F):

2017-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark nests MotionMark results by the suite name twice
        https://bugs.webkit.org/show_bug.cgi?id=164948

        Reviewed by Said Abou-Hallawa.

        Use a single level MotionMark now that this is the name of the benchmark,
        and we no longer have tests that aren't part of the MotionMark suite.

        * Scripts/webkitpy/benchmark_runner/data/patches/MotionMark.patch:

2017-01-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211193.

        This change broke internal builds.

        Reverted changeset:

        "Notify clients when the user plays media otherwise prevented
        from autoplaying"
        https://bugs.webkit.org/show_bug.cgi?id=167390
        http://trac.webkit.org/changeset/211193

2017-01-25  Matt Rajca  <mrajca@apple.com>

        Notify clients when the user plays media otherwise prevented from autoplaying
        https://bugs.webkit.org/show_bug.cgi?id=167390

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/autoplay-with-controls.html: Added.
        * TestWebKitAPI/Tests/WebKit2/js-play-with-controls.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (didPlayMediaPreventedFromPlayingWithoutUserGesture):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:]):
        (-[TestWKWebView waitForLoad]):
        (-[TestWKWebView mouseUpAtPoint:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2017-01-25  Matt Rajca  <mrajca@apple.com>

        [ios-simulator] API test WebKit2.WebsitePoliciesAutoplayEnabled timing out
        https://bugs.webkit.org/show_bug.cgi?id=167385

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2/autoplay-check.html: Avoid arbitrary timeouts in favor of promises.
        * TestWebKitAPI/Tests/WebKit2/autoplay-no-audio-check.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Allow inline (rather than full screen) media playback on iOS.

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

        [GTK] Icon Database should be in private browsing mode for ephemeral web views
        https://bugs.webkit.org/show_bug.cgi?id=167414

        Reviewed by Michael Catanzaro.

        Add a test case to check ephemeral web views don't write favicons to the database.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        (ephemeralViewLoadChanged):
        (testPrivateBrowsing):
        (testFaviconDatabase):

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

        [GTK] Add a private browsing mode to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=167413

        Reviewed by Michael Catanzaro.

        Add -p/--private command line option to create a private instance. Also add CTRL+SHIFT+P shortcut to create
        private windows, even on non-private instances.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewTitleChanged): Add [Private] to title window for private windows.
        (webViewCreate): Pass web context to browser_window_new.
        (openPrivateWindow): Create a new ephemeral web view and add it to a new window.
        (browserWindowFinalize): Disconnect web context signal handlers.
        (browser_window_init): Add shortcut for opening private window.
        (browser_window_new): It now receives the context and connect to download-started here.
        (browser_window_get_web_context): Return the context.
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserTab): Create the web view for the window web context.
        (aboutDataScriptMessageReceivedCallback): Do not use the default web context, but the window one.
        (aboutDataHandleRequest): Ditto.
        (aboutURISchemeRequestCallback): Ditto.
        (main): Create ephemeral web context if private command line option is used.

2017-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        collectMatchingElementsInFlatTree should not find elements inside an user agent shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=167409

        Reviewed by Antti Koivisto.

        Added a test case for collectMatchingElementsInFlatTree not finding elements inside an user agent shadow tree
        as well as tests for the newly added matchingElementInFlatTree.

        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen.cpp:
        (TestWebKitAPI::runJavaScriptAlert):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleMakeAllShadowRootOpenTest::initialize):
        * TestWebKitAPI/Tests/WebKit2/closed-shadow-tree-test.html:

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

        [GTK] Add API to create ephemeral web views and deprecate the private browsing setting
        https://bugs.webkit.org/show_bug.cgi?id=167370

        Reviewed by Michael Catanzaro.

        Add several test cases of ephemeral web views.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
        (testWebViewAuthenticationStorage):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
        (ephemeralViewloadChanged):
        (testCookieManagerEphemeral):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettings):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextEphemeral):
        (ephemeralViewloadChanged):
        (testWebContextProxySettings):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (ephemeralViewloadChanged):
        (testWebViewEphemeral):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:
        (ephemeralViewloadChanged):
        (testWebsiteDataEphemeral):
        (beforeAll):

2017-01-24  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r208902): URLWithUserTypedString returns nil with file URLs
        https://bugs.webkit.org/show_bug.cgi?id=167402

        Reviewed by Ryosuke Niwa.

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

2017-01-24  Zalan Bujtas  <zalan@apple.com>

        Add simple line layout toggle to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=167405

        Reviewed by Andreas Kling.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleSimpleLineLayoutEnabled:]):
        (-[SettingsController simpleLineLayoutEnabled]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        WKR does not include my nick when commit-queue lands my patch
        https://bugs.webkit.org/show_bug.cgi?id=167388

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot._summarize_commit_log):
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py:
        Perform nickname insertion before grabbing "Patch by" details.
        This way we can include the nickname with the full name.

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167394

        Reviewed by Ryosuke Niwa.

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

2017-01-24  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Use HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE for libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167353

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/libwebrtc/generate_cmake.py:
        (CMakeGenerator.initialize_targets):

2017-01-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        WKR should not confuse Miguel Gomez with Andres Gomez
        https://bugs.webkit.org/show_bug.cgi?id=167389

        Reviewed by Lucas Forschler.

        Andres's email is a substring of Miguel's, causing WKR to credit Miguel's commits to
        "mAndres Gomez". Fix this.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot._summarize_commit_log): Be stricter about matching emails. SVN logs include a
        space on each side of the email address, so expect both spaces to be there before
        considering the email for replacement.
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py: Add a test.

2017-01-24  Matt Rajca  <mrajca@apple.com>

        Pass down website autoplay policies to media elements
        https://bugs.webkit.org/show_bug.cgi?id=167355

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/autoplay-check.html: Renamed from Tools/TestWebKitAPI/Tests/WebKit2/autoplayCheck.html to match our naming conventions.
        * TestWebKitAPI/Tests/WebKit2/autoplay-no-audio-check.html: Added.
        * TestWebKitAPI/Tests/WebKit2/test-without-audio-track.mp4: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2017-01-24  Nan Wang  <n_wang@apple.com>

        AX: Speak Selection does not work in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=166794
        <rdar://problem/29913013>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::retrieveSpeakSelectionContent):
        (WTR::UIScriptController::accessibilitySpeakSelectionContent):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::retrieveSpeakSelectionContent):
        (WTR::UIScriptController::accessibilitySpeakSelectionContent):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _accessibilityDidGetSpeakSelectionContent:]):
        (-[TestRunnerWKWebView accessibilityRetrieveSpeakSelectionContentWithCompletionHandler:]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::retrieveSpeakSelectionContent):
        (WTR::UIScriptController::accessibilitySpeakSelectionContent):

2017-01-24  Daniel Bates  <dabates@apple.com>

        StringView.split() should use an iterator design pattern instead of allocating a Vector
        https://bugs.webkit.org/show_bug.cgi?id=163225

        Reviewed by Darin Adler.

        Add unit tests for StringView.split().

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::stringViewFromLiteral): Moved to the top of the file so that it can be
        used in the StringView.split() unit tests.
        (TestWebKitAPI::stringViewFromUTF8): Ditto.
        (TestWebKitAPI::vectorFromSplitResult): Convenience function to convert a StringView::SplitResult
        object to a Vector of String objects.
        (TestWebKitAPI::TEST): Added the following tests:
            - WTF.StringViewSplitEmptyAndNullStrings
            - WTF.StringViewSplitBasic
            - WTF.StringViewSplitWithConsecutiveSeparators

2017-01-23  Anders Carlsson  <andersca@apple.com>

        The Score Esports crashes on launch
        https://bugs.webkit.org/show_bug.cgi?id=167338
        rdar://problem/29948645

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKObject.mm:
        (TestWebKitAPI::TEST):
        Add a test.

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

        [GTK] Add API to WebKitWebsiteDataManager to handle website data
        https://bugs.webkit.org/show_bug.cgi?id=146589

        Reviewed by Michael Catanzaro.

        Add about:data handler to MiniBrowser to manually test the website data API. Also add unit tests to test all the
        new API, moving the WebKitWebsiteDataManager configuration API to the new file too.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy):
        (newTabCallback):
        * MiniBrowser/gtk/main.c:
        (createBrowserTab):
        (aboutDataRequestFree):
        (aboutDataRequestNew):
        (aboutDataRequestForView):
        (websiteDataRemovedCallback):
        (websiteDataClearedCallback):
        (aboutDataScriptMessageReceivedCallback):
        (domainListFree):
        (aboutDataFillTable):
        (gotWebsiteDataCallback):
        (aboutDataHandleRequest):
        (aboutURISchemeRequestCallback):
        (main):
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (serverCallback):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp: Added.
        (serverCallback):
        (WebsiteDataTest::WebsiteDataTest):
        (WebsiteDataTest::~WebsiteDataTest):
        (WebsiteDataTest::fetch):
        (WebsiteDataTest::remove):
        (WebsiteDataTest::clear):
        (testWebsiteDataConfiguration):
        (testWebsiteDataCache):
        (testWebsiteDataStorage):
        (testWebsiteDataDatabases):
        (testWebsiteDataAppcache):
        (beforeAll):
        (afterAll):

2017-01-23  Commit Queue  <commit-queue@webkit.org>

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

        broke API tests (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Pass down website autoplay policies to media elements"
        https://bugs.webkit.org/show_bug.cgi?id=167132
        http://trac.webkit.org/changeset/211062

2017-01-23  Alex Christensen  <achristensen@webkit.org>

        URLParser should fail to parse percent-encoded invalid UTF-8 sequences
        https://bugs.webkit.org/show_bug.cgi?id=167330

        Reviewed by Tim Horton.

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

2017-01-23  Alex Christensen  <achristensen@webkit.org>

        Make URLs with non-special schemes and a query or fragment but no slash after the host more compatible
        https://bugs.webkit.org/show_bug.cgi?id=167317

        Reviewed by Sam Weinig.

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

2017-01-23  Jonathan Bedard  <jbedard@apple.com>

        svn-create-patch should emit properties when files are moved or copied
        https://bugs.webkit.org/show_bug.cgi?id=167264

        Reviewed by Daniel Bates.

        * Scripts/svn-create-patch:
        (manufacturePatchForAdditionWithHistory): Diff the source file against nothing to get properties.

2017-01-23  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Filter libwebrtc link flags
        https://bugs.webkit.org/show_bug.cgi?id=167287

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/libwebrtc/generate_cmake.py:
        (CMakeGenerator._compute_link_flags):
        (CMakeGenerator._compute_link_flags.keep_flag):
        (CMakeGenerator._generate_compile_target_options):

2017-01-23  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Make VP8 optional in libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167257

        Reviewed by Darin Adler.

        * Scripts/webkitpy/libwebrtc/generate_cmake.py:
        (CMakeGenerator.remove_libvpx): Adding vp8_noop.cc to the build system.

2017-01-23  Jer Noble  <jer.noble@apple.com>

        Video details does not apear and missing scrubber in Control Center
        https://bugs.webkit.org/show_bug.cgi?id=167233

        Reviewed by Alex Christensen.

        Refactor TestWKWebViewMac to work on PLATFORM(IOS). Add a new test to
        NowPlayingControlTests for iOS.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView setWindowVisible:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.h: Renamed from Tools/TestWebKitAPI/mac/TestWKWebViewMac.h.
        * TestWebKitAPI/cocoa/TestWKWebView.mm: Renamed from Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm.
        (SOFT_LINK_CLASS):
        (-[TestMessageHandler addMessage:withHandler:]):
        (-[TestMessageHandler userContentController:didReceiveScriptMessage:]):
        (__simulated_forceClickAssociatedEventsMask):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebViewHostWindow isKeyWindow]):
        (-[TestWKWebViewHostWindow makeKeyWindow]):
        (-[TestWKWebViewHostWindow resignKeyWindow]):
        (-[TestWKWebView initWithFrame:]):
        (-[TestWKWebView initWithFrame:configuration:]):
        (-[TestWKWebView _setUpTestWindow:]):
        (-[TestWKWebView performAfterReceivingMessage:action:]):
        (-[TestWKWebView loadTestPageNamed:]):
        (-[TestWKWebView synchronouslyLoadTestPageNamed:]):
        (-[TestWKWebView stringByEvaluatingJavaScript:]):
        (-[TestWKWebView waitForMessage:]):
        (-[TestWKWebView performAfterLoading:]):
        (-[TestWKWebView mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebView typeCharacter:]):

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

        Unreviewed. Bring back gtk-doc error messages after r209981.

        Since r209981, if gtk-doc shows warnings the build fails but those warnings are not printed to stdout so it's
        impossible to know what's wrong.

        * gtk/gtkdoc.py:
        (GTKDoc._run_command): Make print_output True by default again and use debug instead of info to log "Running" messages.

2017-01-20  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Update build system to make G711 optional in libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167256

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/libwebrtc/generate_cmake.py:
        (CMakeGenerator.remove_webrtc_g711): Adding a missing file to the build system as this file includes generic pcm encoder functions.

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup RuntimeEnabledFeatures
        https://bugs.webkit.org/show_bug.cgi?id=167228

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        More closely match WebKitTestRunner initialization of preferences
        for experimental features.

2017-01-20  Alex Christensen  <achristensen@webkit.org>

        Build Fix for Windows DumpRenderTree after r210976
        https://bugs.webkit.org/show_bug.cgi?id=167115

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove outdated ENABLE(CSP_NEXT) build flag
        https://bugs.webkit.org/show_bug.cgi?id=167252

        Reviewed by Brent Fulgham.

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

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Build Fix for Windows DumpRenderTree after r210976

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2017-01-20  Antoine Quint  <graouts@apple.com>

        Web Animations should be off by default and enabled as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=167115
        <rdar://problem/30048963>

        Reviewed by Joseph Pecoraro.

        Turn Web Animations on in DRT.

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

2017-01-20  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Add libwebrtc build infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=167207

        Reviewed by Alex Christensen.

        Adding a script doing the libwebrtc project json to CMake file conversion.

        * Scripts/generate-libwebrtc-cmake: Added.
        * Scripts/webkitpy/libwebrtc/__init__.py: Added.
        * Scripts/webkitpy/libwebrtc/generate_cmake.py: Added.

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Mini Browser: Show tooltip for Experimental Features
        https://bugs.webkit.org/show_bug.cgi?id=167225

        Reviewed by Alex Christensen.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        Include the full details string as a tooltip.

2017-01-20  Per Arne Vollan  <pvollan@apple.com>

        [Win] Test output results should not be written twice.
        https://bugs.webkit.org/show_bug.cgi?id=167197

        Reviewed by Brent Fulgham.

        Prevent test output from being written twice by returning early from
        the dump() function, if it already has been called.
        This patch also adds a missing newline to a test output line. 
        
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):

2017-01-20  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Enabled modern media controls by default in test runners.

        * DumpRenderTree/TestOptions.h:
        * WebKitTestRunner/TestOptions.h:

2017-01-19  Chris Dumez  <cdumez@apple.com>

        iterable<> should be enabled on WK1
        https://bugs.webkit.org/show_bug.cgi?id=167221
        <rdar://problem/30108531>

        Reviewed by Youenn Fablet.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDOMIteratorEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        Ensure status server logs go to log file
        https://bugs.webkit.org/show_bug.cgi?id=167210

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer.next_work_item): Change log level from debug to info in
        order to facilitate deubgging issues.
        (StatusServer.update_work_items): Same.

2017-01-19  Megan Gardner  <megan_gardner@apple.com>

        Additional selection tests and interpolation fix
        https://bugs.webkit.org/show_bug.cgi?id=167171

        Reviewed by Simon Fraser.

        We weren't adding the final event when interpolating event streams.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator interpolatedEvents:]):

2017-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Variation fonts are erroneously disabled on iOS
        https://bugs.webkit.org/show_bug.cgi?id=167172

        Reviewed by Simon Fraser.

        OpenSource builders don't seem to understand sdk=embedded*.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Unreviewed. Fix GTK+ unit tests failing since r210531.

        Avoid using paths to files that don't actually exist.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp:
        (testWebKitConsoleMessageNetworkError):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuDefaultMenu):
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/silence.mpg: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/simple.json: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/tracks.ogg: Added.

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

        [GTK] Provide API to set proxy settings
        https://bugs.webkit.org/show_bug.cgi?id=128674

        Reviewed by Michael Catanzaro.

        Add tests for new proxy settings API.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (serverCallback):
        (ProxyTest::ProxyTest):
        (ProxyTest::~ProxyTest):
        (ProxyTest::loadURIAndGetMainResourceData):
        (ProxyTest::proxyServerPortAsString):
        (testWebContextProxySettings):
        (beforeAll):

2017-01-19  Timothy Hatcher  <timothy@hatcher.name>

        Add back my old email address so old commits will still match it.

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

2017-01-19  Timothy Hatcher  <timothy@hatcher.name>

        Remove my old email address from contributors.json and watchlist.

        * Scripts/validate-committer-lists:
        (CommitterListFromGit): Change the mapping to the correct email.
        * Scripts/webkitpy/common/config/contributors.json:
        * Scripts/webkitpy/common/config/watchlist:

2017-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210848.

        This change introduced media-related LayoutTest failures and
        crashes on macOS.

        Reverted changeset:

        "[Modern Media Controls] Turn modern media controls on by
        default"
        https://bugs.webkit.org/show_bug.cgi?id=165668
        http://trac.webkit.org/changeset/210848

2017-01-18  Andreas Kling  <akling@apple.com>

        Document::securityOrigin() should return a reference.
        <https://webkit.org/b/167124>

        Reviewed by Sam Weinig.

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

2017-01-18  Per Arne Vollan  <pvollan@apple.com>

        [Win] Clipboard tests are flaky.
        https://bugs.webkit.org/show_bug.cgi?id=167088

        Reviewed by Brent Fulgham.

        Tests involving the clipboard are flaky when running with multiple DRTs, since the clipboard is global. 
        We can fix this by assigning each DRT a separate window station (each window station has its own clipboard).

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2017-01-18  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Enabled modern media controls by default in test runners. 

        * DumpRenderTree/TestOptions.h:
        * WebKitTestRunner/TestOptions.h:

2017-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

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

        It introduced dozens of test timeouts.

        Reverted changeset:
        "[Modern Media Controls] Turn modern media controls on by default"
        https://bugs.webkit.org/show_bug.cgi?id=165668
        http://trac.webkit.org/changeset/210834

2017-01-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Enabled modern media controls by default in test runners. 

        * DumpRenderTree/TestOptions.h:
        * WebKitTestRunner/TestOptions.h:

2017-01-17  Chris Dumez  <cdumez@apple.com>

        Document title changed twice when setting document.title
        https://bugs.webkit.org/show_bug.cgi?id=167065

        Reviewed by Darin Adler.

        Add WebKit2GTK API test that was written by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewTitleChange):
        (beforeAll):

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
        https://bugs.webkit.org/show_bug.cgi?id=116551
        <rdar://problem/13949830>

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm:
        Remove stale RESOURCE_TIMING references which are now a runtime enabled feature
        that is part of the existing WEB_TIMING feature.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-01-17  Jonathan Bedard  <jbedard@apple.com>

        'webkit-patch post' no longer works with moved/copied files
        https://bugs.webkit.org/show_bug.cgi?id=166914
        <rdar://problem/29979707>

        Reviewed by Daniel Bates.

        SVN 1.9 has a bug where when a file has been moved or copied, the svn diff of the new
        file outputs only the "Index:" line with an empty body.  This workaround
        ignores such output from svn diff.  A issue has been filed with SVN, a link to the
        public email list tracking this bug is below.
        http://mail-archives.apache.org/mod_mbox/subversion-users/201701.mbox/%3cCF9BDE0A-7454-4405-8259-1120C6B76A03@apple.com%3e
        

        * Scripts/svn-create-patch:
        (generateDiff): Ignore an "Index:" line with an empty body.

2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Remove the REQUEST_ANIMATION_FRAME flag
        https://bugs.webkit.org/show_bug.cgi?id=156980
        <rdar://problem/25906849>

        Reviewed by Simon Fraser.

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

2017-01-15  Sam Weinig  <sam@webkit.org>

        Add the ability to use numbers in makeString()
        https://bugs.webkit.org/show_bug.cgi?id=167087

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: Added.
        Add tests for StringConcatenate, focusing on new numeric additions.

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

        Unreviewed, remove stale comment.

        This test was fixed by r163173.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:

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

        Annotate large string tests with largeHeap
        https://bugs.webkit.org/show_bug.cgi?id=167054

        Reviewed by Filip Pizlo.

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

2017-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        Remove stale references to ENABLE_ES6_GENERATORS and ENABLE_PROMISES
        https://bugs.webkit.org/show_bug.cgi?id=167043

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(DETAILS_ELEMENT) guards
        https://bugs.webkit.org/show_bug.cgi?id=167042

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-01-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        26 MotionMark performance tests failing
        https://bugs.webkit.org/show_bug.cgi?id=166854

        Reviewed by Ryosuke Niwa.

        Unrelated change. This is the last place that we need to rename Animometer
        to MotionMark.

        * Scripts/webkitpy/common/config/watchlist:

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

        run-jsc-benchmarks' echo should have -e option
        https://bugs.webkit.org/show_bug.cgi?id=167009

        Reviewed by Sam Weinig.

        echo requires `-e` option to use escape sequence.
        Without it, in some environment (in my Fedora 25), the escape sequence is not
        recognized and just dumped as `\c` etc.

        * Scripts/run-jsc-benchmarks:

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

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=166995

        Reviewed by Jer Noble.

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        as some people are having trouble building without it.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-01-12  Sam Weinig  <sam@webkit.org>

        Add the ability to filter the set of bindings tests you want to run
        https://bugs.webkit.org/show_bug.cgi?id=166977

        Reviewed by Tim Horton.

        Allows doing things like:
            run-bindings-tests TestObj* TestCEReactions*
        
        to run only those tests that match the patterns.

        * Scripts/run-bindings-tests:
        (main):
        Switch to using optparse and pass the remaining args as the filters.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.__init__):
        Store the pattens.

        (BindingsTests.test_matches_patterns):
        Add helper predicate to determine if a test should be run. When no
        patterns are present, all tests should run.

        (BindingsTests.run_tests):
        Filter tests using the passed in patterns.

2017-01-12  Per Arne Vollan  <pvollan@apple.com>

        Followup fix after r210503.
        https://bugs.webkit.org/show_bug.cgi?id=166887

        Reviewed by Alex Christensen.

        After <http://trac.webkit.org/changeset/210503>, test results are written to a
        duplicated file handle on Windows. This patch fixes the remaining call sites.

        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::waitToDumpWatchdogTimerFired):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setSpellCheckerLoggingEnabled):

2017-01-11  Megan Gardner  <megan_gardner@apple.com>

        Add committer status for Megan
        https://bugs.webkit.org/show_bug.cgi?id=166954

        Reviewed by Tim Horton.

        Add committer status for Megan Gardner

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

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

        Unreviewed test fix after r210599.

        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST): Remove debugging code that was causing a timeout.

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

        Unreviewed build fix after r210599.

        Add missing files.

        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.html: Added.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm: Added.

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

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.html: Added.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm: Added.

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

        Unreviewed, rolling out r210571.

        This change broke the 32-bit macOS build and caused LayoutTest
        failures.

        Reverted changeset:

        "File scheme should not allow access of a resource on a
        different volume."
        https://bugs.webkit.org/show_bug.cgi?id=158552
        http://trac.webkit.org/changeset/210571

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

        [GTK] install-dependencies script misses gdb
        https://bugs.webkit.org/show_bug.cgi?id=166917

        Reviewed by Michael Catanzaro.

        gdb is needed for generating the crash logs.

        * gtk/install-dependencies:

2017-01-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] No way for applications to set notification permissions without waiting for permission request
        https://bugs.webkit.org/show_bug.cgi?id=163366

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification):
        (setInitialNotificationPermissionsAllowedCallback):
        (setInitialNotificationPermissionsDisallowedCallback):
        (testWebViewNotificationInitialPermissionAllowed):
        (testWebViewNotificationInitialPermissionDisallowed):
        (beforeAll):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::WebViewTest):
        (WebViewTest::initializeWebView):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2017-01-10  Tim Horton  <timothy_horton@apple.com>

        MobileMiniBrowser tests don't work by default
        https://bugs.webkit.org/show_bug.cgi?id=166910

        Reviewed by Alex Christensen.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme: Added.
        Add a shared scheme; the Makefile depends on the MobileMiniBrowserUITests scheme existing, at the very least.

2017-01-10  Brent Fulgham  <bfulgham@apple.com>

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.html: Added.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm: Added.

2017-01-10  Mark Lam  <mark.lam@apple.com>

        Reverting run-jsc-stress-tests' $buildType to use string values.
        https://bugs.webkit.org/show_bug.cgi?id=166912

        Rubber stamped by Filip Pizlo.

        This is so that we can test for it in the tests e.g.
        //@ if $buildType == "debug" then runDefault("--maxSingleAllocationSize=1048576") else skip end

        * Scripts/run-jsc-stress-tests:

2017-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        Temporarily add back the file removed in r210463 to unbreak internal bots.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch: Copied from Tools/Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch.

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

        svn-apply failed to apply a patch (deleting file with svn property)
        https://bugs.webkit.org/show_bug.cgi?id=165953

        Reviewed by Daniel Bates.

        * Scripts/VCSUtils.pm:
        (parseSvnPropertyValue): The beginning of a diff will cause an early exit in the case of no empty newlines.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl: Add tests without break between diffs for properties.

2017-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration.
        https://bugs.webkit.org/show_bug.cgi?id=166869

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

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

        [GTK] Stop honoring the environment variable USE_NATIVE_XDISPLAY
        https://bugs.webkit.org/show_bug.cgi?id=165232

        Unreviewed follow-up patch after r210539 and r210523.

        Instead of using that environment variable, the argument
        --display-server=xorg should be passed now.

        The GTK+ performance bot was the only bot using this, and is
        already passing --display-server=xorg after r210539.

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

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

        [GTK] Add a new release test bot for Wayland and pass --display-server=xorg to the GTK Perf bot.
        https://bugs.webkit.org/show_bug.cgi?id=166872

        Reviewed by Michael Catanzaro.

        Add the new wayland release test bot as a test-only bot. It will download the built product from the release build-only bot.
        Define the required "--display-server=driver" in the bot additionalArguments config entry.
        Implement support for honoring additionalArguments on the RunGtkAPITests and RunAndUploadPerfTests steps.
        The step RunWebKitTests already has support for it.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.start):
        (RunAndUploadPerfTests.start):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2017-01-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210531.

        This change broke the 32-bit macOS build and caused LayoutTest
        failures.

        Reverted changeset:

        "File scheme should not allow access of a resource on a
        different volume."
        https://bugs.webkit.org/show_bug.cgi?id=158552
        http://trac.webkit.org/changeset/210531

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

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.html: Added.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm: Added.

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

        [GTK][Wayland] Allow running the layout tests under a native Wayland environment.
        https://bugs.webkit.org/show_bug.cgi?id=165232

        Reviewed by Michael Catanzaro.

        Add a new WaylandDriver to run the tests in the user current wayland session.

        Also merge all the configuration options for selecting the display server inside one
        switch --display-server=xvfb/xorg/wayland/weston (defaulting to xvfb).

        This switch is supported on the scripts: run-gtk-tests, run-perf-tests and run-webkit-tests.

        * Scripts/run-gtk-tests: Add missing logging.basicConfig() initialization for the error logger.
        (TestRunner._create_driver):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort._driver_class):
        (GtkPort._search_paths):
        * Scripts/webkitpy/port/waylanddriver.py: Added.
        (WaylandDriver):
        (WaylandDriver.check_driver):
        (WaylandDriver._setup_environ_for_test):
        (WaylandDriver._start):

2017-01-09  Andy Estes  <aestes@apple.com>

        [QuickLook] Add a layout test for webkit.org/b/135651
        https://bugs.webkit.org/show_bug.cgi?id=166855

        Reviewed by Andreas Kling.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]): Added output for
        errors with code WebKitErrorCannotShowURL.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame): Made the error output
        not specific to WebKit2 error codes.

2017-01-09  Antoine Quint  <graouts@apple.com>

        Support webkit-test-runner key-value pairs in http tests in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=166837

        Reviewed by Alex Christensen.

        We now correctly handle the --absolutePath argument in DumpRenderTree and use
        the provided value when trying to determine the path to the test file. Failing
        that, we use the computed URL or the raw path provided to cover all cases.
        
        This was tested in the context of https://bugs.webkit.org/show_bug.cgi?id=165668
        by applying this patch and seeing the number test failures dramatically reduced
        with WK1 due to the option to turn modern media controls off for older media controls
        tests.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTreeCommon.cpp:
        (parseInputLine):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):

2017-01-09  Milan Crha  <mcrha@redhat.com>

        prepare-ChangeLog: Correct help string for --style option
        https://bugs.webkit.org/show_bug.cgi?id=166725

        Reviewed by Alexey Proskuryakov.

        * Scripts/prepare-ChangeLog:
        (main):

2017-01-09  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=166839
        Add php7 support for macOS.
        Mirror the debian logic to look for a php7 module on disk, and return the appropriate apache config file.

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/base.py:
        (Port._is_darwin_php_version_7):
        (Port._debian_php_version):
        (Port):
        (Port._darwin_php_version):
        (Port._apache_config_file_name_for_platform):

2017-01-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Should support key and code properties on keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=166759

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef): add missing modifier keys which were being reported as 'l' and 'r' only
        on tests.

2017-01-06  Per Arne Vollan  <pvollan@apple.com>

        [Win] Some tests are flaky because certain DLLs are writing to stdout.
        https://bugs.webkit.org/show_bug.cgi?id=166760

        Reviewed by Darin Adler.

        Some tests are flaky because certain DLLs are writing to stdout, giving incorrect test results.
        We can work around that by duplicating and redirecting stdout.

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        (printPNG):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (logEventProc):
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::showDesktopNotification):
        (DRTDesktopNotificationPresenter::cancelDesktopNotification):
        (DRTDesktopNotificationPresenter::requestNotificationPermission):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFrameScrollPosition):
        (dumpHistoryItem):
        (dumpBackForwardList):
        (dump):
        (runTest):
        (main):
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::shouldBeginEditingInDOMRange):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        (EditingDelegate::shouldInsertText):
        (EditingDelegate::shouldDeleteDOMRange):
        (EditingDelegate::shouldChangeSelectedDOMRange):
        (EditingDelegate::shouldApplyStyle):
        (EditingDelegate::shouldChangeTypingStyle):
        (EditingDelegate::doPlatformCommand):
        (EditingDelegate::webViewDidBeginEditing):
        (EditingDelegate::webViewDidChange):
        (EditingDelegate::webViewDidEndEditing):
        (EditingDelegate::webViewDidChangeTypingStyle):
        (EditingDelegate::webViewDidChangeSelection):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didStartProvisionalLoadForFrame):
        (FrameLoadDelegate::didReceiveServerRedirectForProvisionalLoadForFrame):
        (FrameLoadDelegate::didChangeLocationWithinPageForFrame):
        (FrameLoadDelegate::didFailProvisionalLoadWithError):
        (FrameLoadDelegate::didCommitLoadForFrame):
        (FrameLoadDelegate::didReceiveTitle):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::didFailLoadWithError):
        (FrameLoadDelegate::willPerformClientRedirectToURL):
        (FrameLoadDelegate::didCancelClientRedirectForFrame):
        (FrameLoadDelegate::windowScriptObjectAvailable):
        (FrameLoadDelegate::didFinishDocumentLoadForFrame):
        (FrameLoadDelegate::didHandleOnloadEventsForFrame):
        (FrameLoadDelegate::didDisplayInsecureContent):
        (FrameLoadDelegate::didRunInsecureContent):
        (FrameLoadDelegate::webViewProgressFinishedNotification):
        * DumpRenderTree/win/HistoryDelegate.cpp:
        (HistoryDelegate::didNavigateWithNavigationData):
        (HistoryDelegate::didPerformClientRedirectFromURL):
        (HistoryDelegate::didPerformServerRedirectFromURL):
        (HistoryDelegate::updateHistoryTitle):
        (HistoryDelegate::populateVisitedLinksForWebView):
        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::decidePolicyForNavigationAction):
        (PolicyDelegate::unableToImplementPolicyWithError):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        (ResourceLoadDelegate::didReceiveResponse):
        (ResourceLoadDelegate::didFinishLoadingFromDataSource):
        (ResourceLoadDelegate::didFailLoadingWithError):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::addDisallowedURL):
        (TestRunner::originsWithApplicationCache):
        (TestRunner::setStorageDatabaseIdleInterval):
        (TestRunner::closeIdleLocalStorageDatabases):
        (TestRunner::copyDecodedHostName):
        (TestRunner::copyEncodedHostName):
        (TestRunner::numberOfPendingGeolocationPermissionRequests):
        (TestRunner::isGeolocationProviderActive):
        (TestRunner::pathToLocalResource):
        (TestRunner::setMockDeviceOrientation):
        (TestRunner::setMockGeolocationPosition):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setSpatialNavigationEnabled):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::isCommandEnabled):
        (TestRunner::authenticateSession):
        (TestRunner::addChromeInputField):
        (TestRunner::removeChromeInputField):
        (TestRunner::focusWebView):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::removeAllWebNotificationPermissions):
        (TestRunner::simulateWebNotificationClick):
        (TestRunner::imageCountInGeneralPasteboard):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (UIDelegate::webViewAddMessageToConsole):
        (UIDelegate::exceededDatabaseQuota):
        (UIDelegate::setStatusText):
        (UIDelegate::didPressMissingPluginButton):

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Add a setting to create editable MiniBrowser windows by default
        https://bugs.webkit.org/show_bug.cgi?id=166806

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate createBrowserWindowController:]):
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleCreateEditorByDefault:]):
        (-[SettingsController createEditorByDefault]):
        Add a setting and update the key equivalents accordingly.
        Also make sure to make the right kind of window on launch.

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * MiniBrowser/mac/BrowserWindowController.m:

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Make it possible to drop HTML files on the MiniBrowser icon
        https://bugs.webkit.org/show_bug.cgi?id=166802

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate application:openFile:]):
        * MiniBrowser/mac/Info.plist:
        If you're using an editable window, the usual trick of dropping on the
        window doesn't work anymore (it makes an <attachment> instead).

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        MiniBrowser window gets smaller each time it is instantiated
        https://bugs.webkit.org/show_bug.cgi?id=166807

        Reviewed by Andy Estes.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        * MiniBrowser/mac/BrowserWindow.xib:
        Turn on full-window content view support with IB, instead of waiting
        until after the views have been loaded. This seems to resolve the
        longstanding ever-shrinking-window problem.

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Add indent/outdent items to MiniBrowser's new format menu
        https://bugs.webkit.org/show_bug.cgi?id=166805

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/MainMenu.xib:

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Add a stock Format menu to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=166804

        Reviewed by Andy Estes.

        * MiniBrowser/mac/MainMenu.xib:
        Many of the features automatically work with editable web views.
        However, this seems to expose a bug where none of the font-related features
        (Cmd-B, for example) work until the first time the font panel is shown,
        per process, which will need to be investigated separately.

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Remove unused applicationWillTerminate methods from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=166803

        Reviewed by Andy Estes.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationWillTerminate:]): Deleted.
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController applicationTerminating]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController applicationTerminating]): Deleted.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController applicationTerminating]): Deleted.

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Add the ability to create empty contentEditable windows in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=166801

        Reviewed by Wenson Hsieh.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate createBrowserWindowController:]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate newEditorWindow:]):
        (-[BrowserAppDelegate openDocument:]):
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController loadHTMLString:]):
        (-[BrowserWindowController toggleEditable:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        (-[WK1BrowserWindowController loadHTMLString:]):
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController setEditable:]):
        (-[WK1BrowserWindowController updateTitle:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController setEditable:]):
        (-[WK2BrowserWindowController updateTitle:]):
        (-[WK2BrowserWindowController loadHTMLString:]):
        Merge more functionality from WebEditingTester.
        Add two menu items for creating empty editable WebKit1/2 windows.
        Add a menu item to the Edit menu to toggle editability on any window.

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Implement find-in-page in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=166799

        Reviewed by Andy Estes.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController find:]): Deleted.
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController toggleShrinkToFit:]):
        (-[WK1BrowserWindowController find:]): Deleted.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController performTextFinderAction:]):
        (-[WK2BrowserWindowController findBarView]):
        (-[WK2BrowserWindowController setFindBarView:]):
        (-[WK2BrowserWindowController isFindBarVisible]):
        (-[WK2BrowserWindowController setFindBarVisible:]):
        (-[WK2BrowserWindowController contentView]):
        (-[WK2BrowserWindowController findBarViewDidChangeHeight]):
        (-[WK2BrowserWindowController performFindPanelAction:]): Deleted.
        (-[WK2BrowserWindowController find:]): Deleted.
        Implement find-in-page using WKWebView's conformance to the NSTextFinderClient
        protocol. At first glance, it's pretty broken, but vaguely works.

2017-01-07  Tim Horton  <timothy_horton@apple.com>

        Share the implementation of MiniBrowser view hiding functionality
        https://bugs.webkit.org/show_bug.cgi?id=166800

        Reviewed by Andy Estes.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController showHideWebView:]):
        (-[BrowserWindowController removeReinsertWebView:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController showHideWebView:]): Deleted.
        (-[WK1BrowserWindowController removeReinsertWebView:]): Deleted.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController showHideWebView:]): Deleted.
        (-[WK2BrowserWindowController removeReinsertWebView:]): Deleted.
        Move the implementation of these two things to the shared superclass,
        since they don't depend on WebKit-specific things.
        Also, there was no reason to retain the (WK)WebView while it was unparented,
        as the BrowserWindowController maintains a reference the entire time.

2017-01-06  Andy Estes  <aestes@apple.com>

        [Cocoa] Consolidate duplicate copies of WebArchiveDumpSupport in DRT and WKTR into WebCoreTestSupport
        https://bugs.webkit.org/show_bug.cgi?id=166789

        Reviewed by Alex Christensen.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/PlatformMac.cmake:
        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp: Removed.
        * DumpRenderTree/cf/WebArchiveDumpSupport.h: Removed.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        Called WebCoreTestSupport::createXMLStringFromWebArchiveData() instead of
        createXMLStringFromWebArchiveData().
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        Added $(BUILT_PRODUCTS_DIR)/WebCoreTestSupport to HEADER_SEARCH_PATHS.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        Called WebCoreTestSupport::createXMLStringFromWebArchiveData() instead of
        createXMLStringFromWebArchiveData().
        * WebKitTestRunner/InjectedBundle/cocoa/WebArchiveDumpSupportCocoa.mm: Removed.
        * WebKitTestRunner/PlatformMac.cmake:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cf/WebArchiveDumpSupport.h: Removed.

2017-01-06  Tim Horton  <timothy_horton@apple.com>

        Minor cleanups to IndentOutdentCommand and related code
        https://bugs.webkit.org/show_bug.cgi?id=166791

        Reviewed by Simon Fraser.

        * WebEditingTester/EditingOperations.m:
        (editingOperations):
        Add the outdent operation to WebEditingTester.

2017-01-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Create a plan and a patch files for MotionMark and delete the Animometer's ones
        https://bugs.webkit.org/show_bug.cgi?id=166785

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/data/patches/MotionMark.patch: Renamed from Tools/Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch.
        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark.plan: Renamed from Tools/Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan.

2017-01-06  Antoine Quint  <graouts@apple.com>

        Support webkit-test-runner key-value pairs in http tests
        https://bugs.webkit.org/show_bug.cgi?id=149812

        Reviewed by Alex Christensen.

        We pass the absolute path for a test through to WKTR so that we can parse
        tests that are running as URLs for webkit-test-runner options.

        * DumpRenderTree/DumpRenderTreeCommon.cpp:
        (parseInputLine):

        Explicitly skip the --absolute-path option in DRT or else we'd crash.

        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input):

        Pass the absolute path to the file through the CLI.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::testOptionsForTest):
        (WTR::parseInputLine):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:

2017-01-06  Tim Horton  <timothy_horton@apple.com>

        Warning about unconnectable outlets when opening a MiniBrowser window
        https://bugs.webkit.org/show_bug.cgi?id=166756

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/BrowserWindow.xib:
        When launching MiniBrowser, it says:
        Failed to connect (Share) outlet from (WK1BrowserWindowController) to
            (MBToolbarItem): missing setter or instance variable
        Failed to connect (shareButton) outlet from (WK1BrowserWindowController) to
            (NSButtonCell): missing setter or instance variable.

        It looks like someone added the connection from the share button
        to the BrowserWindowController three times; only one of the connections
        is valid. Remove the other two.

2017-01-05  Keith Rollin  <krollin@apple.com>

        Add WebCore::URL::protocolHostAndPort
        https://bugs.webkit.org/show_bug.cgi?id=166426

        Reviewed by Alex Christensen.

        Add test for protocolHostAndPort.

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

2017-01-05  Per Arne Vollan  <pvollan@apple.com>

        [Win] Archive test result is failing.
        https://bugs.webkit.org/show_bug.cgi?id=166720

        Reviewed by Alex Christensen.

        Deleting the layout test result folder is sometimes failing
        on Windows. This is not a critical error.

        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):

2017-01-04  Tomas Popela  <tpopela@redhat.com>

        [GTK] Minibrowser: Add printing support
        https://bugs.webkit.org/show_bug.cgi?id=165298

        Open a print dialog when the Ctrl + P shortcut is pressed. If there is
        an error during the print, it's printed on the console.

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webKitPrintOperationFailedCallback):
        (printPage):
        (browser_window_init):

2017-01-04  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix crash clamping grid lines
        https://bugs.webkit.org/show_bug.cgi?id=166637

        Reviewed by Darin Adler.

        Creates new unit test to verify that the maximum tracks limit
        is used in GridPosition too.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/GridPosition.cpp: Added.
        (TestWebKitAPI::TEST):

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

        Move editing history scripts to WebCore PrivateHeaders
        https://bugs.webkit.org/show_bug.cgi?id=166709
        <rdar://problem/29876612>

        Reviewed by Dan Bernstein.

        Update references to editing script files in WebCore that were moved.

        * EditingHistory/EditingHistory.xcodeproj/project.pbxproj:

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

        Unreviewed, build fix after r210313 part 2
        https://bugs.webkit.org/show_bug.cgi?id=166676

        Add 'U' suffix.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

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

        Limit thread name appropriately
        https://bugs.webkit.org/show_bug.cgi?id=166676

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2017-01-04  Andy Estes  <aestes@apple.com>

        [Cocoa] Teach SharedBuffer to return an NSArray of data segments to avoid flattening
        https://bugs.webkit.org/show_bug.cgi?id=166696

        Reviewed by Tim Horton.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp: Moved class SharedBufferTest to SharedBufferTest.{cpp,h}.
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.cpp: Moved class SharedBufferTest from SharedBuffer.cpp.
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.h: Ditto.
        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm: Added.
        (TestWebKitAPI::expectDataArraysEqual): Added a helper to assert that two NSArrays of NSData are equal.
        (TestWebKitAPI::TEST_F): Added a test for createNSDataArray.

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

        Web Inspector: teach the protocol generator about platform-specific types, events, and commands
        https://bugs.webkit.org/show_bug.cgi?id=166003
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        Teach run-inspector-generator-tests to generate test output using the platform name
        derived from the directory that the test is in. For example, tests in the /generic/
        subdirectory will pass `--platform generic` to generate-inspector-protocol-bindings.py.

        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.generate_from_json):
        (InspectorGeneratorTests.run_tests):
        (InspectorGeneratorTests.main):

2017-01-04  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed cmake buildfix after r210266.

        * DumpRenderTree/PlatformMac.cmake:

2017-01-04  Tim Horton  <timothy_horton@apple.com>

        Provide a setting for clients to always prefer low-power WebGL
        https://bugs.webkit.org/show_bug.cgi?id=166675
        <rdar://problem/29834093>

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/Info.plist:
        Have MiniBrowser claim to be a modern app that supports
        automatic graphics switching. WebKit needs to support automatic
        graphics switching, so our test app might as well. Without this
        Info.plist parameter, this change has no effect, and bringing up
        a WebGL context still brings up the discrete GPU (also true of the
        existing web-exposed preferLowPowerToHighPerformance API).

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

        WorkQueueGeneric's platformInvalidate() can deadlock when called on the RunLoop's thread
        https://bugs.webkit.org/show_bug.cgi?id=166645

        Reviewed by Carlos Garcia Campos.

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

2017-01-03  Andy Estes  <aestes@apple.com>

        Place all the Cocoa WebCore API tests in the same directory
        https://bugs.webkit.org/show_bug.cgi?id=166673

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/SerializedCryptoKeyWrap.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/SerializedCryptoKeyWrap.mm.
        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm: Renamed from Tools/TestWebKitAPI/Tests/Cocoa/URLExtras.mm.
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm.

2017-01-03  Tim Horton  <timothy_horton@apple.com>

        NSSpellChecker's recordResponse isn't called for unseen automatic corrections
        https://bugs.webkit.org/show_bug.cgi?id=166450
        <rdar://problem/29447824>

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (setSpellCheckerLoggingEnabledCallback):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (setSpellCheckerLoggingEnabledCallback):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/DumpRenderTreeSpellChecker.h: Added.
        * DumpRenderTree/mac/DumpRenderTreeSpellChecker.mm: Added.
        (stringForCorrectionResponse):
        (drt_NSSpellChecker_recordResponseToCorrection):
        (swizzleNSSpellCheckerMethodsIfNeeded):
        (setSpellCheckerLoggingEnabled):
        Add a new testRunner method, setSpellCheckerLoggingEnabled, which, when
        set to true, logs to stdout (which ends up in the test result) whenever
        NSSpellChecker recordResponse:toCorrection:forWord:language:inSpellDocumentWithTag:
        is called, and then calls the original method. It is reset to false between tests.

2017-01-03  Sam Weinig  <sam@webkit.org>

        Make WTF::Expected support Ref template parameters
        https://bugs.webkit.org/show_bug.cgi?id=166662

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::TEST):
        Add tests for using Ref with Expected.

2017-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Expose WebKitSecurityOrigin API
        https://bugs.webkit.org/show_bug.cgi?id=166632

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSecurityOrigin.cpp: Added.
        (testSecurityOriginBasicConstructor):
        (testSecurityOriginURIConstructor):
        (testSecurityOriginDefaultPort):
        (testSecurityOriginFileURI):
        (testSecurityOriginDataURI):
        (beforeAll):
        (afterAll):

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

        [GTK] HTTP auth layout tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=158919

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Update libsoup to version 2.57.1.
        * gtk/jhbuildrc: Stop passing --enable-introspection unconditionally to all modules. We don't really need
        introspection for the dependencies in the internal build, and it makes newer libsoup build fail because of
        missing valac in the bots.

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

        REGRESSION(r173753): [GTK] Source/WebKit is distributed in tarballs
        https://bugs.webkit.org/show_bug.cgi?id=165797

        Reviewed by Michael Catanzaro.

        Move directory ruleset after all exclude rules of Source rulset.

        * gtk/manifest.txt.in:

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

        Leverage Substring to create new AtomicStringImpl for StaticStringImpl and SymbolImpl
        https://bugs.webkit.org/show_bug.cgi?id=166636

        Reviewed by Darin Adler.

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

2017-01-02  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] WebCore/CSSParser unit test is not being built
        https://bugs.webkit.org/show_bug.cgi?id=166492

        Reviewed by Michael Catanzaro.

        This test was introduced in r175930, but we were not building
        it on GTK+ port since r176015.
        This patch marks the test to be built again on GTK+.
        JFTR, the test is passing right now.

        * TestWebKitAPI/PlatformGTK.cmake: Add CSSParser.cpp test file and use
        ADD_WHOLE_ARCHIVE_TO_LIBRARIES to avoid linking errors.

2017-01-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Expose block quote level to iOS API
        https://bugs.webkit.org/show_bug.cgi?id=166629
        <rdar://problem/29834793>

        Reviewed by Darin Adler.

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

2016-12-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        SecurityOrigin::create triplet constructor does not canonicalize port
        https://bugs.webkit.org/show_bug.cgi?id=166624

        Reviewed by Daniel Bates.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp: Added.
        (TestWebKitAPI::SecurityOriginTest::SetUp):
        (TestWebKitAPI::TEST_F):

2016-12-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve user agent construction
        https://bugs.webkit.org/show_bug.cgi?id=142074

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasFirefoxBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasLinuxPlatformQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk):
        (TestWebKitAPI::TEST):

2016-12-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve user agent construction
        https://bugs.webkit.org/show_bug.cgi?id=142074

        Reviewed by Carlos Garcia Campos.

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

2016-12-23  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r209299): Selection is broken when you zoom in webpage using trackpad
        https://bugs.webkit.org/show_bug.cgi?id=166472
        rdar://problem/29675551

        Reviewed by Tim Horton.

        These changes are necessary to allow the mouse to leave the WTR window while
        drag-scrolling, to test autoscroll. Previously, we were never calling -mouseDragged
        (which DRT does); we'd always go through mouseMoved, which hits an early return
        in WebViewImpl::mouseMoved() when the point is outside the view.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):

2016-12-23  Andy Estes  <aestes@apple.com>

        [iOS] Fix some crashing webarchive tests
        https://bugs.webkit.org/show_bug.cgi?id=166470

        Reviewed by Andreas Kling.

        Tests that use TestRunner.dumpDOMAsWebArchive() crashed on iOS due to a stub implementation
        of WebArchiveDumpSupport in WebKitTestRunner. The Mac implementation works fine on iOS too,
        so this change uses that on both platforms.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Removed
        WebArchiveDumpSupportMac.mm from EXCLUDED_SOURCE_FILE_NAMES.
        * WebKitTestRunner/InjectedBundle/cocoa/WebArchiveDumpSupportCocoa.mm: Renamed from
        Tools/WebKitTestRunner/mac/WebArchiveDumpSupportMac.mm.
        * WebKitTestRunner/PlatformMac.cmake:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/WebArchiveDumpSupportIOS.mm: Removed.

2016-12-22  Saam Barati  <sbarati@apple.com>

        WebAssembly: Silence the output of the spec-tests
        https://bugs.webkit.org/show_bug.cgi?id=166417

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

2016-12-22  Zhuo Li  <zachli@apple.com>

        [Cocoa] SPI for setloadsImagesAutomatically.
        https://bugs.webkit.org/show_bug.cgi?id=166401.

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:
        (TEST): Test the _setLoadsImagesAutomatically SPI. By default,
        _loadsImagesAutomatically returns YES.

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

        fast/events/ios/viewport-shrink-to-fit-allows-double-tap.html is flaky/order dependent
        https://bugs.webkit.org/show_bug.cgi?id=161328
        <rdar://problem/28475977>

        Reviewed by Darin Adler.

        Running a test that scales the viewport and listens to a didEndZooming callback (such as
        viewport-shrink-to-fit-allows-double-tap.html) immediately after a test that may begin to trigger viewport
        scaling as the test completes (such as viewport-device-width-at-initial-scale-fast-clicks.html) may result in
        the didEndZooming callback of the latter test being fired early due to the previous test triggering a zoom
        animation. Ideally, -[WKScrollView _stopScrollingAndZoomingAnimations], which is called when committing the page
        load, should prevent this from happening, but from reading documentation and code inspection, this is not
        intended to fire any associated delegate methods or notifications of the UIScrollView, instead deferring them
        for later. Instead, what we need in this case is to clear out any started but not yet completed animations after
        we finish running a test and before we load the next test.

        One way to do this is to remove all animations from the WKScrollView's layer, and the layers of its children,
        recursively. Doing so causes scrollViewDidEndZooming:withView:atScale: to fire at the end of the runloop if the
        previous test started zooming and then finished before zooming completed. Since this happens before the next
        test has a chance to run UI-side scripts, we won't end up firing this callback prematurely during the next test.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2016-12-22  Jer Noble  <jer.noble@apple.com>

        Muted media element playback should not interrupt other audio playback
        https://bugs.webkit.org/show_bug.cgi?id=166347

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ios/video-with-muted-audio.html: Added.

2016-12-22  Alejandro G. Castro  <alex@igalia.com>

        [WebRTC] Add support for runtime PeeConnection setting, required after r209757
        https://bugs.webkit.org/show_bug.cgi?id=166346

        Reviewed by Carlos Garcia Campos.

        Enable WebRTC by default to simplify testing.

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

2016-12-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: API test failure: WKWebView.LocalStorageClear
        https://bugs.webkit.org/show_bug.cgi?id=166032
        <rdar://problem/29758423>

        Reviewed by Simon Fraser.

        Add an @autoreleasepool around the code that allocates then clears the WKWebView, 
        to ensure that the view is destroyed before the callback fires.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (TEST):

2016-12-21  Saam Barati  <sbarati@apple.com>

        WebAssembly: Import spec tests
        https://bugs.webkit.org/show_bug.cgi?id=166395

        Rubber stamped by Keith Miller.

        * Scripts/run-jsc-stress-tests:

2016-12-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: API test failure: _WKDownload.OriginatingWebView
        https://bugs.webkit.org/show_bug.cgi?id=166033
        <rdar://problem/29758428>

        Reviewed by Simon Fraser.

        Add an @autoreleasepool around the code that allocates the WKWebView, 
        so that it can be destroyed by removing the last reference in _downloadDidStart.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (TEST):

2016-12-21  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Add comment to TestRunner::setCanOpenWindows()
        https://bugs.webkit.org/show_bug.cgi?id=166356

        Add comment in TestRunner::setCanOpenWindows() to elaborate further on its purpose
        as a means to allow a test to explicit allow an embedding client to open a new windows
        such that the default behavior is for the embedding client to forbid such an action.
        The test plugins/get-url-with-blank-target.html assumes this default behavior though
        it is currently skipped on WebKit2 because questions were raised in the patch for
        <https://bugs.webkit.org/show_bug.cgi?id=43389> about its correctness and usefulness.
        We will need to implement TestRunner::setCanOpenWindows() should we decide to unskip
        this test.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanOpenWindows):

2016-12-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION: API test failure: WKWebView.EvaluateJavaScriptBlockCrash
        https://bugs.webkit.org/show_bug.cgi?id=166031

        Reviewed by Tim Horton.
        
        Add an @autoreleasepool around the code that allocates then clears the WKWebView, 
        to ensure that the view is destroyed before the callback fires.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewEvaluateJavaScript.mm:

2016-12-20  Megan Gardner  <megan_gardner@apple.com>

        Throw Exception when test doesn't clean up HID Events properly
        https://bugs.webkit.org/show_bug.cgi?id=166271

        Reviewed by Simon Fraser.

        Add in a check when UIScriptController is deleted to make sure that the HID event
        callback dictionary is empty. If it is not, and a HID event is hit, this will cause
        the program to crash without any good information. Crashes are race-y, and will still
        happen with malformed test, but the information will be much more helpful. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::checkForClean):
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::~UIScriptContext):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::checkForClean):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator checkHIDCallbacksClear]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::checkForClean):

2016-12-20  Andy Estes  <aestes@apple.com>

        [Cocoa] REGRESSION (r209558): Calling decisionHandler multiple times in webView:decidePolicyForNavigationAction:decisionHandler: leads to a crash
        https://bugs.webkit.org/show_bug.cgi?id=165992

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/DuplicateCompletionHandlerCalls.mm: Added.
        (expectException):
        (-[DuplicateCompletionHandlerCallsDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DuplicateCompletionHandlerCallsDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[DuplicateCompletionHandlerCallsDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[DuplicateCompletionHandlerCallsDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[DuplicateCompletionHandlerCallsDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        (-[DuplicateCompletionHandlerCallsDelegate _webView:decideDatabaseQuotaForSecurityOrigin:currentQuota:currentOriginUsage:currentDatabaseUsage:expectedUsage:decisionHandler:]):
        (-[DuplicateCompletionHandlerCallsDelegate _webView:willSubmitFormValues:userObject:submissionHandler:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/duplicate-completion-handler-calls.html: Added.

2016-12-20  Dean Jackson  <dino@apple.com>

        Remove INDIE_UI
        https://bugs.webkit.org/show_bug.cgi?id=165881
        <rdar://problem/29672532>

        Reviewed by Simon Fraser.

        The Indie UI work has been discontinued.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [ES6] Enable ES6 Modules
        https://bugs.webkit.org/show_bug.cgi?id=165849

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setES6ModulesEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-12-19  Ryan Haddad  <ryanhaddad@apple.com>

        Repurpose bots and clean up dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=166045

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.mac-os-x-yosemite img.logo): Deleted.

2016-12-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] TestWebKitAPIBase links to itself
        https://bugs.webkit.org/show_bug.cgi?id=165985

        Reviewed by Alex Christensen.

        Fix CMake warning about a target linking to itself, which makes no sense.

        * TestWebKitAPI/CMakeLists.txt:

2016-12-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] GtkDoc build should be quieter
        https://bugs.webkit.org/show_bug.cgi?id=165994

        Reviewed by Carlos Garcia Campos.

        Make it not print by default.

        * gtk/generate-gtkdoc:
        (get_generator_for_config):
        (generate_doc):
        * gtk/gtkdoc.py:
        (GTKDoc._run_command):
        (GTKDoc._copy_doc_files_to_output_dir):

2016-12-18  Simon Fraser  <simon.fraser@apple.com>

        Expose a way for MiniBrowser to simulate header and footer banners
        https://bugs.webkit.org/show_bug.cgi?id=166005

        Reviewed by Wenson Hsieh.
        
        Add a MiniBrowser menu item and setting to toggle adding space for header and footer
        banners. This only works in WebKit2.
        
        We need to reset these on each navigation, since newly created FrameViews
        don't re-fetch the header and footer height stored on Page.
        
        Also fix the signature of webView:didFinishNavigation: to follow API changes,
        as well as fixing webViewWebContentProcessDidTerminate:

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleReserveSpaceForBanners:]):
        (-[SettingsController isSpaceReservedForBanners]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):
        (-[WK2BrowserWindowController webView:didFinishNavigation:]):
        (-[WK2BrowserWindowController webViewWebContentProcessDidTerminate:]):
        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]): Deleted.
        (-[WK2BrowserWindowController _webViewWebProcessDidCrash:]): Deleted.

2016-12-17  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS test results after r209967.
        
        Subtracting out the status bar height was erroneously happening for all tests,
        not just for flexible viewport tests.
        
        Fix by plumbing WebViewSizingMode through resizeTo() and setWindowFrame().

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::setWindowFrame):

2016-12-17  Joonghun Park  <jh718.park@samsung.com>

        [EFL] bump EFL version to 1.18.4
        https://bugs.webkit.org/show_bug.cgi?id=166004

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Use efl-1.18.4 instead of 1.18.1.

2016-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Visual viewports: bottom fixed elements disappear behind the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=165983
        <rdar://problem/29409852>

        Reviewed by Simon Fraser.

        Add support for UIScriptController.inputViewBounds, which UI-side scripts may use to fetch the bounding rect of
        the keyboard when it is up.

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

        Previously, we accounted for the status bar height by translating the entire web view down by the height of the
        status bar. However, we did not shrink the height of the web view itself, which means that for tests which
        involve scrolling past the end of the document, the bottom strip of the web view is out of bounds of the window.

        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::inputViewBounds):

2016-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Deleting a character converted from pinyin after an image causes a Safari crash
        https://bugs.webkit.org/show_bug.cgi?id=165839
        <rdar://problem/27951933>

        Reviewed by Wenson Hsieh.

        Add a WebKit API test to call attributedSubstringForProposedRange on a WKWebView
        while the proposed range contains an image. This should not cause a WebProcess to crash
        or send an invalid message to the UIProcess.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/chinese-character-with-image.html: Added.
        * TestWebKitAPI/Tests/WebKit2/mac/AttributedSubstringForProposedRangeWithImage.mm: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::processDidCrash):
        (TestWebKitAPI::invalidMessageFunction):
        (TestWebKitAPI::WebKit2.AttributedSubstringForProposedRangeWithImage):

2016-12-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Visual viewports: carets and selection UI are incorrectly positioned when editing fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=165767
        <rdar://problem/29602382>

        Reviewed by Simon Fraser.

        Introduces two new UIScriptController methods: doAfterWebPageIsInStableState and textSelectionCaretRect. See
        WebKit2 ChangeLog for more details.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAfterNextStablePresentationUpdate):
        (WTR::UIScriptController::textSelectionCaretRect):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAfterNextStablePresentationUpdate):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::doAfterNextStablePresentationUpdate):
        (WTR::UIScriptController::textSelectionCaretRect):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _setStableStateOverride:]):

        Force the WKWebView to update its visible content rects when changing the stable state override.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::toNSDictionary):
        (WTR::UIScriptController::doAfterNextStablePresentationUpdate):
        (WTR::UIScriptController::selectionRangeViewRects):
        (WTR::UIScriptController::textSelectionCaretRect):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAfterNextStablePresentationUpdate):

2016-12-15  Brent Fulgham  <bfulgham@apple.com>

        Arguments called in wrong order
        https://bugs.webkit.org/show_bug.cgi?id=165923

        Reviewed by Simon Fraser.

        The 'audioDeviceUIDs' array is being passed to the argument that expects video devices,
        and the 'videoDeviceUIDs' array is being passed to the audo device argument. Fix this.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack): The
        order of arguments to WKUserMediaPermissionRequestAllow are flipped.

2016-12-16  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Disable non-srcdir builds for failing libraries
        https://bugs.webkit.org/show_bug.cgi?id=165896

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Set non srcdir builds to no

2016-12-15  Daniel Bates  <dabates@apple.com>

        check-style should not complain about code in icu directories
        https://bugs.webkit.org/show_bug.cgi?id=53929

        Reviewed by Darin Adler.

        Skip style checking of imported ICU headers to avoid a deluge of style issues
        as they do not conform to the WebKit Code Style guideline. We want to preserve
        the formatting of these headers so as to make it straightforward to merge
        changes to them, if necessary.

        * Scripts/webkitpy/style/checker.py:

2016-12-15  Alexey Proskuryakov  <ap@apple.com>

        Move JSC testers from Yosemite to Sierra
        https://bugs.webkit.org/show_bug.cgi?id=165925

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2016-12-15  Megan Gardner  <megan_gardner@apple.com>

        Add coordinate space to event streams and streamline tests
        https://bugs.webkit.org/show_bug.cgi?id=165119

        Reviewed by Simon Fraser.

        Update event streams to allow for both content and global coordinate space.
        Update example script to more accurately show all the available options.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::convertCoordinates):
        (WTR::UIScriptController::sendEventStream):

2016-12-15  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Ensure gst* docs are not built with update-webkitgtk-libs
        https://bugs.webkit.org/show_bug.cgi?id=165855

        Reviewed by Philippe Normand.

        GStreamer's autogen.sh enables gtk-doc always so we end up building
        docs even if we disable them. Use the configure script instead, since
        we build from packages and these include it already.

        * gtk/jhbuild.modules: Use shipped configure instead of autogen.sh for
        upstream gstreamer packages.

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

        REGRESSION (r208902) Null pointer dereference in wkIsPublicSuffix
        https://bugs.webkit.org/show_bug.cgi?id=165885
        <rdar://problem/29476917>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::utf16String): Deleted.
        * TestWebKitAPI/Tests/mac/PublicSuffix.mm:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/WTFStringUtilities.h:
        (utf16String):
        Moved from URLParser to share with other tests.

2016-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: An element with tabindex is not focusable unless there is no mouse event handler
        https://bugs.webkit.org/show_bug.cgi?id=165843

        Reviewed by Antti Koivisto.

        Add testRunner.isWebKit2 which is always true in WebKitTestRunner.
        Without this, it's really hard to reliably differentiate DumpRenderTree and WebKitTestRunner,
        and DumpRenderTree's runUIScript would hit an assertion :(

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::isWebKit2):

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

        IndexedDB 2.0: Massively speedup IDBIndex.get().
        https://bugs.webkit.org/show_bug.cgi?id=165802

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBIndexUpgradeToV2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBIndexUpgradeToV2.mm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexUpgrade.blob: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexUpgrade.sqlite3: Added.

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

        [GTK][EFL] Update the JHBuild version.
        https://bugs.webkit.org/show_bug.cgi?id=165838

        Reviewed by Michael Catanzaro.

        * jhbuild/jhbuild-wrapper: This new version fixes a bug with the
        usage of the JHBUILD_MIRROR feature with git repositories.

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

        [GTK] Yasm is needed for building the JHBuild after r208940
        https://bugs.webkit.org/show_bug.cgi?id=165837

        Reviewed by Alejandro G. Castro.

        * gtk/install-dependencies: Yasm is needed for building libvpx.

2016-12-14  Youenn Fablet  <youenn@apple.com>

        Test infrastructure should allow to filter out text output before doing a comparison with the baseline
        https://bugs.webkit.org/show_bug.cgi?id=161310

        Reviewed by Ryosuke Niwa.

        Adding --dump-jsconsolelog-in-stderr test option for DRT and WTR.
        When set, WTR and DRT output JS console log in the stderr and not the test output.
        This allows removing potentially flaky information while still being able to read it for investigation.

        Updated webkitpy infrastructure to use this test option in case of DumpJSConsoleLogInStdErr modifier.

        Changes are covered by updating a fetch test to output console log and set its option to --dump-jsconsolelog-in-stderr in TestExpectations.
        This test should have this option when fetch API will start logging resource loader errors.

        * DumpRenderTree/DumpRenderTree.h:
        (TestCommand::TestCommand): Deleted.
        * DumpRenderTree/DumpRenderTreeCommon.cpp:
        (parseInputLine):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setDumpJSConsoleLogInStdErr):
        (TestRunner::dumpJSConsoleLogInStdErr):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._tokenize_line):
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::dumpToStdErr):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::dumpJSConsoleLogInStdErr):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        * WebKitTestRunner/TestController.cpp:
        (WTR::parseInputLine):
        (WTR::TestController::runTest):
        (WTR::TestCommand::TestCommand): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::setDumpJSConsoleLogInStdErr):


2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>

        REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
        https://bugs.webkit.org/show_bug.cgi?id=164022

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitperl/FeatureList.pm:
          Re-enable MEDIA_SOURCE for the GTK+ port.

2016-12-13  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * DumpRenderTree/PlatformMac.cmake:
        Define NS_RETURNS_RETAINED as nothing for now.

2016-12-13  Jer Noble  <jer.noble@apple.com>

        Fullscreen in WebKit2 does not restore topContentInset upon exiting; leaves top of page not visible
        https://bugs.webkit.org/show_bug.cgi?id=165697

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:
        (TestWebKitAPI::TEST):

2016-12-13  Andy Estes  <aestes@apple.com>

        [Cocoa] Implement -shouldInsertText: on WKWebProcessPlugInEditingDelegate
        https://bugs.webkit.org/show_bug.cgi?id=165785
        <rdar://problem/26929398>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm:
        (-[BundleEditingDelegateRemoteObject shouldInsertText:replacingRange:givenAction:]): Added
        expectations for the text, range, and action.
        (TEST): Set the "EditingDelegateShouldInsertText" bundle parameter to NO so that the plug-in
        will return NO in -_webProcessPlugInBrowserContextController:willInsertText:. Added a
        plain-text string to the pasteboard, executed a paste action, and verified that the selected
        text in the web view did not change.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]): Set
        _editingDelegateShouldInsertText according to the "EditingDelegateShouldInsertText" bundle
        parameter.
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:shouldInsertText:replacingRange:givenAction:]):
        Added. Called -shouldInsertText:replacingRange:givenAction: on the remote object proxy
        and returned the value of _editingDelegateShouldInsertText.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegateProtocol.h: Declared
        -shouldInsertText:replacingRange:givenAction:.

2016-12-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209544.

        Looks like r209489 did not cause the performance regression
        after all

        Reverted changeset:

        "Unreviewed, rolling out r209489."
        https://bugs.webkit.org/show_bug.cgi?id=165550
        http://trac.webkit.org/changeset/209544

2016-12-12  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove use of Dictionary in ApplePaySession
        https://bugs.webkit.org/show_bug.cgi?id=165787

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):
        Enable ApplePay for the tests (where supported).

2016-12-13  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKit2/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST): Enable MediaStream, create web view from the page group upon which
        the preferences have been set.

2016-12-08  Antti Koivisto  <antti@apple.com>

        Enable network cache speculative revalidation in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=165616

        Reviewed by Darin Adler.

        Match Safari. Also add a menu item to disable it.

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

2016-12-12  Alexey Proskuryakov  <ap@apple.com>

        ChangeLogs become readonly after resolving a conflict
        https://bugs.webkit.org/show_bug.cgi?id=165440
        rdar://problem/29491002

        Reviewed by Darin Adler.

        * Scripts/resolve-ChangeLogs: (resolveChangeLog): Set correct permissions when
        moving the file.

2016-12-12  Filip Pizlo  <fpizlo@apple.com>

        Re-enable collectContinuously since it doesn't crash anymore

        Rubber stamped by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed attempt to fix EFL and Mac/cmake builds after r209665.
        https://bugs.webkit.org/show_bug.cgi?id=165686

        * DumpRenderTree/CMakeLists.txt: WebKit2 should precede other target
        so that right config.h comes first in include path.

2016-12-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure content extensions initialize AtomicString
        https://bugs.webkit.org/show_bug.cgi?id=165737

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::makeBackend):

2016-12-08  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Remove the old CSS Parser
        https://bugs.webkit.org/show_bug.cgi?id=165645

        Reviewed by Daniel Bates.

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

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

        [cmake] Include WTF, JSC, and WebCore headers automatically to targers using them
        https://bugs.webkit.org/show_bug.cgi?id=165686

        Reviewed by Michael Catanzaro.

        This change reduces duplication of include path lists between modules,
        and reduces future need for fixes like r209605 (broken build because of
        WebCore header suddenly becoming used in WebKit2).

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformMac.cmake:
        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/mac/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformMac.cmake:
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2016-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r209630.

        * Scripts/build-jsc: Remove building the non-existing testWASM.

2016-12-09  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Dean Jackson.

        Based on a patch by Dr Alex Gouaillard <agouaillard@gmail.com>

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Enable MediaStream and PeerConnection.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Ditto.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMediaStreamEnabled): New.
        (WTR::TestRunner::setPeerConnectionEnabled): New.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-12-09  Brady Eidson  <beidson@apple.com> 
 
        Re-landing:
        Add _WKIconLoadingDelegate SPI. 
        https://bugs.webkit.org/show_bug.cgi?id=164894 
 
        Reviewed by Alex Christensen. 
        
        Add MiniBrowser support for this new SPI, configurable with a setting. 
 
        * MiniBrowser/mac/SettingsController.h: 
        * MiniBrowser/mac/SettingsController.m: 
        (-[SettingsController _populateMenu]): 
        (-[SettingsController validateMenuItem:]): 
        (-[SettingsController loadsAllSiteIcons]): 
        (-[SettingsController toggleLoadsAllSiteIcons:]): 
        * MiniBrowser/mac/WK2BrowserWindowController.m: 
        (-[WK2BrowserWindowController awakeFromNib]): 
        (-[WK2BrowserWindowController webView:shouldLoadIconWithParameters:completionHandler:]): 

2016-12-09  Ryan Haddad  <ryanhaddad@apple.com>

        Fix the 32-bit build.

        Unreviewed build fix.

        * MiniBrowser/mac/SettingsController.h:

2016-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Fedora also needs a PHP7 config file alternative
        https://bugs.webkit.org/show_bug.cgi?id=165606

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/base.py:
        (Port._is_fedora_php_version_7): check for the php7 library.
        (Port._fedora_php_version): get the appropriate filename for Fedora.
        (Port._apache_config_file_name_for_platform):

2016-12-09  Ryan Haddad  <ryanhaddad@apple.com>

        Complete the revert of r208865.
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Unreviewed build fix.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController loadsAllSiteIcons]): Deleted.
        (-[SettingsController toggleLoadsAllSiteIcons:]): Deleted.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController webView:shouldLoadIconWithParameters:completionHandler:]): Deleted.

2016-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Force GDK backend to x11 when running with XvfbDriver
        https://bugs.webkit.org/show_bug.cgi?id=165612

        Reviewed by Michael Catanzaro.

        When the developer is running a Wayland session, GDK may get confused
        and try to use its Wayland backend (which is higher priority) instead.
        This ensures it will use the appropriate backend when running under
        Xvfb.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): when running with XvfbDriver,
        force GDK_BACKEND to x11.

2016-12-08  Keith Miller  <keith_miller@apple.com>

        Add 64-bit signed LEB decode method
        https://bugs.webkit.org/show_bug.cgi?id=165630

        Reviewed by Ryosuke Niwa.

        Add tests for LEB int64 and uint64 decode since I guess
        I forgot to add tests before.

        * TestWebKitAPI/Tests/WTF/LEBDecoder.cpp:
        (TestWebKitAPI::testUInt32LEBDecode):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testUInt64LEBDecode):
        (TestWebKitAPI::testInt32LEBDecode):
        (TestWebKitAPI::testInt64LEBDecode):
        (TestWebKitAPI::testUnsignedLEBDecode): Deleted.

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Make it easy to enable --force-collectContinuously
        https://bugs.webkit.org/show_bug.cgi?id=165638

        Reviewed by Keith Miller.

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

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Disable the collectContinuously mode until I investigate failures.

        Rubber stamped by Keith Miller.
        
        I'm seeing collectContinuously crashes on some platforms. Disabling that testing mode
        while I investigate.

        * Scripts/run-jsc-stress-tests:

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (URL parser): Relative URLs aren’t resolved correctly when the base URL is an applewebdata: URL
        https://bugs.webkit.org/show_bug.cgi?id=165621

        Reviewed by Dan Bernstein.

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

2016-12-06  Filip Pizlo  <fpizlo@apple.com>

        Concurrent GC should be stable enough to land enabled
        https://bugs.webkit.org/show_bug.cgi?id=164990

        Reviewed by Geoffrey Garen.
        
        Add a new mode that runs GC continuously. Also made eager modes run GC continuously.
        
        It's clear that this works just fine in release, but I'm still trying to figure out if it's
        safe for debug. It might be too slow for debug.

        * Scripts/run-jsc-stress-tests:

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI for sending WebsiteSettings to WebProcess during navigation
        https://bugs.webkit.org/show_bug.cgi?id=165517
        <rdar://29341068>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm: Added.
        (-[WebsitePoliciesDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

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

        Unreviewed, rolling out r209489.

        Likely caused large regressions on JetStream, Sunspider and
        Speedometer

        Reverted changeset:

        "Add system trace points for JavaScript VM entry/exit"
        https://bugs.webkit.org/show_bug.cgi?id=165550
        http://trac.webkit.org/changeset/209489

2016-12-08  Keith Miller  <keith_miller@apple.com>

        Move LEB tests to API tests
        https://bugs.webkit.org/show_bug.cgi?id=165586

        Reviewed by Saam Barati.

        Move the tests from testWasm.cpp and make them functions
        rather than macros.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/LEBDecoder.cpp: Added.
        (TestWebKitAPI::testUnsignedLEBDecode):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testInt32LEBDecode):

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

        Support running the layout tests offline
        https://bugs.webkit.org/show_bug.cgi?id=165534

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download_to_stream):
        getcode() returns None for file URLs so handle this.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._install_modules):
        Deal with local path in the json file and resolve them into file URLs
        before using AutoInstall.

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * DumpRenderTree/PlatformMac.cmake:
        Remove CheckedMalloc.cpp after r209516.

2016-12-07  Mark Lam  <mark.lam@apple.com>

        DumpRenderTree should stop using CheckedMalloc.
        https://bugs.webkit.org/show_bug.cgi?id=165563
        <rdar://problem/28945820>

        Reviewed by Geoffrey Garen.

        1. WebKitTestRunner does not have equivalent behavior to that which is implemented
           in CheckedMalloc.
        2. bmalloc does not honor the settings of CheckedMalloc.

        The only time CheckedMalloc comes into play is when DRT uses gmalloc or system
        malloc.  As a result, DRT exhibits different behavior from the normal way we run
        our tests.  We should obsolete CheckedMalloc and make DRT behave consistently
        with WKTR.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/CheckedMalloc.cpp: Removed.
        * DumpRenderTree/mac/CheckedMalloc.h: Removed.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment):

2016-12-07  Dean Jackson  <dino@apple.com>

        Remove runtime toggle for pointer-lock
        https://bugs.webkit.org/show_bug.cgi?id=165577
        <rdar://problems/29566996>

        Reviewed by Jon Lee.

        Remove any runtime calls to check if pointer-lock is enabled. It's
        either compiled in or out.

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

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

        [MediaStream][Mac] Revoke sandbox extensions when capture ends
        https://bugs.webkit.org/show_bug.cgi?id=165476

        Reviewed by Brady Eidson.
        
        Add a test which loads a page that calls navigator.mediaDevices.enumerateDevices, kills the
        page, and loads the same page again to ensure that the WK2 UserMediaPermissionRequestManagerProxy
        is reset and recreated when a web page exits and is reloaded.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/EnumerateMediaDevices.cpp: Added.
        (TestWebKitAPI::checkUserMediaPermissionCallback):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/enumerateMediaDevices.html: Added.

2016-12-07  Jeremy Jones  <jeremyj@apple.com>

        One esc to exit fullscreen and pointer lock
        https://bugs.webkit.org/show_bug.cgi?id=165416
        rdar://problem/29430711

        Reviewed by Jer Noble.

        Implement WKPageUIClientV8 for pointer lock support.
        Add "escape" key support in EventSenderProxy.

        * WebKitTestRunner/TestController.cpp:
        (WTR::requestPointerLock):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown):

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Add system trace points for JavaScript VM entry/exit
        https://bugs.webkit.org/show_bug.cgi?id=165550

        Reviewed by Tim Horton.

        Add trace points for entry/exit into/out of the JS VM.

        * Tracing/SystemTracePoints.plist:

2016-12-07  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Cannot build GTK+ with CUPS 2.* versions
        https://bugs.webkit.org/show_bug.cgi?id=163591

        Reviewed by Michael Catanzaro.

        GTK+ build has failed on the system which CUPS 2.x is installed in. GTK+ 3.16.4
        does not assume to use the recent CUPS thus it fails to detect the CUPS in configuration.
        GTK+ upstream fixed this issue but it is not easy to apply the original patch to our
        old gtk+ since it requires not only bumping up glib accordingly and its consequence
        causes many printing test failures. So, I propose to fix the configuration issue by
        applying the change to the configure file directly. By doing this, we don't need to
        upgrade glib and worry about any test failures as a consequence of the upgraded glib.

        * gtk/jhbuild.modules:
        * gtk/patches/gtk+-configure-fix-detecting-CUPS-2.x.patch: Added.

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Fix use of enum in a WK2 C SPI header.
        rdar://problem/28725583

        Followup to correctly prefix the enum values.

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

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Fix use of enum in a WK2 C SPI header.
        rdar://problem/28725583

        Reviewed by Dan Bernstein.

        Use correct enum style for a C SPI header and fix the callers.

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

2016-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new project for recording and playing back editing commands in editable web content
        https://bugs.webkit.org/show_bug.cgi?id=165114
        <rdar://problem/29408135>

        Reviewed by Beth Dakin.

        Adds a new Xcode project containing work towards rewinding and playing back editing commands. This work is
        wrapped in an Xcode project to take advantage of the XCTest framework. To manually test recording, open the
        capture test harness, edit the contenteditable body, and then hit cmd-S. This downloads a .json file which may
        then be dragged into the playback test harness.

        Also adds 3 new unit tests in EditingHistoryTests/RewindAndPlaybackTests.m. These tests carry out the following
        steps:

        1. Load the capture harness and perform test-specific editing on the web view.
        2. Let originalState be a dump of the DOM at this point in time.
        3. Extract the JSON-serialized editing history data and load the playback harness with this data.
        4. Rewind all editing to the beginning.
        5. Playback all editing to the end.
        6. Dump the state of the DOM. This should be identical to originalState.

        * EditingHistory/EditingHistory.xcodeproj/project.pbxproj: Added.
        * EditingHistory/EditingHistory/Info.plist: Added.
        * EditingHistory/EditingHistory/Resources/CaptureHarness.html: Added.
        * EditingHistory/EditingHistory/Resources/DOMTestingUtil.js: Added.
        * EditingHistory/EditingHistory/Resources/PlaybackHarness.html: Added.
        * EditingHistory/EditingHistory/TestRunner.h: Added.
        * EditingHistory/EditingHistory/TestRunner.m: Added.
        (injectedMessageEventHandlerScript):
        (-[TestRunner init]):
        (-[TestRunner deleteBackwards:]):
        (-[TestRunner typeString:]):
        (-[TestRunner bodyElementSubtree]):
        (-[TestRunner bodyTextContent]):
        (-[TestRunner editingHistoryJSON]):
        (-[TestRunner loadPlaybackTestHarnessWithJSON:]):
        (-[TestRunner numberOfUpdates]):
        (-[TestRunner jumpToUpdateIndex:]):
        (-[TestRunner expectEvents:afterPerforming:]):
        (-[TestRunner loadCaptureTestHarness]):
        (-[TestRunner setTextObfuscationEnabled:]):
        (-[TestRunner isDoneWaitingForPendingEvents]):
        (-[TestRunner userContentController:didReceiveScriptMessage:]):

        The TestRunner provides utilities that a unit test should use to drive the test forward (e.g. loading harnesses)
        or inspect the state of the loaded page (e.g. extracting JSON editing history data from the capture harness).

        * EditingHistory/EditingHistory/TestUtil.h: Added.
        * EditingHistory/EditingHistory/TestUtil.m: Added.
        (waitUntilWithTimeout):
        (waitUntil):

        Provides utilities for running tests. For now, this is just spinning the runloop on a given condition.

        * EditingHistory/EditingHistory/WKWebViewAdditions.h: Added.
        * EditingHistory/EditingHistory/WKWebViewAdditions.m: Added.
        (-[WKWebView loadPageFromBundleNamed:]):
        (-[WKWebView typeCharacter:]):
        (-[WKWebView keyPressWithCharacters:keyCode:]):
        (-[WKWebView stringByEvaluatingJavaScriptFromString:]):

        Provides utilities for simulating interaction in a web view.

        * EditingHistory/EditingHistory/main.m: Added.
        (main):
        * EditingHistory/EditingHistoryTests/Info.plist: Added.
        * EditingHistory/EditingHistoryTests/RewindAndPlaybackTests.m: Added.
        (-[RewindAndPlaybackTests setUp]):
        (-[RewindAndPlaybackTests tearDown]):
        (-[RewindAndPlaybackTests testTypingSingleLineOfText]):
        (-[RewindAndPlaybackTests testTypingMultipleLinesOfText]):
        (-[RewindAndPlaybackTests testTypingAndDeletingText]):
        (-[RewindAndPlaybackTests rewindAndPlaybackEditingInPlaybackTestHarness]):
        (-[RewindAndPlaybackTests originalBodySubtree:isEqualToFinalSubtree:]):

2016-12-07  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] missing dependency on libvpx in gst-plugins-good
        https://bugs.webkit.org/show_bug.cgi?id=165525

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: gst-plugins-good should depend on the
        libvpx package built within jhbuild.

2016-12-07  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] gst-plugins-bad fails to build with OpenSSL 1.1.0
        https://bugs.webkit.org/show_bug.cgi?id=165520

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Added missing dependency on openh264 in
        gst-plugins-bad, along with 2 upstream patches fixing the build
        against OpenSSL 1.1.0.
        * gtk/patches/gst-plugins-bad-0001-dtls-port-to-OpenSSL-1.1.0.patch: Added.
        * gtk/patches/gst-plugins-bad-0002-dtlscertificate-Fix-error-checking-in-RSA_generate_k.patch: Added.

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

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2016-12-06  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Plugins are disabled in new windows
        https://bugs.webkit.org/show_bug.cgi?id=165410

        Reviewed by Alex Christensen.

        Currently WebKitTestRunner only enables plugins in the main window. So, a test that opens
        a new window and loads a plugin will fail. We should enable plugins in all windows by
        default. Moreover toggling testRunner.setPluginsEnabled() should effect all windows.

        Making these changes is a step towards running plugins/open-and-close-window-with-plugin.html
        in WebKitTestRunner (we still need to fix <https://bugs.webkit.org/show_bug.cgi?id=46714>) and
        will make the behavior of WebKitTestRunner more closely match the behavior DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Call TestRunner::setPluginsEnabled() instead of
        WKBundleSetPluginsEnabled().
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPluginsEnabled): Take a similar approach as TestRunner::setXSSAuditorEnabled()
        and make use of WKBundleOverrideBoolPreferenceForTestRunner().

2016-12-05  Dean Jackson  <dino@apple.com>

        pointer lock needs to be feature detectable
        https://bugs.webkit.org/show_bug.cgi?id=165426
        <rdar://problem/29486715>

        Reviewed by Antoine Quint.

        Expose the comment line to turn on/off pointer lock.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):

2016-12-05  Jonathan Bedard  <jbedard@apple.com>

        Make it possible to use an existing simulator instance for one-off testing
        https://bugs.webkit.org/show_bug.cgi?id=164568
        <rdar://problem/29189133>

        Reviewed by Daniel Bates.

        With this patch, if a simulator is currently running on the machine and
        '--dedicated-simulators' is not passed into the application, only one simulator
        instance will be used, and this instance will be the existing instance.
        If no simulator is running or '--dedicated-simulators' is passed to the script,
        previous behavior will be used.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__): Logic for enabling usage of currently running simulator.
        (IOSSimulatorPort._create_simulators): Only create simulators when needed, don't reset already running simulators.
        (IOSSimulatorPort.setup_test_run): Don't open already running simulators.
        (IOSSimulatorPort._quit_ios_simulator): Only quit simulators if we manage them.
        (IOSSimulatorPort.clean_up_test_run): Only clean up simulators if we manage them. 
        (IOSSimulatorPort._using_dedicated_simulators): True if simulators need to be managed, false if using an existing instance.
        (IOSSimulatorPort.device_id_for_worker_number): Access currently running simulator if not managing devices.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.refresh): Check if xcode_simctl_list returned None instead of a generator.
        (Simulator.current_device): Get currently running device.

2016-12-05  Dan Bernstein  <mitz@apple.com>

        Disable a crashing test on iOS.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm:

2016-12-04  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Fix a build break on EFL since r209303.

        Unreviewed build fix.

        * Scripts/webkitperl/FeatureList.pm: Disable SS Device Adaptation temporarily.

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

        Refactor SymbolImpl layout
        https://bugs.webkit.org/show_bug.cgi?id=165247

        Reviewed by Darin Adler.

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

2016-12-03  Dan Bernstein  <mitz@apple.com>

        Fixed the build after r209307.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm:
        (TEST):

2016-12-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose InjectedBundlePageEditorClient via the Objective-C bundle SPI
        https://bugs.webkit.org/show_bug.cgi?id=165276
        <rdar://problem/29467040>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm: Added.
        (-[BundleEditingDelegateRemoteObject willWriteToPasteboard:]):
        (-[BundleEditingDelegateRemoteObject didWriteToPasteboard]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegatePlugIn.mm: Added.
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:willWriteRangeToPasteboard:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:pasteboardDataForRange:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextControllerDidWriteToPasteboard:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegateProtocol.h: Added.

2016-12-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting
        https://bugs.webkit.org/show_bug.cgi?id=164492

        Reviewed by Dan Bernstein.

        * DumpRenderTree/TestNetscapePlugIn/mac/Info.plist: Changed CFBundleIdentifier's value from
        com.apple.testnetscapeplugin to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * DumpRenderTree/ios/Info.plist: Changed CFBundleIdentifier's value from
        org.webkit.DumpRenderTree to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig: Set
        PRODUCT_BUNDLE_IDENTIFIER to org.webkit.DumpRenderTree.
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig: Set
        PRODUCT_BUNDLE_IDENTIFIER to com.apple.testnetscapeplugin.
        * MiniBrowser/Configurations/MiniBrowser.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        org.webkit.$(PRODUCT_NAME:rfc1034identifier).
        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.$(PRODUCT_NAME:rfc1034identifier).
        * MiniBrowser/mac/Bundle/Info.plist: Changed CFBundleIdentifier's value from
        com.apple.${PRODUCT_NAME:rfc1034identifier} to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * MiniBrowser/mac/Info.plist: Changed CFBundleIdentifier's value from
        org.webkit.${PRODUCT_NAME} to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig: Set INFOPLIST_FILE to
        InjectedBundle-Info.plist and set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.$(PRODUCT_NAME:rfc1034identifier).
        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.$(PRODUCT_NAME:rfc1034identifier).
        * TestWebKitAPI/InjectedBundle-Info.plist: Changed CFBundleIdentifier's value from
        com.yourcompany.${PRODUCT_NAME:rfc1034identifier} to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * TestWebKitAPI/cocoa/WebProcessPlugIn/Info.plist: Added a CFBundleIdentifier key with the
        value ${PRODUCT_BUNDLE_IDENTIFIER}.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Set INFOPLIST_FILE to
        InjectedBundle-Info.plist and set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.WebKitTestRunner.InjectedBundle.
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: Set
        PRODUCT_BUNDLE_IDENTIFIER to org.webkit.$(PRODUCT_NAME:rfc1034identifier).
        * WebKitTestRunner/InjectedBundle-Info.plist: Changed CFBundleIdentifier's value from
        com.apple.WebKitTestRunner.InjectedBundle to ${PRODUCT_BUNDLE_IDENTIFIER}.
        * WebKitTestRunner/WebKitTestRunnerApp/WebKitTestRunnerApp-Info.plist: Changed
        CFBundleIdentifier's value from org.webkit.${PRODUCT_NAME:rfc1034identifier} to
        ${PRODUCT_BUNDLE_IDENTIFIER}.

2016-12-02  Brady Eidson  <beidson@apple.com>

        Make IndexedDB.WebProcessKillIDBCleanup even more reliable.
        https://bugs.webkit.org/show_bug.cgi?id=165330

        Reviewed by Alex Christensen.

        The test currently nulls out a RetainPtr<WKWebView> to try to destroy the view and kill the process.

        Problem is that doesn't reliably destroy the view.
        We should explicitly kill the process instead.

        Also, by relocating when we kill the process, we can better test behavior of the IndexedDB mechanism.
        e.g. We explicitly confirm that a second WebProcess can simultaneously attach to the same unique database as the first.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
        (TEST):

2016-12-02  Commit Queue  <commit-queue@webkit.org>

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

        broke 36 webkitpy tests (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "Make it possible to use an existing simulator instance for
        one-off testing"
        https://bugs.webkit.org/show_bug.cgi?id=164568
        http://trac.webkit.org/changeset/209136

2016-12-02  Chris Dumez  <cdumez@apple.com>

        [Mac][WK1] Implement new HTML interactive form validation user interface
        https://bugs.webkit.org/show_bug.cgi?id=164483

        Reviewed by Simon Fraser.

        Add support for UIScriptController's contentsOfUserInterfaceItem("validationBubble")
        on Mac DRT as this is needed by the HTML form validation layout tests.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::contentsOfUserInterfaceItem):

2016-12-02  Brady Eidson  <beidson@apple.com>

        IndexedDB.IndexedDBMultiProcess and IndexedDB.WebProcessKillIDBCleanup sometimes timeout.
        https://bugs.webkit.org/show_bug.cgi?id=160780 and https://bugs.webkit.org/show_bug.cgi?id=161001

        Reviewed by Alexey Proskuryakov.

        These tests had "run-loop races."
        
        The test spins the runloop waiting for one message.
        Two messages might come in from the WebProcess in short succession, and both be delivered to the
        UIProcess in the same spin of the runloop.

        Therefore by the time the test stops spinning the runloop, notified that a message was received,
        the first message has been overwritten by the second.

        These tests are fixed by queueing the incoming messages instead of just storing one.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        (-[IndexedDBMPMessageHandler userContentController:didReceiveScriptMessage:]):
        (getNextMessage):
        (TEST):

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
        (-[IndexedDBWebProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):
        (getNextMessage):
        (TEST):

2016-12-01  Jiewen Tan  <jiewen_tan@apple.com>

        Add a runtime flag for SubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=164982

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setSubtleCryptoEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-12-01  Alexey Proskuryakov  <ap@apple.com>

        Remove webkitpy dependency on Eliza
        https://bugs.webkit.org/show_bug.cgi?id=164979

        Reviewed by Daniel Bates.

        This module is not on pypi, so installing it is a challenge. The jokes feel pretty old too!

        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/thirdparty/__init___unittest.py: Changed mock import hook to
        test buildbot instead of eliza.
        * Scripts/webkitpy/tool/bot/ircbot.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:

2016-12-01  Beth Dakin  <bdakin@apple.com>

        Force clicking tests fail on some machines
        https://bugs.webkit.org/show_bug.cgi?id=165263

        Reviewed by Tim Horton.

        Initialize com.apple.trackpad.forceClick to 1 so that we don’t have to depend on 
        the user account having this feature enabled. 
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

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

        Introduce StringImpl::StaticStringImpl with constexpr constructor
        https://bugs.webkit.org/show_bug.cgi?id=165093

        Reviewed by Darin Adler.

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

2016-11-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add an HTML comment flag to turn the feature on
        https://bugs.webkit.org/show_bug.cgi?id=165226

        Reviewed by Dean Jackson.

        Add a new flag to turn Modern Media Controls on in the test runners.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):

2016-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add separate settings and preferences to enable/disable async decoding for large images and animated images
        https://bugs.webkit.org/show_bug.cgi?id=165177

        Reviewed by Simon Fraser.
        
        Pref and a menu item to toggle async image decoding settings for WebKits 1 and 2.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleLargeImageAsyncDecodingEnabled:]):
        (-[SettingsController largeImageAsyncDecodingEnabled]):
        (-[SettingsController toggleAnimatedImageAsyncDecodingEnabled:]):
        (-[SettingsController animatedImageAsyncDecodingEnabled]):
        (-[SettingsController toggleAsyncImageDecodingEnabled:]): Deleted.
        (-[SettingsController asyncImageDecodingEnabled]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2016-11-30  Jonathan Bedard  <jbedard@apple.com>

        Make it possible to use an existing simulator instance for one-off testing
        https://bugs.webkit.org/show_bug.cgi?id=164568
        <rdar://problem/29189133>

        Reviewed by Daniel Bates.

        With this patch, if a simulator is currently running on the machine and
        '--dedicated-simulators' is not passed into the application, only one simulator
        instance will be used, and this instance will be the existing instance.
        If no simulator is running or '--dedicated-simulators' is passed to the script,
        previous behavior will be used.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__): Logic for enabling usage of currently running simulator.
        (IOSSimulatorPort._create_simulators): Only create simulators when needed, don't reset already running simulators.
        (IOSSimulatorPort.setup_test_run): Don't open already running simulators.
        (IOSSimulatorPort._quit_ios_simulator): Only quit simulators if we manage them.
        (IOSSimulatorPort.clean_up_test_run): Only clean up simulators if we manage them. 
        (IOSSimulatorPort._using_dedicated_simulators): True if simulators need to be managed, false if using an existing instance.
        (IOSSimulatorPort.device_id_for_worker_number): Access currently running simulator if not managing devices.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.current_device): Get currently running device.

2016-11-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [Linux] run-benchmark should be able to execute the benchmarks with more browsers.
        https://bugs.webkit.org/show_bug.cgi?id=164792

        Reviewed by Michael Catanzaro.

        This removes the GTKBrowserDriver (and the platform 'gtk') from the run-benchmark script,
        and adds a new LinuxBrowserDriver with a platform 'linux'.

        It add also drivers for Chrome (Chromium), Firefox, Epiphany and MiniBrowser-GTK (previously MiniBrowser).

        The detection of the platform is now done automatically, so it is not longer needed to pass a "--platform" parameter.

        The tracking of the browser process is now more robust, we track the pid of the browser process and we only try to
        kill the ones that were executed by this script, instead of doing a 'killall $browser' (like before).
        We also check for browser process childs and we kill them if they are still alive after the main browser process has been killed.
        This depends on psutil, so this will only be done if psutil is installed.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunBenchmarkTests.start): The platform is now autodetected and the MiniBrowser driver is renamed to MiniBrowser-GTK.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner._run_benchmark): Fix a bug that caused close_browsers to be called twice. Its already called inside BenchmarkRunner._run_one_test.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py: Added.
        (LinuxBrowserDriver): Implement base class that has all the needed functionality for driving the browsers.
        (LinuxBrowserDriver.__init__):
        (LinuxBrowserDriver.prepare_env):
        (LinuxBrowserDriver.restore_env):
        (LinuxBrowserDriver.close_browsers): Made the dependency on psutil optional (because it was listed as such on the README file <Tools/Scripts/webkitpy/benchmark_runner/README.md>)
        (LinuxBrowserDriver.launch_url):
        (LinuxBrowserDriver._get_first_executable_path_from_list):
        (LinuxBrowserDriver._screen_size):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py: Copied from Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py.
        (LinuxChromeDriver):
        (LinuxChromeDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_epiphany_driver.py: Renamed from Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py.
        (EpiphanyBrowserDriver):
        (EpiphanyBrowserDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py: Copied from Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py.
        (LinuxFirefoxDriver):
        (LinuxFirefoxDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowsergtk_driver.py: Renamed from Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py.
        (GTKMiniBrowserDriver):
        (GTKMiniBrowserDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (getplatform):
        (getdefaultbrowser):
        (parse_args):
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (load_subclasses): The loading of subclasses was still (even after r196979) sensitive to the order in which the modules are loaded.
        We have to ensure that the files containing subclasses of the base_class_file are loaded after the base_class_file,
        we can do that by matching against the base_class_file pattern when the list is created.

2016-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Enable two clang warnings recommended by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=164498

        Reviewed by Mark Lam.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.
        * MiniBrowser/Configurations/Base.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2016-11-29  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Don't request user permission for a device if it has already been granted in the current browsing context
        https://bugs.webkit.org/show_bug.cgi?id=164760
        <rdar://problem/29261266>

        Reviewed by Youenn Fablet.
        
        Allow scripts to determine the number of times the user has been prompted for capture device access.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPersistentPermissionForOrigin):
        (WTR::InjectedBundle::userMediaPermissionRequestCountForOrigin):
        (WTR::InjectedBundle::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::InjectedBundle::setUserMediaPermissionForOrigin): Deleted.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPersistentPermissionForOrigin):
        (WTR::TestRunner::userMediaPermissionRequestCountForOrigin):
        (WTR::TestRunner::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::TestRunner::setUserMediaPermissionForOrigin): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::OriginSettings::incrementRequestCount):
        (WTR::OriginSettings::resetRequestCount):
        (WTR::OriginSettings::requestCount):
        (WTR::TestController::saltForOrigin):
        (WTR::TestController::setUserMediaPersistentPermissionForOrigin):
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin):
        (WTR::TestController::settingsForOrigin):
        (WTR::TestController::userMediaPermissionRequestCountForOrigin):
        (WTR::TestController::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):
        (WTR::TestController::setUserMediaPermissionForOrigin): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        intersection-observer-entry-interface.html test fails on the bots
        https://bugs.webkit.org/show_bug.cgi?id=165133

        Reviewed by Darin Adler.
        
        Tests that enabled Intersection Observer via <!-- webkit-test-runner [ enableIntersectionObserver=true ] -->
        would fail sometimes, because TestController::ensureViewSupportsOptionsForTest() failed to check
        to see if this option required creating a new web view, so would just use the old view without
        even resetting preferences.
        
        In general, TestController doesn't distinguish properly between options that require the creation
        of a new view (like mock scrollbars), and those that can be simply reset as resetPreferencesToConsistentValues()
        does.
        
        Do the easy fix of having viewSupportsOptions() check options.enableIntersectionObserver. We should probably
        just call resetPreferencesToConsistentValues() even when re-use the same view.
        
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):

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

        Unreviewed, rolling out r209008.

        This change appears to have caused two fast/mediastrem
        LayoutTests to fail.

        Reverted changeset:

        "[MediaStream] Don't request user permission for a device if
        it has already been granted in the current browsing context"
        https://bugs.webkit.org/show_bug.cgi?id=164760
        http://trac.webkit.org/changeset/209008

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

        Teach webkitpy how to read CSSProperties.json r209001
        https://bugs.webkit.org/show_bug.cgi?id=165108

        Reviewed by Simon Fraser.

        Fix webkitpy logic so that it can read CSS property names from CSSProperties.json following r209001.

        Following r209001 CSSPropertyNames.in no longer exists as it was replaced with CSSProperties.json.
        We need to modify the webkitpy machinery that processed CSSPropertyNames.in to process CSSProperties.json.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.__init__): Make self._css_property_file and self._css_property_value_file local
        variables as it is unnecessary for them to be instance variables. Call read_webkit_prefixed_css_property_list()
        to read the property names from file CSSProperties.json. Call legacy_read_webkit_prefixed_css_property_list() to
        read CSS keyword values from CSSValueKeywords.in.
        (_W3CTestConverter.read_webkit_prefixed_css_property_list): Added.
        (_W3CTestConverter):
        (_W3CTestConverter.legacy_read_webkit_prefixed_css_property_list): Renamed from read_webkit_prefixed_css_property_list.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_harnesslinks_conversion): Substitute CSSProperties.json for CSSPropertyNames.in.

2016-11-28  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Don't request user permission for a device if it has already been granted in the current browsing context
        https://bugs.webkit.org/show_bug.cgi?id=164760
        <rdar://problem/29261266>

        Reviewed by Youenn Fablet.
        
        Allow scripts to determine the number of times the user has been prompted for capture device access.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPersistentPermissionForOrigin):
        (WTR::InjectedBundle::userMediaPermissionRequestCountForOrigin):
        (WTR::InjectedBundle::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::InjectedBundle::setUserMediaPermissionForOrigin): Deleted.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPersistentPermissionForOrigin):
        (WTR::TestRunner::userMediaPermissionRequestCountForOrigin):
        (WTR::TestRunner::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::TestRunner::setUserMediaPermissionForOrigin): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::OriginSettings::incrementRequestCount):
        (WTR::OriginSettings::resetRequestCount):
        (WTR::OriginSettings::requestCount):
        (WTR::TestController::saltForOrigin):
        (WTR::TestController::setUserMediaPersistentPermissionForOrigin):
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin):
        (WTR::TestController::settingsForOrigin):
        (WTR::TestController::userMediaPermissionRequestCountForOrigin):
        (WTR::TestController::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):
        (WTR::TestController::setUserMediaPermissionForOrigin): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2016-11-18  Jer Noble  <jer.noble@apple.com>

        Add some performance tests for various aspects of media loading and playback.
        https://bugs.webkit.org/show_bug.cgi?id=164977

        Reviewed by Darin Adler.

        Allow callers to pass in extra alias/directory pairs to run-webkit-httpd.

        * Scripts/run-webkit-httpd:
        (parse_args):
        (main):

2016-11-27  Simon Fraser  <simon.fraser@apple.com>

        Another fix for CMake.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Better fix for the Mac CMake build.

        * DumpRenderTree/PlatformMac.cmake:

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix Mac CMake build.

        * DumpRenderTree/PlatformMac.cmake:

2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Import std::optional reference implementation as WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=164199

        Reviewed by Saam Barati and Sam Weinig.

        Use WTF::Optional::value_or.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::stableStateOverride):
        (WTR::UIScriptController::setStableStateOverride):
        * TestRunnerShared/Bindings/JSWrappable.h:
        (WTR::JSValueMakeBooleanOrNull):
        (WTR::JSValueToNullableBoolean):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::stableStateOverride):
        (WTR::UIScriptController::setStableStateOverride):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestWebKitAPI/Tests/WTF/Optional.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp:
        (TestWebKitAPI::testParseHTMLInteger):
        (TestWebKitAPI::testParseHTMLNonNegativeInteger):
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::stableStateOverride):
        (WTR::UIScriptController::setStableStateOverride):

2016-11-26  Sam Weinig  <sam@webkit.org>

        Convert IntersectionObserver over to using RuntimeEnabledFeatures so it can be properly excluded from script
        https://bugs.webkit.org/show_bug.cgi?id=164965

        Reviewed by Simon Fraser.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add new files.

        * DumpRenderTree/TestOptions.h: Added.
        * DumpRenderTree/TestOptions.mm: Added.
        (parseBooleanTestHeaderValue):
        (TestOptions::TestOptions):
        Port TestOption parsing from WKTR to DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        Pass TestOptions down to resetWebPreferencesToConsistentValues to allow setting
        preferences conditionally.

        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        Add a new test option header, enableIntersectionObserver, to enable IntersectionObserver.

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=164992

        Reviewed by Darin Adler.
        
        Use Seconds::zero().

        * TestWebKitAPI/Tests/WTF/Condition.cpp:

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Add literals for various time units
        https://bugs.webkit.org/show_bug.cgi?id=165074

        Reviewed by Filip Pizlo.
        
        Add tests for new time literals. Add new tests for units.

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

2016-11-25  Csaba Osztrogonác  <ossy@webkit.org>

        Fix compile warnings after r208415
        https://bugs.webkit.org/show_bug.cgi?id=165061

        Reviewed by Andy Estes.

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

2016-11-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Notifications API does not expose or respect the "tag" attribute
        https://bugs.webkit.org/show_bug.cgi?id=164771

        Reviewed by Gustavo Noronha Silva.

        Verify that showing a notification with the same tag as another notification closes the
        previous notification before the new notification is shown.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification):

2016-11-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebContext/get-plugins after r208429.

        Test plugin library was renamed as libTestNetscapePlugIn.so in r208429.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextGetPlugins): Update the library name.

2016-11-22  Darin Adler  <darin@apple.com>

        Make normal case fast in the input element limitString function
        https://bugs.webkit.org/show_bug.cgi?id=165023

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/CMakeLists.txt: Added TextBreakIterator.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/TextBreakIterator.cpp: Added.
        Contains some tests for the numGraphemeClusters and
        numCharactersInGraphemeClusters functions that I used to make sure
        that the new fast paths I added work correctly.

2016-11-22  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, add myself as a WebKit committer.

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

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Hasher::addCharacters() should be able to handle zero length strings.
        https://bugs.webkit.org/show_bug.cgi?id=165024

        Reviewed by Yusuke Suzuki.

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

2016-11-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] build fails after update to cmake 3.7
        https://bugs.webkit.org/show_bug.cgi?id=165008

        Reviewed by Dan Bernstein.

        When we remove the CMake cache, we should remove both the
        CMakeCache.txt file and the CMakeFiles directory.
        See: https://gitlab.kitware.com/cmake/cmake/issues/14820

        * Scripts/webkitdirs.pm:
        (cmakeFilesPath):
        (removeCMakeCache):

2016-11-16  Philippe Normand  <pnormand@igalia.com>

        [GTK][WebRTC] Switch to downstream OpenWebRTC and more recent GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=164817

        Reviewed by Alejandro G. Castro.

        This is temporary, hopefully. The OpenWebRTC patches will/should
        be soon reviewed and upstream but meanwhile it makes sense to use
        the Igalia downstream fork so that the WebRTC testing is easier.

        Recent GStreamer patches are also needed for RTP bundling support
        and RTP retransmission fixes.

        * gtk/jhbuild.modules:
        * gtk/openwebrtc.modules: Removed.
        * gtk/patches/gst-plugins-good-0001-rtpbin-pipeline-gets-an-EOS-when-any-rtpsources-byes.patch: Added.
        * gtk/patches/gst-plugins-good-0002-rtpbin-avoid-generating-errors-when-rtcp-messages-ar.patch: Added.
        * gtk/patches/gst-plugins-good-0003-rtpbin-receive-bundle-support.patch: Added.

2016-11-20  Zan Dobersek  <zdobersek@igalia.com>

        [EncryptedMedia] Make EME API runtime-enabled
        https://bugs.webkit.org/show_bug.cgi?id=164927

        Reviewed by Jer Noble.

        Enable the EME API via the WKTR InjectedBundle whenever testing
        commences. This does not have any effect unless the EME feature
        is enabled at compile-time, but it's still added to match other
        features and for future use.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setEncryptedMediaAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-11-19  Simon Fraser  <simon.fraser@apple.com>

        Fix the Mac and iOS bulds.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _stableStateOverride]):
        (-[TestRunnerWKWebView _setStableStateOverride:]):

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test non-stable-state scrolling on iOS
        https://bugs.webkit.org/show_bug.cgi?id=164905

        Reviewed by Dan Bernstein.

        Make it possible for an iOS layout test to force every visible rect update
        from the UI process to the web process to be in a non-stable state. This emulates
        what happens during panning and zooming interactions, and allows us to test the
        scrolling and layer trees in these transient states.
        
        This is done by adding a testing property on WKWebView, _stableStateOverride, whose
        getters and setters are overridden in TestRunnerWKWebView. When non-nil, we _updateVisibleContentRectAfterScrollInView
        consults the NSNumber's boolValue and uses it to override the stable state.
        
        To facilitate this kind of testing, also add immediateScrollToOffset() and
        immediateZoomToScale() to UIScriptController. Finally, add doAfterPresentationUpdate()
        which provides a callback that fires after one trip to the web process and back.
        
        Add code generation support for optional boolean attributes in IDL.

        Align CodeGeneratorDumpRenderTree.pm and CodeGeneratorTestRunner.pm.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_generateImplementationFile):
        (_platformTypeConstructor):
        (_returnExpression):
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAfterPresentationUpdate):
        (WTR::contentOffsetBoundedInValidRange):
        (WTR::UIScriptController::scrollToOffset):
        (WTR::UIScriptController::immediateScrollToOffset):
        (WTR::UIScriptController::immediateZoomToScale):
        (WTR::UIScriptController::stableStateOverride):
        (WTR::UIScriptController::setStableStateOverride):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAfterPresentationUpdate):
        * TestRunnerShared/Bindings/JSWrappable.h:
        (WTR::JSValueMakeBooleanOrNull):
        (WTR::JSValueToNullableBoolean):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::immediateScrollToOffset):
        (WTR::UIScriptController::immediateZoomToScale):
        (WTR::UIScriptController::stableStateOverride):
        (WTR::UIScriptController::setStableStateOverride):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_classRefGetter):
        (_platformTypeConstructor):
        (_returnExpression):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _stableStateOverride]):
        (-[TestRunnerWKWebView _setStableStateOverride:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::doAfterPresentationUpdate):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::immediateScrollToOffset):
        (WTR::UIScriptController::immediateZoomToScale):
        (WTR::UIScriptController::stableStateOverride):
        (WTR::UIScriptController::setStableStateOverride):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAfterPresentationUpdate):

2016-11-19  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose aria-busy via ATK_STATE_BUSY
        https://bugs.webkit.org/show_bug.cgi?id=164909

        Reviewed by Chris Fleizach.

        Implement boolAttributeValue() for ATK so we can test AXElementBusy.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::boolAttributeValue):

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Eliminate a source of flakiness in layout tests by forcing WebPage into "responsive" mode for all tests, with an internals override
        https://bugs.webkit.org/show_bug.cgi?id=164980

        Reviewed by Chris Dumez.

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

2016-11-18  Dean Jackson  <dino@apple.com>

        AX: "(inverted-colors)" media query only matches on page reload; should match on change
        https://bugs.webkit.org/show_bug.cgi?id=163564
        <rdar://problem/28807350>

        Reviewed by Simon Fraser.

        Add a UIScriptController method that tricks WebKit into thinking
        it has received a notification that accessibility settings have
        changed. Combined with our forced overrides, this allows us to
        test if a page would react to the notifications.

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

2016-11-18  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r208902
        https://bugs.webkit.org/show_bug.cgi?id=144194

        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):
        The fullwidth solidus, U+FF0F, changed encoding from IDN2003 to IDN2008, probably to prevent domains from using it
        to spoof other domains.  https://webkit.org/blog/ and https://webkit.org\uFF0Fblog/ would otherwise look 
        too similar when rendered.

2016-11-17  Alex Christensen  <achristensen@webkit.org>

        Support IDN2008 with UTS #46 instead of IDN2003
        https://bugs.webkit.org/show_bug.cgi?id=144194

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        Add some tests from http://unicode.org/faq/idn.html verifying that we follow UTS46's deviations from IDN2008.
        Add some tests based on https://tools.ietf.org/html/rfc5893 verifying that we check for bidirectional text.
        Add a test based on https://tools.ietf.org/html/rfc5892 verifying that we do not do ContextO check.
        Add a test for U+321D and U+321E which have particularly interesting punycode encodings.  We match Firefox here now.
        Also add a test from http://www.unicode.org/reports/tr46/#IDNAComparison verifying we are not using IDN2003.
        We should consider importing all of http://www.unicode.org/Public/idna/9.0.0/IdnaTest.txt as URL domain tests.

2016-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Downloads started by context menu actions should also have a web view associated
        https://bugs.webkit.org/show_bug.cgi?id=164364

        Reviewed by Michael Catanzaro.

        Add a GTK+ unit tests to check that downloads started by the context menu have a web view associated.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (downloadLocalFileSuccessfully):
        (testDownloadOverwriteDestinationDisallowed):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testDownloadMIMEType):
        (contextMenuCallback):
        (testContextMenuDownloadActions):
        (beforeAll):

2016-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        Add an experimental API to find elements across shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=164851
        <rdar://problem/28220092>

        Reviewed by Sam Weinig.

        Added test cases for window.collectMatchingElementsInFlatTree to WebKit2.InjectedBundleMakeAllShadowRootOpen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRoot*s*Open_Bundle.cpp: Renamed
        from InjectedBundleMakeAllShadowRootOpen_Bundle.cpp.
        (TestWebKitAPI::InjectedBundleMakeAllShadowRootOpenTest::initialize): Added test cases for
        window.collectMatchingElementsInFlatTree by calling alert() many times.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen.cpp:
        (TestWebKitAPI::runJavaScriptAlert): Added expectations for multiple test cases. Each test case
        finishes with a call to alert, and moves testNumber forward.
        (TestWebKitAPI::TEST): Use the newly added closed-shadow-tree-test.html
        * TestWebKitAPI/Tests/WebKit2/closed-shadow-tree-test.html: Added. Creates a shadow tree with slots
        and tests that window.collectMatchingElementsInFlatTree is not present when
        an event named "testnormalworld" is dispatched by the injected bundle.

2016-11-17  Brady Eidson  <beidson@apple.com>

        Add _WKIconLoadingDelegate SPI.
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Reviewed by Alex Christensen.

        Add MiniBrowser support for this new SPI, configurable with a setting.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController loadsAllSiteIcons]):
        (-[SettingsController toggleLoadsAllSiteIcons:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController webView:shouldLoadIconWithParameters:completionHandler:]):

2016-11-17  Caitlin Potter  <caitp@igalia.com>

        [JSC] remove leftover references to ES2017_ASYNCFUNCTION_SYNTAX flag
        https://bugs.webkit.org/show_bug.cgi?id=164879

        Reviewed by Alex Christensen.

        The flag was referenced in FeatureList.pm and in one of the
        FeatureDefines.xcconfig files, despite being removed.

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

2016-11-17  Per Arne Vollan  <pvollan@apple.com>

        [Win] run-api-tests is failing.
        https://bugs.webkit.org/show_bug.cgi?id=164818

        Reviewed by Alexey Proskuryakov.

        Make sure Visual Studio interprets string literal as utf8.
 
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] WTF::TemporaryChange with WTF::SetForScope
        https://bugs.webkit.org/show_bug.cgi?id=164761

        Reviewed by Saam Barati.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/SetForScope.cpp: Renamed from Tools/TestWebKitAPI/Tests/WTF/TemporaryChange.cpp.
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2016-11-16  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r208455): LayoutTests swipe/pushState-cached-back-swipe.html and swipe/main-frame-pinning-requirement.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=164572

        Reviewed by Tim Horton.

        * WebKitTestRunner/mac/TestControllerMac.mm: (WTR::TestController::platformResetStateToConsistentValues):
        Use the correct constant.

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=164827

        Reviewed by Ryosuke Niwa.

        Enabled ES6 Modules in test runners.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setES6ModulesEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-11-16  Simon Fraser  <simon.fraser@apple.com>

        Hard to write reliable UIScriptController scrollingTreeAsText tests
        https://bugs.webkit.org/show_bug.cgi?id=164764

        Reviewed by Wenson Hsieh.

        Fix one cause of flakiness by resetting the WKWebView's UIScrollView scale
        and scroll position between tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2016-11-16  Simon Fraser  <simon.fraser@apple.com>

        UIScriptController: script with no async tasks fails if an earlier script registered a callback
        https://bugs.webkit.org/show_bug.cgi?id=164762

        Reviewed by Wenson Hsieh.
        
        Make TestRunner::callUIScriptCallback() async in DumpRenderTree to match WebKitTestRunner behavior.
        This fixes ui-side-script-with-callback.html in WK1, which failed because the second runUIScript()
        would occur inside the completion callback from the first. This no longer happens.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::callUIScriptCallback):
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::tryToCompleteUIScriptForCurrentParentCallback):

2016-11-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208770.

        The test added with this change is timing out on mac-wk1.

        Reverted changeset:

        "UIScriptController: script with no async tasks fails if an
        earlier script registered a callback"
        https://bugs.webkit.org/show_bug.cgi?id=164762
        http://trac.webkit.org/changeset/208770

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

        [Win] WebCore test is failing.
        https://bugs.webkit.org/show_bug.cgi?id=164772

        Reviewed by Brent Fulgham.

        The value of CGRectInfinite is not the same on Windows as on Mac.

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

2016-11-15  Alexey Proskuryakov  <ap@apple.com>

        Update Youenn's e-mail addresses.

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

2016-11-15  Simon Fraser  <simon.fraser@apple.com>

        UIScriptController: script with no async tasks fails if an earlier script registered a callback
        https://bugs.webkit.org/show_bug.cgi?id=164762

        Reviewed by Wenson Hsieh.
        
        UIScriptContext::runUIScript() considers a script to be "immediate" if that script doesn't
        queue any async tasks. However, if an earlier UI script registered a callback, UIScriptContext::runUIScript()
        would consider that an outstanding task.
        
        Fix by unregistering any callbacks associated with the current UI script when uiScriptComplete() is called.

        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::tryToCompleteUIScriptForCurrentParentCallback):

2016-11-15  Simon Fraser  <simon.fraser@apple.com>

        UIScriptController: setting a callback to undefined should unregister it
        https://bugs.webkit.org/show_bug.cgi?id=164796

        Reviewed by Dean Jackson.
        
        "Immediate" UI scripts (those that don't schedule any async tasks) should return
        immediately, without the need to call uiScriptComplete(). However, this is broken if
        an earlier UI script registered a callback (since no-one clears that callback after the
        first script completes).

        Make possible the workaround of setting the callback to undefined, which previously did
        not clear the callback registration.

        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::registerCallback):
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformClearAllCallbacks):

2016-11-14  Mark Lam  <mark.lam@apple.com>

        Enhance run-jsc-stress-test script to allow optional test specific options to be added for all test run configurations.
        https://bugs.webkit.org/show_bug.cgi?id=164695

        Reviewed by Keith Miller.

        This gives us more flexibility when specific tests needs to enable special JSC
        options in order to exercise specific code paths to be tested.  It also saves us
        from having to create duplicate test run configurations e.g. runMiscFTLNoCJITTest.
        We can now just use runFTLNoCJIT in its place.

        Also replaced the ifJSCArgIsntProvidedAreWeReleaseBuild variable with $buildType
        so that we have the ability to skip certain tests for release or debug builds.
        This will be needed in the upcoming patch for https://webkit.org/b/155145.

        * Scripts/run-jsc-stress-tests:

2016-11-14  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose STATE_SINGLE_LINE and STATE_MULTI_LINE for ARIA searchbox role
        https://bugs.webkit.org/show_bug.cgi?id=164712

        Reviewed by Chris Fleizach.

        Add AccessibilityUIElement::isSingleLine, AccessibilityUIElement::isMultiLine
        to DRT and WKTR. Implement it for ATK.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::isSingleLine):
        (AccessibilityUIElement::isMultiLine):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isSingleLine):
        (AccessibilityUIElement::isMultiLine):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isSingleLine):
        (AccessibilityUIElement::isMultiLine):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isSingleLine):
        (WTR::AccessibilityUIElement::isMultiLine):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::isSingleLine):
        (WTR::AccessibilityUIElement::isMultiLine):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isSingleLine):
        (WTR::AccessibilityUIElement::isMultiLine):

2016-11-14  Youenn Fablet  <youenn@apple.com>

        Support WPT templated tests
        https://bugs.webkit.org/show_bug.cgi?id=164707

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_html_files_for_templated_js_tests): Generating empty HTML files for templated JS tests.
        (TestImporter.import_tests):

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

        Implement WTF::Expected
        https://bugs.webkit.org/show_bug.cgi?id=164526

        Reviewed by Yusuke Suzuki.

        std::expected isn't in C++17, and may be in C++20. It's a nice
        complement to std::any / std::optional because it's a type-tagged
        union which has a single expected result but could also contain an
        error.

        This would be useful in the WebAssembly parser, for example.

        Using this implementation will allow us to provide feedback to the
        standards committee and guide std::expected's design before it
        gets standardized. I've already sent a bunch of feedback to the
        author based on my experience implementing this.

        This could supplement WTF::Either and WTF::ExceptionOr.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Expected.cpp: Added.
        (WTF::operator<<):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::foo::foo):
        (TestWebKitAPI::foo::~foo):
        (TestWebKitAPI::foo::operator==):
        (TestWebKitAPI::operator<<):

2016-11-12  Simon Fraser  <simon.fraser@apple.com>

        Add a way to get the UI-side scrolling tree as text via UIScriptController
        https://bugs.webkit.org/show_bug.cgi?id=164697

        Reviewed by Zalan Bujtas.

        Add UIScriptController::scrollingTreeAsText(), which gets the state of the scrolling
        tree in the UI process, including the current positions of CALayers. This will be used
        to test UI-side scrolling and visual viewports.

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

2016-11-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        The main content heuristic should be robust when handling large media elements
        https://bugs.webkit.org/show_bug.cgi?id=164676
        <rdar://problem/29211503>

        Reviewed by Eric Carlson.

        Added a new test verifying that enormous video elements are handled gracefully when put through the main
        content heuristic.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/enormous-video-with-sound.html: Added.

2016-11-12  Dan Bernstein  <mitz@apple.com>

        run-safari does not work for open source contributors
        https://bugs.webkit.org/show_bug.cgi?id=164667
        <rdar://problem/29229894>

        Reviewed by Joseph Pecoraro.

        * Scripts/run-api-tests:
        (archCommandLineArgumentsForRestrictedEnvironmentVariables): Moved from here…
        * Scripts/webkitdirs.pm:
        (archCommandLineArgumentsForRestrictedEnvironmentVariables): …to here
        (runMacWebKitApp): Have arch(1) carry the DYLD_* variables we set in our environmet over
          to the environment of the app being run.

2016-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        Removed unused INCLUDE_OPTIONS_FOR_DEBUGGING
        https://bugs.webkit.org/show_bug.cgi?id=164664

        Reviewed by Dan Bernstein.

        * Scripts/debug-minibrowser:
        * Scripts/debug-safari:
        * Scripts/debug-test-runner:
        * Scripts/webkitdirs.pm:
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded):
        There are no debug specific options anymore.

2016-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] autocorrect and autocapitalize attributes do not work in contenteditable elements
        https://bugs.webkit.org/show_bug.cgi?id=164538
        <rdar://problem/8418711>

        Reviewed by Ryosuke Niwa.

        Adds support for being able to test autocorrect and autocapitalize attributes in contenteditable areas. To do
        this, we add removeAllDynamicDictionaries to UIScriptController in order to ensure that autocorrect suggestions
        are reset to their defaults prior to running contenteditable-autocorrect-off.html.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::removeAllDynamicDictionaries):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._createSimulatorApp):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::removeAllDynamicDictionaries):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _keyboardDidShow:]):
        (-[TestRunnerWKWebView _keyboardDidHide:]):

        Work around an issue where consecutive UIKeyboardDidShowNotification would cause keyboard appearance callbacks
        to be fired multiple times. This was causing a single key press to cause two characters to be typed. While this
        does not affect the correctness of existing tests, the new autocorrection test requires this workaround.

        * WebKitTestRunner/ios/UIKitSPI.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::waitForTextPredictionsViewAndSelectCandidateAtIndex):
        (WTR::UIScriptController::removeAllDynamicDictionaries):

2016-11-11  Alex Christensen  <achristensen@webkit.org>

        Build all Mac API tests
        https://bugs.webkit.org/show_bug.cgi?id=164633

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm:

2016-11-11  Alex Christensen  <achristensen@webkit.org>

        Allow mutable lambdas in HashMap::ensure
        https://bugs.webkit.org/show_bug.cgi?id=164642

        Reviewed by Sam Weinig.

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

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

        Composition state should be cleared when changing focus to a non-editable element
        https://bugs.webkit.org/show_bug.cgi?id=164595
        <rdar://problem/26412551>

        Reviewed by Enrica Casucci.

        Adds support for window.textInputController in DumpRenderTree on iOS. So far, only the methods needed for the
        new layout test (editing/focus-change-with-marked-text.html) are supported. These are insertText, setMarkedText,
        and markedRange.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TextInputController.h: Renamed from Tools/DumpRenderTree/mac/TextInputController.h.

        Remove the PLATFORM(MAC) guard for defining the TextInputController. Also, move the TextInputController header
        out of the /mac platform directory.

        * DumpRenderTree/ios/TextInputControllerIOS.m: Added.
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController initWithWebView:]):
        (-[TextInputController markedRange]):
        (-[TextInputController insertText:]):
        (-[TextInputController setMarkedText:selectedFrom:length:]):

        Introduces TextInputControllerIOS.m, which contains an iOS implementation of TextInputController. Only a subset
        of the methods available on the Mac version will be available on iOS for now (see above).

        * DumpRenderTree/mac/FrameLoadDelegate.mm:

        Remove the PLATFORM(MAC) guard for initializing the TextInputController and binding it to the window object.

        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/TextInputControllerMac.m: Renamed from Tools/DumpRenderTree/mac/TextInputController.m.
        (-[WebHTMLView interpretKeyEvents:]):
        (-[WebNSRange initWithNSRange:]):
        (-[WebNSRange location]):
        (-[WebNSRange length]):
        (+[WebNSRange isSelectorExcludedFromWebScript:]):
        (+[NSMutableAttributedString isSelectorExcludedFromWebScript:]):
        (+[NSMutableAttributedString webScriptNameForSelector:]):
        (-[NSMutableAttributedString getLength]):
        (-[NSMutableAttributedString ranges]):
        (-[NSMutableAttributedString attributeNamesAtIndex:]):
        (-[NSMutableAttributedString valueOfAttribute:atIndex:]):
        (-[NSMutableAttributedString addAttribute:value:]):
        (-[NSMutableAttributedString addAttribute:value:from:length:]):
        (-[NSMutableAttributedString addColorAttribute:red:green:blue:alpha:]):
        (-[NSMutableAttributedString addColorAttribute:red:green:blue:alpha:from:length:]):
        (-[NSMutableAttributedString addFontAttribute:fontName:size:]):
        (-[NSMutableAttributedString addFontAttribute:fontName:size:from:length:]):
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController initWithWebView:]):
        (-[TextInputController dealloc]):
        (-[TextInputController textInput]):
        (-[TextInputController insertText:]):
        (-[TextInputController doCommand:]):
        (-[TextInputController setMarkedText:selectedFrom:length:]):
        (-[TextInputController unmarkText]):
        (-[TextInputController hasMarkedText]):
        (-[TextInputController conversationIdentifier]):
        (-[TextInputController substringFrom:length:]):
        (-[TextInputController attributedSubstringFrom:length:]):
        (-[TextInputController legacyAttributedString:]):
        (-[TextInputController markedRange]):
        (-[TextInputController selectedRange]):
        (-[TextInputController firstRectForCharactersFrom:length:]):
        (-[TextInputController characterIndexForPointX:Y:]):
        (-[TextInputController validAttributesForMarkedText]):
        (-[TextInputController attributedStringWithString:]):
        (-[TextInputController stringWithUndoGroupingInsertion:]):
        (-[TextInputController dictatedStringWithPrimaryString:alternative:alternativeOffset:alternativeLength:]):
        (-[TextInputController setInputMethodHandler:]):
        (-[TextInputController interpretKeyEvents:withSender:]):

        Fixes miscellaneous style issues.

2016-11-11  Philippe Normand  <pnormand@igalia.com>

        [GTK][JHbuild] bump libnice version in openwebrtc.modules
        https://bugs.webkit.org/show_bug.cgi?id=164586

        Reviewed by Michael Catanzaro.

        Update to a recent libnice git snapshot and remove patches already
        upstream or not applying anymore. The patches not upstream yet
        will be reported in Phabricator.

        * gtk/openwebrtc.modules:
        * gtk/patches/libnice-0001-agent-Remove-unnecessary-NULL-check.patch: Removed.
        * gtk/patches/libnice-0002-Do-not-update-a-remote-candidate-s-type.patch: Removed.
        * gtk/patches/libnice-0002-TURN-handle-437-Allocation-Mismatch-responses.patch: Removed.
        * gtk/patches/libnice-0003-Do-not-compare-scope-for-IPv6-address-when-scope-is-.patch: Removed.
        * gtk/patches/libnice-0004-Removing-no-op-assignment.patch: Removed.

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

        Fix assertion after r208534.
        https://bugs.webkit.org/show_bug.cgi?id=160497

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/MemoryPressureHandler.mm: Added.
        (TestWebKitAPI::TEST):
        Add a regression test.

2016-11-10  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r208522): LayoutTest fast/loader/reload-zero-byte-plugin.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=164570

        Reviewed by Simon Fraser.

        Properly reset TestController::m_shouldDownloadUndisplayableMIMETypes between tests to
        avoid flakiness.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2016-11-10  Miguel Gomez  <magomez@igalia.com>

        Unreviewed. Added myself to the list of committers.

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

2016-10-27  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] New API to notify about dynamically added forms
        https://bugs.webkit.org/show_bug.cgi?id=164050

        Reviewed by Carlos Garcia Campos.

        Added a new test case to verify that dinamically added forms correctly trigger the
        "form-controls-associated" signal from WebPage.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (didAssociateFormControlsCallback):
        (testWebExtensionFormControlsAssociated):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (DelayedSignal::DelayedSignal):
        (emitFormControlsAssociated):
        (formControlsAssociatedCallback):
        (pageCreatedCallback):

2016-11-09  Ryosuke Niwa  <rniwa@webkit.org>

        WebHTMLView's _attributeStringFromDOMRange should use HTMLConverter instead of NSAttributedString's _initWithDOMRange
        https://bugs.webkit.org/show_bug.cgi?id=164501
        <rdar://problem/29152282>

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/TextInputController.m:
        (-[TextInputController legacyAttributedString:]):

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [WK2][NETWORK_SESSION] Add support for downloading file backed blobs
        https://bugs.webkit.org/show_bug.cgi?id=164458
        <rdar://problem/28905514>

        Reviewed by Darin Adler.

        Add testRunner.setShouldDownloadUndisplayableMIMETypes(bool) API so that layout
        tests can request that such resources are downloaded instead of being ignored.

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

2016-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: Network process crash when converting main resource to download
        https://bugs.webkit.org/show_bug.cgi?id=164220

        Reviewed by Alex Christensen.

        Split /webkit2/Downloads/policy-decision-download in two, one to test the full load when main resource is
        converted to a download and another one to test the cancellation as the test was doing before. When doing the
        full load, delay a bit the decide destination to ensure the load is aborted before the data task has became a
        download.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testPolicyResponseDownload):
        (testPolicyResponseDownloadCancel):
        (beforeAll):

2016-11-09  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] fix error message caused by eina log
        https://bugs.webkit.org/show_bug.cgi?id=164546

        Reviewed by Gyuyoung Kim.

        Fix error message caused by eina log when MiniBrowser is working with help option.

        * MiniBrowser/efl/main.c:
        (quit):

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

        Unreviewed build fix after r208509.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setNeedsStorageAccessFromFileURLsQuirk): Add missing TestRunner implementation."

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r208438.

        crashes

        Reverted changeset:

        "[WK2][NETWORK_SESSION] Add support for downloading file
        backed blobs"
        https://bugs.webkit.org/show_bug.cgi?id=164458
        http://trac.webkit.org/changeset/208438

2016-11-04  Brent Fulgham  <bfulgham@apple.com>

        Local HTML should be blocked from localStorage access unless "Disable Local File Restrictions" is checked
        https://bugs.webkit.org/show_bug.cgi?id=155185
        <rdar://problem/11101440>

        Reviewed by Brady Eidson.

        * DumpRenderTree/TestRunner.cpp:
        (setNeedsLocalStorageQuirkCallback): Added.
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Update for new quirk setting.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setNeedsLocalStorageQuirk):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageQuirkEnabled.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageQuirkTest.mm: Added.
        (-[LocalStorageQuirkMessageHandler userContentController:didReceiveScriptMessage:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Update for new quirk setting.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setNeedsLocalStorageQuirk): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        URLParser should not consider path of URLs with no host to start at the first slash after the colon
        https://bugs.webkit.org/show_bug.cgi?id=164555

        Reviewed by Tim Horton.

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

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

        test-webkitpy failing test_create_patch_is_full_patch unit test
        https://bugs.webkit.org/show_bug.cgi?id=164385

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Fixed expected output to match output.

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [Mac] Stop using deprecated AppKit enumeration values
        https://bugs.webkit.org/show_bug.cgi?id=164494

        Reviewed by Darin Adler.

        Stop using deprecated AppKit enumeration values.

        * DumpRenderTree/mac/EventSendingController.mm:
        (eventTypeForMouseButtonAndAction):
        (modifierFlags):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController contextClick]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * DumpRenderTree/mac/TextInputController.m:
        (-[TextInputController interpretKeyEvents:withSender:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/CommandBackForward.mm:
        (simulateCommandArrow):
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenLayoutConstraints.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm:
        (UserInitiatedActionTest::SetUp):
        (UserInitiatedActionTest::click):
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        (TestWebKitAPI::AcceptsFirstMouse::runTest):
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:
        (TestWebKitAPI::contextMenuCopyLink):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/ContextMenuDefaultItemsHaveTags.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::runTest):
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::isKeyDown):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::initialize):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::eventTypeForButton):
        (TestWebKitAPI::modifierFlagsForWKModifiers):
        * TestWebKitAPI/mac/TestWKWebViewMac.mm:
        (__simulated_forceClickAssociatedEventsMask):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebView _setUpTestWindow:]):
        (-[TestWKWebView typeCharacter:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::eventTypeForMouseButtonAndAction):
        (WTR::buildModifierFlags):
        (WTR::EventSenderProxy::sendMouseDownToStartPressureEvents):
        (WTR::EventSenderProxy::mouseForceClick):
        (WTR::EventSenderProxy::startAndCancelMouseForceClick):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::swipeGestureWithWheelAndMomentumPhases):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Support TouchBar in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=164437
        -and corresponding-
        rdar://problem/28876524

        Reviewed by Darin Adler.

        This makes MiniBrowser support TouchBar customization. 

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate awakeFromNib]):

2016-11-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Use libgcrypt instead of GnuTLS for CryptoDigest
        https://bugs.webkit.org/show_bug.cgi?id=164461

        Reviewed by Michael Catanzaro.

        As GTK port in r208297, EFL port starts to use libgcrypt instead of GnuTLS as well.

        * efl/install-dependencies: Add libgcript package dependecy.

2016-11-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Remove unused function in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=164398

        Reviewed by Darin Adler.

        * MiniBrowser/efl/main.c:
        (window_find_with_elm_window): Deleted because it is not used anywhere.

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [WK2][NETWORK_SESSION] Add support for downloading file backed blobs
        https://bugs.webkit.org/show_bug.cgi?id=164458
        <rdar://problem/28905514>

        Reviewed by Darin Adler.

        Add testRunner.setShouldDownloadUndisplayableMIMETypes(bool) API so that layout
        tests can request that such resources are downloaded instead of being ignored.

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

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

        Make rpaths more robust for iOS Simulators
        https://bugs.webkit.org/show_bug.cgi?id=164521

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._createSimulatorApp): Added more robust path.

2016-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix Tools build on case sensitive file systems
        https://bugs.webkit.org/show_bug.cgi?id=164474

        Unreviewed buildfix.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformMac.cmake:
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * MiniBrowser/mac/CMakeLists.txt:

2016-11-04  Filip Pizlo  <fpizlo@apple.com>

        WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
        https://bugs.webkit.org/show_bug.cgi?id=152045

        Reviewed by Andy Estes.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp:
        (TestWebKitAPI::ToUpperConverter::stopProducing):
        (TestWebKitAPI::ToUpperConverter::stopConsuming):
        * TestWebKitAPI/Tests/WTF/Time.cpp: Added.
        (WTF::operator<<):
        (TestWebKitAPI::TEST):

2016-11-04  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r208293.

        asserts in API tests.

        Reverted changeset:

        "NetworkSession: Network process crash when converting main
        resource to download"
        https://bugs.webkit.org/show_bug.cgi?id=164220
        http://trac.webkit.org/changeset/208293

2016-11-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a setting and preferences to enable/disable async image decoding
        https://bugs.webkit.org/show_bug.cgi?id=164417

        Reviewed by Simon Fraser.

        Pref and a menu item to toggle asyncImageDecodingEnabled for WebKits 1 and 2.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleAsyncImageDecodingEnabled:]):
        (-[SettingsController asyncImageDecodingEnabled]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2016-11-04  Brady Eidson  <beidson@apple.com>

        REGRESSION (r208349) StringHasher::hashMemory behavior changed, causing API tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=164390

        Reviewed by Geoffrey Garen.

        Operating under the assumption that the behavior change is okay/desirable, this updates the test.

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

2016-11-04  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Attempting to clear selection on ARIA listboxes results in crash
        https://bugs.webkit.org/show_bug.cgi?id=164331

        Reviewed by Chris Fleizach.

        Add AccessibilityUIElement::clearSelectedChildren() to DRT and WKTR.
        Implement it for ATK.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::clearSelectedChildren):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::clearSelectedChildren):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::clearSelectedChildren):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::clearSelectedChildren):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::clearSelectedChildren):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::clearSelectedChildren):

2016-11-04  Per Arne Vollan  <pvollan@apple.com>

        [Win] Page visibility tests are timing out.
        https://bugs.webkit.org/show_bug.cgi?id=164363

        Reviewed by Brent Fulgham.

        Implement methods to set page visibility.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):

2016-11-03  Simon Fraser  <simon.fraser@apple.com>

        Give all the geometry classes a single-argument scale() function for consistency
        https://bugs.webkit.org/show_bug.cgi?id=164400

        Reviewed by Zalan Bujtas.
        
        Test single-argument scale().

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

2016-11-03  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Implement user interface for HTML form validation
        https://bugs.webkit.org/show_bug.cgi?id=164143
        <rdar://problem/28944652>

        Reviewed by Simon Fraser.

        Add support for UIScriptController::contentsOfUserInterfaceItem("validationBubble")
        on both Mac and iOS to retrieve the currently displayed validation message.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::contentsOfUserInterfaceItem):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::contentsOfUserInterfaceItem):
        (WTR::UIScriptController::selectFormAccessoryPickerRow):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::contentsOfUserInterfaceItem):

2016-11-03  Konstantin Tokarev  <annulen@yandex.ru>

        Fixes to build JSCOnly on macOS
        https://bugs.webkit.org/show_bug.cgi?id=164379

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/PlatformJSCOnly.cmake: Moved BUILDING_JSCONLY__
        definition to OptionsJSCOnly.cmake

2016-11-03  Dan Bernstein  <mitz@apple.com>

        WKWebView’s _observedRenderingProgressEvents not restored after web process crash
        https://bugs.webkit.org/show_bug.cgi?id=164368
        <rdar://problem/29091954>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ObservedRenderingProgressEventsAfterCrash.mm: Added.
        (TEST):

2016-11-03  Alex Christensen  <achristensen@webkit.org>

        Purge PassRefPtr from Tools
        https://bugs.webkit.org/show_bug.cgi?id=164358

        Reviewed by Michael Catanzaro.

        * ImageDiff/efl/ImageDiff.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::create):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::elementAtPoint):
        (WTR::AccessibilityController::addNotificationListener): Deleted.
        (WTR::AccessibilityController::removeNotificationListener): Deleted.
        (WTR::AccessibilityController::accessibleElementById): Deleted.
        (WTR::AccessibilityController::logAccessibilityEvents): Deleted.
        (WTR::AccessibilityController::resetToConsistentState): Deleted.
        (WTR::AccessibilityController::platformName): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (WTR::AccessibilityController::logAccessibilityEvents):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        (WTR::AccessibilityTextMarker::create):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        (WTR::AccessibilityTextMarkerRange::create):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::create):
        (WTR::AccessibilityUIElement::linkedElement):
        (WTR::AccessibilityUIElement::headerElementAtIndex):
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::characterAtOffset):
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::AccessibilityUIElement): Deleted.
        (WTR::AccessibilityUIElement::~AccessibilityUIElement): Deleted.
        (WTR::AccessibilityUIElement::isEqual): Deleted.
        (WTR::AccessibilityUIElement::elementAtPoint): Deleted.
        (WTR::AccessibilityUIElement::childAtIndex): Deleted.
        (WTR::AccessibilityUIElement::indexOfChild): Deleted.
        (WTR::AccessibilityUIElement::childrenCount): Deleted.
        (WTR::AccessibilityUIElement::titleUIElement): Deleted.
        (WTR::AccessibilityUIElement::parentElement): Deleted.
        (WTR::AccessibilityUIElement::takeFocus): Deleted.
        (WTR::AccessibilityUIElement::takeSelection): Deleted.
        (WTR::AccessibilityUIElement::addSelection): Deleted.
        (WTR::AccessibilityUIElement::removeSelection): Deleted.
        (WTR::AccessibilityUIElement::allAttributes): Deleted.
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements): Deleted.
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex): Deleted.
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks): Deleted.
        (WTR::AccessibilityUIElement::attributesOfChildren): Deleted.
        (WTR::AccessibilityUIElement::parameterizedAttributeNames): Deleted.
        (WTR::AccessibilityUIElement::increment): Deleted.
        (WTR::AccessibilityUIElement::decrement): Deleted.
        (WTR::AccessibilityUIElement::showMenu): Deleted.
        (WTR::AccessibilityUIElement::press): Deleted.
        (WTR::AccessibilityUIElement::stringAttributeValue): Deleted.
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue): Deleted.
        (WTR::AccessibilityUIElement::uiElementAttributeValue): Deleted.
        (WTR::AccessibilityUIElement::numberAttributeValue): Deleted.
        (WTR::AccessibilityUIElement::boolAttributeValue): Deleted.
        (WTR::AccessibilityUIElement::isAttributeSupported): Deleted.
        (WTR::AccessibilityUIElement::isAttributeSettable): Deleted.
        (WTR::AccessibilityUIElement::isPressActionSupported): Deleted.
        (WTR::AccessibilityUIElement::isIncrementActionSupported): Deleted.
        (WTR::AccessibilityUIElement::isDecrementActionSupported): Deleted.
        (WTR::AccessibilityUIElement::role): Deleted.
        (WTR::AccessibilityUIElement::subrole): Deleted.
        (WTR::AccessibilityUIElement::roleDescription): Deleted.
        (WTR::AccessibilityUIElement::computedRoleString): Deleted.
        (WTR::AccessibilityUIElement::title): Deleted.
        (WTR::AccessibilityUIElement::description): Deleted.
        (WTR::AccessibilityUIElement::language): Deleted.
        (WTR::AccessibilityUIElement::stringValue): Deleted.
        (WTR::AccessibilityUIElement::accessibilityValue): Deleted.
        (WTR::AccessibilityUIElement::helpText): Deleted.
        (WTR::AccessibilityUIElement::orientation): Deleted.
        (WTR::AccessibilityUIElement::x): Deleted.
        (WTR::AccessibilityUIElement::y): Deleted.
        (WTR::AccessibilityUIElement::width): Deleted.
        (WTR::AccessibilityUIElement::height): Deleted.
        (WTR::AccessibilityUIElement::intValue): Deleted.
        (WTR::AccessibilityUIElement::minValue): Deleted.
        (WTR::AccessibilityUIElement::maxValue): Deleted.
        (WTR::AccessibilityUIElement::valueDescription): Deleted.
        (WTR::AccessibilityUIElement::insertionPointLineNumber): Deleted.
        (WTR::AccessibilityUIElement::selectedTextRange): Deleted.
        (WTR::AccessibilityUIElement::isEnabled): Deleted.
        (WTR::AccessibilityUIElement::isRequired): Deleted.
        (WTR::AccessibilityUIElement::isFocused): Deleted.
        (WTR::AccessibilityUIElement::isFocusable): Deleted.
        (WTR::AccessibilityUIElement::isSelected): Deleted.
        (WTR::AccessibilityUIElement::isSelectedOptionActive): Deleted.
        (WTR::AccessibilityUIElement::isSelectable): Deleted.
        (WTR::AccessibilityUIElement::isMultiSelectable): Deleted.
        (WTR::AccessibilityUIElement::setSelectedChild): Deleted.
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex): Deleted.
        (WTR::AccessibilityUIElement::removeSelectionAtIndex): Deleted.
        (WTR::AccessibilityUIElement::selectedChildrenCount): Deleted.
        (WTR::AccessibilityUIElement::selectedChildAtIndex): Deleted.
        (WTR::AccessibilityUIElement::isExpanded): Deleted.
        (WTR::AccessibilityUIElement::isChecked): Deleted.
        (WTR::AccessibilityUIElement::isIndeterminate): Deleted.
        (WTR::AccessibilityUIElement::isVisible): Deleted.
        (WTR::AccessibilityUIElement::isOffScreen): Deleted.
        (WTR::AccessibilityUIElement::isCollapsed): Deleted.
        (WTR::AccessibilityUIElement::isIgnored): Deleted.
        (WTR::AccessibilityUIElement::hasPopup): Deleted.
        (WTR::AccessibilityUIElement::hierarchicalLevel): Deleted.
        (WTR::AccessibilityUIElement::clickPointX): Deleted.
        (WTR::AccessibilityUIElement::clickPointY): Deleted.
        (WTR::AccessibilityUIElement::documentEncoding): Deleted.
        (WTR::AccessibilityUIElement::documentURI): Deleted.
        (WTR::AccessibilityUIElement::url): Deleted.
        (WTR::AccessibilityUIElement::speak): Deleted.
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders): Deleted.
        (WTR::AccessibilityUIElement::attributesOfRowHeaders): Deleted.
        (WTR::AccessibilityUIElement::attributesOfColumns): Deleted.
        (WTR::AccessibilityUIElement::attributesOfRows): Deleted.
        (WTR::AccessibilityUIElement::attributesOfVisibleCells): Deleted.
        (WTR::AccessibilityUIElement::attributesOfHeader): Deleted.
        (WTR::AccessibilityUIElement::indexInTable): Deleted.
        (WTR::AccessibilityUIElement::rowIndexRange): Deleted.
        (WTR::AccessibilityUIElement::columnIndexRange): Deleted.
        (WTR::AccessibilityUIElement::rowCount): Deleted.
        (WTR::AccessibilityUIElement::columnCount): Deleted.
        (WTR::AccessibilityUIElement::rowHeaders): Deleted.
        (WTR::AccessibilityUIElement::columnHeaders): Deleted.
        (WTR::AccessibilityUIElement::selectedRowAtIndex): Deleted.
        (WTR::AccessibilityUIElement::disclosedByRow): Deleted.
        (WTR::AccessibilityUIElement::disclosedRowAtIndex): Deleted.
        (WTR::AccessibilityUIElement::rowAtIndex): Deleted.
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex): Deleted.
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex): Deleted.
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex): Deleted.
        (WTR::AccessibilityUIElement::ariaIsGrabbed): Deleted.
        (WTR::AccessibilityUIElement::ariaDropEffects): Deleted.
        (WTR::AccessibilityUIElement::classList): Deleted.
        (WTR::AccessibilityUIElement::lineForIndex): Deleted.
        (WTR::AccessibilityUIElement::rangeForLine): Deleted.
        (WTR::AccessibilityUIElement::rangeForPosition): Deleted.
        (WTR::AccessibilityUIElement::boundsForRange): Deleted.
        (WTR::AccessibilityUIElement::setSelectedTextRange): Deleted.
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        (WTR::AccessibilityUIElement::stringForRange): Deleted.
        (WTR::AccessibilityUIElement::attributedStringForRange): Deleted.
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled): Deleted.
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate): Deleted.
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate): Deleted.
        (WTR::AccessibilityUIElement::selectTextWithCriteria): Deleted.
        (WTR::AccessibilityUIElement::cellForColumnAndRow): Deleted.
        (WTR::AccessibilityUIElement::horizontalScrollbar): Deleted.
        (WTR::AccessibilityUIElement::verticalScrollbar): Deleted.
        (WTR::AccessibilityUIElement::addNotificationListener): Deleted.
        (WTR::AccessibilityUIElement::removeNotificationListener): Deleted.
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker): Deleted.
        (WTR::AccessibilityUIElement::textMarkerRangeForElement): Deleted.
        (WTR::AccessibilityUIElement::textMarkerRangeLength): Deleted.
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): Deleted.
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): Deleted.
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): Deleted.
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): Deleted.
        (WTR::AccessibilityUIElement::endTextMarkerForBounds): Deleted.
        (WTR::AccessibilityUIElement::startTextMarkerForBounds): Deleted.
        (WTR::AccessibilityUIElement::textMarkerForPoint): Deleted.
        (WTR::AccessibilityUIElement::previousTextMarker): Deleted.
        (WTR::AccessibilityUIElement::nextTextMarker): Deleted.
        (WTR::AccessibilityUIElement::startTextMarker): Deleted.
        (WTR::AccessibilityUIElement::endTextMarker): Deleted.
        (WTR::AccessibilityUIElement::stringForTextMarkerRange): Deleted.
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): Deleted.
        (WTR::AccessibilityUIElement::indexForTextMarker): Deleted.
        (WTR::AccessibilityUIElement::isTextMarkerValid): Deleted.
        (WTR::AccessibilityUIElement::textMarkerForIndex): Deleted.
        (WTR::AccessibilityUIElement::scrollToMakeVisible): Deleted.
        (WTR::AccessibilityUIElement::scrollToGlobalPoint): Deleted.
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus): Deleted.
        (WTR::AccessibilityUIElement::supportedActions): Deleted.
        (WTR::AccessibilityUIElement::mathPostscriptsDescription): Deleted.
        (WTR::AccessibilityUIElement::mathPrescriptsDescription): Deleted.
        (WTR::AccessibilityUIElement::pathDescription): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::create):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/GCController.cpp:
        (WTR::GCController::create):
        * WebKitTestRunner/InjectedBundle/GCController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::create):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp:
        (WTR::TextInputController::create):
        * WebKitTestRunner/InjectedBundle/TextInputController.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::logAccessibilityEvents): Deleted.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h:
        (WTR::AccessibilityNotificationHandler::create):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::accessibilityElementAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::logAccessibilityEvents): Deleted.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::headerElementAtIndex):
        (WTR::AccessibilityUIElement::linkedElement):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        (WTR::AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::logAccessibilityEvents): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (makeValueRefForValue):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::keyPadName):
        (WTR::keyName):

2016-11-02  Alex Christensen  <achristensen@webkit.org>

        Remove Battery Status API from the tree
        https://bugs.webkit.org/show_bug.cgi?id=164213

        Reviewed by Sam Weinig.

        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/common/config/watchlist:

2016-11-02  Olivier Blin  <olivier.blin@softathome.com>

        [GTK] Use libgcrypt instead of GnuTLS for CryptoDigest and SubtleCrypto HMAC implementation
        https://bugs.webkit.org/show_bug.cgi?id=163125

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: List libgcrypt for WebKitGTK+ build, and gnutls for jhbuild only.
        gnutls is useful for glib-networking in jhbuild.

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: Network process crash when converting main resource to download
        https://bugs.webkit.org/show_bug.cgi?id=164220

        Reviewed by Alex Christensen.

        Split /webkit2/Downloads/policy-decision-download in two, one to test the full load when main resource is
        converted to a download and another one to test the cancellation as the test was doing before. When doing the
        full load, delay a bit the decide destination to ensure the load is aborted before the data task has became a
        download.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testPolicyResponseDownload):
        (testPolicyResponseDownloadCancel):
        (beforeAll):

2016-11-01  Alex Christensen  <achristensen@webkit.org>

        Remove PassRefPtr from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=164307

        Reviewed by Sam Weinig.

        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::create):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (createBitmapContext):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::createByAdoptingBitmapAndContext):
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        (createPagedBitmapContext):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * DumpRenderTree/win/TextInputController.h:

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GTestDBus instead of dbus-launch in WebKitTestBus.cpp
        https://bugs.webkit.org/show_bug.cgi?id=161481

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp:
        (WebKitTestBus::WebKitTestBus):
        (WebKitTestBus::~WebKitTestBus):
        (WebKitTestBus::run):
        (WebKitTestBus::getOrCreateConnection):
        (WebKitTestBus::createProxy):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.h:

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix /webkit2/WebKitWebContext/get-plugins in the bots after r208273.

        The test fails now if WEBKIT_TEST_PLUGIN_DIR contains symlinks, which is the case of the GTK+ bots.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextGetPlugins): Use realpath with WEBKIT_TEST_PLUGIN_DIR when building the expected plugins path.

2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Enable creation of ReadableByteStreamController
        https://bugs.webkit.org/show_bug.cgi?id=164014

        Reviewed by Youenn Fablet.

        Enable the byte stream part of Readable Streams API by default.

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

2016-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Remove CUSTOM_ELEMENTS build flag
        https://bugs.webkit.org/show_bug.cgi?id=164267

        Reviewed by Antti Koivisto.

        Removed the build flag.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-11-01  Alex Christensen  <achristensen@webkit.org>

        Percent-encode non-ASCII code points in hosts of URLs with unrecognized schemes
        https://bugs.webkit.org/show_bug.cgi?id=164290

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        Move helper functions to the top so I can use them from any tests.
        (TestWebKitAPI::shouldFail):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2016-11-01  Hyowon Kim  <hw1008.kim@samsung.com>

        [GTK] Failed to generate GeoClue2Interface files.
        https://bugs.webkit.org/show_bug.cgi?id=164270

        Reviewed by Michael Catanzaro.

        To generate codes for D-Bus interfaces,
        geoclue-2.0 package including D-Bus introspection XML files should be installed.

        * gtk/install-dependencies: add geoclue-2.0 package.

2016-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] generate-bindings-all.pl uses USES_TERMINAL which leaves a noisy line in interactive Ninja build
        https://bugs.webkit.org/show_bug.cgi?id=163868

        Reviewed by Michael Catanzaro.

        It takes long time for generate-bindings-all.pl to generate all
        bindings.  So, it shows the progress while running and
        USES_TERMINAL option of add_custom_target have been used to invoke
        the command.  However, USES_TERMINAL leaves a noisy line in
        Ninja's neat build log of interactive build.

        A new CMake option SHOW_BINDINGS_GENERATION_PROGRESS is added to
        stop using USES_TERMINAL only in case of interactive Ninja build.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Enable
        SHOW_BINDINGS_GENERATION_PROGRESS not in case of interactive
        Ninja build.

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Add basic visual/layout viewport support for fixed position layout
        https://bugs.webkit.org/show_bug.cgi?id=164261

        Reviewed by Dean Jackson.

        Don't give tests in the "visual-viewport" directory a flexible viewport.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldMakeViewportFlexible):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::shouldMakeViewportFlexible):

2016-10-29  Filip Pizlo  <fpizlo@apple.com>

        JSC should support SharedArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=163986

        Reviewed by Keith Miller.
        
        Use the right kind of typed array API.

        * DumpRenderTree/TestRunner.cpp:
        (setAudioResultCallback):

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Make UIScriptController::zoomToScale() work on Mac WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=164238

        Reviewed by Dean Jackson.

        Implement UIScriptController::zoomToScale() for WTR and DRT on Mac.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::zoomToScale):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::zoomToScale):

2016-10-31  Dewei Zhu  <dewei_zhu@apple.com>

        Update twisted version in webkitpy.thirdparty.autoinstalled module.
        https://bugs.webkit.org/show_bug.cgi?id=154667

        Reviewed by Ryosuke Niwa.

        Use twisted_15_5_0 for the twisted module used by run-benchmark because there is a bug in twisted 12.1.0 which sometimes stops the test.
        Installing twisted was introduced in https://bugs.webkit.org/show_bug.cgi?id=147082 for run-benchmark script.
        Since buildbot relies on twisted 12.1.0 and has not been verified the compatibility on twisted 15.5.0, it would be more secure to use an individual version for run-benchmark script.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_twisted_15_5_0):
        (AutoinstallImportHook._install_twisted): Deleted.

2016-10-31  Ryosuke Niwa  <rniwa@webkit.org>

        Enable custom elements by default everywhere
        https://bugs.webkit.org/show_bug.cgi?id=164242

        Reviewed by Antti Koivisto.

        Enable custom elements API on every port by default.

        * Scripts/webkitperl/FeatureList.pm:

2016-10-31  Nan Wang  <n_wang@apple.com>

        AX: aria-sort is not exposed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=164245

        Reviewed by Chris Fleizach.

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

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Implement IntersectionObserver
        https://bugs.webkit.org/show_bug.cgi?id=159475

        Reviewed by Ryosuke Niwa.
        
        Add ENABLE_INTERSECTION_OBSERVER, enabled by default.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-10-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208154.

        This change caused an assertion failure during API tests on
        macOS.

        Reverted changeset:

        "NetworkSession: Network process crash when converting main
        resource to download"
        https://bugs.webkit.org/show_bug.cgi?id=164220
        http://trac.webkit.org/changeset/208154

2016-10-31  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, change my status to be a WebKit reviewer

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

2016-10-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkSession: Network process crash when converting main resource to download
        https://bugs.webkit.org/show_bug.cgi?id=164220

        Reviewed by Alex Christensen.

        Split /webkit2/Downloads/policy-decision-download in two, one to test the full load when main resource is
        converted to a download and another one to test the cancellation as the test was doing before. When doing the
        full load, delay a bit the decide destination to ensure the load is aborted before the data task has became a
        download.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testPolicyResponseDownload):
        (testPolicyResponseDownloadCancel):
        (beforeAll):

2016-10-31  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix watchlist regexp for wasm.

        * Scripts/webkitpy/common/config/watchlist:

2016-10-31  Keith Miller  <keith_miller@apple.com>

        autogenerated files from wasm.json should be in derived sources.
        https://bugs.webkit.org/show_bug.cgi?id=164152

        Reviewed by Filip Pizlo.

        Add message to make sure that people keep the wasm.jsons up to date.

        * Scripts/webkitpy/common/config/watchlist:

2016-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Holding down a key to choose an accented character should fire "insertReplacementText" input events
        https://bugs.webkit.org/show_bug.cgi?id=164209
        <rdar://problem/29019305>

        Reviewed by Darin Adler.

        Adds test support for inserting replacement text on Mac. This is equivalent to holding down a vowel key (e.g.
        'a') to bring up the menu containing accented version of the character, then selecting an accented character to
        insert in place of the typed character. This is exposed via UIScriptController.insertText, which takes a string
        and an insertion range.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::insertText):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:

        Note that there is no callback argument to insertText, since UIScriptController::insertText is synchronous in
        the UI process. The tests end when corresponding input events fired as a result of insertText have been received
        in the web process. Please see the new layout tests for more detail.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::insertText):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::nsStringFromJSString):
        (WTR::UIScriptController::insertText):

2016-10-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Restructure IDLParser structs to better match modern WebIDL concepts
        https://bugs.webkit.org/show_bug.cgi?id=164208

        Reviewed by Darin Adler.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Update for new struct types.

2016-10-29  Darin Adler  <darin@apple.com>

        Fix failing ExtendedColor tests.

        * TestWebKitAPI/Tests/WebCore/ExtendedColor.cpp:
        Changed the tests in two ways: First, use EXPECT_EQ instead of EXPECT_TRUE
        for the string equality comparisons. This required including WTFStringUtilities.h.
        Second, change expected results to match what the code is currently generating,
        so alpha channels are "0.25" rather than "0.25 / 1". I'll let Dean fix both these
        tests and the code if these results are incorrect.

2016-10-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        UIScriptControllerIOS.mm should not be soft-linking UIKit
        https://bugs.webkit.org/show_bug.cgi?id=164171

        Reviewed by Darin Adler.

        Follow-up to r208090. Instead of soft-linking, we can simply grab UIKeyboardPredictionView by name instead.

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

2016-10-28  Darin Adler  <darin@apple.com>

        Move all classes in the HTML directory from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163876

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/TimeRanges.cpp:
        (TestWebKitAPI::ToString): Updated for changes to the TimeRanges class.
        (TestWebKitAPI::TEST): Ditto.

2016-10-28  Devin Rousso  <dcrousso+webkit@gmail.com>

        Unreviewed, changed Devin Rousso's email and nick.

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

2016-10-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOS build after r208090.

        Use soft-linking as needed in UIScriptControllerIOS.mm.

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

2016-10-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        iOS autocorrection does not trigger an input event of inputType "insertReplacementText"
        https://bugs.webkit.org/show_bug.cgi?id=164077
        <rdar://problem/28987810>

        Reviewed by Simon Fraser.

        Adds test support for inserting text candidates on iOS in the form of
        UIScriptController.selectTextCandidateAtIndex(index, callback), which selects the text candidate at a given
        index (this needs to be a value between 0-2 on iOS) and fires the callback when done.

        To implement this, we wait for the text prediction view to have predictions (we determine this by polling at a
        given interval) and then tap the center of the text prediction view at the given index.

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

2016-10-28  Commit Queue  <commit-queue@webkit.org>

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

        We are ready after r208086 (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "Unreviewed, rolling out r207582."
        https://bugs.webkit.org/show_bug.cgi?id=163819
        http://trac.webkit.org/changeset/207700

2016-10-28  Alex Christensen  <achristensen@webkit.org>

        Partially revert 207805 after resolution in URL spec issue 87
        https://bugs.webkit.org/show_bug.cgi?id=164142

        Reviewed by Andy Estes.

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

2016-10-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should not try to interpret host of URLs with unrecognized schemes as IPv4 address
        https://bugs.webkit.org/show_bug.cgi?id=164154

        Reviewed by Andy Estes.

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

2016-10-28  Sam Weinig  <sam@webkit.org>

        [WebIDL] Update parser and code generators to only access type information through the type property
        https://bugs.webkit.org/show_bug.cgi?id=164141

        Reviewed by Anders Carlsson.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Update to always access type information through type accessors. Remove use of removed
        properties.

2016-10-28  Frederic Wang  <fwang@igalia.com>

        [GTK] Upgrade HarfBuzz to version 1.3.3
        https://bugs.webkit.org/show_bug.cgi?id=162719

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules:

2016-10-27  Chris Dumez  <cdumez@apple.com>

        Regression(r203601): Caused crashes in iBooks
        https://bugs.webkit.org/show_bug.cgi?id=164093
        <rdar://problem/28745634>

        Reviewed by Darin Adler.

        Add API test coverage.

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

2016-10-27  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move code generators off of domSignature::type and onto domSignature::idlType
        https://bugs.webkit.org/show_bug.cgi?id=164089

        Reviewed by Alex Christensen.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Update for the removal of domSignature::type, and new signatures of helper predicates.

2016-10-27  Commit Queue  <commit-queue@webkit.org>

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

        triggered aclocal version conflict (Requested by mcatanzaro on
        #webkit).

        Reverted changeset:

        "[GTK] Bump glib to 2.50.1 (or find alternative solution to
        Gtk+ CUPS build issue)"
        https://bugs.webkit.org/show_bug.cgi?id=163689
        http://trac.webkit.org/changeset/207992

2016-10-27  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Bump glib to 2.50.1 (or find alternative solution to Gtk+ CUPS build issue)
        https://bugs.webkit.org/show_bug.cgi?id=163689

        Reviewed by Michael Catanzaro.

        In order to fix bug #163591, we need to apply an upstream patch to GTK+.
        But GTK+ won't build with that patch due to the following error:

            m4_copy: won't overwrite defined macro: glib_DEFUN

        There is an upstream GLib patch which solves that issue. We should apply
        that patch as well, until we bump GLib to 2.50.1 or later.

        * gtk/jhbuild.modules: Apply upstream GLib patch.
        * gtk/patches/glib-deprecate-am-glib-gnu-gettext.patch: Added.

2016-10-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed fix of GTK and EFL test bots.

        * Scripts/webkitperl/FeatureList.pm: Deactivated media-source and
        legacy-encrypted-media by default for GTK and EFL.

2016-10-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK] JSC test wasm.yaml/wasm/js-api/test_basic_api.js.default-wasm and wasm.yaml/wasm/js-api/test_Module.js.default-wasm fail with Exception: ReferenceError: Can't find variable: WebAssembly
        https://bugs.webkit.org/show_bug.cgi?id=163846

        Reviewed by Michael Catanzaro.

        WebAssembly is now developed for Darwin right now.
        Disable WASM tests in the other platforms.

        * Scripts/run-jsc-stress-tests:

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [cmake][GStreamer][MSE][EME] Build MSE and EME code after refactoring
        https://bugs.webkit.org/show_bug.cgi?id=162928

        Reviewed by Xabier Rodriguez-Calvar.

        Explicitly enable MSE and EME on WebKitGTK+ buildbots.

        This patch is co-authored with Philippe Normand <philn@igalia.com> (EME support).

        * Scripts/webkitperl/FeatureList.pm:

2016-10-25  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: skip back support
        https://bugs.webkit.org/show_bug.cgi?id=163725
        <rdar://problem/27989480>

        Reviewed by Dean Jackson.

        * Scripts/webkitpy/layout_tests/servers/aliases.json: Adding a new alias such that we may
        access the modern-media-controls source files through the web server.

2016-10-19  Jer Noble  <jer.noble@apple.com>

        Add WKWebView fullscreen delegate SPI
        https://bugs.webkit.org/show_bug.cgi?id=163674

        Reviewed by Anders Carlsson.

        Add a new API test which verifies that the fullscreen delegate receives notifications.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenDelegate.mm:
        (-[FullscreenDelegateMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[FullscreenDelegateMessageHandler _webViewWillEnterFullscreen:]):
        (-[FullscreenDelegateMessageHandler _webViewDidEnterFullscreen:]):
        (-[FullscreenDelegateMessageHandler _webViewWillExitFullscreen:]):
        (-[FullscreenDelegateMessageHandler _webViewDidExitFullscreen:]):
        (TestWebKitAPI::TEST):

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        URLParser should match old URL::parse with %2E in path
        https://bugs.webkit.org/show_bug.cgi?id=163929

        Reviewed by Alexey Proskuryakov.

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

2016-10-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207795.

        Introduced API test failures on iOS and macOS.

        Reverted changeset:

        "URLParser should match old URL::parse with %2E in path"
        https://bugs.webkit.org/show_bug.cgi?id=163929
        http://trac.webkit.org/changeset/207795

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        URLParser should match old URL::parse with %2E in path
        https://bugs.webkit.org/show_bug.cgi?id=163929

        Reviewed by Alexey Proskuryakov.

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

2016-10-21  Alex Christensen  <achristensen@webkit.org>

        URL::port should return Optional<uint16_t>
        https://bugs.webkit.org/show_bug.cgi?id=163806

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        (TestWebKitAPI::TEST_F):

2016-10-24  Youenn Fablet  <youenn@apple.com>

        Activate WEB_RTC compilation flags for Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=163886

        Reviewed by Eric Carlson.

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

2016-10-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, add myself as a WebKit reviewer

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

2016-10-22  Dan Bernstein  <mitz@apple.com>

        Improve MiniBrowser window titles for URLs without paths and with no title
        <https://webkit.org/b/163843>

        Reviewed by Darin Adler.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController fetch:]): While we’re here, deploy
          +[NSURL _webkit_URLWithUserTypedString:] here to match the WK2BrowserWindowController
          version of this method.
        (-[WK1BrowserWindowController updateTitle:]): If the URL doesn’t have a lastPathComponent,
          use the entire URL.
        (-[WK1BrowserWindowController webView:didCommitLoadForFrame:]): Also while we’re here,
          deploy +[NSURL _web_userVisibleString] here to match the WK2BrowserWindowController
          behavior.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController updateTitle:]): If the URL doesn’t have a lastPathComponent,
          use the entire URL.

2016-10-21  David Kilzer  <ddkilzer@apple.com>

        Bug 163762: IntSize::area() should used checked arithmetic
        <https://webkit.org/b/163762>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/IntRect.cpp:
        (TestWebKitAPI::TEST): Call unsafeGet().
        * TestWebKitAPI/Tests/WebCore/IntSize.cpp:
        (TestWebKitAPI::TEST): Ditto.

2016-10-21  James Craig  <jcraig@apple.com>

        Unreviewed: Added Aaron Chu <aaron_chu@apple.com> to contributors list.

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

2016-10-21  Commit Queue  <commit-queue@webkit.org>

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

        Not quite ready rdar://problem/28897179 (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "Re-enable URLParser for non-Safari Cocoa apps after r207321"
        https://bugs.webkit.org/show_bug.cgi?id=163690
        http://trac.webkit.org/changeset/207582

2016-10-21  Jonathan Bedard  <jbedard@apple.com>

        WebKitTestRunnerApp packages .idl file
        https://bugs.webkit.org/show_bug.cgi?id=163788

        Reviewed by Darin Adler.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Removed .idl file from app package, removed bad reference to app icon.

2016-10-21  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION(r207616): Build is broken due to missing libgeoclue-dev package
        https://bugs.webkit.org/show_bug.cgi?id=163733

        Reviewed by Gyuyoung Kim.

        * efl/install-dependencies: Added geoclue-2.0 package.

2016-10-21  Commit Queue  <commit-queue@webkit.org>

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

        As glib bump was rollout, we need to rollout this too
        (Requested by rego on #webkit).

        Reverted changeset:

        "[GTK] Cannot build GTK+ with CUPS 2.* versions"
        https://bugs.webkit.org/show_bug.cgi?id=163591
        http://trac.webkit.org/changeset/207609

2016-10-20  Chris Dumez  <cdumez@apple.com>

        "Download Linked File" context menu action should use 'download' attribute as suggested filename
        https://bugs.webkit.org/show_bug.cgi?id=163742
        <rdar://problem/28840734>

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/link-with-download-attribute.html: Added.
        * TestWebKitAPI/Tests/WebKit2/mac/ContextMenuDownload.mm: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::getContextMenuFromProposedMenu):
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        (TestWebKitAPI::TEST):

2016-10-20  Commit Queue  <commit-queue@webkit.org>

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

        Introduced 17 new layout test failures (Requested by
        mcatanzaro on #webkit).

        Reverted changeset:

        "[GTK] Bump glib to 2.50.1"
        https://bugs.webkit.org/show_bug.cgi?id=163689
        http://trac.webkit.org/changeset/207589

2016-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-10-20  Sam Weinig  <sam@webkit.org>

        Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
        https://bugs.webkit.org/show_bug.cgi?id=163713

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        Add test for WTF::switchOn()

2016-10-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] CMake does not support the dep files for implicit dependency
        https://bugs.webkit.org/show_bug.cgi?id=161433

        Reviewed by Brent Fulgham.

        Created a Perl script to generate all IDL bindings for CMake.
        This script can regenerate outdated bindings by based on the
        supplemental dependency and dep files created by
        '--write-dependencies' switch of generate-bindings.pl.

        add_custom_target is used to invoke the script instead of
        add_custom_command because Ninja deletes all output files before
        executing the command in case of add_custom_command.

        USES_TERMINAL option of add_custom_target has two effects:
        1) Not buffering output of the command
        2) Invoking the command in the special Ninja pool which inhibits parallel build
        One needs to use CMake 3.2 or later to enable this feature.

        * DumpRenderTree/CMakeLists.txt: Specified a target name for
        GENERATE_BINDINGS. Added dependency for the target.
        * WebKitTestRunner/CMakeLists.txt: Ditto.

2016-10-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Cannot build GTK+ with CUPS 2.* versions
        https://bugs.webkit.org/show_bug.cgi?id=163591

        Reviewed by Michael Catanzaro.

        GTK+ is wrongly checking about the available CUPS version,
        so if you have CUPS 2.* the configure step fails.

        This has been already fixed upstream and included in 2.30 series:
        https://git.gnome.org/browse/gtk+/commit/?id=631f6b536485829a0bd00532f5826ad302b4951b

        Added patch on JHBuild so we can now build GTK+ with CUPS 2.*.

        * gtk/jhbuild.modules: Applied patch and avoid using "configure" script directly
        as the patch modifies "configure.ac".
        * gtk/patches/configure-fix-detecting-CUPS-2.x.patch: Added.

2016-10-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Bump glib to 2.50.1
        https://bugs.webkit.org/show_bug.cgi?id=163689

        Reviewed by Michael Catanzaro.

        This is need in order to fix GTK+ build with CUPS 2.* (bug #163591).

        * gtk/jhbuild.modules: Bump glib version. Pass --disable-libmount to build properly.
        Also we don't need the patches anymore.
        * gtk/patches/gdate-suppress-string-format-literal-warning.patch: Removed.
        * gtk/patches/glib-warning-fix.patch: Removed.

2016-10-19  Alex Christensen  <achristensen@webkit.org>

        Re-enable URLParser for non-Safari Cocoa apps after r207321
        https://bugs.webkit.org/show_bug.cgi?id=163690

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain):
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):

2016-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207557.

        This change caused animations/font-variations tests to time
        out on pre-Sierra Macs.

        Reverted changeset:

        "[macOS] [iOS] Disable variation fonts on macOS El Capitan and
        iOS 9"
        https://bugs.webkit.org/show_bug.cgi?id=163374
        http://trac.webkit.org/changeset/207557

2016-10-19  Andy Estes  <aestes@apple.com>

        Crash in ASCIICaseInsensitiveHash::hash() when a response has a null MIME type
        https://bugs.webkit.org/show_bug.cgi?id=163476
        <rdar://problem/26941395>

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadDataWithNilMIMEType.mm: Added.
        (TEST): Added an API test that passes a nil MIMEType to
        -[WKWebView loadData:MIMEType:characterEncodingName:baseURL:].

2016-10-19  Jer Noble  <jer.noble@apple.com>

        Modify testrunner to mute audio during tests
        https://bugs.webkit.org/show_bug.cgi?id=162582

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2016-10-19  Joseph Pecoraro  <pecoraro@apple.com>

        check-webkit-style: fix false-positive warnings about using #pragma once header guard
        https://bugs.webkit.org/show_bug.cgi?id=163575

        Reviewed by Brady Eidson.

        There were some false positive warnings about header guards
        for ObjC headers that don't need guards. This changes the
        style checker to no longer warn if there is no #pragma once.
        It only warns if there are #ifndef that should be #pragma once.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_header_guard):
        Change when we output an error.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_build_header_guard):
        Update tests.

2016-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-10-18  Philippe Normand  <pnormand@igalia.com>

        WebRTC: [GTK] Update jhbuild environment for OpenWebRTC
        https://bugs.webkit.org/show_bug.cgi?id=163330

        Reviewed by Michael Catanzaro.

        Bring back the openwebrtc JHBuild moduleset in the time being. It
        should be removed after the bump to GStreamer 1.10 is complete and
        the libnice patches have been upstreamed. The GStreamer git
        snapshots used in this patch are the ones configured in Ericsson's
        GStreamer Cerbero fork.

        * gtk/openwebrtc.modules: Added.
        * gtk/patches/libnice-0001-TURN-allow-REALM-to-be-empty.patch: Added.
        * gtk/patches/libnice-0001-agent-Remove-unnecessary-NULL-check.patch: Added.
        * gtk/patches/libnice-0001-nicesrc-spin-the-agent-mainloop-in-a-separate-thread.patch: Added.
        * gtk/patches/libnice-0002-Do-not-update-a-remote-candidate-s-type.patch: Added.
        * gtk/patches/libnice-0002-TURN-handle-437-Allocation-Mismatch-responses.patch: Added.
        * gtk/patches/libnice-0003-Do-not-compare-scope-for-IPv6-address-when-scope-is-.patch: Added.
        * gtk/patches/libnice-0004-Removing-no-op-assignment.patch: Added.

2016-10-18  Sam Weinig  <sam@webkit.org>

        Replace std::experimental::variant with WTF::Variant (or similar)
        https://bugs.webkit.org/show_bug.cgi?id=163626

        Reviewed by Chris Dumez.

        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
        into the WTF namespace.

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

2016-10-18  Simon Fraser  <simon.fraser@apple.com>

        Add a MiniBrowser menu item to apply page scale in WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=163627

        Reviewed by Dean Jackson.

        Rename setScale: to setViewScale: and add setPageScale:, hooking it up for WK1 (via exisiting SPI)
        and WK2 (via new SPI).

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController pageScaleForMenuItemTag:]):
        (-[BrowserWindowController setPageScale:]):
        (-[BrowserWindowController setViewScale:]):
        (-[BrowserWindowController setScale:]): Deleted.
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController setPageScale:]):
        (-[WK1BrowserWindowController setViewScale:]):
        (areEssentiallyEqual):
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController setScale:]): Deleted.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController setPageScale:]):
        (-[WK2BrowserWindowController viewScaleForMenuItemTag:]):
        (-[WK2BrowserWindowController setViewScale:]):
        (areEssentiallyEqual):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (viewScaleForMenuItemTag): Deleted.
        (-[WK2BrowserWindowController setScale:]): Deleted.

2016-10-18  Anders Carlsson  <andersca@apple.com>

        Add an beforeunload alert to the WebKitLegacy MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=163634

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:]):

2016-10-18  Commit Queue  <commit-queue@webkit.org>

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

        "Caused 5% PLT regression" (Requested by krollin on #webkit).

        Reverted changeset:

        "Crash in ASCIICaseInsensitiveHash::hash() when a response has
        a null MIME type"
        https://bugs.webkit.org/show_bug.cgi?id=163476
        http://trac.webkit.org/changeset/207443

2016-10-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Resolve constraints and enumerate devices in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=162147
        <rdar://problem/28803569>

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues): Enable mock capture devices.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Update for API changes.

2016-10-17  Megan Gardner  <megan_gardner@apple.com>

        Add test and infrastructure for link popover
        https://bugs.webkit.org/show_bug.cgi?id=163406

        Reviewed by Simon Fraser.

        Added functionality test for link popovers.
        Can query for what URL is loaded, and that the popover has appeared or has
        been dismissed.
        Added a link popover test.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback):
        (WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback):
        (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowForcePressPreviewCallback):
        (WTR::UIScriptController::didShowForcePressPreviewCallback):
        (WTR::UIScriptController::setDidDismissForcePressPreviewCallback):
        (WTR::UIScriptController::didDismissForcePressPreviewCallback):
        (WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback):
        (WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback):
        (WTR::UIScriptController::didEndFormControlInteractionCallback): Deleted.
        (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView didShowForcePressPreview]):
        (-[TestRunnerWKWebView didDismissForcePressPreview]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformSetDidShowForcePressPreviewCallback):
        (WTR::UIScriptController::platformSetDidDismissForcePressPreviewCallback):
        (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback): Deleted.

2016-10-17  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r169805): WKWebView canGoBack returning YES when nothing is in the back-forward list after restoring session state
        https://bugs.webkit.org/show_bug.cgi?id=163573
        <rdar://problem/28744549>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2/WKBackForwardList.mm:
        (TEST):
        Add a test ensuring that canGoBack returns NO after restoring session state without navigating.

2016-10-17  Andy Estes  <aestes@apple.com>

        Crash in ASCIICaseInsensitiveHash::hash() when a response has a null MIME type
        https://bugs.webkit.org/show_bug.cgi?id=163476
        <rdar://problem/26941395>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadDataWithNilMIMEType.mm: Added.
        (TEST): Added an API test that passes a nil MIMEType to
        -[WKWebView loadData:MIMEType:characterEncodingName:baseURL:].

2016-10-17  Dean Jackson  <dino@apple.com>

        Allow creation of ExtendedColors and make Color immutable
        https://bugs.webkit.org/show_bug.cgi?id=163557
        <rdar://problem/28805360>

        Reviewed by Darin Adler and Dave Hyatt.

        API tests for ExtendedColor.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ExtendedColor.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::makeColor):

2016-10-17  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: implement basic stub

        Implement the global WebAssembly JavaScript object, and its constructor +
        function properties as described in:
          https://github.com/WebAssembly/design/blob/master/JS.md

        These don't do anything at the moment, the parent bug will take care of adding
        more functionality and associated tests.

        WebAssembly JS API: implement basic stub
        https://bugs.webkit.org/show_bug.cgi?id=163404

        Reviewed by Keith Miller.

        * Scripts/run-jsc-stress-tests: use the new JSC option which exposes the WebAssembly object.

2016-10-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        resolve-ChangeLogs: Specify --no-page to git diff
        https://bugs.webkit.org/show_bug.cgi?id=163441

        Reviewed by Darin Adler.

        resolve-ChangeLogs shows the result after resolving by invoking
        'git diff'. It runs a pager for every ChangeLog if it is under
        TTY.

        * Scripts/resolve-ChangeLogs:
        (showStatus): Specify '--no-page' to git diff.

2016-10-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Move user agent quirks to cross-platform location
        https://bugs.webkit.org/show_bug.cgi?id=163508

        Reviewed by Carlos Garcia Campos.

        Move the test to a cross-platform location and improve it to better check the full list of
        sites we have defined quirks for.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/gtk/UserAgentQuirks.cpp.
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk):
        (TestWebKitAPI::TEST):

2016-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Downloads should always sniff contents
        https://bugs.webkit.org/show_bug.cgi?id=163538

        Reviewed by Michael Catanzaro.

        Add a test case to check that the MIME type is correctly guessed for downloads.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (writeNextChunk):
        (serverCallback):
        (testDownloadMIMEType):
        (beforeAll):
        (writeNextChunkIdle): Deleted.

2016-10-16  Daniel Bates  <dabates@apple.com>

        Fix Perl warning about masked variable following <http://trac.webkit.org/changeset/207382>
        (https://bugs.webkit.org/show_bug.cgi?id=163456)

        * Scripts/prepare-ChangeLog:
        (actuallyGenerateFunctionLists):

2016-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ unit test /webkit2/WebKitWebContext/languages after r206949.

        After r206949 navigator.language returns en-US instead of en-us. Language tags in Accept-Language header are
        actually case-insensitive, so we should actually do case-insensitive comparisons, but we only have
        g_assert_cmpstr for tests.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextLanguages):

2016-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebPage URI not updated after URI is modified by InjectedBundlePageResourceLoadClient::willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=163389

        Reviewed by Michael Catanzaro.

        Update /webkit2/WebKitWebPage/get-uri test to check that web view and page uri always match even when request is
        modified by WebKitWebPage::send-request signal.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testWebPageURI):

2016-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Document request not updated after willSendRequest is called for a redirect
        https://bugs.webkit.org/show_bug.cgi?id=163436

        Reviewed by Michael Catanzaro.

        Update /webkit2/WebKitWebView/active-uri test to check the active URI also when modified by
        WebKitPage::send-request signal in a web extension.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testWebViewActiveURI):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (sendRequestCallback):
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (loadChangedCallback):

2016-10-15  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r191699): Contextual menu in Mail compose view doesn’t include any of the standard submenus
        https://bugs.webkit.org/show_bug.cgi?id=163492
        <rdar://problem/28654799>

        Reviewed by Darin Adler.

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

2016-10-15  Daniel Bates  <dabates@apple.com>

        prepare-ChangeLog erroneously said that a python __init__ method was deleted
        https://bugs.webkit.org/show_bug.cgi?id=163456

        Reviewed by Simon Fraser.

        Fixes an issue where prepare-ChangeLog may list as deleted functions that are
        immediately above added code.

        Currently prepare-ChangeLog makes use of the same overlap detection algorithm
        to compute the list of deleted functions as it does to compute added and modified
        functions. We consider a function deleted if its entire function body and signature
        are removed. It is sufficient to compare the list of functions before the patch
        is applied and the list of functions are the patch is applied to identify
        these functions.

        * Scripts/prepare-ChangeLog: Fix some style nits, including using Camel Case for
        variable names.
        (actuallyGenerateFunctionLists): Modified to call computeModifiedFunctions(). Always
        compute the list of functions in the file after the patch regardless of whether the
        patch only contains deletions. We will compare this list against the list of functions
        before the patch was applied to determine the deleted functions.
        (computeModifiedFunctions): Renamed; formerly named generateFunctionListsByRanges.
        Removed out argument for the seen functions as we no longer make use of when computing
        the list of deleted functions.
        (diffCommand): Update comment.
        (generateFunctionListsByRanges): Deleted.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/generateFunctionLists.pl: Added more unit tests.

2016-10-14  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r206973): Running "webkit-patch suggest-reviewers" throws an AttributeError: 'NoneType' object has no attribute 'full_name'
        https://bugs.webkit.org/show_bug.cgi?id=163478

        Reviewed by Daniel Bates.
        
        Handle a None other in Contributor.__eq__.

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__eq__):

2016-10-14  JF Bastien  <jfbastien@apple.com>

        Basic WebAssembly testing

        Create a small DSL in JavaScript which can build WebAssembly binary modules based on the JSON description of the format as described in:
        https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md

        This DSL can then be used to write small text description of valid and invalid WebAssembly binaries, making testing the JSC implementation much easier.

        Details and example in README.md.

        Basic WebAssembly testing
        https://bugs.webkit.org/show_bug.cgi?id=163267

        Reviewed by Keith Miller.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): run wasm.yaml tests
        * Scripts/run-jsc-stress-tests: add a WebAssembly-specific runner

2016-10-14  Simon Fraser  <simon.fraser@apple.com>

        Annotate bots in contributors.json and don't show them on webkit.org/team
        https://bugs.webkit.org/show_bug.cgi?id=163317

        Reviewed by Daniel Bates.
        
        Add "class" : "bot" for non-humans in contributors.json and round-trip it.

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__init__):
        (Contributor.as_dict):
        (Bot):
        (Bot.__init__):
        (CommitterList.load_json):
        * Scripts/webkitpy/common/config/contributors.json:

2016-10-14  Simon Fraser  <simon.fraser@apple.com>

        Fix printing in WK2 MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=163455

        Reviewed by Tim Horton.
        
        Call the basic -_printOperationWithPrintInfo: which doens't require a frame argument.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController printWebView:]):

2016-10-14  Commit Queue  <commit-queue@webkit.org>

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

        WebKit2.ProvisionalURLAfterWillSendRequestCallback is timing
        out on Mac bots (Requested by youenn on #webkit).

        Reverted changeset:

        "Add ProvisionalURLAfterWillSendRequestCallback.cpp and
        ProvisionalURLAfterWillSendRequestCallback_Bundle.cpp to Mac
        builds"
        https://bugs.webkit.org/show_bug.cgi?id=163440
        http://trac.webkit.org/changeset/207335

2016-10-14  Youenn Fablet  <youenn@apple.com>

        Add ProvisionalURLAfterWillSendRequestCallback.cpp and ProvisionalURLAfterWillSendRequestCallback_Bundle.cpp to Mac builds
        https://bugs.webkit.org/show_bug.cgi?id=163440

        Unreviewed.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Adding new test files introduced in
        https://bugs.webkit.org/show_bug.cgi?id=146306 patch.

2016-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Removed myself from BindingsScripts watch list.

        * Scripts/webkitpy/common/config/watchlist:

2016-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebView and WebPage URLs not updated after URL is modified by InjectedBundlePageResourceLoadClient::willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=146306

        Reviewed by Darin Adler.

        Add unit test to check that the committed URL is updated when changed in willSendRequest callback.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKit2/ProvisionalURLAfterWillSendRequestCallback.cpp: Added.
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ProvisionalURLAfterWillSendRequestCallback_Bundle.cpp: Added.
        (TestWebKitAPI::ProvisionalURLAfterWillSendRequestCallbackTest::ProvisionalURLAfterWillSendRequestCallbackTest):
        (TestWebKitAPI::ProvisionalURLAfterWillSendRequestCallbackTest::willSendRequestForFrame):
        (TestWebKitAPI::ProvisionalURLAfterWillSendRequestCallbackTest::didCommitLoadForFrame):

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Hosts of URLs with non-special schemes should be case-sensitive, and non-ASCII characters in such hosts should be punycode-encoded
        https://bugs.webkit.org/show_bug.cgi?id=163413

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        Update parsing results.  There are now fewer differences between the new URLParser and the old URL::parse.

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Rebase API tests after r207305.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Actually build Tests/mac/LoadInvalidURLRequest.mm so we are running the WebKit1.LoadInvalidURLRequest API test.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        Change results back to what they were before r207162, r207167, and r207184.

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Disable URLParser for non-Safari iOS and Mac apps for now
        https://bugs.webkit.org/show_bug.cgi?id=163397

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain):
        * WebKitTestRunner/TestController.cpp:
        Enable the URLParser for testing.
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:
        Link with WebCoreTestSupport so we can find setURLParserEnabled.

2016-10-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207297.

        This change broke the iOS build.

        Reverted changeset:

        "Disable URLParser for non-Safari iOS and Mac apps for now"
        https://bugs.webkit.org/show_bug.cgi?id=163397
        http://trac.webkit.org/changeset/207297

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Disable URLParser for non-Safari iOS and Mac apps for now
        https://bugs.webkit.org/show_bug.cgi?id=163397

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain):
        * WebKitTestRunner/ios/mainIOS.mm:
        (main):
        * WebKitTestRunner/mac/main.mm:
        (main):

2016-10-12  Alex Christensen  <achristensen@webkit.org>

        Fix out-of-bounds reading in URLParser when parsing improperly percent-encoded values
        https://bugs.webkit.org/show_bug.cgi?id=163376

        Reviewed by Saam Barati.

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

2016-10-11  Dean Jackson  <dino@apple.com>

        Add preliminary support for extended colors to WebCore::Color
        https://bugs.webkit.org/show_bug.cgi?id=162878
        <rdar://problem/28596413>

        Reviewed by Darin Adler.

        A new API test for Colors.

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

2016-10-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207225.

        This change causes debug tests to exit early with crashes.

        Reverted changeset:

        "Optional's move-constructor and move-assignment operator
        don't disengage the value being moved from"
        https://bugs.webkit.org/show_bug.cgi?id=163309
        http://trac.webkit.org/changeset/207225

2016-10-12  Alex Christensen  <achristensen@webkit.org>

        Fix assertion after switching to URLParser
        https://bugs.webkit.org/show_bug.cgi?id=163350
        rdar://problem/28739938

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (TEST):

2016-10-11  Sam Weinig  <sam@webkit.org>

        Optional's move-constructor and move-assignment operator don't disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=163309

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/Optional.cpp:
        (TestWebKitAPI::TEST):
        Add tests for Optional's move-constructor and move-assignment operator.

2016-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Now playing media sessions are always cleared for the active foreground tab
        https://bugs.webkit.org/show_bug.cgi?id=163310
        <rdar://problem/28573301>

        Reviewed by Jer Noble.

        Tweaks existing unit tests to verify that media session info persists when backgrounding and foregrounding, but
        that media session info is correctly cleared out if the media session itself is no longer eligible for Now
        Playing (not accounting for foreground/active state). Previously, these tests were verifying that we would
        always clear out the information, but this is incorrect, and is the source of the problem.

        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView waitForNowPlayingInfoToChange]):
        (TestWebKitAPI::TEST):

2016-10-12  Per Arne Vollan  <pvollan@apple.com>

        [Win] Parallel DRTs are sharing preferences and cache.
        https://bugs.webkit.org/show_bug.cgi?id=163013

        Reviewed by Brent Fulgham.

        Use separate cache and preferences for each DRT instance.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (applicationId):
        (setApplicationId):
        (setCacheFolder):
        (setDefaultsToConsistentValuesForTesting):
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_test_run):

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

        Update API test expectation after r207162.
       ​https://bugs.webkit.org/show_bug.cgi?id=162660

        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        Like r207167 but with a WebKit2 test.
        "https://www.example.com<>/" was an invalid URL with the old URL parser, is now valid with URLParser but not with NSURL's parser.

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

        Update API test expectation after r207162.
        https://bugs.webkit.org/show_bug.cgi?id=162660

        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        "https://www.example.com<>/" was an invalid URL with the old URL parser.
        It is now a valid URL, but NSURL still considers it invalid.
        This will be looked into more with https://bugs.webkit.org/show_bug.cgi?id=163127

2016-10-11  Edward O'Connor  <eoconnor@apple.com>

        Update my name in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=163251

        Reviewed by Simon Fraser.

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

2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add SynchronizedFixedQueue class
        https://bugs.webkit.org/show_bug.cgi?id=162478

        Reviewed by Geoffrey Garen.

        Add a new test for SynchronizedFixedQueue. The test defines a new class
        called ToUpperConverter which converts strings from lower case to upper
        case. It creates two threads : (1) produce thread and (2) consume thread.
        Here is what each thread does:

        1. Main threads: Enqueues lower case strings into m_lowerQueue.
        2. Produce thread: Dequeues lower case strings from m_lowerQueue and 
           enqueue their upper case strings in the m_upperQueue.
        3. Consume thread: Dequeues upper case strings from m_upperQueue.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp: Added.
        (TestWebKitAPI::textItem): A helper function which returns a lower case string given an index.
        (TestWebKitAPI::toUpper): A helper function which Returns the upper case of a string.
        (TestWebKitAPI::ToUpperConverter::ToUpperConverter):
        (TestWebKitAPI::ToUpperConverter::produceQueue): Returns a workQueue for the produce thread.
        (TestWebKitAPI::ToUpperConverter::consumeQueue): Returns a workQueue for the consume thread.
        (TestWebKitAPI::ToUpperConverter::startProducing): Creates a thread for the producer.
        (TestWebKitAPI::ToUpperConverter::startConsuming): Creates a thread for the consumer.
        (TestWebKitAPI::ToUpperConverter::start): Starts both the producer and the consumer threads.
        (TestWebKitAPI::ToUpperConverter::stopProducing): Terminates the producer thread.
        (TestWebKitAPI::ToUpperConverter::stopConsuming): Terminates the consumer thread.
        (TestWebKitAPI::ToUpperConverter::stop): Terminates both the producer and the consumer threads.
        (TestWebKitAPI::ToUpperConverter::enqueueLower): Adds a lower case string to the m_lowerQueue on the main thread.
        (TestWebKitAPI::ToUpperConverter::isProducing): Returns whether the producing thread is active.
        (TestWebKitAPI::ToUpperConverter::isConsuming): Returns whether the consuming thread is active.
        (TestWebKitAPI::ToUpperConverter::produceCount): Returns the number of produced elements.
        (TestWebKitAPI::ToUpperConverter::consumeCount): Returns the number of consumed elements.
        (TestWebKitAPI::TEST):

2016-10-11  Megan Gardner  <megan_gardner@apple.com>

        Extend event stream to include interpolated events and add a force press test that uses that interpolation
        https://bugs.webkit.org/show_bug.cgi?id=163161

        Reviewed by Simon Fraser.

        Added functionality to the event stream to allow for interpolated events.
        Can now do long press, as well as a better way to do drag and other time-based
        events that require a large stream of descrete HID events.
        Added a basic force touch test to demostrate this interpolation.
        Also updated the script to allow for iPhone 7 specific tests, as force touch
        needs to be on a device that had force touch.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (linearInterpolation):
        (simpleCurveInterpolation):
        (calculateNextCurveLocation):
        (phaseFromString):
        (interpolationFromString):
        (-[HIDEventGenerator eventMaskFromEventInfo:]):
        (-[HIDEventGenerator _createIOHIDEventWithInfo:]):
        (-[HIDEventGenerator moveToPoints:touchCount:duration:]):
        (-[HIDEventGenerator interpolatedEvents:]):
        (-[HIDEventGenerator processEventsArray:withStartTime:]):
        (-[HIDEventGenerator eventDispatchThreadEntry:]):
        (simpleDragCurve): Deleted.
        (calculateNextLocation): Deleted.

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

        URLParser should percent-encode non-ASCII and non-printable characters in fragment
        https://bugs.webkit.org/show_bug.cgi?id=163287

        Reviewed by Brady Eidson.

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

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

        Remove dead networking code
        https://bugs.webkit.org/show_bug.cgi?id=163263

        Reviewed by Daniel Bates.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2016-10-11  John Wilander  <wilander@apple.com>

        Modify check-webkit-style to prohibit sensitive phrases
        https://bugs.webkit.org/show_bug.cgi?id=163048
        <rdar://problem/28289755>

        Terms considered or found to be too general to flag:
        ASSERT_WITH_SECURITY_IMPLICATION, bad cast, bug, bypass, crash,
        denial of service, dereference, disclosure, error, exploit,
        failure, heap, integer overflow, leak, null dereference,
        null pointer dereference, out of bounds, overflow,
        race condition, sensitive information, stack, type confusion.

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_entry):
            Now calls ChangeLogChecker.check_for_unwanted_security_terms().
        (ChangeLogChecker):
        (ChangeLogChecker.check_for_unwanted_security_terms):
            New function to check for sensitive terms.
        (ChangeLogChecker.check_for_unwanted_security_terms.FoundUnwantedSecurityTerm):
        (ChangeLogChecker.check_for_unwanted_security_terms.FoundUnwantedSecurityTerm.__init__):
            Convenience class.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.test_unwanted_security_terms):

2016-10-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207067.

        This change caused webkitpy test failures.

        Reverted changeset:

        "[Win] Parallel DRTs are sharing preferences and cache."
        https://bugs.webkit.org/show_bug.cgi?id=163013
        http://trac.webkit.org/changeset/207067

2016-10-11  Per Arne Vollan  <pvollan@apple.com>

        [Win] Parallel DRTs are sharing preferences and cache.
        https://bugs.webkit.org/show_bug.cgi?id=163013

        Reviewed by Brent Fulgham.

        Use separate cache and preferences for each DRT instance.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (applicationId):
        (setApplicationId):
        (setCacheFolder):
        (setDefaultsToConsistentValuesForTesting):
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_test_run):

2016-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Add ENABLE_ENCRYPTED_MEDIA configuration option
        https://bugs.webkit.org/show_bug.cgi?id=163219

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:
        Make the ENABLE_ENCRYPTED_MEDIA option overridable via build-webkit.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Add the ENABLE_ENCRYPTED_MEDIA configuration option. It will be used
        to enable or disable the new EME implementation at build-time.

2016-10-10  Commit Queue  <commit-queue@webkit.org>

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

        Making EWS flaky (Requested by bfulgham_ on #webkit).

        Reverted changeset:

        "[CMake] CMake does not support the dep files for implicit
        dependency"
        https://bugs.webkit.org/show_bug.cgi?id=161433
        http://trac.webkit.org/changeset/206972

2016-10-10  Youenn Fablet  <youenn@apple.com>

        W3C test downloader should be able to import specific files/sub-directories in a skipped directory
        https://bugs.webkit.org/show_bug.cgi?id=161789

        Reviewed by Ryosuke Niwa.

        Removed tests_directory option and corresponding test.
        This option was allowing to import a sub-directory from a test repository.
        We can readd it if necessary.

        Adding support for finer-grained import rules.
        Previously skipped directories were fully removed.
        Now, directories may be skipped but sub directories of them may be imported.
        This currently happens in web-platform-tests repo.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._add_test_suite_paths): Removing tests_directory option.
        (TestDownloader.copy_tests): Refactoring file copy by generating the list of all directories for which direct files should be imported.
        (TestDownloader.copy_tests.should_copy_dir):
        (TestDownloader.copy_tests.should_copy_file):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_tests_directory): Deleted.
        (TestImporterTest.test_skip_test_import): Added.

2016-10-09  Simon Fraser  <simon.fraser@apple.com>

        Make validate-committer-lists show inactive reviewers
        https://bugs.webkit.org/show_bug.cgi?id=163193

        Reviewed by Sam Weinig.
        
        In preparation for updating contributors.json with the WebKit policy of retiring
        inactive reviewers, make validate-committer-lists show the list of reviewers who
        have not reviewed in the past year.
        
        This list is computed by grepping the output of 'git log --since=1.year" for
        the reviewer line, and looking up reviewers via Contributor.mentioned_in_text(),
        which looks for full names, aliases, irc nicks and email addresses.
        
        Support for aliases is added to Contributor. Aliases are alternates
        or misspellings of the reviewer's name. Some common aliases were added to
        contributors.json by manual examination of "Reviewed by" lines.

        * Scripts/validate-committer-lists:
        (CommitterListFromGit.possibly_expired_committers):
        (CommitterListFromGit):
        (CommitterListFromGit.possibly_inactive_reviewers):
        (CommitterListFromGit.print_possibly_expired_committers):
        (CommitterListFromGit.print_possibly_inactive_reviewers):
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__init__):
        (Contributor.contains_string):
        (Contributor.mentioned_in_text):
        (Contributor.as_dict):
        (Committer.__init__):
        (Reviewer.__init__):
        (CommitterList.load_json):
        * Scripts/webkitpy/common/config/contributors.json:

2016-10-09  Simon Fraser  <simon.fraser@apple.com>

        Convert contributors.json to a flat list
        https://bugs.webkit.org/show_bug.cgi?id=163183

        Reviewed by Darin Adler.
        
        Make contributors.json easier to maintain by eliminating the big groupings ("Committers", "Reviewers" etc)
        and moving that data to a "status" property on each contributor.

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__eq__): Implement this to fix unit tests, now that load_json() is not @memoized.
        (Contributor.as_dict): Include status in the dict.
        (CommitterList.__init__): Clean up to make the testing code path more explicit.
        (CommitterList.load_json):
        (CommitterList.load_test_data):
        (CommitterList.as_json):
        (Contributor.__unicode__): Deleted.
        * Scripts/webkitpy/common/config/contributors.json:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois): The ordering here is now alphabetical.

2016-10-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] CMake does not support the dep files for implicit dependency
        https://bugs.webkit.org/show_bug.cgi?id=161433

        Reviewed by Brent Fulgham.

        Created a Perl script to generate all IDL bindings for CMake.
        This script can regenerate outdated bindings by based on the
        supplemental dependency and dep files created by
        '--write-dependencies' switch of generate-bindings.pl.

        add_custom_target is used to invoke the script instead of
        add_custom_command because Ninja deletes all output files before
        executing the command in case of add_custom_command.

        USES_TERMINAL option of add_custom_target has two effects:
        1) Not buffering output of the command
        2) Invoking the command in the special Ninja pool which inhibits parallel build
        One needs to use CMake 3.2 or later to enable this feature.

        * DumpRenderTree/CMakeLists.txt: Specified a target name for
        GENERATE_BINDINGS. Added dependency for the target.
        * WebKitTestRunner/CMakeLists.txt: Ditto.

2016-10-09  Simon Fraser  <simon.fraser@apple.com>

        Add support for canonicalizing contributors.json, and have check-webkit-style check the format.
        https://bugs.webkit.org/show_bug.cgi?id=163177

        Follow-up fix.
        
        For unknown reasons, overriding Commiter.__dict__() caused mysterious test failures.
        Rename it to as_dict().

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.as_dict):
        (CommitterList._contributor_list_to_dict):
        (Contributor.__dict__): Deleted.

2016-10-08  Simon Fraser  <simon.fraser@apple.com>

        Add support for canonicalizing contributors.json, and have check-webkit-style check the format.
        https://bugs.webkit.org/show_bug.cgi?id=163177

        Reviewed by Ryosuke Niwa.
        
        Make it possible to round-trip contributors.json through CommitterList, so we can
        support writing out contributors.json in canonical format. This requires saving
        the case-preserved email and expertise in Contributor. CommitterList also needs
        to be able to generate the "exclusive" lists, since it currently uses lists
        that are the union of, say, committers and reviewers.
        
        If contributors.json is malformed (invalid JSON), catch the Exception, report it
        and exit rather than allowing the exception to propagate. With an invalid file,
        an exception would be thrown before the JSON style checker reached this file, so
        the error was not correctly reported.
        
        Add style/checker/committer.py for checking that committers.json has the canonical format.
        
        Add support to validate-committer-lists to dump out the canonical json (-d) or update
        the file in-place (-c).

        * Scripts/validate-committer-lists:
        (CommitterListFromGit._print_three_column_row):
        (CommitterListFromGit.possibly_expired_committers):
        (CommitterListFromGit):
        (CommitterListFromGit.print_possibly_expired_committers):
        (main):
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__init__):
        (Contributor.__dict__):
        (Committer.__init__):
        (Reviewer.__init__):
        (CommitterList.load_json):
        (CommitterList):
        (CommitterList._contributor_list_to_dict):
        (CommitterList.as_json):
        (CommitterList.reformat_in_place):
        (CommitterList._exclusive_contributors):
        (CommitterList._exclusive_committers):
        (Contributor.matches_glob): Deleted.
        (CommitterList.contributors): Deleted.
        * Scripts/webkitpy/common/config/contributors.json:
        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/contributors.py: Added.
        (ContributorsChecker):
        (ContributorsChecker.__init__):
        (ContributorsChecker.check):
        (ContributorsChecker._unidiff_output):

2016-10-06  Darin Adler  <darin@apple.com>

        Next step on moving to modern way to return DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163016

        Reviewed by Ryosuke Niwa.

        * Scripts/do-webcore-rename: Add proposed name change of setDOMException
        to propagateException, since this function is primarily used to take an
        exception already effectively "thrown" by setting an ExceptionCode out
        argument and propagate it into the JavaScript engine's exception machinery.

2016-10-07  Alex Christensen  <achristensen@webkit.org>

        Non-special URL fragments should percent-encode non-ASCII characters
        https://bugs.webkit.org/show_bug.cgi?id=163153

        Reviewed by Tim Horton.

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

2016-10-07  Jonathan Bedard  <jbedard@apple.com>

        Build fix for “Move functionality common to Darwin ports into a base class”
        https://bugs.webkit.org/show_bug.cgi?id=160709

        Unreviewed build fix.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._get_crash_log): Added iOS implementation.
        * Scripts/webkitpy/port/mac.py:
        (MacPort._get_crash_log): Added Mac implementation.

2016-10-07  Chelsea Pugh  <cpugh@apple.com>

        Unreviewed. Added myself to the list of committers.

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

2016-10-07  Jonathan Bedard  <jbedard@apple.com>

        Move functionality common to Darwin ports into a base class
        https://bugs.webkit.org/show_bug.cgi?id=160709

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/apple.py:
        (ApplePort.determine_full_port_name): Specific iOS port check.
        (ApplePort.__init__): Move leak detector to DarwinPort.
        (ApplePort._make_leak_detector): Moved to DarwinPort.
        (ApplePort.supports_per_test_timeout): Moved to Port.
        (ApplePort.check_for_leaks): Moved to DarwinPort.
        (ApplePort.print_leaks_summary): Moved to DarwinPort.
        (ApplePort._path_to_webcore_library): Moved to DarwinPort.
        (ApplePort.show_results_html_file): Moved to DarwinPort.
        (ApplePort._merge_crash_logs): Moved to DarwinPort.
        (ApplePort._look_for_all_crash_logs_in_log_dir): Moved to DarwinPort.
        (ApplePort._get_crash_log): Moved to DarwinPort.
        (ApplePort.look_for_new_crash_logs): Moved to DarwinPort.
        (ApplePort.sample_process): Moved to DarwinPort.
        (ApplePort.sample_file_path): Moved to DarwinPort.
        (ApplePort.look_for_new_samples): Moved to DarwinPort.
        * Scripts/webkitpy/port/base.py:
        (Port.supports_per_test_timeout): Return true for all ports.
        * Scripts/webkitpy/port/darwin.py: Added.
        (DarwinPort): Shared iOS and Mac functions.
        * Scripts/webkitpy/port/darwin_testcase.py: Added.
        (DarwinTest): Shared iOS and Mac testing.
        * Scripts/webkitpy/port/efl.py:
        (EflPort):
        (EflPort.supports_per_test_timeout): Moved to Port.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._driver_class):
        (GtkPort):
        (GtkPort.supports_per_test_timeout): Moved to Port.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort.operating_system):
        (IOSSimulatorPort):
        (IOSSimulatorPort.__init__): Inherits from DarwinPort.
        (IOSSimulatorPort._port_specific_expectations_files): Moved to DarwinPort.
        (IOSSimulatorPort._get_crash_log): Deleted.
        (IOSSimulatorPort.xcrun_find): Deleted.
        * Scripts/webkitpy/port/ios_unittest.py: Added.
        (iosTest): Unit tests for the iOS port.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.__init__): Inherits from DarwinPort.
        (MacPort._port_specific_expectations_files): Moved to DarwinPort.
        (MacPort.make_command): Moved to DarwinPort.
        (MacPort._get_crash_log): Moved to DarwinPort.
        (MacPort.nm_command): Moved to DarwinPort.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_sdk_name): Added test.
        (MacTest.test_xcrun): Added test.
        (MacTest.assert_skipped_file_search_paths): Moved to DarwinTest.
        (MacTest.test_default_timeout_ms): Moved to DarwinTest.
        (MacTest.assert_name): Moved to DarwinTest.
        (MacTest.test_helper_starts): Moved to DarwinTest.
        (MacTest.test_helper_fails_to_start): Moved to DarwinTest.
        (MacTest.test_helper_fails_to_stop): Moved to DarwinTest.
        (MacTest.test_spindump): Moved to DarwinTest.
        (MacTest.test_sample_process): Moved to DarwinTest.
        (MacTest.test_sample_process_exception): Moved to DarwinTest.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.test_diff_image): Added is_simulator flag.
        (PortTestCase.test_diff_image): Skip test if on a simulator.
        (PortTestCase.test_diff_image_crashed): Skip test if on a simulator.
        * Scripts/webkitpy/port/win.py:
        (WinPort):
        (WinPort.look_for_new_samples): Used default, ApplePort no longer implements.
        (WinPort.sample_process): Ditto.
        (WinPort._make_leak_detector): Ditto.
        (WinPort.check_for_leaks): Ditto.
        (WinPort.print_leaks_summary): Ditto.
        (WinPort._path_to_webcore_library): Ditto.

2016-10-07  Anders Carlsson  <andersca@apple.com>

        Get rid of WKPageSetSession
        https://bugs.webkit.org/show_bug.cgi?id=163129

        Reviewed by Tim Horton.

        Rewrite this test to use WKPageConfigurationRef and WKWebsiteDataStoreRef.

        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):

2016-10-07  Andreas Kling  <akling@apple.com>

        [WK2] didRemoveFrameFromHierarchy callback doesn't fire for subframes when evicting from PageCache.
        <https://webkit.org/b/163098>
        <rdar://problem/28663488>

        Reviewed by Antti Koivisto.

        Add an API test that puts a 10-subframe page into the page cache, then loads other pages
        until the first page gets kicked out. The test succeeds if we receive didRemoveFrameFromHierarchy
        callbacks for all the subframes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/DidRemoveFrameFromHiearchyInPageCache.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::didReceivePageMessageFromInjectedBundle):
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp: Added.
        (TestWebKitAPI::didRemoveFrameFromHierarchyCallback):
        (TestWebKitAPI::DidRemoveFrameFromHiearchyInPageCacheTest::DidRemoveFrameFromHiearchyInPageCacheTest):
        (TestWebKitAPI::DidRemoveFrameFromHiearchyInPageCacheTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/many-iframes.html: Added.

2016-10-07  Emanuele Aina  <emanuele.aina@collabora.com>

        Replace bug URL placeholders independently of the short desc one
        https://bugs.webkit.org/show_bug.cgi?id=161684

        Reviewed by Darin Adler.

        Instead of adding the bug URL when replacing the short description
        placeholder and then ignoring the bug URL placeholder, use the former
        to set the short description and the latter for the bug URL.
        This means that developers can fully prepare the changelog with short
        and long description before submission leaving the bug placeholder in
        place, and the changelog machinery will make sure to replace the
        latter with the URL of the newly created bug while submitting.

        Note that this also means that the short description placeholder alone
        no longer causes the bug URL to be added.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.set_short_description_and_bug_url):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_set_short_description_and_bug_url):

2016-10-07  Jonathan Bedard  <jbedard@apple.com>

        Style Checking Error when Objective C Blocks passed as Argument
        https://bugs.webkit.org/show_bug.cgi?id=162463

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (regex_for_lambdas_and_blocks): Consider case where block is passed as a function argument.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_objective_c_block_as_argument): Test case where block is passed as a function argument. 

2016-10-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] Docs build failure
        https://bugs.webkit.org/show_bug.cgi?id=163102

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Bump to gtk-doc 1.25 to fix build errors on Debian Testing.

2016-10-06  Joseph Pecoraro  <pecoraro@apple.com>

        check-webkit-style: Enable the legal/copyright rule for cpp/h files
        https://bugs.webkit.org/show_bug.cgi?id=162707

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        Enable this rule by default.

2016-10-06  Joseph Pecoraro  <pecoraro@apple.com>

        Header guard style should be updated to be "#pragma once"
        https://bugs.webkit.org/show_bug.cgi?id=159785

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_header_guard):
        (_process_lines):
        Simplify header_guard check to warn for a missing #pragma once
        in header files. For legacy files that contain an #ifndef only
        warn if the #ifndef line itself is changing.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.perform_header_guard_check):
        (CppStyleTestBase.assert_header_guard):
        Helpers for enabling just this warning.

        (CppStyleTest.test_build_header_guard):
        Test different header guard cases.

        * Scripts/webkitpy/style/error_handlers.py:
        (DefaultStyleErrorHandler.should_line_be_checked):
        Always allow warnings that output for "line 0" which won't be in
        the list of modified lines that are 1-based.

2016-10-06  Commit Queue  <commit-queue@webkit.org>

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

        triggers apparent codegen bug on ARM 32-bit (Requested by smfr
        on #webkit).

        Reverted changeset:

        "Support transitions/animations of background-position with
        right/bottom-relative values"
        https://bugs.webkit.org/show_bug.cgi?id=162048
        http://trac.webkit.org/changeset/206713

2016-10-06  Alex Christensen  <achristensen@webkit.org>

        URLParser: Non-ASCII characters in Non-UTF-8 encoded queries of relative URLs with ws, wss, or nonspecial schemes should be UTF-8 encoded
        https://bugs.webkit.org/show_bug.cgi?id=163089

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2016-10-06  Alex Christensen  <achristensen@webkit.org>

        Skip tabs and newlines between end of query and beginning of fragment in non-UTF-8-encoded URLs
        https://bugs.webkit.org/show_bug.cgi?id=163071

        Reviewed by Tim Horton.

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

2016-10-06  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse file URLs with ports consistently
        https://bugs.webkit.org/show_bug.cgi?id=163075

        Reviewed by Brady Eidson.

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

2016-10-06  John Wilander  <wilander@apple.com>

        Update Resource Load Statistics
        https://bugs.webkit.org/show_bug.cgi?id=162811

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/mac/PublicSuffix.mm:
            Change from USE(PUBLIC_SUFFIX_LIST) to ENABLE(PUBLIC_SUFFIX_LIST)

2016-10-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][OWR] GL rendering support
        https://bugs.webkit.org/show_bug.cgi?id=162972

        Reviewed by Žan Doberšek.

        When GStreamer-GL is enabled the GL context needs to be properly passed
        to the GStreamer pipeline running within the OpenWebRTC video renderer.
        This is now supported using a new OpenWebRTC API that allows the
        renderer to request the context from the application using a callback
        registered within the renderer.

        * gtk/jhbuild.modules: Bump to latest OpenWebRTC for the new
        owr_video_renderer_set_request_context_callback API added
        recently.

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

        Reuse CodeGenerator::UpdateFile in Tools CodeGenerator
        https://bugs.webkit.org/show_bug.cgi?id=162960

        Reviewed by Alex Christensen.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (WriteData): Using CodeGenerator::UpdateFile to do lazy generated file update when it is made feasible.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (WriteData): Ditto.

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse IPv4 addresses as the last two pieces of an IPv6 address
        https://bugs.webkit.org/show_bug.cgi?id=162991

        Reviewed by Saam Barati.

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

2016-10-05  Tim Horton  <timothy_horton@apple.com>

        Avoid automatically re-taking snapshots for back-forward items that were never loaded into the view
        https://bugs.webkit.org/show_bug.cgi?id=162955
        <rdar://problem/27659173>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm:
        (-[SnapshotTestWKWebView init]):
        (forceRepaintCallback):
        (-[SnapshotTestWKWebView synchronouslyForceRepaint]):
        (-[SnapshotTestWKWebView synchronouslyLoadTestPageAndForceRepaint:]):
        (TEST):
        (makeRedSquareView):
        Add a test that restoring session state into a web view without navigating,
        then explicitly snapshotting and navigating away, leaves the original snapshot alone.

        Adjust the existing test, as well, to ensure that it will reliably fail
        if the feature is broken. Use an explicitly added and removed red square
        instead of scrolling, because we can't scroll in the restore-without-navigating case.

        Stop trying to override the window scale, because it's not working (we're getting partial snapshots)
        and isn't necessary; instead just multiply the expected value by the page scale.

        (-[SnapshotTestWKWebView loadPageNamed:]): Deleted.
        * TestWebKitAPI/mac/TestWKWebViewMac.h:
        * TestWebKitAPI/mac/TestWKWebViewMac.mm:
        (-[TestWKWebView synchronouslyLoadTestPageNamed:]):
        Reorganize to reduce duplication.

2016-10-05  Tim Horton  <timothy_horton@apple.com>

        Make it possible to test ViewSnapshotStore behaviors
        https://bugs.webkit.org/show_bug.cgi?id=162983

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm: Added.
        (-[SnapshotTestWKWebView init]):
        (-[SnapshotTestWKWebView loadPageNamed:]):
        (imagesAreEqual):
        Add tests for existing basic snapshotting behavior:

        - a back-forward item shouldn't have a snapshot
          until it is navigated away from

        - causing a back-forward item to fall out of the
          back-forward list should remove the snapshot

        - calling the explicit snapshotting SPI, then navigating away from the page,
          should result in the snapshot being retaken

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

        KeyboardEvent.getModifierState() should support "CapsLock" modifier
        https://bugs.webkit.org/show_bug.cgi?id=162861

        Reviewed by Darin Adler.

        Add support for 'capsLockKey' modifier for EventSender.keyDown() so
        that we can test this new modifier support for layout tests.

        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::modifierFlagsForWKModifiers):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::parseModifier):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::buildModifierFlags):

2016-10-05  Jeremy Jones  <jeremyj@apple.com>

        Add MobileMiniBrowser tests for control center and looping fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=162748

        Reviewed by Jer Noble.

        Refactor existing MobileMiniBrowserTests and add new tests for 
        - fullscreen rotation
        - fullscreen looping (failing)
        - control center interruption (failing)

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowserFramework/Resources/looping2s.html: Added.
        * MobileMiniBrowser/MobileMiniBrowserFramework/test2s.mp4: Added.
        * MobileMiniBrowser/MobileMiniBrowserUITests/MobileMiniBrowserUITests.m:
        (-[MobileMiniBrowserUITests setUp]):
        (-[MobileMiniBrowserUITests waitToTapButtonNamed:forApp:]):
        (-[MobileMiniBrowserUITests loadURL:]):
        (-[MobileMiniBrowserUITests requireMinFPS:sampleDurationSeconds:message:]):
        (-[MobileMiniBrowserUITests ensureFullscreenControls]):
        (-[MobileMiniBrowserUITests timeForTimeString:]):
        (-[MobileMiniBrowserUITests testBasicVideoPlayback]):
        (-[MobileMiniBrowserUITests testBasicVideoFullscreen]):
        (-[MobileMiniBrowserUITests testVideoFullscreenAndRotationAnimation]):
        (-[MobileMiniBrowserUITests testVideoFullscreenControlCenter]):
        (-[MobileMiniBrowserUITests testLoopingFullscreenLockup]):

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly strip unnecessary 0's in IPv6 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162979

        Reviewed by Brady Eidson.

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

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        UTF-8 encode queries of nonspecial and websocket schemes
        https://bugs.webkit.org/show_bug.cgi?id=162956

        Reviewed by Geoffrey Garen and Brady Eidson.

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

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        Prepare to enable URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162974

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        Added some tests that are unrelated to the code change, but these are
        reflected in changed LayoutTest results when enabling the URLParser,
        and they weren't in the URLParser tests yet.  They should be.

2016-10-05  Zan Dobersek  <zdobersek@igalia.com>

        Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=162903

        Reviewed by Alex Christensen.

        Rename build guards for the remaining implementation of the legacy EME API
        to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
        of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Also remove the
        ENABLE_IOS_TEXT_AUTOSIZING feature define that was renamed in r206395 and was
        throwing up style checker errors.

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

        [iOS] Crash in WebResourceLoaderQuickLookDelegate when the client cancels the navigation to a QuickLook resource
        https://bugs.webkit.org/show_bug.cgi?id=162950
        <rdar://problem/23759114>

        Reviewed by Brady Eidson.

        Added a new API test.

        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm: Sorted imports and removed redundant
        initialization of static bools.
        (runTest): Factored out the common test logic between QuickLook.NavigationDelegate and
        QuickLook.CancelNavigationAfterResponse.
        (TEST): Added QuickLook.CancelNavigationAfterResponse.
        (-[QuickLookDecidePolicyDelegate
        webView:decidePolicyForNavigationResponse:decisionHandler:]): Canceled the navigation.
        (-[QuickLookDecidePolicyDelegate webView:didFailProvisionalNavigation:withError:]): Set
        isDone to true.

2016-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Add the support for running ES6SampleBench to run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=162890

        Reviewed by Saam Barati.

        Added the support for running ES6SampleBench as "es6bench".
        e.g. ./Tools/Scripts/run-benchmark --platform osx --plan es6bench --browser safari

        Instead of the default 10 iterations, run the test 4 iterations using 5 instances of browser
        for the total of 20 iterations.

        * Scripts/webkitpy/benchmark_runner/data/patches/ES6SampleBench.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/es6bench.plan: Added.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (start): Fixed the bug that the linter will complain about the presence of "debugOutput" by
        removing it if it's present.

2016-10-04  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make it possible for a test to describe a user gesture as a stream of events in JSON format
        https://bugs.webkit.org/show_bug.cgi?id=162934

        Reviewed by Dean Jackson.

        With this change, a test can describe a user gesture in an "event stream", which is
        some JSON describing an array of events with their underlying touches. The added
        test describes a single tap.
        
        The implementation fires up an NSThread, and sleeps the thread between events to dispatch
        them at close to real time.
        
        In future, HIDEventGenerator could use this internally for all of the "compound" interactions.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::sendEventStream):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::sendEventStream):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (transducerTypeFromString):
        (phaseFromString):
        (-[HIDEventGenerator eventMaskFromEventInfo:]):
        (-[HIDEventGenerator touchFromEventInfo:]):
        (-[HIDEventGenerator _createIOHIDEventWithInfo:]):
        (-[HIDEventGenerator dispatchEventWithInfo:]):
        (-[HIDEventGenerator eventDispatchThreadEntry:]):
        (-[HIDEventGenerator sendEventStream:completionBlock:]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::sendEventStream):

2016-10-04  Megan Gardner  <megan_gardner@apple.com>

        Add Megan to contributor's list
        https://bugs.webkit.org/show_bug.cgi?id=162944

        Reviewed by Tim Horton.

        Add Megan to the contributor's lists so that her e-mail autocompletes for CC

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

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

        Add tests verifying non-special URL hosts are parsed according to spec
        https://bugs.webkit.org/show_bug.cgi?id=162885

        Reviewed by Sam Weinig.

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

2016-10-04  Anders Carlsson  <andersca@apple.com>

        Properly kill web processes in the launching state
        https://bugs.webkit.org/show_bug.cgi?id=162938

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp:
        Enable this test again.

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

        URLParser: query-only URLs relative to file URLs should just add a query
        https://bugs.webkit.org/show_bug.cgi?id=162888

        Reviewed by Tim Horton.

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

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

        URLParser should match URL::parse and other browsers when parsing a URL containing only scheme://
        https://bugs.webkit.org/show_bug.cgi?id=162909

        Reviewed by Tim Horton.

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

2016-10-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
        https://bugs.webkit.org/show_bug.cgi?id=162916

        Reviewed by Filip Pizlo.

        * DumpRenderTree/CMakeLists.txt:

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

        Media controls are displayed in the incorrect state momentarily after switching between tabs playing media
        https://bugs.webkit.org/show_bug.cgi?id=162766
        <rdar://problem/28533523>

        Reviewed by Jer Noble.

        Adds new tests and tweaks existing tests to verify last updated Now Playing information.

        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView _handleActiveNowPlayingSessionInfoResponse:title:duration:elapsedTime:]):
        (TestWebKitAPI::TEST):
        (-[NowPlayingTestWebView _handleActiveNowPlayingSessionInfoResponse:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-test-now-playing.html:

2016-10-03  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore tabs at all locations
        https://bugs.webkit.org/show_bug.cgi?id=162836

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        (TestWebKitAPI::TEST_F):

2016-10-03  Alex Christensen  <achristensen@webkit.org>

        URLParser: fragment-only URLs relative to file URLs should just add a fragment
        https://bugs.webkit.org/show_bug.cgi?id=162871

        Reviewed by Geoffrey Garen.

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

2016-10-03  Per Arne Vollan  <pvollan@apple.com>

        [Win] DRT temp folder is not used.
        https://bugs.webkit.org/show_bug.cgi?id=162863

        Reviewed by Alex Christensen.

        Convert DRT temp folder to DOS path, which DRT can use.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):

2016-10-03  Alex Christensen  <achristensen@webkit.org>

        URLParser: empty relative URLs should not copy fragment from the base URL
        https://bugs.webkit.org/show_bug.cgi?id=162864

        Reviewed by Chris Dumez.

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

2016-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Cleanup persistent credential storage code
        https://bugs.webkit.org/show_bug.cgi?id=162777

        Reviewed by Alex Christensen.

        Use USE(LIBSECRET) instead of ENABLE(CREDENTIAL_STORAGE).

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
        (testWebViewAuthenticationStorage):

2016-10-02  Darin Adler  <darin@apple.com>

        Rename ExceptionCode-based exception handling to "legacy"
        https://bugs.webkit.org/show_bug.cgi?id=162859

        Reviewed by Chris Dumez.

        * Scripts/do-webcore-rename: Updated script to do this round of renames.

2016-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls for Soundcloud easily falls out of sync with what's actually playing
        https://bugs.webkit.org/show_bug.cgi?id=162843
        <rdar://problem/28176874>

        Reviewed by Beth Dakin.

        Adds two new tests simulating audio playback behavior on soundcloud. Also tweaks some of the WKWebView test
        message handling logic to support having multiple message-handler mappings.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/play-audio-on-click.html: Added.
        * TestWebKitAPI/mac/TestWKWebViewMac.h:
        * TestWebKitAPI/mac/TestWKWebViewMac.mm:
        (-[TestMessageHandler addMessage:withHandler:]):
        (-[TestMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[TestWKWebView performAfterReceivingMessage:action:]):
        (-[TestWKWebView performAfterLoading:]):
        (-[TestMessageHandler initWithMessage:handler:]): Deleted.

2016-09-30  Alex Christensen  <achristensen@webkit.org>

        Fix off-by-one error in URLParser::parseIPv4Host
        https://bugs.webkit.org/show_bug.cgi?id=162789

        Reviewed by Tim Horton.

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

2016-09-30  Alex Christensen  <achristensen@webkit.org>

        URLParser: parsing a URL with an empty host and a colon should fail
        https://bugs.webkit.org/show_bug.cgi?id=162795

        Reviewed by Tim Horton.

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

2016-09-30  Alex Christensen  <achristensen@webkit.org>

        URLParser: handle syntax violations in non-UTF-8 encoded queries
        https://bugs.webkit.org/show_bug.cgi?id=162770

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):
        Tests with emoji change behavior when we insert a tab between the surrogates, so don't do the
        insert-tab-at-each-location verification that syntax violations are handled correctly.

2016-09-30  Megan Gardner  <megan_gardner@apple.com>

        Make it possible to test web-related user-interface features
        https://bugs.webkit.org/show_bug.cgi?id=162657

        Reviewed by Simon Fraser.

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

2016-09-29  Jiewen Tan  <jiewen_tan@apple.com>

        Expose CryptoKey to web workers
        https://bugs.webkit.org/show_bug.cgi?id=162640
        <rdar://problem/28182204>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/SerializedCryptoKeyWrap.mm: Added.
        (TestWebKitAPI::TEST_F):
        Add API tests for SerializedCryptoKeyWrap APIs.

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        Fix syntax violation handling in IPv4 address parsing
        https://bugs.webkit.org/show_bug.cgi?id=162756

        Reviewed by Tim Horton.

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

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly parse ports with leading 0's
        https://bugs.webkit.org/show_bug.cgi?id=162752

        Reviewed by Tim Horton.

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

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser: make parsing invalid IPv4 addresses more robust and correct
        https://bugs.webkit.org/show_bug.cgi?id=162746

        Reviewed by Tim Horton.

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

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser: IPv6 addresses followed by a colon are invalid
        https://bugs.webkit.org/show_bug.cgi?id=162747

        Reviewed by Tim Horton.

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

2016-09-29  Alexey Proskuryakov  <ap@apple.com>

        Make WKTR short timeout dynamic
        https://bugs.webkit.org/show_bug.cgi?id=162733

        Reviewed by Alex Christensen.

        WebKitTestRunner has a hardcoded value for how long to wait for IPC responses,
        which is 5 seconds, or 10 seconds under ASan. But some of the operations can be
        fairly time consuming - e.g. launching Networking process on demand.
        These may take longer under load, especially with GuardMalloc.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::reattachPageToWebProcess):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::shortTimeout):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dumpResults):

        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::customTimeout): Deleted, this function was unused.

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should fail to parse unclosed IPv6 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162715

        Reviewed by Tim Horton.

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

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore tabs at all possible locations
        https://bugs.webkit.org/show_bug.cgi?id=162711

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::ExpectedParts::isInvalid):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2016-09-29  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [EFL] Add search button to url bar in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=162716

        Reviewed by Michael Catanzaro.

        As a bug title, it would be good to add a search button to URL bar.
        Additionally this patch changes color of button to recognize the buttons.

        * MiniBrowser/efl/main.c:
        (_search_button_clicked_cb):
        (_create_toolbar_button):
        (window_create):
        (create_toolbar_button): Deleted.

2016-09-28  Tim Horton  <timothy_horton@apple.com>

        API test WebKit2.AutoLayoutIntegration is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=160284

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (-[AutoLayoutWKWebView load:withWidth:expectingContentSize:resettingWidth:]):
        (-[AutoLayoutWKWebView beginLayoutAtMinimumWidth:andExpectContentSizeChange:]):
        (-[AutoLayoutWKWebView waitForContentSizeChangeResettingWidth:]):
        (-[AutoLayoutWKWebView layoutAtMinimumWidth:andExpectContentSizeChange:resettingWidth:]):
        (-[AutoLayoutWKWebView invalidateIntrinsicContentSize]):
        (TEST):
        Make the autolayout tests a bit more flexible regarding the ordering of
        invalidateIntrinsicContentSize, to avoid a race between the load
        completing and the invalidation.

        Also, move the newly added test to use its own WKWebView, since once in a
        while we get a first layout notification from the previous page, causing the test to fail.

        Un-disable the tests, which now run without any flakes for me with quite a few iterations.

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should properly handle unexpected periods and overflows in IPv4 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162655

        Reviewed by Geoffrey Garen.

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

2016-09-28  Ryan Haddad  <ryanhaddad@apple.com>

        Disable flaky API test WebKit2.AutoLayoutIntegration.
        https://bugs.webkit.org/show_bug.cgi?id=160284

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (TEST):

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore tabs in authority
        https://bugs.webkit.org/show_bug.cgi?id=162694

        Reviewed by Geoffrey Garen.

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

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore extra slashes after scheme:// and handle a missing slash after the port
        https://bugs.webkit.org/show_bug.cgi?id=162690

        Reviewed by Geoffrey Garen.

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

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly canonicalize uppercase IPv6 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162680

        Reviewed by Tim Horton.

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

2016-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Adopt MediaRemote SPI to achieve desired Now Playing behavior
        https://bugs.webkit.org/show_bug.cgi?id=162658
        <rdar://problem/28499358>

        Reviewed by Jer Noble.

        Introduces 2 unit tests in the new NowPlayingControlsTests test suite. Also provides some basic support for
        mocking key window status for TestWKWebViews.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm: Added.
        (-[NowPlayingTestWebView hasActiveNowPlayingSession]):
        (-[NowPlayingTestWebView expectHasActiveNowPlayingSession:]):
        (-[NowPlayingTestWebView _handleActiveNowPlayingSessionInfoResponse:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-test-now-playing.html: Added.
        * TestWebKitAPI/mac/TestWKWebViewMac.mm:
        (-[TestWKWebViewHostWindow isKeyWindow]):
        (-[TestWKWebViewHostWindow makeKeyWindow]):
        (-[TestWKWebViewHostWindow resignKeyWindow]):

2016-09-28  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile fix.
        https://bugs.webkit.org/show_bug.cgi?id=162670

        Reviewed by Brent Fulgham.

        Make sure we include JavaScriptCore files from the forwarding headers folder.
        Otherwise we might get multiple definitions if a JSC file is included both
        from the forwarding headers folder and the JSC source folder, since
        #pragma once is used in the header files.

        * DumpRenderTree/TestRunner.cpp:

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add Chrome UA quirk
        https://bugs.webkit.org/show_bug.cgi?id=162617

        Reviewed by Carlos Garcia Campos.

        Update test. This portion of the commit was actually unreviewed.

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

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Adjust OS X UA quirks list
        https://bugs.webkit.org/show_bug.cgi?id=162616

        "Reviewed" by Carlos Garcia Campos.

        Update test. This portion of the commit was actually unreviewed.

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

2016-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use GMenu internally in the context menu implementation
        https://bugs.webkit.org/show_bug.cgi?id=162603

        Reviewed by Michael Catanzaro.

        Remove smart separators test, since that's now done automatically by GTK+.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (beforeAll):
        (testContextMenuWebExtensionMenu): Deleted.

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        Correctly parse URLs with the first tab in the fragment
        https://bugs.webkit.org/show_bug.cgi?id=162650

        Reviewed by Saam Barati.

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

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        URLParser: Handle windows drive letters after two slashes in relative URLs according to spec
        https://bugs.webkit.org/show_bug.cgi?id=162646

        Reviewed by Saam Barati.

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

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        URLs with @ in the user should only search for the last @ until the end of the authority and host
        https://bugs.webkit.org/show_bug.cgi?id=162635

        Reviewed by Geoffrey Garen.

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

2016-09-27  JF Bastien  <jfbastien@apple.com>

        Speed up Heap::isMarkedConcurrently
        https://bugs.webkit.org/show_bug.cgi?id=162095

        Reviewed by Filip Pizlo.

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

2016-09-26  Alex Christensen  <achristensen@webkit.org>

        Implement URLParser::syntaxViolation
        https://bugs.webkit.org/show_bug.cgi?id=162593

        Reviewed by Geoffrey Garen.

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

2016-09-27  Anders Carlsson  <andersca@apple.com>

        Turns out OptionSet.cpp wasn't added to the right target. Add it and fix the build for real.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        (TestWebKitAPI::TEST):

2016-09-27  Anders Carlsson  <andersca@apple.com>

        Try to fix the GTK+ build.

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

2016-09-27  Dan Bernstein  <mitz@apple.com>

        [iOS] REGRESSION (r182126): Selection highlight and handles aren’t visible with WKSelectionGranularityCharacter
        https://bugs.webkit.org/show_bug.cgi?id=162577
        <rdar://problem/28481984>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectionRangeViewRects): Returns null.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: Declared new
          selectionRangeViewRects attribute.

        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        (WTR::UIScriptContext::jsContext): Added this public accessor.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::selectionRangeViewRects): Generic implementation that returns null.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader): Parse the new useCharacterSelectionGranularity
          option.

        * WebKitTestRunner/TestOptions.h: Added new useCharacterSelectionGranularity option.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView): Set the configuration’s selectionGranularity
          property based on the new option.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions): Compare selection granularity option values.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectionRangeViewRects): iOS-specific implementation that calls
          the new -[WKWebView _uiTextSelectionRectViews] and returns an array of view frame
          dictionaries.

2016-09-27  Daniel Bates  <dabates@apple.com>

        Cannot run dump-class-layout; dies with "global name 'lldb' is not defined"
        https://bugs.webkit.org/show_bug.cgi?id=162585

        Reviewed by Simon Fraser.

        Import the lldb module into the global namespace.

        Currently dump-class-layout imports the lldb Python module using the import statement
        from the helper function import_lldb. The import statement imports the names of the
        specified module into the scope of import_lldb(); => the names imported from this
        module cannot be accessed outside the scope of import_lldb(). Other functions in
        this script assume that the lldb module was imported into the global scope. We should
        import the module lldb into the global scope, if it exists, so that these functions
        can find it. Otherwise, we should emit a human readable error message that explains
        that we failed to import the lldb module.

        Also remove some unnecessary semicolon characters.

        * Scripts/dump-class-layout:
        (import_lldb):

2016-09-27  Jer Noble  <jer.noble@apple.com>

        Remove deprecated ENCRYPTED_MEDIA implementation.
        https://bugs.webkit.org/show_bug.cgi?id=161010

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-09-27  Chris Dumez  <cdumez@apple.com>

        [WK2] Navigating to a Blob URL does not trigger a download
        https://bugs.webkit.org/show_bug.cgi?id=162574

        Reviewed by Darin Adler.

        Add API that tests navigating to a Blob URL and checks that that the load
        properly gets converted into a download.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[BlobDownloadDelegate _downloadDidStart:]):
        (-[BlobDownloadDelegate _download:didReceiveResponse:]):
        (-[BlobDownloadDelegate _download:didReceiveData:]):
        (-[BlobDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[BlobDownloadDelegate _downloadDidFinish:]):
        (-[DownloadBlobURLNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestBlobURL.html: Added.

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Install binaries to pkglibexecdir rather than bindir
        https://bugs.webkit.org/show_bug.cgi?id=162602

        Reviewed by Carlos Garcia Campos.

        Install MiniBrowser to LIBEXEC_INSTALL_DIR rather than EXEC_INSTALL_DIR.

        * MiniBrowser/gtk/CMakeLists.txt:

2016-09-27  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Locate color picker popup to center of window
        https://bugs.webkit.org/show_bug.cgi?id=162540

        Reviewed by Michael Catanzaro.

        Color picker popup hasn't located in a center of main window, because
        elm_win_center() function doesn't work correctly. It looks a bug.

        To fix the problem, this patch uses evas_object_geometry_set() instead.

        * MiniBrowser/efl/main.c:
        (_color_picker_request_cb):

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Disable ACCELERATED_2D_CANVAS when using build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=162600

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm:

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        PyGIWarnings printed by webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=152470

        Reviewed by Carlos Garcia Campos.

        Update to a newer version of the keyring module, since this bug has been fixed upstream for
        a while. But be careful not to update to the latest version, since it has some compatibility
        breaks and requires the SecretService python module on Linux, but I couldn't figure out how
        to autoinstall it successfully.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_keyring):

2016-09-26  Ryan Haddad  <ryanhaddad@apple.com>

        Add Sierra to the flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=162509

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2016-09-26  Daniel Bates  <dabates@apple.com>

        Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
        https://bugs.webkit.org/show_bug.cgi?id=162365

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestRunner.h:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-09-26  Tomas Popela  <tpopela@redhat.com>

        [GTK] TestContextMenu is failing
        https://bugs.webkit.org/show_bug.cgi?id=162569

        We cannot use the MP3 file in the TestContextMenu, as it will not work
        by default on most distributions (that don't have an MP3 codecs
        installed). Change the test to use OGG file instead.

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuDefaultMenu):

2016-09-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        Using char16_t instead of wchar_t in TestWebKitAPI URLParser tests
        https://bugs.webkit.org/show_bug.cgi?id=162537

        Reviewed by Alex Christensen.

        Some build bot (Linux ARM GTK port) fails since we cannot select
        the specific StringBuilder::append method for wchar_t.

        wchar_t implementation highly depends on platforms. sizeof(wchar_t) == 2
        in Windows, while sizeof(wchar_t) == 4 in Linux and OS X. So, ICU
        uses wchar_t for UChar (UTF-16) in Windows while it doesn't in other
        platforms.

        StringBuilder::append is overloaded for UChar. In Windows, we can pass
        wchar_t since UChar is wchar_t. However, we cannot do that in other platforms.

        Instead of using wchar_t, we use more platform portable UTF-16 literal for
        testing. Use char16_t and C++11 UTF-16 literal.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::utf16String):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::wideString): Deleted.

2016-09-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Adjust EFL indentation to EFL MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=162542

        Unreviewed, EFL simple coding style fix.

        Some functions wasn't applied EFL coding style in prefix fix.

        * MiniBrowser/efl/main.c:
        (_key_down_cb):
        (view_focus_set):
        (_mouse_down_cb):
        (title_set):
        (_title_changed_cb):
        (_url_changed_cb):
        (_back_forward_list_changed_cb):
        (_progress_cb):
        (_error_cb):
        (_download_request_cb):
        (close_file_picker):
        (_filepicker_parent_deletion_cb):
        (_filepicker_deletion_cb):
        (_fileselector_done_cb):
        (_file_chooser_request_cb):
        (_download_finished_cb):
        (_download_failed_cb):
        (_color_changed_cb):
        (_color_item_selected_cb):
        (_color_picker_ok_clicked_cb):
        (_color_picker_cancel_clicked_cb):
        (_color_picker_dismiss_cb):
        (_color_picker_request_cb):
        (quit):
        (has_scheme):
        (url_from_user_input):
        (url_load_from_user_input):
        (_url_bar_activated_cb):
        (_url_bar_clicked_cb):
        (_search_field_aborted_cb):
        (_search_field_activated_cb):
        (_search_field_clicked_cb):
        (_back_button_clicked_cb):
        (_forward_button_clicked_cb):
        (_search_backward_button_clicked_cb):
        (_search_forward_button_clicked_cb):
        (_search_case_option_changed):
        (_search_word_start_option_changed_cb):
        (_search_close_button_clicked_cb):
        (_refresh_button_clicked_cb):
        (_stop_button_clicked_cb):
        (list_item_label_get):
        (_list_item_select_cb):
        (navigation_button_longpress_process):
        (_forward_button_longpress_cb):
        (_back_button_longpress_cb):
        (quit_event_loop):
        (_ok_clicked_cb):
        (_file_entry_dialog_show):

2016-09-24  Chris Dumez  <cdumez@apple.com>

        [WK2] anchor.download attribute value is ignored by NETWORK_SESSION code path
        https://bugs.webkit.org/show_bug.cgi?id=162531

        Reviewed by Darin Adler.

        Update decideDestinationWithSuggestedFilename() to return a actual file path
        instead of nullptr. The NETWORK_SESSION code path cancels the download when
        decideDestinationWithSuggestedFilename() returns an empty file path, unlike
        the !NETWORK_SESSION code path that just continue downloading without
        explicitely setting a destination path. This lead to different test results
        for NETWORK_SESSION and !NETWORK_SESSION code paths. Returns a valid
        destination path makes more sense and leads to consistent results.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decideDestinationWithSuggestedFilename):

2016-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [mac-sierra] 2 WKWebViewCandidateTests API test failures
        https://bugs.webkit.org/show_bug.cgi?id=162470

        Reviewed by Tim Horton.

        VideoControlsManager, WKWebViewCandidateTests and CandidateTests should not be running on 10.12.0. Guard these
        tests with an SDK check to prevent 10.12.0 bots from building them.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
        * TestWebKitAPI/Tests/mac/CandidateTests.mm:

2016-09-23  Alex Christensen  <achristensen@webkit.org>

        Refactor URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162516

        Reviewed by Brady Eidson.

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

2016-09-23  Caitlin Potter  <caitp@igalia.com>

        [JSC] Implement parsing of Async Functions
        https://bugs.webkit.org/show_bug.cgi?id=161409

        Reviewed by Yusuke Suzuki.

        * Scripts/build-jsc:
        (cMakeArgsFromFeatures):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-09-23  Alex Christensen  <achristensen@webkit.org>

        Refactor URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162511

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkURL):

2016-09-23  Alexey Proskuryakov  <ap@apple.com>

        iOS playback user action tests fail on some machines
        https://bugs.webkit.org/show_bug.cgi?id=162504
        rdar://problem/28013994

        Reviewed by Jer Noble.

        Avoid the need to have a timeout.

        * TestWebKitAPI/Tests/WebKit/ios/audio-only.html:
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-without-audio.html:

2016-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r204163): [GTK] API test /webkit2/WebKitSecurityManager/file-xhr is failing
        https://bugs.webkit.org/show_bug.cgi?id=161607

        Reviewed by Michael Catanzaro.

        Since r204163, in case of cross origin error when loading the XHR, the load fails and an error message is shown
        in the console, but there isn't any js expcetion, which is what we were checking. Now, we check that there
        aren't exceptions, and that the error message is sent to the console.

        * Scripts/run-gtk-tests:
        (TestRunner):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (consoleMessageReceivedCallback):
        (testWebContextSecurityFileXHR):

2016-09-23  Ryan Haddad  <ryanhaddad@apple.com>

        Use correct hardware for Sierra Debug WK2 testers.
        https://bugs.webkit.org/show_bug.cgi?id=162474

        Reviewed by Alexey Proskuryakov.

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

2016-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make all WebView tests have a WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=162487

        Reviewed by Michael Catanzaro.

        It simplifies tests using the user content manager, and allows to use it without having to subclass WebViewTest.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp:
        (ConsoleMessageTest::ConsoleMessageTest):
        (ConsoleMessageTest::~ConsoleMessageTest):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (testUserContentManagerInjectedStyleSheet):
        (testUserContentManagerInjectedScript):
        (UserScriptMessageTest::UserScriptMessageTest):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewIsPlayingAudio):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::WebViewTest):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2016-09-23  Antoine Quint  <graouts@apple.com>

        Add a new runtime flag for work on modern media controls (off by default)
        https://bugs.webkit.org/show_bug.cgi?id=162420
        <rdar://problem/27989489>

        Reviewed by Eric Carlson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setModernMediaControlsEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r194387): Crash on github.com in IntlDateTimeFormat::resolvedOptions in C locale
        https://bugs.webkit.org/show_bug.cgi?id=162139

        Reviewed by Michael Catanzaro.

        Add test cases to check the behavior when using the C locale and an invalid locale.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextLanguages):

2016-09-22  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] alert box is not displayed 
        https://bugs.webkit.org/show_bug.cgi?id=156395

        Reviewed by Gyuyoung Kim.

        Some popup objects(alert, confirm, prompt, file entry dialog) used the ecore_main_loop_begin() to make
        the modal popup but ecore_main_loop_begin() was not executed inside an exisiting main loop. So we have
        to use the ecore_main_loop_iterate() instead of the ecore_main_loop_begin().

        * MiniBrowser/efl/main.c:
        (_ok_clicked_cb):
        (_file_entry_dialog_show):
        (_javascript_alert_cb):
        (_javascript_confirm_cb):
        (_javascript_prompt_cb):
        (quit_event_loop): Deleted.

2016-09-22  Matthew Hanson  <matthew_hanson@apple.com>

        Add an API for getting the branch identifier from a Git or SVN checkout.
        https://bugs.webkit.org/show_bug.cgi?id=151570
        rdar://problem/17959831

        Reviewed by David Kilzer.

        This patch adds a function called svnIdentifierForPath. This function returns either "trunk",
        the name of the tag, or the name of the branch, as appropriate. This function is necessary for
        a VCSUtils client that is not checked in to the WebKit project.

        This patch also breaks up pathRelativeToSVNRepositoryRootForPath into four functions:
        - pathRelativeToSVNRepositoryRootForPath
        - svnInfoForPath
        - svnURLForPath
        - svnRepositoryRootForPath

        This allows us to reuse logic from pathRelativeToSVNRepositoryRootForPath in svnIdentifierForPath and
        allows clients of VCSUtils to extract what arbitrary information from the `svn info` command regardless
        of SCM.

        * Scripts/VCSUtils.pm:
        (svnInfoForPath):
        Copied logic that previously lived in pathRelativeToSVNRepositoryRootForPath.
        Make code safe to use for a path, and not just for the CWD.

        (svnURLForPath):
        Calls svnInfoForPath and extracts the URL.

        (svnRepositoryRootForPath):
        Calls svnInfoForPath and extracts the Repository Root.

        (svnIdentifierForPath):
        Calls pathRelativeToSVNRepositoryRootForPath and extracts the repository identifier.

        (pathRelativeToSVNRepositoryRootForPath):
        Now uses svnURLForPath and svnRepositoryRootForPath instead of being responsible for
        determining both values.

2016-09-22  Megan Gardner  <megan_gardner@apple.com>

        Add long press selection test
        https://bugs.webkit.org/show_bug.cgi?id=162367

        Reviewed by Simon Fraser.

        Add support to UIScriptController to synthesize long press events on iOS.
        This required adding long-press functionality to HIDEventGenerator.

        HIDEventGenerator sends the touchDown, but must then send the touchUp with
        a dispatch_after (rather than sleeping, as we do for other events) in order
        for the gesture recognizers to correctly detect a long press.

        Use the long press synthesis in a test that detects whether a long press
        gesture triggers text selection.

        Fixed incorrect constants. NSTimeInterval is in seconds, original numbers
        were nanoseconds and typedefed to long without regard to the type
        differences. Redid constants to be the right value, and converted upon use.

        Cleaned up unused enum types.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::longPressAtPoint):
        (WTR::UIScriptController::forcePressAtPoint):
        (WTR::UIScriptController::dragFromPointToPoint): Deleted.
        * Scripts/webkitpy/common/config/contributors.json:
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::longPressAtPoint):
        (WTR::UIScriptController::forcePressAtPoint):
        (WTR::UIScriptController::dragFromPointToPoint): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventType:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
        (-[HIDEventGenerator clearTap:]):
        (-[HIDEventGenerator longPressTimerCall:]):
        (-[HIDEventGenerator longPressFinish:completionBlock:]):
        (-[HIDEventGenerator longPress:completionBlock:]):
        (-[HIDEventGenerator forcePress:completionBlock:]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::longPressAtPoint):
        (WTR::UIScriptController::forcePressAtPoint):
        (WTR::UIScriptController::dragFromPointToPoint): Deleted.

2016-09-22  Jonathan Bedard  <jbedard@apple.com>

        Automatic Text Replacement Testing in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=161919

        Reviewed by Ryosuke Niwa.

        Implemented test hooks for text replacement for WebKit2.
        Note that spell checking has not been implemented, so most tests which use text replacement still fail.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Removed setAutomaticLinkDetectionEnabled from TestRunner, moved to Internals.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Ditto.
        (WTR::InjectedBundle::beginTesting): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest): Place TextChecker into testing mode.

2016-09-21  Dan Bernstein  <mitz@apple.com>

        [macOS] Upon layout, _webView:renderingProgressDidChange: fires before the intrinsic content size is updated
        https://bugs.webkit.org/show_bug.cgi?id=162359
        <rdar://problem/27776454>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (TEST):

2016-09-21  Keith Miller  <keith_miller@apple.com>

        Fix build for future versions of Clang.
        https://bugs.webkit.org/show_bug.cgi?id=162346

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/Counters.cpp:
        * TestWebKitAPI/Counters.h:
        (DeleterCounter::deleterCount):
        (DeleterCounter::TestingScope::TestingScope):
        (DeleterCounter::operator()):
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):

2016-09-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206222 and r206227.
        https://bugs.webkit.org/show_bug.cgi?id=162361

        "broke the windows build" (Requested by keith_mi_ on #webkit).

        Reverted changesets:

        "Fix build for future versions of Clang."
        https://bugs.webkit.org/show_bug.cgi?id=162346
        http://trac.webkit.org/changeset/206222

        "Attempt to fix windows build after r206222."
        http://trac.webkit.org/changeset/206227

2016-09-21  Alex Christensen  <achristensen@webkit.org>

        URLParser should match URL::parse when parsing data urls with slashes in them
        https://bugs.webkit.org/show_bug.cgi?id=162352

        Reviewed by Darin Adler.

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

2016-09-21  Alex Christensen  <achristensen@webkit.org>

        URLParser should fail when parsing invalid relative URLs with no schemes
        https://bugs.webkit.org/show_bug.cgi?id=162355

        Reviewed by Tim Horton.

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

2016-09-21  Keith Miller  <keith_miller@apple.com>

        Fix build for future versions of Clang.
        https://bugs.webkit.org/show_bug.cgi?id=162346

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/Counters.cpp:
        * TestWebKitAPI/Counters.h:
        (DeleterCounter::deleterCount):
        (DeleterCounter::TestingScope::TestingScope):
        (DeleterCounter::operator()):
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):

2016-09-21  Alex Christensen  <achristensen@webkit.org>

        Prepare API tests for enabling URLParser by default
        https://bugs.webkit.org/show_bug.cgi?id=162341

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        (TestWebKitAPI::shouldFail):

2016-09-21  Alex Christensen  <achristensen@webkit.org>

        URLParser: Correctly parse URLs that are just nonspecialscheme:/
        https://bugs.webkit.org/show_bug.cgi?id=162340

        Reviewed by Tim Horton.

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

2016-09-21  Alex Christensen  <achristensen@webkit.org>

        URLParser: correctly parse relative URLs that are just one character
        https://bugs.webkit.org/show_bug.cgi?id=162344

        Reviewed by Tim Horton.

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

2016-09-20  Alex Christensen  <achristensen@webkit.org>

        Optimize URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162105

        Reviewed by Geoffrey Garen.

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

2016-09-20  Aakash Jain  <aakash_jain@apple.com>

        enable remote_api (for debugging) in flakiness dashboard app
        https://bugs.webkit.org/show_bug.cgi?id=162325

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/app.yaml: enabled remote_api and datastore_admin.

2016-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r206180.

        Roll r206178 back in as the necessary changes have been made
        on the build master.

        Reverted changeset:

        "Unreviewed, rolling out r206178."
        https://bugs.webkit.org/show_bug.cgi?id=162249
        http://trac.webkit.org/changeset/206180

2016-09-20  Alexey Proskuryakov  <ap@apple.com>

        Use a hardcoded patch for sRGB color profile
        https://bugs.webkit.org/show_bug.cgi?id=162320
        rdar://problem/28387318

        Reviewed by Simon Fraser.

        This is a workaround for rdar://problem/28392768

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile):

2016-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r206178.

        This change caused buildbot config issues.

        Reverted changeset:

        "Add Sierra bots to buildbot and dashboard."
        https://bugs.webkit.org/show_bug.cgi?id=162249
        http://trac.webkit.org/changeset/206178

2016-09-20  Dean Johnson  <dean_johnson@apple.com>

        Add Sierra bots to buildbot and dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=162249

        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/WebKitBuildbot.js:
        (WebKitBuildbot):

2016-09-20  Alex Christensen  <achristensen@webkit.org>

        Reduce allocations in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162241

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkURL):

2016-09-20  Alex Christensen  <achristensen@webkit.org>

        Align URLParser with web platform tests when parsing non-special relative URLs ending in AuthorityOrHost state
        https://bugs.webkit.org/show_bug.cgi?id=162251

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):

2016-09-20  Alex Christensen  <achristensen@webkit.org>

        URLParser should allow '@' in user
        https://bugs.webkit.org/show_bug.cgi?id=162272

        Reviewed by Tim Horton.

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

2016-09-20  Alex Christensen  <achristensen@webkit.org>

        URLParser: Fix parsing relative URLs with one slash after the scheme:
        https://bugs.webkit.org/show_bug.cgi?id=162294

        Reviewed by Tim Horton.

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

2016-09-20  Alex Christensen  <achristensen@webkit.org>

        Fix Windows file URL quirks in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162303

        Reviewed by Tim Horton.

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

2016-09-20  Filip Pizlo  <fpizlo@apple.com>

        Make MarkedBlock state tracking support overlapped allocation and marking state
        https://bugs.webkit.org/show_bug.cgi?id=161581

        Reviewed by Geoffrey Garen.
        
        Remove the always-trigger-copy-phase configuration.

        * Scripts/run-jsc-stress-tests:

2016-09-20  Don Olmstead  <don.olmstead@am.sony.com>

        [WinCairo] Use find_package cairo in build
        https://bugs.webkit.org/show_bug.cgi?id=162239

        Reviewed by Alex Christensen.

        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/PlatformWin.cmake:

2016-09-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed build fix on 10.10 bots.

        * TestWebKitAPI/mac/TestWKWebViewMac.h:

2016-09-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        VideoControlsManager.VideoControlsManagerSingleLargeVideo fails intermittently on the Mac WK2 bot
        https://bugs.webkit.org/show_bug.cgi?id=162255

        Reviewed by Jer Noble.

        This is reproducible by running the test repeatedly in a for loop (locally, I observed that running the test
        back-to-back would result in the second one failing). This suggests that even on the runloop after the video
        starts playing, the state of the playback controls manager may not be up to date in the UI process. Instead, we
        can just spin the runloop until the playback controls are shown, which makes back-to-back tests to succeed and
        will probably address flakiness on the bots for this test.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html:

2016-09-20  Per Arne Vollan  <pvollan@apple.com>

        [Win] Run layout tests in parallel.
        https://bugs.webkit.org/show_bug.cgi?id=162145

        Reviewed by Brent Fulgham.

        To speed up layout tests, try running them in parallel.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes): Deleted.

2016-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed build fix after r206135

        NSEventMaskLeftMouseDown and friends are only available on 10.12.

        * TestWebKitAPI/mac/TestWKWebViewMac.mm:
        (__simulated_forceClickAssociatedEventsMask):

2016-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a unit test covering <https://trac.webkit.org/changeset/205983>
        https://bugs.webkit.org/show_bug.cgi?id=162112

        Reviewed by Beth Dakin.

        Adds a new unit test covering the changes in r205983 along with the infrastructure needed to support it. Also
        further refactors the TestWKWebView used by VideoControlsManager and WKWebViewCandidateTests so that in both
        cases, we add the WKWebView to a visible key window, and when sending a mouse down event, we propagate the event
        at the window level rather than the view level, allowing greater flexibility to simulate behaviors such as
        pressure-sensitive events that are needed for the new test.

        Also rewrites currently disabled unit tests in CandidateTests as WebKit2 unit tests in WKWebViewCandidateTests,
        checking whether or not to should be requesting candidates in password and non-password fields.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::setUpWebViewForTestingVideoControlsManager):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
        (-[CandidateTestWebView typeString:inputMessage:]):
        (+[CandidateTestWebView setUpWithFrame:testPage:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-input-field-focus-onload.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/text-and-password-inputs.html: Added.
        * TestWebKitAPI/mac/TestWKWebViewMac.h:
        * TestWebKitAPI/mac/TestWKWebViewMac.mm:
        (__simulated_forceClickAssociatedEventsMask):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebView initWithFrame:]):
        (-[TestWKWebView initWithFrame:configuration:]):
        (-[TestWKWebView _setUpTestWindow:]):
        (-[TestWKWebView mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebView typeCharacter:]):
        (-[TestWKWebView mouseDownAtPoint:]): Deleted.

2016-09-19  Alex Christensen  <achristensen@webkit.org>

        URLParser can read memory out of bounds
        https://bugs.webkit.org/show_bug.cgi?id=162206

        Reviewed by Geoff Garen.

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

2016-09-19  Daniel Bates  <dabates@apple.com>

        Remove ENABLE(TEXT_AUTOSIZING) automatic text size adjustment code
        https://bugs.webkit.org/show_bug.cgi?id=162167

        Reviewed by Simon Fraser.

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

2016-09-19  Nan Wang  <n_wang@apple.com>

        AX: Add accessibility support for details element on iOS
        https://bugs.webkit.org/show_bug.cgi?id=162041

        Reviewed by Chris Fleizach.

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

2016-09-18  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [EFL] Bump efl library to 1.18.1
        https://bugs.webkit.org/show_bug.cgi?id=162120

        Reviewed by Michael Catanzaro.

        * efl/jhbuild.modules: Use efl-1.18.1 instead of 1.18.

2016-09-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Adjust EFL coding style to EFL MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=162119

        Reviewed by Michael Catanzaro.

        Apply EFL coding style to main.c for MiniBrowser.
          - Use _foo_cb instead of on_foo for callback function
          - Use 3 spaces and use 2 spaces in keywords.

        - EFL coding style.
          https://phab.enlightenment.org/w/coding_convention/

        Additionally this patch adds an exception rule that style checker doesn't
        check indentation rule in EFL MiniBrowser.

        * MiniBrowser/efl/main.c:
        (miniBrowserViewSmartClass):
        (window_find_with_ewk_view):
        (_tooltip_show):
        (window_tooltip_hide):
        (window_tooltip_update):
        (_mouse_in_cb):
        (_mouse_move_cb):
        (_mouse_out_cb):
        (_mouse_wheel_cb):
        (_window_resize_cb):
        (update_view_favicon):
        (_icon_changed_cb):
        (window_free):
        (window_close):
        (search_icon_show):
        (search_box_show):
        (search_box_hide):
        (history_list_hide):
        (save_page_contents_callback):
        (script_execute_callback):
        (toggle_window_fullscreen):
        (_key_down_cb):
        (_mouse_down_cb):
        (_title_changed_cb):
        (_url_changed_cb):
        (_back_forward_list_changed_cb):
        (_progress_cb):
        (_error_cb):
        (_download_request_cb):
        (close_file_picker):
        (_filepicker_parent_deletion_cb):
        (_filepicker_deletion_cb):
        (_fileselector_done_cb):
        (_file_chooser_request_cb):
        (_download_finished_cb):
        (_download_failed_cb):
        (_color_changed_cb):
        (_color_item_selected_cb):
        (_color_picker_ok_clicked_cb):
        (_color_picker_cancel_clicked_cb):
        (_color_picker_dismiss_cb):
        (_color_picker_request_cb):
        (_url_bar_activated_cb):
        (_url_bar_clicked_cb):
        (_search_field_aborted_cb):
        (_search_field_activated_cb):
        (_search_field_clicked_cb):
        (_back_button_clicked_cb):
        (_forward_button_clicked_cb):
        (_search_backward_button_clicked_cb):
        (_search_forward_button_clicked_cb):
        (_search_case_option_changed):
        (_search_word_start_option_changed_cb):
        (_search_close_button_clicked_cb):
        (_refresh_button_clicked_cb):
        (_stop_button_clicked_cb):
        (_list_item_select_cb):
        (navigation_button_longpress_process):
        (_forward_button_longpress_cb):
        (_back_button_longpress_cb):
        (_ok_clicked_cb):
        (_file_entry_dialog_show):
        (_javascript_alert_cb):
        (_javascript_confirm_cb):
        (_javascript_prompt_cb):
        (_javascript_before_unload_confirm_cb):
        (_popup_menu_item_clicked_cb):
        (popup_menu_populate):
        (_popup_menu_show):
        (_popup_menu_hide):
        (_window_geometry_get):
        (_window_geometry_set):
        (_fullscreen_accept_cb):
        (_fullscreen_deny_cb):
        (_fullscreen_enter_cb):
        (_fullscreen_exit_cb):
        (_window_create_cb):
        (_window_close_cb):
        (_context_menu_item_selected_cb):
        (context_menu_populate):
        (_context_menu_show):
        (_context_menu_hide):
        (auth_popup_close):
        (_auth_cancel_cb):
        (_auth_ok_cb):
        (_authentication_request_cb):
        (_search_text_found_cb):
        (_tooltip_text_set):
        (_tooltip_text_unset):
        (_navigation_policy_decision_cb):
        (_home_button_clicked_cb):
        (_window_deletion_cb):
        (create_toolbar_button):
        (window_create):
        (configuration):
        (parse_cookies_policy):
        (parse_window_size):
        (elm_main):
        (on_tooltip_show): Deleted.
        (on_mouse_in): Deleted.
        (on_mouse_move): Deleted.
        (on_mouse_out): Deleted.
        (on_mouse_wheel): Deleted.
        (on_window_resize): Deleted.
        (on_icon_changed_cb): Deleted.
        (on_key_down): Deleted.
        (on_mouse_down): Deleted.
        (on_title_changed): Deleted.
        (on_url_changed): Deleted.
        (on_back_forward_list_changed): Deleted.
        (on_progress): Deleted.
        (on_error): Deleted.
        (on_download_request): Deleted.
        (on_filepicker_parent_deletion): Deleted.
        (on_filepicker_deletion): Deleted.
        (on_fileselector_done): Deleted.
        (on_file_chooser_request): Deleted.
        (on_download_finished): Deleted.
        (on_download_failed): Deleted.
        (on_color_changed): Deleted.
        (on_color_item_selected): Deleted.
        (on_color_picker_ok_clicked): Deleted.
        (on_color_picker_cancel_clicked): Deleted.
        (on_color_picker_dismiss): Deleted.
        (on_color_picker_request): Deleted.
        (on_url_bar_activated): Deleted.
        (on_url_bar_clicked): Deleted.
        (on_search_field_aborted): Deleted.
        (on_search_field_activated): Deleted.
        (on_search_field_clicked): Deleted.
        (on_back_button_clicked): Deleted.
        (on_forward_button_clicked): Deleted.
        (on_search_backward_button_clicked): Deleted.
        (on_search_forward_button_clicked): Deleted.
        (on_search_case_option_changed): Deleted.
        (on_search_word_start_option_changed): Deleted.
        (on_search_close_button_clicked): Deleted.
        (on_refresh_button_clicked): Deleted.
        (on_stop_button_clicked): Deleted.
        (on_list_item_select): Deleted.
        (on_forward_button_longpress): Deleted.
        (on_back_button_longpress): Deleted.
        (on_ok_clicked): Deleted.
        (show_file_entry_dialog): Deleted.
        (on_javascript_alert): Deleted.
        (on_javascript_confirm): Deleted.
        (on_javascript_prompt): Deleted.
        (on_javascript_before_unload_confirm): Deleted.
        (on_popup_menu_item_clicked): Deleted.
        (on_popup_menu_show): Deleted.
        (on_popup_menu_hide): Deleted.
        (on_window_geometry_get): Deleted.
        (on_window_geometry_set): Deleted.
        (on_fullscreen_accept): Deleted.
        (on_fullscreen_deny): Deleted.
        (on_fullscreen_enter): Deleted.
        (on_fullscreen_exit): Deleted.
        (on_window_create): Deleted.
        (on_window_close): Deleted.
        (context_menu_item_selected_cb): Deleted.
        (on_context_menu_show): Deleted.
        (on_context_menu_hide): Deleted.
        (on_auth_cancel): Deleted.
        (on_auth_ok): Deleted.
        (on_authentication_request): Deleted.
        (on_search_text_found): Deleted.
        (on_tooltip_text_set): Deleted.
        (on_tooltip_text_unset): Deleted.
        (on_navigation_policy_decision): Deleted.
        (on_home_button_clicked): Deleted.
        (on_window_deletion): Deleted.
        * Scripts/webkitpy/style/checker.py:

2016-09-16  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Get CSSPropertyParserHelpers.cpp compiling
        https://bugs.webkit.org/show_bug.cgi?id=162078

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):
        Convert to ValueRange.

2016-09-16  Alex Christensen  <achristensen@webkit.org>

        Fix API tests after r206036
        https://bugs.webkit.org/show_bug.cgi?id=162049

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        An emoji had been UTF-8 encoded in the patch that was applied.
        The test needed to check the encoding of the emoji, not the UTF-8 encoding of the emoji.
        Everything was correct except applying the patch before committing.

2016-09-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        RequiresUserActionForPlayback TestWebKitAPI tests are broken after r206033.
        https://bugs.webkit.org/show_bug.cgi?id=162080

        Reviewed by Jer Noble.

        I renamed "playingHandler" to the more generalized "testHandler", but did not realize that the
        RequiresUserActionForPlayback tests also used "playingHandler". Renames the handler to account for this change.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):

2016-09-16  Alex Christensen  <achristensen@webkit.org>

        URLParser should percent encode the user and password according to spec
        https://bugs.webkit.org/show_bug.cgi?id=162049

        Reviewed by Tim Horton.

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

2016-09-16  Alex Christensen  <achristensen@webkit.org>

        Fix more edge cases in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162051

        Reviewed by Tim Horton.

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

2016-09-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Inserting a space after inserting an accepted candidate scrolls the document and causes a flicker
        https://bugs.webkit.org/show_bug.cgi?id=162009
        <rdar://problem/28086237>

        Reviewed by Tim Horton.

        Adds 3 new text editing API tests covering candidate insertion, as well as support for testing candidates in
        WKWebViews. Refactors common WKWebView helpers across both VideoControlsManager tests and the new
        WKWebViewCandidateTests into a new utility class, TestWKWebView in TestWKWebView.mm, which is capable of
        simulating mouse and keyboard events as well as waiting for JavaScript messages sent from the web process and
        performing actions in response.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/audio-only.html:
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        (-[MessageHandler initWithMessage:handler:]): Deleted.
        (-[MessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
        (-[VideoControlsManagerTestWebView mouseDownAtPoint:]): Deleted.
        (-[VideoControlsManagerTestWebView performAfterLoading:]): Deleted.
        (-[VideoControlsManagerTestWebView callJavascriptFunction:]): Deleted.
        (-[VideoControlsManagerTestWebView loadTestPageNamed:]): Deleted.
        (-[VideoControlsManagerTestWebView performAfterReceivingMessage:action:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm: Added.
        (-[TestCandidate initWithReplacementString:inRange:]):
        (-[TestCandidate replacementString]):
        (-[TestCandidate resultType]):
        (-[TestCandidate range]):
        (-[CandidateTestWebView insertCandidatesAndWaitForResponse:range:]):
        (-[CandidateTestWebView _didHandleAcceptedCandidate]):
        (-[CandidateTestWebView expectCandidateListVisibilityUpdates:whenPerformingActions:]):
        (-[CandidateTestWebView _didUpdateCandidateListVisibility:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/autoplaying-video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/change-video-source-on-click.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/change-video-source-on-end.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/full-size-autoplaying-video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/input-field-in-scrollable-document.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-hides-controls-after-seek-to-end.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-mutes-onplaying.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-offscreen.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-playing-scroll-away.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-after-ending.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-to-beginning-and-play-after-ending.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-without-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-click-to-pause.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-scroll-to-video.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-paused-video-hides-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-muted-video-hides-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-video-keeps-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/skinny-autoplaying-video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/wide-autoplaying-video-with-audio.html:
        * TestWebKitAPI/mac/TestWKWebViewMac.h: Added.
        * TestWebKitAPI/mac/TestWKWebViewMac.mm: Added.
        (-[TestMessageHandler initWithMessage:handler:]):
        (-[TestMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[TestWKWebView mouseDownAtPoint:]):
        (-[TestWKWebView performAfterReceivingMessage:action:]):
        (-[TestWKWebView loadTestPageNamed:]):
        (-[TestWKWebView typeCharacter:]):
        (-[TestWKWebView stringByEvaluatingJavaScript:]):
        (-[TestWKWebView waitForMessage:]):
        (-[TestWKWebView performAfterLoading:]):

2016-09-14  Jer Noble  <jer.noble@apple.com>

        [media-source] fix imported/w3c/web-platform-tests/media-source/mediasource-duration.html
        https://bugs.webkit.org/show_bug.cgi?id=161999

        Reviewed by Eric Carlson.

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

2016-09-16  Anders Carlsson  <andersca@apple.com>

        Fix isValidEnum to work with older versions of GCC
        https://bugs.webkit.org/show_bug.cgi?id=162065

        Reviewed by Michael Catanzaro.

        Add EnumTraits.cpp to the CMake build.

        * TestWebKitAPI/CMakeLists.txt:

2016-09-16  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        Unreviewed: Change my primary address for auto-complete in bugzilla.

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

2016-09-15  Alex Christensen  <achristensen@webkit.org>

        URLParser: Check for invalid characters in the host
        https://bugs.webkit.org/show_bug.cgi?id=162023

        Reviewed by Tim Horton.

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

2016-09-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Refactor GENERATE_BINDINGS
        https://bugs.webkit.org/show_bug.cgi?id=161854

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/CMakeLists.txt: Changed the arguments of
        GENERATE_BINDINGS to new style.
        * WebKitTestRunner/CMakeLists.txt: Ditto.

2016-09-15  Ryan Haddad  <ryanhaddad@apple.com>

        Disable failing API WebKit2.DataDetectionReferenceDate until it can be investigated.
        https://bugs.webkit.org/show_bug.cgi?id=161967

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (TEST):

2016-09-15  Per Arne Vollan  <pvollan@apple.com>

        [Win] run-api-tests is failing.
        https://bugs.webkit.org/show_bug.cgi?id=162015

        Reviewed by Brent Fulgham.

        MSVC is not interpreting C++ string literals with unicode characters correctly when the source file
        doesn't contain encoding information. Save the file with utf8 encoding with signature.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:

2016-09-15  Jonathan Bedard  <jbedard@apple.com>

        Move --no-sample-on-timeout to config.json for each bot
        https://bugs.webkit.org/show_bug.cgi?id=161964

        Reviewed by Daniel Bates.

        Roll out changes from 205573 and move them into config.json.  At this time, only macOS and iOS simulator sample a process on timeout, —no-sample-on-timeout is unneeded for GTK, EFL and Windows.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Each bot now independently defines if it will be running sample on timeout.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start): Rolled out changes from 205573.

2016-09-15  Csaba Osztrogonác  <ossy@webkit.org>

        js/stringimpl-to-jsstring-on-large-strings tests consume huge memory
        https://bugs.webkit.org/show_bug.cgi?id=159807

        Reviewed by Saam Barati.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunRemoteJavaScriptCoreTests.start): JSCOnly bots are memory limited devices, tests should run with --memory-limited option.
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Pass through --memory-limited option to run-jsc-stress-tests.
        * Scripts/run-jsc-stress-tests: Typo fix.

2016-09-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls behave strangely when changing media sources
        https://bugs.webkit.org/show_bug.cgi?id=161914
        <rdar://problem/28227805>

        Reviewed by Tim Horton.

        Adds three new unit tests verifying that media controls remain stable during common `src` change scenarios. Also
        tweaks an existing test to account for new `ended` behavior.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (-[VideoControlsManagerTestWebView waitForMediaControlsToShow]):
        (-[VideoControlsManagerTestWebView waitForMediaControlsToHide]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/change-video-source-on-click.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/change-video-source-on-end.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-offscreen.html: Added.

2016-09-14  Jonathan Bedard  <jbedard@apple.com>

        Fix mastercfg_unittest
        https://bugs.webkit.org/show_bug.cgi?id=161816

        Reviewed by Daniel Bates.

        (RunWebKitTests.start):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Fixed broken unit tests.

2016-09-13  Alexey Proskuryakov  <ap@apple.com>

        Landing optimized .png files, forgot to do it initially.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice@2x.png:

2016-09-13  Alexey Proskuryakov  <ap@apple.com>

        Switch build.webkit.org to iOS 10
        https://bugs.webkit.org/show_bug.cgi?id=161930

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        * Scripts/webkitpy/port/ios.py:
        * TestResultServer/static-dashboards/builders.jsonp:

2016-09-13  Tim Horton  <timothy_horton@apple.com>

        Provide a mechanism to specify the maximum width of WKThumbnailView snapshots
        https://bugs.webkit.org/show_bug.cgi?id=161896
        <rdar://problem/28229827>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        Add a test for the new property.
        Also fix the old new test to run on arbitrary scale displays without failing.

2016-09-12  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Provide Direct2D-based geometry and transform cast operations
        https://bugs.webkit.org/show_bug.cgi?id=161818

        Reviewed by Dean Jackson.

        Add several new test suites for the various geometric primitives in WebCore.

        * TestWebKitAPI/PlatformWin.cmake: Add new files for test cases.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WebCore/AffineTransform.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/FloatPoint.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/FloatRect.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/FloatSize.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/IntPoint.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/IntRect.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/IntSize.cpp: Added.
        * TestWebKitAPI/Tests/WebCore/TransformationMatrix.cpp: Add some new
        Windows-focused test cases.

2016-09-12  Chris Dumez  <cdumez@apple.com>

        Fix post-landing review comments after r205787
        https://bugs.webkit.org/show_bug.cgi?id=161885

        Reviewed by Darin Adler.

        Leverage new StringBuilder::append(CFStringRef) overload.

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

2016-09-12  Alex Christensen  <achristensen@webkit.org>

        URLParser: Correctly ignore spaces before relative URLs with no scheme
        https://bugs.webkit.org/show_bug.cgi?id=161889

        Reviewed by Daniel Bates.

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

2016-09-12  Alex Christensen  <achristensen@webkit.org>

        URLParser: Fix relative URLs containing only fragments
        https://bugs.webkit.org/show_bug.cgi?id=161882

        Reviewed by Brady Eidson.

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

2016-09-12  Alex Christensen  <achristensen@webkit.org>

        URLParser: Correctly handle relative URLs that are just a scheme and a colon
        https://bugs.webkit.org/show_bug.cgi?id=161876

        Reviewed by Brady Eidson.

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

2016-09-12  DAN SAUNDERS  <dasau@microsoft.com>

        AX: WKWebView for macOS does not allow configuration of tabsToLinks
        https://bugs.webkit.org/show_bug.cgi?id=161394

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-09-12  Alex Christensen  <achristensen@webkit.org>

        Remove trailing control characters and spaces before parsing a URL
        https://bugs.webkit.org/show_bug.cgi?id=161870

        Reviewed by Tim Horton.

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

2016-09-12  Alex Christensen  <achristensen@webkit.org>

        Fix more URLParser quirks
        https://bugs.webkit.org/show_bug.cgi?id=161834

        Reviewed by Brady Eidson.

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

2016-09-10  Alex Christensen  <achristensen@webkit.org>

        Optimize URLParser performance
        https://bugs.webkit.org/show_bug.cgi?id=161837

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        Added a test to verify the case insensitivity of the default port checks.

2016-09-10  Chris Dumez  <cdumez@apple.com>

        parseHTMLInteger() should take a StringView in parameter
        https://bugs.webkit.org/show_bug.cgi?id=161669

        Reviewed by Ryosuke Niwa.

        Explicitly construct a String from the CFStringRef in order to call
        StringBuilder::append(). This is needed now that there is an append()
        overload taking an AtomicString in parameter.

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

2016-09-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Apple.com keynote does not display media controls
        https://bugs.webkit.org/show_bug.cgi?id=161833
        <rdar://problem/28230123>

        Reviewed by Tim Horton.

        New unit test verifying that wide videos (~2 aspect ratio) still get media controls.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/wide-autoplaying-video-with-audio.html: Added.

2016-09-09  Tim Horton  <timothy_horton@apple.com>

        WKThumbnailView should expose a mode where it can be reparented without resnapshotting
        https://bugs.webkit.org/show_bug.cgi?id=161828
        <rdar://problem/28229756>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKThumbnailView.mm: Added.
        (-[SnapshotSizeObserver observeValueForKeyPath:ofObject:change:context:]):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        Add a test ensuring that this behaves correctly.

2016-09-09  Alex Christensen  <achristensen@webkit.org>

        URLParser: Keep track of cannot-be-a-base-url according to spec
        https://bugs.webkit.org/show_bug.cgi?id=161830

        Reviewed by Tim Horton.

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

2016-09-09  Alex Christensen  <achristensen@webkit.org>

        Fix API tests after r205774.
        https://bugs.webkit.org/show_bug.cgi?id=161820

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        I had committed the wrong expected path in one case. The functionality is correct.

2016-09-09  Michael Saboff  <msaboff@apple.com>

        Unreviewed, rolling r205759 back in with a fix.

        An expectation file, JSTests/ChakraCore/test/Lib/tostring.baseline-jsc,
        should be named "toString.baseline-jsc".  For systems with case-insensitive
        filesystems, the wrong name isn't an issue.  That rename is part of this
        fix.

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

2016-09-09  Johan K. Jensen  <johan_jensen@apple.com>

        Unreviewed. Added myself to the list of committers.

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

2016-09-09  Alex Christensen  <achristensen@webkit.org>

        URLParser should convert ASCII hosts to lowercase
        https://bugs.webkit.org/show_bug.cgi?id=161820

        Reviewed by Geoffrey Garen.

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

2016-09-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r205759.

        This change broke all JSC tests

        Reverted changeset:

        "Add ChakraCore tests to run-javascriptcore-tests"
        https://bugs.webkit.org/show_bug.cgi?id=161808
        http://trac.webkit.org/changeset/205759

2016-09-09  Ryan Haddad  <ryanhaddad@apple.com>

        Revert r205770 because Ricky is already a committer.

        Unreviewed.

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

2016-09-09  Ricky Mondello  <rmondello@apple.com>

        Unreviewed. Added myself to the list of committers.

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

2016-09-09  Alex Christensen  <achristensen@webkit.org>

        URLParser: Fix and optimize parsing file URLs ending with a host but no slash
        https://bugs.webkit.org/show_bug.cgi?id=161815

        Reviewed by Geoffrey Garen.

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

2016-09-08  Dean Jackson  <dino@apple.com>

        Expose Apple Pencil data to Touch events
        https://bugs.webkit.org/show_bug.cgi?id=161783
        <rdar://problem/28218898>

        Reviewed by Beth Dakin.

        The values that IOHID expects are different from their
        documentation, and from what UITouch interprets. Tweak
        incoming data so it will produce the output we expect.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:]):
        (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:]):

2016-09-09  JF Bastien  <jfbastien@apple.com>

        Unreviewed. Added myself to the list of committers.

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

2016-09-09  Michael Saboff  <msaboff@apple.com>

        Add ChakraCore tests to run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=161808

        Reviewed by Saam Barati.

        Added ChakraCore tests to the default list of tests to run.

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

2016-09-09  Alex Christensen  <achristensen@webkit.org>

        URLParser: Handle \ in path according to spec
        https://bugs.webkit.org/show_bug.cgi?id=161805

        Reviewed by Andy Estes.

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

2016-09-09  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse URLs with non-special schemes
        https://bugs.webkit.org/show_bug.cgi?id=161786

        Reviewed by Andy Estes.

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

2016-09-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] HashTable's rehash is not compatible to Ref<T> and ASan
        https://bugs.webkit.org/show_bug.cgi?id=161763

        Reviewed by Mark Lam.

        Add tests that inserts many Ref<>s. It incurs HashTable::rehash, and we can ensure
        that ASan crash does not occur with this patch.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser: Handle \ in paths of special URLs according to spec
        https://bugs.webkit.org/show_bug.cgi?id=161781

        Reviewed by Tim Horton.

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

2016-09-08  Simon Fraser  <simon.fraser@apple.com>

        Update the content-animation.plan file to run css-accelerated-animation.html
        and pull SVN revision r205680.

        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan:

2016-09-08  Simon Fraser  <simon.fraser@apple.com>

        Add a content-animation test with accelerated CSS animations
        https://bugs.webkit.org/show_bug.cgi?id=161776

        Reviewed by Dean Jackson.

        * Scripts/webkitpy/benchmark_runner/data/patches/ContentAnimation.patch:

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser: Parsing empty URLs with a base URL should return the base URL
        https://bugs.webkit.org/show_bug.cgi?id=161777

        Reviewed by Tim Horton.

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

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser failures should preserve the original input string
        https://bugs.webkit.org/show_bug.cgi?id=161769

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::shouldFail):

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse URLs with a user but no password
        https://bugs.webkit.org/show_bug.cgi?id=161773

        Reviewed by Brady Eidson.

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

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse ports after IPv4 and IPv6 hosts
        https://bugs.webkit.org/show_bug.cgi?id=161731

        Reviewed by Brady Eidson.

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

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly handle \ in path
        https://bugs.webkit.org/show_bug.cgi?id=161762

        Reviewed by Brady Eidson.

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

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        URLParser should handle URLs with empty authority
        https://bugs.webkit.org/show_bug.cgi?id=161711

        Reviewed by Brady Eidson.

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

2016-09-08  Alex Christensen  <achristensen@webkit.org>

        Re-land r205580 after r205649 fixed the test failures
        https://bugs.webkit.org/show_bug.cgi?id=161668

        Re-landing changesets:

        "Punycode encode non-ascii hosts in URLParser"
        https://bugs.webkit.org/show_bug.cgi?id=161655
        http://trac.webkit.org/changeset/205521

        "Fix query-only and fragment-only relative URLs when using
        URLParser"
        https://bugs.webkit.org/show_bug.cgi?id=161657
        http://trac.webkit.org/changeset/205526

        "URLParser should parse / as a relative URL"
        https://bugs.webkit.org/show_bug.cgi?id=161667
        http://trac.webkit.org/changeset/205532

2016-09-08  Dean Jackson  <dino@apple.com>

        Expose Apple Pencil input to testing system
        https://bugs.webkit.org/show_bug.cgi?id=161670
        <rdar://problem/28183327>

        I fixed the internal builds, now try to fix the public builds.

        * WebKitTestRunner/ios/IOKitSPI.h: Add new enum values.

2016-09-07  Dean Jackson  <dino@apple.com>

        Expose Apple Pencil input to testing system
        https://bugs.webkit.org/show_bug.cgi?id=161670
        <rdar://problem/28183327>

        Attempt to fix iOS 9 builds.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventType:]):

2016-09-07  Alex Christensen  <achristensen@webkit.org>

        Roll out r205580 and r205582.
        https://bugs.webkit.org/show_bug.cgi?id=161668

        I need to figure out why this is failing on the bots before landing any more URLParser progress.

2016-09-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, revert r205533.
        https://bugs.webkit.org/show_bug.cgi?id=161668

        Re-landing changesets:

        "Punycode encode non-ascii hosts in URLParser"
        https://bugs.webkit.org/show_bug.cgi?id=161655
        http://trac.webkit.org/changeset/205521

        "Fix query-only and fragment-only relative URLs when using
        URLParser"
        https://bugs.webkit.org/show_bug.cgi?id=161657
        http://trac.webkit.org/changeset/205526

        "URLParser should parse / as a relative URL"
        https://bugs.webkit.org/show_bug.cgi?id=161667
        http://trac.webkit.org/changeset/205532

2016-09-07  Simon Fraser  <simon.fraser@apple.com>

        Enable the <meter> element on iOS
        https://bugs.webkit.org/show_bug.cgi?id=161714
        rdar://problem/8978410

        Reviewed by Tim Horton.

        Define ENABLE_METER_ELEMENT unconditionally now.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-09-07  Jonathan Bedard  <jbedard@apple.com>

        Run spindumps on timeout on iOS 9 Simulator Release WK2 (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=161699

        Reviewed by Alexey Proskuryakov.

        This change does not have testing associated with it because the testing infrastructure does not exists, we cannot currently mock build-bot variables.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests): Enable sample on timeout for everything.
        (RunWebKitTests.start): Disable sample on timeout for everything except iOS 9 WK2 release simulators.

2016-09-06  Dean Jackson  <dino@apple.com>

        Expose Apple Pencil input to testing system
        https://bugs.webkit.org/show_bug.cgi?id=161670
        <rdar://problem/28183327>

        Reviewed by Simon Fraser.

        Add API to UIScriptController that allows a test to emulate
        stylus input, such as from the Apple Pencil.

        The code is only implemented for WebKitTestRunner.

        There are also four new tests that ensure an Apple Pencil
        operates similarly to a regular touch. The main difference
        is that you can't have multiple touches when using an Apple Pencil.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm: New methods. Empty implementations.
        (WTR::UIScriptController::stylusDownAtPoint):
        (WTR::UIScriptController::stylusMoveToPoint):
        (WTR::UIScriptController::stylusUpAtPoint):
        (WTR::UIScriptController::stylusTapAtPoint):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: New methods.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp: Empty implementations.
        (WTR::UIScriptController::stylusDownAtPoint):
        (WTR::UIScriptController::stylusMoveToPoint):
        (WTR::UIScriptController::stylusUpAtPoint):
        (WTR::UIScriptController::stylusTapAtPoint):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm: New StylusEvent types. Add some properties
        to SyntheticEventDigitizerInfo.
        (-[HIDEventGenerator _createIOHIDEventType:]): Add support for StylusEvent types.
        (-[HIDEventGenerator touchDownAtPoints:touchCount:]): Clear any old stylus info.
        (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:]):
        (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:]):
        (-[HIDEventGenerator stylusUpAtPoint:]):
        (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusUpAtPoint:completionBlock:]):
        (-[HIDEventGenerator stylusTapAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        * WebKitTestRunner/ios/IOKitSPI.h: Add new include, and new SPI.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm: Calls into the HIDEventGenerator for the new API.
        (WTR::UIScriptController::stylusDownAtPoint):
        (WTR::UIScriptController::stylusMoveToPoint):
        (WTR::UIScriptController::stylusUpAtPoint):
        (WTR::UIScriptController::stylusTapAtPoint):

2016-09-07  Daniel Bates  <dabates@apple.com>

        Update WebKitSystemInterface

        Rubber-stamped by Dean Jackson.

        Copy WebKitSystemInterface for iOS 10 to the built products directory.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-09-07  Youenn Fablet  <youenn@apple.com>

        [Streams API] Separate compile flag for ReadableStream and WritableStream
        https://bugs.webkit.org/show_bug.cgi?id=161044

        Reviewed by Alex Christensen.

        Moving from STREAMS_API to READABLE_STREAM_API and WRITABLE_STREAM_API compilation flags.

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

2016-09-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move some GObject DOM unstable API to stable
        https://bugs.webkit.org/show_bug.cgi?id=161681

        Reviewed by Žan Doberšek.

        Do not use user message handler unstable API in the tests, since we have stable convenient API for that.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (testUserContentManagerScriptMessageFromDOMBindings):
        (serverCallback): Deleted.
        (beforeAll): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (documentLoadedCallback):
        (emitURIChanged): Deleted.

2016-09-07  Youenn Fablet  <youenn@apple.com>

        Using tests-options.json to compute whether tests are slow
        https://bugs.webkit.org/show_bug.cgi?id=161626

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py: Updated first test to use a MockHost.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Loading tests-options.json
        (Manager._test_is_slow): Computing timeout value based on tests-options.json.

2016-09-07  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Need the libosmesa to support the software backend drawing.
        https://bugs.webkit.org/show_bug.cgi?id=147065

        Reviewed by Gyuyoung Kim.

        Added the libosmesa to support the software backend drawing.

        * efl/install-dependencies:

2016-09-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r205521, r205526, and r205532.
        https://bugs.webkit.org/show_bug.cgi?id=161668

        broke API tests (Requested by alexchristensen on #webkit).

        Reverted changesets:

        "Punycode encode non-ascii hosts in URLParser"
        https://bugs.webkit.org/show_bug.cgi?id=161655
        http://trac.webkit.org/changeset/205521

        "Fix query-only and fragment-only relative URLs when using
        URLParser"
        https://bugs.webkit.org/show_bug.cgi?id=161657
        http://trac.webkit.org/changeset/205526

        "URLParser should parse / as a relative URL"
        https://bugs.webkit.org/show_bug.cgi?id=161667
        http://trac.webkit.org/changeset/205532

2016-09-06  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse / as a relative URL
        https://bugs.webkit.org/show_bug.cgi?id=161667

        Reviewed by Tim Horton.

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

2016-09-06  Daniel Bates  <dabates@apple.com>

        [iOS] DumpRenderTree and WebKitTestRunner fail to build - "Ad Hoc code signing is not allowed with SDK 'Simulator - iOS 10.0'"
        https://bugs.webkit.org/show_bug.cgi?id=161661

        Reviewed by Darin Adler.

        Allow ad-hoc code signing when building the dummy DumpRenderTree and WebKitTestRunner
        command line tools for simulator with the iOS 10 beta SDK.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2016-09-06  Alex Christensen  <achristensen@webkit.org>

        Fix query-only and fragment-only relative URLs when using URLParser
        https://bugs.webkit.org/show_bug.cgi?id=161657

        Reviewed by Tim Horton.

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

2016-09-06  Alex Christensen  <achristensen@webkit.org>

        Punycode encode non-ascii hosts in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=161655

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::wideString):
        (TestWebKitAPI::TEST_F):

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

        Implement relative file urls and begin implementing character encoding in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=161618

        Reviewed by Tim Horton.

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

2016-09-06  Commit Queue  <commit-queue@webkit.org>

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

        tests-options.json is not known from knockout filesystem
        (Requested by youenn on #webkit).

        Reverted changeset:

        "Using tests-options.json to compute whether tests are slow"
        https://bugs.webkit.org/show_bug.cgi?id=161626
        http://trac.webkit.org/changeset/205480

2016-09-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        "Redundant argument in sprintf" warning spam from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=161606

        Reviewed by Darin Adler.

        Avoid extra arguments in call to sprintf, hopefully without introducing new warnings this
        time.

        * Scripts/prepare-ChangeLog:
        (statusDescription):

2016-09-06  Youenn Fablet  <youenn@apple.com>

        Using tests-options.json to compute whether tests are slow
        https://bugs.webkit.org/show_bug.cgi?id=161626

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Loading tests-options.json
        (Manager._test_is_slow): Computing timeout value based on tests-options.json.

2016-09-06  Commit Queue  <commit-queue@webkit.org>

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

        Introduced "Use of uninitialized value $original in sprintf"
        warning (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        ""Redundant argument in sprintf" warning spam from prepare-
        ChangeLog"
        https://bugs.webkit.org/show_bug.cgi?id=161606
        http://trac.webkit.org/changeset/205461

2016-09-06  Youenn Fablet  <youenn@apple.com>

        W3C test importer should be able to identify slow test
        https://bugs.webkit.org/show_bug.cgi?id=161601

        Reviewed by Darin Adler.

        Test parser is now identifying slow tests based on "meta element name=timeout content=long" elements.
        Test importer is updating test-options.json file according that information.

        In case of clean import, the test-options.json is cleaned from 'slow' options for all W3C tests.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        (TestImporter.update_test_options):
        (TestImporter):
        (TestImporter.remove_slow_from_w3c_test_options):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test):
        (TestParser.is_slow_test):
        (TestParser.potential_ref_filename):

2016-09-06  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash logs have incorrect symbols.
        https://bugs.webkit.org/show_bug.cgi?id=161603

        Reviewed by Darin Adler.

        Add build path to _NT_SYMBOL_PATH environment variable.

        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_crash_log_saving):

2016-08-31  Filip Pizlo  <fpizlo@apple.com>

        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
        https://bugs.webkit.org/show_bug.cgi?id=160125

        Reviewed by Geoffrey Garen and Keith Miller.

        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain):
        * Scripts/run-jsc-stress-tests:
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):

2016-09-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        "Redundant argument in sprintf" warning spam from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=161606

        Reviewed by Darin Adler.

        Avoid extra arguments in call to sprintf.

        * Scripts/prepare-ChangeLog:
        (statusDescription):

2016-09-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Skip several failing API tests

        Unfortunately we don't have any form of test expectations for API tests, so we'll just skip
        them after bugs are filed.

        * Scripts/run-gtk-tests:
        (TestRunner):

2016-09-05  Youenn Fablet  <youenn@apple.com>

        Fix W3C test importer unit tests after r205447
        https://bugs.webkit.org/show_bug.cgi?id=161604

        Unreviewed.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__): Skip cleaning test_resource_files files if resource-files.json cannot be read.

2016-09-05  Philippe Normand  <pnormand@igalia.com>

        WebRTC: Several media stream tests crashing
        https://bugs.webkit.org/show_bug.cgi?id=161582

        Reviewed by Alejandro G. Castro.

        * gtk/jhbuild.modules: Bump to latest OpenWebRTC master fixing the crash on missing
        glvideoflip GStreamer element.

2016-09-05  Youenn Fablet  <youenn@apple.com>

        W3C test importer should generate the list of resource files
        https://bugs.webkit.org/show_bug.cgi?id=161578

        Reviewed by Ryosuke Niwa.

        Generating LayoutTests/imported/w3c/resources/resource-files.json when importing tests.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__): Reading test resource files configuration file.
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests): Update the test resource files based on test parsed files.
        (TestImporter):
        (TestImporter._already_identified_as_resource_file): Helper routine to know whether a file is already set as a resource file.
        (TestImporter._is_in_resources_directory: Helper routine to know whether a file is in a resources directory.

2016-09-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls behave strangely when videos mute from within a playing handler
        https://bugs.webkit.org/show_bug.cgi?id=161559
        <rdar://problem/28018438>

        Reviewed by Darin Adler.

        Accounts for changes when determining whether or not to show media controls for autoplaying videos that have not
        begun playing yet. Rather than check for a controlled media element upon page load, we force tests to wait until
        all autoplaying videos have actually begun playing. This extends to tests that involve interaction, such as
        clicking or scrolling.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (-[VideoControlsManagerTestWebView callJavascriptFunction:]):
        (-[VideoControlsManagerTestWebView expectControlsManager:afterReceivingMessage:]):
        (-[VideoControlsManagerTestWebView performAfterReceivingMessage:action:]):
        (-[VideoControlsManagerTestWebView waitForPageToLoadWithAutoplayingVideos:]):
        (TestWebKitAPI::TEST):
        (-[VideoControlsManagerTestWebView loadTestPageNamed:andExpectControlsManager:afterReceivingMessage:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/autoplaying-video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-hides-controls-after-seek-to-end.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-playing-scroll-away.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-click-to-pause.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-scroll-to-video.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-paused-video-hides-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-muted-video-hides-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-video-keeps-controls.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html:

2016-09-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor the heuristic for showing media controls to take all media sessions into account
        https://bugs.webkit.org/show_bug.cgi?id=161503
        <rdar://problem/28033783>

        Reviewed by Darin Adler.

        Adds new unit tests verifying the behavior of media playback controls when scrolling another video into view.
        Please see the WebCore ChangeLog for more details about this change. Also refactors existing
        VideoControlsManager tests by folding duplicated setup and testing logic into helper methods to make the unit
        tests more readable.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (-[MessageHandler initWithMessage:handler:]):
        (-[MessageHandler userContentController:didReceiveScriptMessage:]):
        (-[VideoControlsManagerTestWebView performAfterLoading:]):
        (-[VideoControlsManagerTestWebView loadTestPageNamed:]):
        (-[VideoControlsManagerTestWebView loadTestPageNamed:andExpectControlsManager:afterReceivingMessage:]):
        (-[VideoControlsManagerTestWebView performAfterReceivingMessage:action:]):
        (-[VideoControlsManagerTestWebView controlledElementID]):
        (-[VideoControlsManagerTestWebView _handleControlledElementIDResponse:]):
        (TestWebKitAPI::setUpWebViewForTestingVideoControlsManager):
        (TestWebKitAPI::TEST):
        (-[MediaPlaybackMessageHandler initWithWKWebView:finalMessageString:]): Deleted.
        (-[MediaPlaybackMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
        (-[OnLoadMessageHandler initWithWKWebView:handler:]): Deleted.
        (-[OnLoadMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
        (-[WKWebView performAfterLoading:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-playing-scroll-away.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-click-to-pause.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-scroll-to-video.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-paused-video-hides-controls.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-muted-video-hides-controls.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-video-keeps-controls.html: Added.

2016-09-03  Youenn Fablet  <youenn@apple.com>

        run-webkit-tests should detect w3c test resource files
        https://bugs.webkit.org/show_bug.cgi?id=161307

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Adding self._w3c_resource_files to store the list of resource files.
        (Port.potential_test_names_from_expected_file):
        (Port._real_tests):
        (Port.is_w3c_resource_file): Computing whether a file is a resource file based on imported/w3c/resources/resource-files.json.
        (Port._is_test_file): Updated to call Port.is_w3c_resource_file. _is_test_file is no longer static.
        (Port): Deleted.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_additional_platform_directory):
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_is_test_file): Updated to use non-static version of _is_test_file.
        (PortTest.test_is_w3c_resource_file): Adding tests.

2016-09-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix archive-built-product step in GTK+ bots after r205280.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): Do not copy to the archive the files needed to run GObject DOM bindings API breaks tests
        that no longer exist.

2016-09-02  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse file URLs
        https://bugs.webkit.org/show_bug.cgi?id=161556

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkURLDifferences):

2016-09-01  Michael Saboff  <msaboff@apple.com>

        Import Chakra tests to JSC
        https://bugs.webkit.org/show_bug.cgi?id=154697

        Reviewed by Saam Barati.

        Added "runChakra" and "chakraPassFailErrorHandler" to support the running of
        Chakra tests.

        * Scripts/run-jsc-stress-tests:

2016-09-02  Jonathan Bedard  <jbedard@apple.com>

        WebKitTestRunner needs layoutTestController.setDashboardCompatibilityMode
        https://bugs.webkit.org/show_bug.cgi?id=42547
 
        Reviewed by Darin Adler.

        Added JavaScript bindings and C++ implementation of setUseDashboardCompatibilityMode for the WebKit2 sTestRunner.
        Note: this bug mistakenly called this function setDashboardCompatibilityMode, it is actually setUseDashboardCompatibilityMode.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Added dashboard compatiblity mode setter.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Reset dashboard compatibility mode.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setJavaScriptCanAccessClipboard): Code style changes.
        (WTR::TestRunner::setPrivateBrowsingEnabled): Code style changes.
        (WTR::TestRunner::setUseDashboardCompatibilityMode): Added dashboard compatiblity mode setter.
        (WTR::TestRunner::setPopupBlockingEnabled): Code style changes.
        (WTR::TestRunner::setAuthorAndUserStylesEnabled): Code style changes.
        (WTR::TestRunner::addOriginAccessWhitelistEntry): Code style changes.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Added dashboard compatiblity mode setter.

2016-09-02  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix: restore storyboard files to Xcode 7-compatability.

        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/LaunchScreen.storyboard:
        * MobileMiniBrowser/MobileMiniBrowserFramework/Base.lproj/Main.storyboard:

2016-09-02  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r205329): Two API tests time out on iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=161542

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (createAnimatedResizeWebView):
        (createFirstVisuallyNonEmptyWatchingNavigationDelegate):
        (TEST):
        (animatedResizeWebView): Deleted.
        The navigation delegate was being stored in a local and went out of scope
        before the test was over. Keep it around, instead.

2016-08-31  Jer Noble  <jer.noble@apple.com>

        Refactor MobileMiniBrowser into an application framework to allow external XCTesting
        https://bugs.webkit.org/show_bug.cgi?id=161462

        Reviewed by Eric Carlson.

        XCTest targets need to be in the same project as the application which they're testing. To facilitate
        having external projects with XCTest targets, move the application's implementation into a framework
        that can be included with a bare-bones application shell for testing.

        Simultaneously, add the ability to load files from within the new framework's bundle by using a
        'bundle:/' URL scheme. Update the tests to use this new bundle URL and remove the dependency on
        an external server for testing.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/LaunchScreen.storyboard:
        * MobileMiniBrowser/MobileMiniBrowser/Info.plist:
        * MobileMiniBrowser/MobileMiniBrowser/main.m:
        * MobileMiniBrowser/MobileMiniBrowserFramework/AppDelegate.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/AppDelegate.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/AppDelegate.m: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/AppDelegate.m.
        (-[AppDelegate application:didFinishLaunchingWithOptions:]): Manually instantiate the main view
            controller from the framework's bundle.
        * MobileMiniBrowser/MobileMiniBrowserFramework/Assets.xcassets/AppIcon.appiconset/Contents.json: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/Assets.xcassets/AppIcon.appiconset/Contents.json.
        * MobileMiniBrowser/MobileMiniBrowserFramework/Base.lproj/Main.storyboard: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/Base.lproj/Main.storyboard.
        * MobileMiniBrowser/MobileMiniBrowserFramework/Info.plist: Added.
        * MobileMiniBrowser/MobileMiniBrowserFramework/MobileMiniBrowser.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/AppDelegate.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/TabViewController.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/TabViewController.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/TabViewController.m: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/TabViewController.m.
        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/WebViewController.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/WebViewController.m.
        (+[NSURL __bundleURLForFileURL:bundle:]): Add utility method.
        (+[NSURL __fileURLForBundleURL:bundle:]): Ditto.
        (-[WebViewController navigateTo:]): Support loading "bundle:/" URLs which are really just "file:" URLs
            pointing to the framework's resources directory.
        (-[WebViewController observeValueForKeyPath:ofObject:change:context:]): Ditto.
        * MobileMiniBrowser/MobileMiniBrowserUITests/MobileMiniBrowserUITests.m:
        (-[MobileMiniBrowserUITests testBasicVideoPlayback]):

2016-09-02  Jonathan Bedard  <jbedard@apple.com>

        Fix --no-sample-on-timeout command line argument
        https://bugs.webkit.org/show_bug.cgi?id=161507

        Reviewed by Alexey Proskuryakov.

        This patch fixes the —no-sample-on-timeout flag and correctly names spindumps as spindump.txt.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Fixed —-no-sample-on-timeout.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort.sample_process): Use correct file name.
        (ApplePort.spindump_file_path): Spindump and sample file names are different.
        * Scripts/webkitpy/port/driver.py:
        (Driver._check_for_driver_timeout): Check “sample_on_timeout” flag.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_spindump): Modified for correct filename.

2016-09-02  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed: moved myself to the reviewers list.

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

2016-09-02  Tomas Popela  <tpopela@redhat.com>

        [GTK] Fix compiler warning in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=161529

        We were missing a return statement in decidePermissionRequest() and
        also there was unused variable in browserWindowConstructed().

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserTab.c:
        (decidePermissionRequest):
        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed):

2016-09-01  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-09-01  Tim Horton  <timothy_horton@apple.com>

        Provide a TestWebKitAPI-wide WKNavigationDelegate to simplify tests
        https://bugs.webkit.org/show_bug.cgi?id=161413

        Reviewed by Simon Fraser.

        Add TestNavigationDelegate, which provides block properties to make
        writing tests feel a little more natural (the callbacks can be inline),
        and also add WKWebView _test_waitForDidFinishNavigation, so that many
        tests don't even need to manually allocate a navigation delegate at all.

        Adopt in some of the simpler tests; there are a few navigation delegates
        left behind, which we can move to the new model in the future.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKBackForwardList.mm:
        (TEST):
        (-[WKBackForwardListTestNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AlwaysRevalidatedURLSchemes.mm:
        (TEST):
        (-[AlwaysRevalidatedURLSchemesDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (animatedResizeWebView):
        (-[AnimatedResizeNavigationDelegate _webView:renderingProgressDidChange:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (-[AutoLayoutWKWebView initWithFrame:configuration:]):
        (-[AutoLayoutWKWebView load:withWidth:expectingContentSize:resettingWidth:]):
        (TEST):
        (-[AutoLayoutNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresource.mm:
        (TEST):
        (-[CancelFontSubresourceNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTestWKWebView::SetUp):
        (WebKit2_CommandBackForwardTestWKWebView::loadFiles):
        (TEST_F):
        (-[CommandBackForwardNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (expectLinkCount):
        (TEST):
        (-[DataDetectionNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:
        (TEST):
        (-[FindInPageNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FixedLayoutSize.mm:
        (TEST):
        (-[FixedLayoutSizeNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        (-[DatabaseProcessKillNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
        (-[IndexedDBNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLNotChange.mm:
        (TEST):
        (-[ProvisionalURLNotChangeController webView:didFinishNavigation:]): Deleted.
        (-[ProvisionalURLNotChangeController webView:didFailProvisionalNavigation:withError:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::createWebView):
        (RequiresUserActionForPlaybackTest::testVideoWithAudio):
        (RequiresUserActionForPlaybackTest::testVideoWithoutAudio):
        (RequiresUserActionForPlaybackTest::testAudioOnly):
        (-[RequiresUserActionForPlaybackNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShrinkToFit.mm:
        (TEST):
        (-[ShrinkToFitNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (TEST):
        (webViewForScriptMessageHandlerMultipleHandlerRemovalTest):
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentWorld.mm:
        (TEST):
        (-[SimpleDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFViewResizeCrash.mm:
        (TEST):
        (-[WKPDFViewResizeNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        (-[EvaluateJavaScriptNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewTextInput.mm:
        (TEST):
        (-[DummyNavigationDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h: Added.
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm: Added.
        (-[TestNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestNavigationDelegate webView:didFinishNavigation:]):
        (-[TestNavigationDelegate _webView:renderingProgressDidChange:]):
        (-[TestNavigationDelegate waitForDidFinishNavigation]):
        (-[WKWebView _test_waitForDidFinishNavigation]):

2016-09-01  Ricky Mondello  <rmondello@apple.com>

        YouTube Flash plug-in replacement facility should not insert showinfo=0 into iframe URLs
        https://bugs.webkit.org/show_bug.cgi?id=161478
        <rdar://problem/28050847>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp:
        (TestWebKitAPI::TEST_F): Update expected results.

2016-09-01  Anders Carlsson  <andersca@apple.com>

        add BlockPtr::fromCallable
        https://bugs.webkit.org/show_bug.cgi?id=161504

        Reviewed by Tim Horton.

        Add a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/BlockPtr.mm: Added.
        (TestWebKitAPI::TEST):

2016-09-01  Alex Christensen  <achristensen@webkit.org>

        URLParser should handle . and .. in URL paths
        https://bugs.webkit.org/show_bug.cgi?id=161443

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::eq):
        (TestWebKitAPI::TEST_F):

2016-09-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r205295 and r205303.
        https://bugs.webkit.org/show_bug.cgi?id=161505

        Broke the iOS build (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Refactor MobileMiniBrowser into an application framework to
        allow external XCTesting"
        https://bugs.webkit.org/show_bug.cgi?id=161462
        http://trac.webkit.org/changeset/205295

        "Unreviewed build-fix; don't specify an explicit deployment
        target."
        http://trac.webkit.org/changeset/205303

2016-09-01  Ricky Mondello  <rmondello@apple.com>

        YouTube Flash plug-in replacement facility should more gracefully handle malformed queries
        https://bugs.webkit.org/show_bug.cgi?id=161476
        <rdar://problem/28050847>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp:
        (TestWebKitAPI::TEST_F): New tests. The first two and second-to-last test cases cover the "malformed" query
            logic. A few other tests are added, too.

2016-09-01  Jer Noble  <jer.noble@apple.com>

        Unreviewed build-fix; don't specify an explicit deployment target.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

2016-08-31  Jer Noble  <jer.noble@apple.com>

        Refactor MobileMiniBrowser into an application framework to allow external XCTesting
        https://bugs.webkit.org/show_bug.cgi?id=161462

        Reviewed by Eric Carlson.

        XCTest targets need to be in the same project as the application which they're testing. To facilitate
        having external projects with XCTest targets, move the application's implementation into a framework
        that can be included with a bare-bones application shell for testing.

        Simultaneously, add the ability to load files from within the new framework's bundle by using a
        'bundle:/' URL scheme. Update the tests to use this new bundle URL and remove the dependency on
        an external server for testing.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/LaunchScreen.storyboard:
        * MobileMiniBrowser/MobileMiniBrowser/Info.plist:
        * MobileMiniBrowser/MobileMiniBrowser/main.m:
        * MobileMiniBrowser/MobileMiniBrowserFramework/AppDelegate.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/AppDelegate.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/AppDelegate.m: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/AppDelegate.m.
        (-[AppDelegate application:didFinishLaunchingWithOptions:]): Manually instantiate the main view
            controller from the framework's bundle.
        * MobileMiniBrowser/MobileMiniBrowserFramework/Assets.xcassets/AppIcon.appiconset/Contents.json: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/Assets.xcassets/AppIcon.appiconset/Contents.json.
        * MobileMiniBrowser/MobileMiniBrowserFramework/Base.lproj/Main.storyboard: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/Base.lproj/Main.storyboard.
        * MobileMiniBrowser/MobileMiniBrowserFramework/Info.plist: Added.
        * MobileMiniBrowser/MobileMiniBrowserFramework/MobileMiniBrowser.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/AppDelegate.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/TabViewController.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/TabViewController.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/TabViewController.m: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/TabViewController.m.
        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.h: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/WebViewController.h.
        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser/WebViewController.m.
        (+[NSURL __bundleURLForFileURL:bundle:]): Add utility method.
        (+[NSURL __fileURLForBundleURL:bundle:]): Ditto.
        (-[WebViewController navigateTo:]): Support loading "bundle:/" URLs which are really just "file:" URLs
            pointing to the framework's resources directory.
        (-[WebViewController observeValueForKeyPath:ofObject:change:context:]): Ditto.
        * MobileMiniBrowser/MobileMiniBrowserUITests/MobileMiniBrowserUITests.m:
        (-[MobileMiniBrowserUITests testBasicVideoPlayback]):

2016-09-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix webkitpy unit tests after r205280.

        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):

2016-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GObject DOM bindings to WebKit2 layer and stop auto generating them
        https://bugs.webkit.org/show_bug.cgi?id=161438

        Reviewed by Michael Catanzaro.

        Remove scripts related to the GObject DOM bindings auto-generation.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.getText2):
        (TestFactory.__init__):
        (RunWebKit1Tests): Deleted.
        (RunWebKit1Tests.start): Deleted.
        (RunWebKit1LeakTests): Deleted.
        (RunWebKit1LeakTests.start): Deleted.
        (RunAndUploadPerfTests): Deleted.
        (RunAndUploadPerfTests.start): Deleted.
        (BuildAndRemoteJSCTestsFactory.__init__): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (BuildStepsTest.test_unnecessary_expected_results):
        (RunAndUploadPerfTestsTest): Deleted.
        (RunAndUploadPerfTestsTest.assertResults): Deleted.
        (RunAndUploadPerfTestsTest.test_success): Deleted.
        (RunAndUploadPerfTestsTest.test_tests_failed): Deleted.
        (RunAndUploadPerfTestsTest.test_build_bad_build): Deleted.
        (RunAndUploadPerfTestsTest.test_build_bad_source_json): Deleted.
        (RunAndUploadPerfTestsTest.test_build_bad_marge): Deleted.
        (RunAndUploadPerfTestsTest.test_build_bad_failed_uploading): Deleted.
        (RunAndUploadPerfTestsTest.test_build_bad_preparation): Deleted.
        (RunAndUploadPerfTestsTest.test_buildbot_timeout): Deleted.
        (RunBenchmarkTest): Deleted.
        (RunBenchmarkTest.assertResults): Deleted.
        (RunBenchmarkTest.test_success): Deleted.
        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/style/checker.py:
        * gtk/check-for-webkitdom-api-breaks: Removed.
        * gtk/generate-gtkdoc:
        * gtk/webkitdom.py: Removed.

2016-08-31  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Small clean up in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=161428

        Reviewed by Yusuke Suzuki.

        This patch resizes MiniBrowser, add *char* constants for scheme,
        does line breaking, and remove unnecessary spaces.

        * MiniBrowser/efl/main.c:
        (on_mouse_wheel):
        (history_list_hide):
        (script_execute_callback):
        (on_key_down):
        (on_url_changed):
        (on_error):
        (on_color_picker_request):
        (url_from_user_input):
        (url_load_from_user_input):
        (on_back_button_clicked):
        (on_search_case_option_changed):
        (on_search_word_start_option_changed):
        (on_list_item_select):
        (navigation_button_longpress_process):
        (on_navigation_policy_decision):
        (window_create):
        (parse_cookies_policy):

2016-08-31  Alex Christensen  <achristensen@webkit.org>

        Implement IPv6 parsing in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=161390

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkURLDifferences):

2016-08-31  Brady Eidson  <beidson@apple.com>

        WK2 Gamepad provider on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=161412

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-08-30  Ricky Mondello  <rmondello@apple.com>

        YouTubePluginReplacementTest's URL transformation logic should have tests
        https://bugs.webkit.org/show_bug.cgi?id=161406
        <rdar://problem/28050847>

        Reviewed by Eric Carlson.

        Add some very basic tests. Future patches should expand on these to find and fix bugs.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add YouTubePluginReplacement.cpp.
        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp: Added.
        (TestWebKitAPI::test): Added.
        (TestWebKitAPI::TEST_F): Added.

2016-08-30  Brady Eidson  <beidson@apple.com>

        GameController.framework backend for gamepad API.
        https://bugs.webkit.org/show_bug.cgi?id=161086

        Reviewed by Alex Christensen.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate awakeFromNib]):

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController usesGameControllerFramework]):
        (-[SettingsController toggleUsesGameControllerFramework:]):

2016-08-30  Brent Fulgham  <bfulgham@apple.com>

        Use of uninitialised memory in TransformationMatrx::blend4()
        https://bugs.webkit.org/show_bug.cgi?id=134621
        <rdar://problem/27337539>

        Reviewed by Dean Jackson.

        Change is based on the Blink change (patch by <alancutter@chromium.org>):
        <https://src.chromium.org/viewvc/blink?revision=177453&view=revision>

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/TransformationMatrix.cpp: Added.
        (TestWebKitAPI::TEST):

2016-08-30  Alex Christensen  <achristensen@webkit.org>

        URLParser should handle relative URLs that start with //
        https://bugs.webkit.org/show_bug.cgi?id=161364

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::TEST_F):

2016-08-29  Aakash Jain  <aakash_jain@apple.com>

        EWS patch status page should indicate bot corresponding to each status message
        https://bugs.webkit.org/show_bug.cgi?id=161280

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/templates/patch.html: Formatting changes.

2016-08-29  Aakash Jain  <aakash_jain@apple.com>

        EWS should indicate which bot processed the patch
        https://bugs.webkit.org/show_bug.cgi?id=161222

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble): Remove the bot id from bubbles as it is confusing.
        bot ids are now displayed in patch status page.

2016-08-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse about:blank
        https://bugs.webkit.org/show_bug.cgi?id=161324

        Reviewed by Brady Eidson.

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

2016-08-29  JF Bastien  <jfbastien@apple.com>

        Bug 161165 - check-webkit-style doesn't understand macros containing `else` or labels
        https://bugs.webkit.org/show_bug.cgi?id=161165

        Reviewed by Geoffrey Garen.

        Fix handling of `else` in a macro. Don't handle labels in a macro:
        the checker is already pretty messy in that area and it should be
        a rare thing.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_else_clause_not_on_same_line_as_else):

2016-08-29  Alex Christensen  <achristensen@webkit.org>

        API test URLParserTest.ParserFailures failing ASSERT_NOT_REACHED
        https://bugs.webkit.org/show_bug.cgi?id=161317

        Reviewed by Brady Eidson.

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

2016-08-29  Jer Noble  <jer.noble@apple.com>

        Unreviewed gardening; only build MiniBrowser against iOS SDK targets.

        * Makefile:

2016-08-29  Jonathan Bedard  <jbedard@apple.com>

        Sample Process on notifyDone timed out
        https://bugs.webkit.org/show_bug.cgi?id=161063

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/driver.py:
        (Driver._check_for_driver_timeout): 
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Call sample_process during notifyDone timeouts.
        (WTR::TestRunner::waitToDumpWatchdogTimerFired):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm: Log pid and name for testing harness.

2016-08-29  Jonathan Bedard  <jbedard@apple.com>

        Check-webkit-style does not work with Objective-C blocks
        https://bugs.webkit.org/show_bug.cgi?id=161247

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (regex_for_lambda_functions): Changed to regex_for_lambdas_and_blocks.
        (regex_for_lambdas_and_blocks): Added check for Objective-C blocks.
        (check_spacing_for_function_call): Pass file state for lambda check.
        (check_spacing): Pass file state for lambda check.
        (check_braces): Pass file state for lambda check.
        (check_style): Pass file state for lambda check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_cpp_lambda_functions): Changed from ‘test_lambda_functions’.
        (CppStyleTest.test_objective_c_block): Tests Objective-C blocks.
        (CppStyleTest.test_lambda_functions): Changed to ‘test_cpp_lambda_functions’.

2016-08-29  Aakash Jain  <aakash_jain@apple.com>

        EWS patch status page should indicate bot corresponding to each status message
        https://bugs.webkit.org/show_bug.cgi?id=161280

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/templates/patch.html: Added bot_id in the template so that bot id is displayed
        for each status message.
        * QueueStatusServer/stylesheets/common.css:
        (.status-bot): Added corresponding stylesheet class.

2016-08-29  Per Arne Vollan  <pvollan@apple.com>

        Attempt to fix Windows build after r205090.

        Unreviewed build fix.

        * DumpRenderTree/win/DRTDataObject.cpp:
        (cfFileNameWFormat):
        (cfUrlWFormat):

2016-08-27  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse relative URLs
        https://bugs.webkit.org/show_bug.cgi?id=161282

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):
        Added some tests for the new operator=.
        Test saving iterators, restoring iterators, and even assigning iterators to new CodePoints objects.
        Using the same iterator to iterate multiple objects is bad practice, but it's possible and now tested.
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::shouldFail):
        Add some relative URL tests.

2016-08-27  Jonathan Bedard  <jbedard@apple.com>

        WTR needs an implementation of setAutomaticLinkDetectionEnabled
        https://bugs.webkit.org/show_bug.cgi?id=87162

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Added setAutomaticLinkDetectionEnabled binding.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Set automatic link detection to false by default.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAutomaticLinkDetectionEnabled): Added setAutomaticLinkDetectionEnabled definition.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Added setAutomaticLinkDetectionEnabled declaration.

2016-08-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make localizedString.js diff and commit friendly (UTF16 -> UTF8)
        https://bugs.webkit.org/show_bug.cgi?id=28685
        <rdar://problem/16460975>

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-js-strings:
        * Scripts/update-webkit-localizable-strings:
        WebInspectorUI localizedStrings.js is now UTF-8. Other clients of
        this script still use UTF-16, so keep that the default.

2016-08-27  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r204052): Popovers on bot watcher's dashboard are broken
        https://bugs.webkit.org/show_bug.cgi?id=161254

        Reviewed by Darin Adler.

        Simplify the CSS. My understanding that the CSS was correct, and the root cause
        is tracked in bug 160478.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Popover.css:

2016-08-27  Simon Fraser  <simon.fraser@apple.com>

        Add run-webkit-tests --print-expectations to show expectations for all or a subset of tests
        https://bugs.webkit.org/show_bug.cgi?id=161217

        Reviewed by Ryosuke Niwa.

        "run-webkit-tests --print-expectations" runs the same logic as running the tests, but
        dumps out the lists of tests that would be run and skipped, and, for each, the entry
        in TestExpectations that determines the expected outcome of the test.

        This is an improved version of webkit-patch print-expectations.

        See bug for sample output.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._print_expectations_for_subset): Print out the list of tests and expected
        outcome for some subset of tests.
        (Manager.print_expectations): Do the same splitting by device class that running tests
        does, and for each subset of tests, call _print_expectations_for_subset.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.expectation_for_skipped_test): Set the flag
        expectation_line.not_applicable_to_current_platform
        (TestExpectationLine.__init__): Init not_applicable_to_current_platform to False
        (TestExpectationLine.expected_behavior): line.expectation is ['PASS'] by default,
        even for skipped tests. This function returns a list relevant for display, taking the skipped
        modifier into account.
        (TestExpectationLine.create_passing_expectation): expectations is normally a list, not a set.
        (TestExpectations.readable_filename_and_line_number): Return something printable for 
        lines with and without filenames
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Handle options.print_expectations
        (parse_args): Add support for --print-expectations
        (_print_expectations):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_child_processes): Make this a debug log.

2016-08-26  Dan Bernstein  <mitz@apple.com>

        Keep trying to fix the build after r205057.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

2016-08-26  Dan Bernstein  <mitz@apple.com>

        Keep trying to fix the build after r205057.

        * MobileMiniBrowser/MobileMiniBrowser/AppDelegate.m: Don’t try to import nonexistent
          config.h. This file is only meant to be built with Xcode anyway.
        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/LaunchScreen.storyboard: Make this compile
          with Xcode 7.3 and deploy to iOS 9.0.
        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/Main.storyboard: Ditto.
        * MobileMiniBrowser/MobileMiniBrowser/TabViewController.m: Don’t try to import config.h.
        * MobileMiniBrowser/MobileMiniBrowser/WebViewController.m: Ditto.

2016-08-26  Dan Bernstein  <mitz@apple.com>

        Start trying to fix the build after r205057.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

2016-08-26  Alexey Proskuryakov  <ap@apple.com>

        Remove Yosemite Leaks from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=161253

        Reviewed by Anders Carlsson.

        * TestResultServer/static-dashboards/builders.jsonp:

2016-08-26  Sam Weinig  <sam@webkit.org>

        Remove support for ENABLE_LEGACY_WEB_AUDIO
        https://bugs.webkit.org/show_bug.cgi?id=161262

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-08-26  Jer Noble  <jer.noble@apple.com>

        Add a test harness for running UI tests on the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=161265

        Reviewed by Simon Fraser.

        Add a new iOS Simulator application which uses WKWebView to implement a basic browser, and which
        can serve as a test harness for WebKit UI tests.

        Also add a basic media playback test which verifies that a <video> element will begin playing in
        fullscreen on an iPhone device, but will play inline on an iPad device.

        * Makefile: Add MobileMiniBrowser as a Module for iOS builds.
        * MobileMiniBrowser/Configurations/Base.xcconfig: Added.
        * MobileMiniBrowser/Configurations/DebugRelease.xcconfig: Added.
        * MobileMiniBrowser/Configurations/MobileMiniBrowser.xcconfig: Added.
        * MobileMiniBrowser/Makefile: Added.
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj: Added.
        * MobileMiniBrowser/MobileMiniBrowser/AppDelegate.h: Added.
        * MobileMiniBrowser/MobileMiniBrowser/AppDelegate.m: Added.
        (-[AppDelegate application:didFinishLaunchingWithOptions:]):
        (-[AppDelegate applicationWillResignActive:]):
        (-[AppDelegate applicationDidEnterBackground:]):
        (-[AppDelegate applicationWillEnterForeground:]):
        (-[AppDelegate applicationDidBecomeActive:]):
        (-[AppDelegate applicationWillTerminate:]):
        * MobileMiniBrowser/MobileMiniBrowser/Assets.xcassets/AppIcon.appiconset/Contents.json: Added.
        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/LaunchScreen.storyboard: Added.
        * MobileMiniBrowser/MobileMiniBrowser/Base.lproj/Main.storyboard: Added.
        * MobileMiniBrowser/MobileMiniBrowser/Info.plist: Added.
        * MobileMiniBrowser/MobileMiniBrowser/TabViewController.h: Added.
        * MobileMiniBrowser/MobileMiniBrowser/TabViewController.m: Added.
        (-[TabViewController dealloc]):
        (-[TabViewController viewDidLoad]):
        (-[TabViewController observeValueForKeyPath:ofObject:change:context:]):
        (-[TabViewController tableView:cellForRowAtIndexPath:]):
        (-[TabViewController tableView:numberOfRowsInSection:]):
        (-[TabViewController numberOfSectionsInTableView:]):
        (-[TabViewController tableView:canEditRowAtIndexPath:]):
        (-[TabViewController tableView:canMoveRowAtIndexPath:]):
        (-[TabViewController tableView:commitEditingStyle:forRowAtIndexPath:]):
        (-[TabViewController tableView:didSelectRowAtIndexPath:]):
        * MobileMiniBrowser/MobileMiniBrowser/WebViewController.h: Added.
        * MobileMiniBrowser/MobileMiniBrowser/WebViewController.m: Added.
        (-[WebViewController viewDidLoad]):
        (-[WebViewController didReceiveMemoryWarning]):
        (-[WebViewController reload:]):
        (-[WebViewController goBack:]):
        (-[WebViewController goForward:]):
        (-[WebViewController urlFieldEditingBegan:]):
        (-[WebViewController navigateTo:]):
        (-[WebViewController showTabs:]):
        (-[WebViewController selectWebViewAtIndex:]):
        (-[WebViewController removeWebViewAtIndex:]):
        (-[WebViewController addWebView]):
        (-[WebViewController createWebView]):
        (-[WebViewController removeWebView:]):
        (-[WebViewController setCurrentWebView:]):
        (-[WebViewController webView:didFailNavigation:withError:]):
        (-[WebViewController observeValueForKeyPath:ofObject:change:context:]):
        * MobileMiniBrowser/MobileMiniBrowser/main.m: Added.
        (main):
        * MobileMiniBrowser/MobileMiniBrowserUITests/Info.plist: Added.
        * MobileMiniBrowser/MobileMiniBrowserUITests/MobileMiniBrowserUITests.m: Added.
        (-[MobileMiniBrowserUITests setUp]):
        (-[MobileMiniBrowserUITests tearDown]):
        (-[MobileMiniBrowserUITests testBasicVideoPlayback]):

2016-08-26  Aakash Jain  <aakash_jain@apple.com>

        webkit-queues queue-status page should should list more recent statuses
        https://bugs.webkit.org/show_bug.cgi?id=161220

        Reviewed by Daniel Bates.

        * QueueStatusServer/handlers/queuestatus.py:
        (QueueStatus._fetch_statuses): Increase the number of recent statuses from 15 to 50.

2016-08-26  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Infinite recursion calling -charValue on a WKNSNumber
        https://bugs.webkit.org/show_bug.cgi?id=161258

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKNSNumber.mm:
        (TestWebKitAPI::TEST):

2016-08-26  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the ENABLE(WEBASSEMBLY) build on Linux
        https://bugs.webkit.org/show_bug.cgi?id=161197

        Reviewed by Mark Lam.

        * Scripts/build-jsc:

2016-08-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] run-gtk-tests should use the driver environment for checking the accessibility bus
        https://bugs.webkit.org/show_bug.cgi?id=161149

        Reviewed by Carlos Garcia Campos.

        Add a new function for waiting for the accesibility bus. It sets
        the test environment variables before starting the GLib mainloop.
        And restores the previous environment after it has finished.
        It also adds a timeout (5 seconds) to abort in case it has not
        been able to detect the accesibility bus before the timeout expires.

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner._wait_for_accessibility_bus):
        (TestRunner._wait_for_accessibility_bus.timeout_accessibility_bus):
        (TestRunner._start_accessibility_daemons):
        (TestRunner._get_tests_from_google_test_suite): Run this command also with the driver test environment.

2016-08-26  Per Arne Vollan  <pvollan@apple.com>

        [Win] Warning fix.
        https://bugs.webkit.org/show_bug.cgi?id=161236

        Reviewed by Brent Fulgham.

        The & operator in the Test struct has no body.

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

2016-08-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] run-gtk-tests should use webkitpy.port.gtk and webkitpy.port.xvfbdriver
        https://bugs.webkit.org/show_bug.cgi?id=160736

        Reviewed by Carlos Garcia Campos.

        This plugs run-gtk-tests into the webkitpy testing infrastructure.
        As a benefit of this, run-gtk-tests now can be executed over any of
        the existing supported gtk test display servers (xvfb, weston-over-xvfb,
        or native xorg). A new command line switch --wayland is added for
        run-gtk-tests.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Remove the --display command line switch, its not longer useful.
        Add a --wayland command line switch.
        (TestRunner._start_accessibility_daemons):
        (TestRunner):
        (TestRunner.__init__):
        (TestRunner._run_xvfb): Deleted.
        (TestRunner._create_driver):
        (TestRunner._setup_testing_environment): Delete the environment variable definitions that
        are now done by driver._setup_environ_for_test().
        (TestRunner._tear_down_testing_environment):
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Define self._server_name in the constructor of the base class.
        It is used by several functions, so it makes sense to store once the value here.
        (Driver._setup_environ_for_test): Factorize setting the environment for a given test.
        (Driver._start): Get the environment from self._setup_environ_for_test()
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest):
        (DriverTest.test_setup_environ_for_test): Add unittest for driver._setup_environ_for_test()
        * Scripts/webkitpy/port/gtk.py: Move the inspection of the env var USE_NATIVE_XDISPLAY to the constructor.
        (GtkPort.__init__):
        (GtkPort._driver_class):
        * Scripts/webkitpy/port/westondriver.py: Define and use self._setup_environ_for_test()
        (WestonDriver._setup_environ_for_test):
        (WestonDriver._start):
        * Scripts/webkitpy/port/xorgdriver.py: Define and use self._setup_environ_for_test()
        (XorgDriver._setup_environ_for_test):
        (XorgDriver._start):
        * Scripts/webkitpy/port/xvfbdriver.py: Define and use self._setup_environ_for_test()
        (XvfbDriver._setup_environ_for_test):
        (XvfbDriver._start):

2016-08-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] REGRESSION(204877): Fix the clean build
        https://bugs.webkit.org/show_bug.cgi?id=161240

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:

2016-08-26  Aakash Jain  <aakash_jain@apple.com>

        EWS should indicate which bot processed the patch
        https://bugs.webkit.org/show_bug.cgi?id=161222

        Reviewed by Daniel Bates.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble): Display the bot id in status bubble. Also removed "Started processing" message since
        after bug fix of 161223, bots send the "Started processing patch" message and it would be displayed in Recent messages.
        Also added "Started processing patch" message to progress_statuses.
        I might consider displaying bot id in other statuses as well later on.

2016-08-26  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Change homepage url to www.ewebkit.org on MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=161184

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/efl/main.c: Set www.ewebkit.org.

2016-08-25  Aakash Jain  <aakash_jain@apple.com>

        ews queues should update status server when they start processing patch
        https://bugs.webkit.org/show_bug.cgi?id=161223

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractReviewQueue.process_work_item): Update status server that the bot started processing the patch.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest._default_expected_logs): Updated the unit test accordingly.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (StyleQueueTest.test_style_queue_with_style_exception): Same.
        (test_style_queue_with_watch_list_exception): Same.
        (test_non_valid_patch): Same.

2016-08-25  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * DumpRenderTree/PlatformMac.cmake:

2016-08-25  Alex Christensen  <achristensen@webkit.org>

        Fix URLParserTest with GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=161214
        rdar://problem/28014390

        Reviewed by Tim Horton.

        The CString returned by String::utf8 was going out of scope before we were doing a string comparison on its data.
        This just does the comparison of the CStrings instead to keep them in scope during the comparison.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::eq):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::s): Deleted.

2016-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Dragging against the end of the inline media scrubber causes the media scrubber to hide
        https://bugs.webkit.org/show_bug.cgi?id=161207

        Reviewed by Eric Carlson.

        Tweaks an existing WebKit API test covering this behavior change. After some discussion, rather than hide media
        controls in this case, we should actually continue showing them. This is because seeking due to user gestures
        similar to "scrubbing" are indistinguishable from gestures that immediately seek to the end.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):

2016-08-25  Daniel Bates  <dabates@apple.com>

        Watch more things.

        * Scripts/webkitpy/common/config/watchlist:

2016-08-25  Daniel Bates  <dabates@apple.com>

        Fix test failure on GTK Linux bots after <http://trac.webkit.org/changeset/204695>
        (https://bugs.webkit.org/show_bug.cgi?id=148437)

        Remove use of module File::Slurp as it is not part of the standard Perl 5 distribution
        and is not installed on the GTK Linux bots.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/generateFunctionLists.pl:
        (writeFileWithContent): Added.

2016-08-25  Per Arne Vollan  <pvollan@apple.com>

        [Win] run-api-tests is failing.
        https://bugs.webkit.org/show_bug.cgi?id=161140

        Reviewed by Brent Fulgham.

        Since the move constructor is called 3 more times on Windows, we will have 3 more destructor calls.

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

2016-08-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] run-api-tests is failing.
        https://bugs.webkit.org/show_bug.cgi?id=161140

        Reviewed by Brent Fulgham.

        The number of times the move constructor is called is different on Windows in this test. This seems
        to be caused by differences in MSVC's implementation of lambdas or std functions like std::make_tuple.

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

2016-08-24  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS DRT build.

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

2016-08-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS DRT] Hook up uiController.zoomToScale() for DRT
        https://bugs.webkit.org/show_bug.cgi?id=161173

        Reviewed by Tim Horton.
        
        Make a UIWebScrollView subclass, DumpRenderTreeWebScrollView, which has an internal delegate to get
        UIScrollView delegate callbacks. Store the zoomToScaleCompletionHandler on it.
        
        UIScriptController::zoomToScale() has to bounce the zoom to the main thread (no poking UIKit from
        the WebThread!), but queue up the callback first.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        (-[DumpRenderTreeWebScrollView initWithFrame:]):
        (-[DumpRenderTreeWebScrollView dealloc]):
        (-[DumpRenderTreeWebScrollView zoomToScale:animated:completionHandler:]):
        (-[DumpRenderTreeWebScrollView completedZoomToScale]):
        (-[DumpRenderTreeWebScrollViewDelegate initWithScrollView:]):
        (-[DumpRenderTreeWebScrollViewDelegate viewForZoomingInScrollView:]): All UIScrollView delegates need to implement this.
        (-[DumpRenderTreeWebScrollViewDelegate scrollViewDidEndZooming:withView:atScale:]):
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::zoomToScale):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::context):

2016-08-24  Ryan Haddad  <ryanhaddad@apple.com>

        Attempt to fix Windows build after r204918.

        Unreviewed build fix.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):

2016-08-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS DRT] Get basic viewport tests working in DRT
        https://bugs.webkit.org/show_bug.cgi?id=161160

        Reviewed by Tim Horton.
        
        Hook up enough of UIScriptController in iOS DRT to be able to read viewport
        scale, and get the contentVisibleRect.
        
        Requires exposing a bit of UIWebBrowserView SPI from UIKit, which in turn
        requires typing the gWebBrowserView as a DumpRenderTreeBrowserView * everywhere.
        
        One test has different results between DRT and WTR, but DRT behavior seems to differ
        from UIWebView here, so just give it a WK1-specific result.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        (-[DumpRenderTreeBrowserView documentVisibleRect]):
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::zoomScale):
        (WTR::UIScriptController::minimumZoomScale):
        (WTR::UIScriptController::maximumZoomScale):
        (WTR::UIScriptController::contentVisibleRect):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:

2016-08-24  Simon Fraser  <simon.fraser@apple.com>

        Minor project rearrangement.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2016-08-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS DRT] Make iOS DRT use the same window size as WebKitTestRunner for flexible viewport tests
        https://bugs.webkit.org/show_bug.cgi?id=161124

        Reviewed by Daniel Bates.
        
        Use the main UIScreen's bounds for the size of the window in flexible viewport mode,
        and remove the 'phoneBrowserAddressBarOffset' hack, so that it matches WTR.
        
        Remove some unnecessary zero initializations of static variables.
        
        Change _setVisibleSize to use the window size, which should not be a behavior change
        because this it just used for text autosizing, which is disabled by default,
        and only the width is consulted.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (adjustWebDocumentForFlexibleViewport):
        (adjustWebDocumentForStandardViewport):
        (createWebViewAndOffscreenWindow):

2016-08-24  Jonathan Bedard  <jbedard@apple.com>

        WebKit2 needs layoutTestController.setDeferMainResourceDataLoad
        https://bugs.webkit.org/show_bug.cgi?id=42777

        Reviewed by Darin Adler.

        The setDeferMainResourceDataLoad method was not correctly tested in DumpRenderTree and would pass even when setDeterMainResourceDataLoad was not called.  Removed function and test.

        * DumpRenderTree/TestRunner.cpp:
        (setDeferMainResourceDataLoadCallback): Removed setDeferMainResourceDataLoad.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::deferMainResourceDataLoad): Ditto.
        (TestRunner::setDeferMainResourceDataLoad): Ditto.
        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Ditto.

2016-08-23  Anders Carlsson  <andersca@apple.com>

        Add enum traits and use them in the IPC::Decoder
        https://bugs.webkit.org/show_bug.cgi?id=161103

        Reviewed by Sam Weinig.

        Add API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/EnumTraits.cpp: Added.
        (TestWebKitAPI::TEST):

2016-08-24  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r204901, r204897, r204866, r204856, r204854.

        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain):
        * Scripts/run-jsc-stress-tests:
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):

2016-08-24  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Production builds.
        
        PRODUCTION_FRAMEWORKS_DIR was undefined here.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2016-08-24  Dan Bernstein  <mitz@apple.com>

        Add a convenience function for creating a WKFrameHandleRef from a WKFrameRef without going through WKFrameInfoRef
        https://bugs.webkit.org/show_bug.cgi?id=161152

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FrameHandle.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):

2016-08-24  Nan Wang  <n_wang@apple.com>

        AX: Add test for line text marker range on iOS
        https://bugs.webkit.org/show_bug.cgi?id=161108
        <rdar://problem/27976405>

        Reviewed by Chris Fleizach.

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

2016-08-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] Warning fixes.
        https://bugs.webkit.org/show_bug.cgi?id=161079

        Reviewed by Brent Fulgham.

        * MiniBrowser/win/WebDownloadDelegate.cpp:
        * MiniBrowser/win/WinMain.cpp:
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2016-08-23  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows DRT build.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::mainFrameJSContext):

2016-08-23  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build.
        
        Pass Tools/DumpRenderTree/Bindings as the working directory for the generate_bindings.pl
        so that perl finds CodeGeneratorDumpRenderTree.pm.

        * DumpRenderTree/CMakeLists.txt:

2016-08-23  Simon Fraser  <simon.fraser@apple.com>

        Hook up UIScriptController in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=161064

        Reviewed by Sam Weinig.

        Add a skeleton implementation of UIScriptController to DumpRenderTree, building for both
        Mac and iOS. Currently this is sufficient to test doAsyncTask(), enabling two tests
        in fast/harness which test this.

        Add a DerivedSources target to DumpRenderTree to invoke DerivedSources.make.

        Move related code shared between WTR and DRT into Tools/TestRunnerShared, and cleanse it of
        WK2-isms. Fix the makefiles to refer to the new location.

        Hook up TestRunner::runUIScript() for DumpRenderTree, which requires keeping track of callbacks
        by ID and firing them once they are complete.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm: Added (copied from WTR).
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DerivedSources.make: Copied from Tools/WebKitTestRunner/DerivedSources.make.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestRunner.cpp:
        (runUIScriptCallback):
        (TestRunner::staticFunctions):
        (TestRunner::cacheTestRunnerCallback):
        (TestRunner::callTestRunnerCallback):
        (TestRunner::clearTestRunnerCallbacks):
        (nextUIScriptCallbackID):
        (TestRunner::runUIScript):
        (TestRunner::callUIScriptCallback):
        (TestRunner::uiScriptDidComplete):
        (TestRunner::cleanup):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: DerivedSources.make needs WEBCORE_PRIVATE_HEADERS_DIR to be defined.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::mainFrameJSContext):
        * DumpRenderTree/mac/UIScriptControllerMac.mm: Copied from Tools/WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h.
        (WTR::UIScriptController::doAsyncTask):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * TestRunnerShared/Bindings/JSWrappable.h: Renamed from Tools/WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h.
        (WTR::JSWrappable::~JSWrappable):
        (WTR::JSValueMakeStringOrNull):
        * TestRunnerShared/Bindings/JSWrapper.cpp: Renamed from Tools/WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp.
        (WTR::JSWrapper::wrap):
        (WTR::JSWrapper::unwrap):
        (WTR::unwrapObject):
        (WTR::JSWrapper::initialize):
        (WTR::JSWrapper::finalize):
        * TestRunnerShared/Bindings/JSWrapper.h: Renamed from Tools/WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h.
        (WTR::toJS):
        (WTR::setProperty):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: Renamed from Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl.
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp: Renamed from Tools/WebKitTestRunner/UIScriptContext/UIScriptContext.cpp.
        * TestRunnerShared/UIScriptContext/UIScriptContext.h: Renamed from Tools/WebKitTestRunner/UIScriptContext/UIScriptContext.h.
        (WTR::UIScriptContext::currentParentCallbackIsPendingCompletion):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp: Renamed from Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp.
        * TestRunnerShared/UIScriptContext/UIScriptController.h: Renamed from Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h.
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h:
        (WTR::JSWrappable::~JSWrappable): Deleted.
        (WTR::JSValueMakeStringOrNull): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp:
        (WTR::JSWrapper::wrap): Deleted.
        (WTR::JSWrapper::unwrap): Deleted.
        (WTR::unwrapObject): Deleted.
        (WTR::JSWrapper::initialize): Deleted.
        (WTR::JSWrapper::finalize): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h:
        (WTR::toJS): Deleted.
        (WTR::setProperty): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::runUISideScript):
        (WTR::TestInvocation::uiScriptDidComplete):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp: Moved
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h: Moved
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp: Moved
        * WebKitTestRunner/UIScriptContext/UIScriptController.h: Moved
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/config.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::contentVisibleRect):

2016-08-23  Saam Barati  <sbarati@apple.com>

        JSC should have a "microbenchmarks" directory instead of "regress" directory
        https://bugs.webkit.org/show_bug.cgi?id=161096

        Rubber stamped by Mark Lam.

        This patch moves LayoutTests/js/regress/script-tests to the JSTests/microbenchmarks
        directory and removes all the related html and txt files. I did this because
        that directory was only there for microbenchmarks, and not for "regression"
        tests. I also changed the various scripts to point to it.

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

2016-08-23  Alex Christensen  <achristensen@webkit.org>

        Fix EFL build.

        * TestWebKitAPI/CMakeLists.txt:
        Include new directory.

2016-08-22  Filip Pizlo  <fpizlo@apple.com>

        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
        https://bugs.webkit.org/show_bug.cgi?id=160125

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestRunner.cpp: Rewire some #includes.
        * Scripts/run-jsc-stress-tests: New test flag!

2016-08-23  Brady Eidson  <beidson@apple.com>

        WK2 Gamepad layout test support.
        https://bugs.webkit.org/show_bug.cgi?id=134671

        Reviewed by Alex Christensen.
        
        Have the injected bundle expose the MockGamepadProvider to the UI process, which will then 
        feed back into the UIGamepadProvider.
        
        Also, fool NSApplication into treating the most recently created "isKeyWindow" of the test windows
        as the actual keyWindow for the test runner, which will allow the view to get gamepad updates.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMockGamepadDetails):
        (WTR::TestRunner::setMockGamepadAxisValue):
        (WTR::TestRunner::setMockGamepadButtonValue):
        
        * WebKitTestRunner/PlatformWebView.h:
        
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Deleted.
        
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[WebKitTestRunnerWindow initWithFrame:]):
        (-[WebKitTestRunnerWindow dealloc]):
        (WTR::PlatformWebView::keyWindow):
        
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::wtr_NSApplication_keyWindow):
        (WTR::TestController::platformInitialize):
        
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (+[WebKitTestRunnerWindow _WTR_keyWindow]):
        (-[WebKitTestRunnerWindow initWithContentRect:styleMask:backing:defer:]):
        (-[WebKitTestRunnerWindow dealloc]):
        (WTR::PlatformWebView::keyWindow):
        
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::wtr_NSApplication_keyWindow):
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/mac/main.mm:

2016-08-23  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (PHP 5.6): http/tests/misc/bad-charset-alias.html fails
        https://bugs.webkit.org/show_bug.cgi?id=161047
        rdar://problem/27434307

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py: Specify a php.ini file.

2016-08-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r204243.

        Caused some layout test failures

        Reverted changeset:

        "Write API test to cover crash fix in r204135"
        https://bugs.webkit.org/show_bug.cgi?id=160587
        http://trac.webkit.org/changeset/204243

2016-08-23  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>

        Order feature option list in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=161074

        Reviewed by Michael Catanzaro.

        Reorder features in alphabetical order based on command line option. Also, sort variables in alphabetical order.

        * Scripts/webkitperl/FeatureList.pm:

2016-08-22  Dewei Zhu  <dewei_zhu@apple.com>

        Stop python icon bouncing in the dock while running browser benchmarks.
        https://bugs.webkit.org/show_bug.cgi?id=161066

        Reviewed by Ryosuke Niwa.

        Bouncing python icon may impact browser benchmark results.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepare_env):
        (OSXBrowserDriver.restore_env):

2016-08-22  Simon Fraser  <simon.fraser@apple.com>

        <select> menu on iPad causes shifting of hit-testing areas
        https://bugs.webkit.org/show_bug.cgi?id=150079

        Reviewed by Tim Horton.

        -isAssistingNode (aka the poorly named isEditable) is input into WebPageProxy::computeCustomFixedPositionRect(),
        so when it changes we have to update visible rects. We were doing this on focus, but failing
        to do it on blur.

        Added the ability to test by:
        1. Making it possible to initiate an animated scroll in the UI process
        2. Adding callbacks for starting and ending interaction with a form control. Sadly
        the "ending interaction" for <select> popovers on iPad isn't late enough, since we
        have no way currently to know when the dimming view behind the popover animates out,
        so for now the test keeps trying to tap a button.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidStartFormControlInteractionCallback):
        (WTR::UIScriptController::didStartFormControlInteractionCallback):
        (WTR::UIScriptController::setDidEndFormControlInteractionCallback):
        (WTR::UIScriptController::didEndFormControlInteractionCallback):
        (WTR::UIScriptController::scrollToOffset):
        (WTR::UIScriptController::platformSetDidStartFormControlInteractionCallback):
        (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView didStartFormControlInteraction]):
        (-[TestRunnerWKWebView didEndFormControlInteraction]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::contentOffsetBoundedInValidRange):
        (WTR::UIScriptController::scrollToOffset):
        (WTR::UIScriptController::platformSetDidStartFormControlInteractionCallback):
        (WTR::UIScriptController::platformSetDidEndFormControlInteractionCallback):

2016-08-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EFL][GTK] Script process-linux-coredump is not needed, switch back to use the kernel core dumper instead.
        https://bugs.webkit.org/show_bug.cgi?id=160927

        Reviewed by Daniel Bates.

        * Scripts/process-linux-coredump: Removed.
        * Scripts/webkitpy/port/efl.py:
        (EflPort._get_crash_log):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._get_crash_log):
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator.__init__):
        (GDBCrashLogGenerator.generate_crash_log):
        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py:
        (GDBCrashLogGeneratorTest.test_generate_crash_log):

2016-08-22  Jonathan Bedard  <jbedard@apple.com>

        check-webkit-style does not work with Lambda functions in C++
        https://bugs.webkit.org/show_bug.cgi?id=160910

        Reviewed by Darin Adler.

        This change eliminates false positives on correctly styled lambda functions and includes a few basic checks on capture list.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (regex_for_lambda_functions): Added function which checks if a string is the start of a lambda function.
        (check_for_non_standard_constructs): Added lambda function check.
        (check_spacing_for_function_call): Added lambda function check.
        (check_braces): Added lambda function check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_lambda_functions): Added test function for lambda function style checks.

2016-08-21  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse IPv4 addresses
        https://bugs.webkit.org/show_bug.cgi?id=161023

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkURLDifferences):
        We are already getting differences between the old URL::parse and the new URLParser.
        (TestWebKitAPI::shouldFail):

2016-08-21  Daniel Bates  <dabates@apple.com>

        prepare-ChangeLog lists unmodified functions as modified and marks functions with few changes as deleted
        https://bugs.webkit.org/show_bug.cgi?id=148437

        Reviewed by Dan Bernstein.

        * Scripts/prepare-ChangeLog:
        (diffCommand): When using a Subversion checkout, generate a unified diff without any context lines.
        This matches our behavior when using a Git checkout. The function overlap logic in generateFunctionListsByRanges()
        assumes that its line ranges were from a unified diff without any context lines.
        (extractLineRangeAfterChange): A deleted line should be represented with a ("begin line number", "end line number") = ("new starting line number", "new starting line number").
        (extractLineRangeBeforeChange): An added line should be represented with a ("begin line number", "end line number") = ("original starting line number", "original starting line number").
        * Scripts/webkitperl/prepare-ChangeLog_unittest/extractLineRangeBeforeAndAfterChange.pl: Update expected results
        based on changes to extractLineRangeAfterChange() and extractLineRangeBeforeChange().
        * Scripts/webkitperl/prepare-ChangeLog_unittest/generateFunctionLists.pl: Added.
        (discardOutput): Convenience function invokes the specified function redirecting standard output and standard error
        to /dev/null for the duration of the function call.

2016-08-20  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [EFL] Remove unnecessary a patch to mute ecore warnings
        https://bugs.webkit.org/show_bug.cgi?id=160997

        Reviewed by Darin Adler.

        There is no warning messages during the layout test and perf test
        after bumping efl version from 1.17 to 1.18. Remove it.

        * efl/patches/ecore_remove_warnings.patch: Removed.

2016-08-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r204477): Running LayoutTests on ios-simulator became ~15 minutes slower
        https://bugs.webkit.org/show_bug.cgi?id=160985

        Re-land r204672, but don't check the result of 'xcrun simctl shutdown', because
        device shutdown seems to happen as result of killing Simulator.apps, and we're racing
        with that.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config):
        * Scripts/webkitpy/port/base.py:
        (Port.driver_cmd_line_for_logging):
        (Port.driver_cmd_line): Deleted.
        * Scripts/webkitpy/port/driver.py:
        (IOSSimulatorDriver.cmd_line):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__):
        (IOSSimulatorPort.driver_cmd_line_for_logging):
        (IOSSimulatorPort._create_simulators):
        (IOSSimulatorPort.setup_test_run):
        (IOSSimulatorPort._quit_ios_simulator):
        (IOSSimulatorPort.clean_up_test_run):
        (IOSSimulatorPort._create_device):
        (IOSSimulatorPort):
        (IOSSimulatorPort._remove_device):
        (IOSSimulatorPort._testing_device):
        (IOSSimulatorPort.device_id_for_worker_number):
        (IOSSimulatorPort._set_device_class): Deleted.
        (IOSSimulatorPort.testing_device): Deleted.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_driver_cmd_line):
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.shutdown):
        (Device):
        (Device.delete):
        (Device.reset):
        (Simulator):
        (Simulator.create_device):
        (Simulator.remove_device):
        (Simulator.device_number):
        (Simulator.device_state_description):
        (Simulator.wait_until_device_is_in_state):

2016-08-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r204659.

        This change appears to have caused ios-simulator LayoutTests
        to fail when shutting down the simulator

        Reverted changeset:

        "REGRESSION (r204477): Running LayoutTests on ios-simulator
        became ~15 minutes slower"
        https://bugs.webkit.org/show_bug.cgi?id=160985
        http://trac.webkit.org/changeset/204659

2016-08-19  Alexey Proskuryakov  <ap@apple.com>

        Build fix for non-USE_SIM_SERVICE_CONTEXT builds
        * LayoutTestRelay/LayoutTestRelay/main.m: (main):

2016-08-18  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r204477): Running LayoutTests on ios-simulator became ~15 minutes slower
        https://bugs.webkit.org/show_bug.cgi?id=160985

        Reviewed by Alexey Proskuryakov.
        
        r204477 removed @memoized on a couple of ios.py functions, causing them to instantiate
        a Simulator() on every call, which causes 'xcrun simctl list' to run. The functions
        must not be @memoized, because their return value depends on the value of simulator_device_type().
        
        Fix by adding some global state in simulator.py that tracks the created devices 
        in a worker number -> Device dictionary. Explicitly create devices in _create_simulators(),
        and delete them in clean_up_test_run().
        
        Also explicitly called 'xcrun simctl shutdown' to shut down devices, since it seems
        that killing the Simulator apps isn't enough.
        
        Simulator tracks the devices in a global dictionary, since state needs to persist
        across different instances of IOSSimulatorPort.
        
        Annoyingly, the "Command line:" dumping tried to access a device before we'd done
        any setup. Rather than implicitly creating a device here (which the old code did),
        override the more clearly named driver_cmd_line_for_logging() in IOSSimulatorPort
        and set flag to say that device_id_for_worker_number() doesn't need to return a real
        device id.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (print_options):
        (Printer.print_config):
        * Scripts/webkitpy/port/base.py:
        (Port.driver_cmd_line_for_logging):
        (Port.driver_cmd_line): Deleted.
        * Scripts/webkitpy/port/driver.py:
        (IOSSimulatorDriver.cmd_line):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__):
        (IOSSimulatorPort.driver_cmd_line_for_logging):
        (IOSSimulatorPort._create_simulators):
        (IOSSimulatorPort.setup_test_run):
        (IOSSimulatorPort.clean_up_test_run):
        (IOSSimulatorPort._create_device):
        (IOSSimulatorPort):
        (IOSSimulatorPort._remove_device):
        (IOSSimulatorPort._testing_device):
        (IOSSimulatorPort.device_id_for_worker_number):
        (IOSSimulatorPort._set_device_class): Deleted.
        (IOSSimulatorPort.testing_device): Deleted.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_driver_cmd_line):
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.shutdown):
        (Device.delete):
        (Device.reset):
        (Simulator.create_device):
        (Simulator.remove_device):
        (Simulator.device_number):
        (Simulator.device_state_description):
        (Simulator.wait_until_device_is_in_state):

2016-08-19  Alexey Proskuryakov  <ap@apple.com>

        Adopt SimServiceContext in LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=161000
        <rdar://problem/25765594>

        Reviewed by Daniel Bates.

        * LayoutTestRelay/LayoutTestRelay/CoreSimulatorSPI.h:
        * LayoutTestRelay/LayoutTestRelay/main.m:

2016-08-19  Lucas Forschler  <lforschler@apple.com>

        Remove Yosemite Leaks bot after http://trac.webkit.org/projects/webkit/changeset/204629

        Reviewed by Kocsen Chung.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2016-08-19  Alexey Proskuryakov  <ap@apple.com>

        Partial revert of r203811 - this key is not needed.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m: (-[LTRelayController installApp]):

2016-08-19  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the iOS 9.3 build

        Define WK_EMPTY_, WK_NOT_, and WK_NOT_YES.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2016-08-19  Lucas Forschler  <lforschler@apple.com>

        Remove Yosemite Leaks bot from config.json
        
        Reviewed by Alexey Proskuryakov.

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

2016-08-18  Dan Bernstein  <mitz@apple.com>

        [Cocoa] API::Number needs to be wrapped by an NSNumber
        https://bugs.webkit.org/show_bug.cgi?id=160977
        <rdar://problem/27877735>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKNSNumber.mm: Added.
        (TestWebKitAPI::TEST):

2016-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate off of deprecated CoreGraphics API CGContextSelectFont() and CGContextShowTextAtPoint()
        https://bugs.webkit.org/show_bug.cgi?id=160895

        Reviewed by Dean Jackson.

        Link to the existing CoreText framework.

        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/PlatformWin.cmake:

2016-08-17  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove old libraries from build inputs
        https://bugs.webkit.org/show_bug.cgi?id=160949

        Reviewed by Dean Jackson.

        Modify the download script to remove the old 'icuuc.lib' and
        'icuin.lib' files for Windows builds.

        * Scripts/update-webkit-auxiliary-libs:

2016-08-17  Jonathan Bedard  <jbedard@apple.com>

        Extra logging for crash reason
        https://bugs.webkit.org/show_bug.cgi?id=160943

        Reviewed by Alexey Proskuryakov.

        A number of tests have been erroneously marked as crashed, this should help diagnose these false crashes.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write): Add extra logging to determine why a process has been marked as crashed.
        (ServerProcess._wait_for_data_and_update_buffers_using_select): Ditto.
        (ServerProcess.has_crashed): Ditto.

2016-08-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] -[NSString isEqualToString:] returns NO for any WKNSString argument
        https://bugs.webkit.org/show_bug.cgi?id=160938
        <rdar://problem/27876652>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKObject.mm: Added.
        (TestWebKitAPI::TEST):

2016-08-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Support abbreviations in iOS
        https://bugs.webkit.org/show_bug.cgi?id=160907

        Reviewed by Joanmarie Diggs.

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

2016-08-17  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [EFL] Bump efl version from 1.17 to 1.18
        https://bugs.webkit.org/show_bug.cgi?id=160899

        Reviewed by Antonio Gomes.

        To use efl-1.18, EFL port needs to update install dependencies as well.

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

2016-08-17  Per Arne Vollan  <pvollan@apple.com>

        [Win] Add tests for linked fonts.
        https://bugs.webkit.org/show_bug.cgi?id=160898

        Reviewed by Brent Fulgham.

        Add tests for https://trac.webkit.org/changeset/204502.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/win/LinkedFonts.cpp: Added.
        (TestWebKitAPI::TEST):

2016-08-16  Daniel Bates  <dabates@apple.com>

        prepare-ChangeLog: Extract logic from generateFunctionLists() into a function that takes a delegate object
        https://bugs.webkit.org/show_bug.cgi?id=160924

        Reviewed by Stephanie Lewis.

        Towards adding unit tests for generateFunctionLists() we move its logic into actuallyGenerateFunctionLists()
        and have actuallyGenerateFunctionLists() take a delegate object to use to query the file system and SCM.
        We modify generateFunctionLists() to call actuallyGenerateFunctionLists(). This will make is possible to
        test the generate function list machinery without requiring a SCM checkout by substituting a delegate
        object that mocks out the file system and SCM operations.

        * Scripts/VCSUtils.pm:
        (parseDiffStartLine): Parses an SVN or Git start line and returns the path to the target file.
        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Move functionality to actually generate the function lists to actuallyGenerateFunctionLists(),
        abstracting the logic to query the file system and SCM into functions on a delegate object that
        we pass to it.
        (actuallyGenerateFunctionLists): Extracted from generateFunctionLists().
        (diffHeaderFormat): Deleted.

2016-08-16  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse URLs without credentials
        https://bugs.webkit.org/show_bug.cgi?id=160913

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::s):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2016-08-16  Anders Carlsson  <andersca@apple.com>

        Add WTF::ScopeExit
        https://bugs.webkit.org/show_bug.cgi?id=160908

        Reviewed by Geoffrey Garen.

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

2016-08-16  Aakash Jain  <aakash_jain@apple.com>

        EWS logs file are rotated too quickly
        https://bugs.webkit.org/show_bug.cgi?id=160724

        Reviewed by Daniel Bates.

        Currently we are rotating the log file after 10 iterations of queue. If the queue
        doesn't have any pending patches, these iterations result in very small amount of 
        logs (1 KB log file). Even if the queue process some patches, logs are few KBs.
        This results in a lot of log files in a day. This patch ensures that we rotate the
        log file when its file size is greater than or equal to 100 KB.

        * EWSTools/start-queue-mac.sh: Added check for file size before rotating log file.

2016-08-16  Daniel Bates  <dabates@apple.com>

        WKSI static library should be named by major iOS revision, not individual updates
        https://bugs.webkit.org/show_bug.cgi?id=160727
        <rdar://problem/22274848>

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * Scripts/copy-webkitlibraries-to-product-directory:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2016-08-16  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test iOS select elements, and add iPhone and iPad tests for them
        https://bugs.webkit.org/show_bug.cgi?id=160909

        Reviewed by Enrica Casucci.
        
        Add functions to UIScriptController to dismiss the form accessory view for iOS,
        and to programmatically pick a row from a <select> picker.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dismissFormAccessoryView):
        (WTR::UIScriptController::selectFormAccessoryPickerRow):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFormAccessoryView):
        (WTR::UIScriptController::selectFormAccessoryPickerRow):

2016-08-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Add iPad viewport and form tests, and revert the iPad-testing part of r202132
        https://bugs.webkit.org/show_bug.cgi?id=160878

        Reviewed by Tim Horton.
        
        Remove testing-specific "forceIPadStyleZoomOnInputFocus" behavior added in r202132
        now that we have the ability to run tests in the iPad simulator.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus): Deleted.
        (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus): Deleted.
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus): Deleted.
        (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus): Deleted.

2016-08-15  Anders Carlsson  <andersca@apple.com>

        Add an address-of operator to RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=160879

        Reviewed by Tim Horton.

        Test HashMap and HashSet with an object whose operator& is deleted.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Sort the Xcode project.

        * TestWebKitAPI/Tests/WTF/DeletedAddressOfOperator.h: Added.
        (DeletedAddressOfOperator::DeletedAddressOfOperator):
        (DeletedAddressOfOperator::value):
        (DeletedAddressOfOperator::operator==):
        (WTF::HashTraits<DeletedAddressOfOperator>::constructDeletedValue):
        (WTF::HashTraits<DeletedAddressOfOperator>::isDeletedValue):
        (WTF::DefaultHash<DeletedAddressOfOperator>::Hash::hash):
        (WTF::DefaultHash<DeletedAddressOfOperator>::Hash::equal):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):

2016-08-16  Jonathan Bedard  <jbedard@apple.com>

        False crashes in fast/text/emoji-gender-* tests
        https://bugs.webkit.org/show_bug.cgi?id=160779

        Reviewed by Alexey Proskuryakov.

        Fix from <rdar://problem/27786762>, where timed out tests falsely report as crashed.

        * Scripts/webkitpy/port/driver.py:
        (Driver._check_for_driver_crash_or_unresponsiveness): Change call to ‘write’ to disable crash flag.
        * Scripts/webkitpy/port/driver_unittest.py: Added 3 variable to test version of ‘write.’
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write): Allow caller to disable crash flag on exception.

2016-08-15  Simon Fraser  <simon.fraser@apple.com>

        webkitpy error in TestRunResults.merge()
        https://bugs.webkit.org/show_bug.cgi?id=160882

        Reviewed by Daniel Bates.
        
        The argument to TestRunResults.merge() can be None if there are no device-specifc
        initial results or retry results in Manager.run(), so just return early in that case.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.merge):

2016-08-15  Sam Weinig  <sam@webkit.org>

        Speed up compile times by not including wtf/Variant.h so much
        https://bugs.webkit.org/show_bug.cgi?id=160847

        Reviewed by Alex Christensen and Saam Barati.

        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        (TestWebKitAPI::TEST):
        Explicitly use std::experimental::variant.

2016-08-15  Simon Fraser  <simon.fraser@apple.com>

        Allow a port to run tests with a custom device setup
        https://bugs.webkit.org/show_bug.cgi?id=160833

        Reviewed by Daniel Bates.

        These changes allow the IOSSimulator port to run tests in iPad mode.

        This is made possible by allowing a platform to define CUSTOM_DEVICE_CLASSES,
        in this case 'ipad'. When specified, any test in a directory with a suffix that matches
        a custom device will be collected into a set, and run in that device's environment after
        the other tests have run.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._custom_device_for_test): If the test contains a directory matching a
        custom device suffix, return that custom device.
        (Manager._set_up_run): Push the custom device class, if any, into options so
        that the Worker can get to it.
        (Manager.run): Go through the list of tests, and break it down into device-generic
        tests, and tests for each device class. _run_test_subset is then called for
        each collection of tests, and the results merged.
        (Manager._run_test_subset): Some lines unwrapped.
        (Manager._end_test_run):
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Unwrapped a line.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.merge): Add this function to merge TestRunResults
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_workers_and_shards): Print the custom device, if any.
        * Scripts/webkitpy/port/base.py:
        (Port): Base port has empty array of custom devices.
        (Port.setup_test_run): Add device_class argument.
        * Scripts/webkitpy/port/driver.py:
        (DriverInput.__repr__):
        (Driver.check_driver.implementation):
        * Scripts/webkitpy/port/efl.py:
        (EflPort.setup_test_run):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_test_run):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort): Add CUSTOM_DEVICE_CLASSES for ipad.
        (IOSSimulatorPort.__init__):
        (IOSSimulatorPort.simulator_device_type): Use a device name from the DEVICE_CLASS_MAP
        based on the custom device class.
        (IOSSimulatorPort._set_device_class):
        (IOSSimulatorPort._create_simulators): Factor some code into this function.
        (IOSSimulatorPort.setup_test_run):
        (IOSSimulatorPort.testing_device):
        (IOSSimulatorPort.reset_preferences): This used to create the simulator apps, but that
        seemed wrong for this function. That was moved to setup_test_run().
        (IOSSimulatorPort.check_sys_deps): This function used to create testing devices,
        but this happened too early, before we knew which kind of devices to create. Devices
        are now created in setup_test_run().
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_test_run):

2016-08-15  Daniel Bates  <dabates@apple.com>

        Cannot build WebKit for iOS device using Xcode 7.3/iOS 9.3 public SDK due to missing
        private frameworks and libraries
        https://bugs.webkit.org/show_bug.cgi?id=155931
        <rdar://problem/25807989>

        Reviewed by Dan Bernstein.

        Add directory WebKitLibraries/WebKitPrivateFrameworkStubs/iOS/X to the framework search path
        where X is the major version of the active iOS SDK.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2016-08-15  Simon Fraser  <simon.fraser@apple.com>

        Add a setting and preferences to enable visual viewport mode
        https://bugs.webkit.org/show_bug.cgi?id=160843

        Reviewed by Sam Weinig.
        
        Pref and a menu item to toggle visualViewportEnabled for WebKits 1 and 2.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController visualViewportEnabled]):
        (-[SettingsController toggleVisualViewportEnabled:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2016-08-15  Konstantin Tokarev  <annulen@yandex.ru>

        Allow using make-dist with non-GTK ports
        https://bugs.webkit.org/show_bug.cgi?id=160842

        Reviewed by Michael Catanzaro.

        This patch adds support for setting base name of tarball and argument
        passed to cmake's -DPORT= via command line arguments.

        * gtk/make-dist.py:
        (Distcheck.configure):
        (Distcheck.check):
        (get_tarball_root_and_output_filename_from_arguments):

2016-08-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Install script lacks gstreamer related dependencies
        https://bugs.webkit.org/show_bug.cgi?id=160814

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies: Fedora case had already listed this dependencies,
        but both Arch and Debian/Ubuntu were missing them.

2016-08-13  Konstantin Tokarev  <annulen@yandex.ru>

        make-dist.py should not allow unknown rules in manifest
        https://bugs.webkit.org/show_bug.cgi?id=160841

        Reviewed by Carlos Garcia Campos.

        * gtk/make-dist.py:
        (Manifest.process_line):

2016-08-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EFL][GTK] Install script not working on Debian 9 (testing) and Ubuntu 16.10
        https://bugs.webkit.org/show_bug.cgi?id=160809

        Reviewed by Carlos Garcia Campos.

        * efl/install-dependencies: Factorize the previous logic for handling the php5/7
        case, and use it also for the new package names of libpng and libgeoclue.
        * gtk/install-dependencies: Ditto.

2016-08-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Skip to check directories existence in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=160691

        Reviewed by Alex Christensen.

        CMake checks if directories are there itself. So CMake ports
        don't need to check it in the build-webkit script.

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

2016-08-12  Alex Christensen  <achristensen@webkit.org>

        Make URLParser work with URLs missing URL parts
        https://bugs.webkit.org/show_bug.cgi?id=160824

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::s):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::eq): Deleted.

2016-08-12  John Wilander  <wilander@apple.com>

        Add HashCountedSet API tests to TestWTFLibrary target
        https://bugs.webkit.org/show_bug.cgi?id=160815

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
            Added HashCountedSet.cpp and sorted the file reference section
            according to UNIX sort.

2016-08-12  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark should run JetStream 1.1 instead of 1.0.1
        https://bugs.webkit.org/show_bug.cgi?id=160816

        Reviewed by Filip Pizlo.

        Use the latest JetStream 1.1 in run-benchmark.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder.__exit__):
        * Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Updated to apply against 1.1 directory.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Updated to use r190897, which is the last
        change to JetStream directory.

2016-08-12  Alex Christensen  <achristensen@webkit.org>

        Initial URLParser implementation
        https://bugs.webkit.org/show_bug.cgi?id=160811

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::eq):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2016-08-12  Brady Eidson  <beidson@apple.com>

        Fix the 32-bit Mac build after:
        Add WK2 ExperimentalFeature support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=160788

        Unreviewed.

        Sprinkle "#if WK_API_ENABLED"s liberally.
        
        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):

2016-08-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][OWR] Video rendering fixes
        https://bugs.webkit.org/show_bug.cgi?id=160764

        Reviewed by Xabier Rodriguez-Calvar.

        * gtk/jhbuild.modules: Bump to current OpenWebRTC master.

2016-08-12  Per Arne Vollan  <pvollan@apple.com>

        Add missing return statement in convertFast function added in r204376.

        Unreviewed.

        * Scripts/webkitpy/common/system/path.py:
        (_CygPath.convertFast):

2016-08-11  Brady Eidson  <beidson@apple.com>

        Add WK2 ExperimentalFeature support to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=160788

        Reviewed by Alex Christensen.

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

2016-08-11  Aakash Jain  <aakash_jain@apple.com>

        Keep EWS logs for longer
        https://bugs.webkit.org/show_bug.cgi?id=160776

        Reviewed by Daniel Bates.

        * EWSTools/start-queue-mac.sh: Keep logs for 30 days instead of 14 days.

2016-08-11  Simon Fraser  <simon.fraser@apple.com>

        iOS DRT/WTR project cleanup
        https://bugs.webkit.org/show_bug.cgi?id=160778

        Reviewed by Tim Horton.

        Move TARGETED_DEVICE_FAMILY from the project to an xcconfig file.

        Remove AppDelegate.* which were unused.

        Exclude ios/Launch.storyboard on more platforms.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerApp/AppDelegate.h: Removed.
        * WebKitTestRunner/WebKitTestRunnerApp/AppDelegate.m: Removed.
        (-[AppDelegate application:didFinishLaunchingWithOptions:]): Deleted.

2016-08-11  Alex Christensen  <achristensen@webkit.org>

        Fix Yosemite bots' cookie accept policies after r204365.
        https://bugs.webkit.org/show_bug.cgi?id=160758

        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieAcceptPolicy.mm:
        (TEST):
        This makes the test fully clean up after itself.

2016-08-11  Alex Christensen  <achristensen@webkit.org>

        Fix Yosemite bots' cookie accept policies after r204365.
        https://bugs.webkit.org/show_bug.cgi?id=160758

        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieAcceptPolicy.mm:
        (TEST):
        I didn't restore the cookieAcceptPolicy of the sharedHTTPCookieStorage after changing it with this API test.
        On Yosemite, this is changing the cookieAcceptPolicy that DumpRenderTree uses.
        On more recent Cocoa platforms, it is only changing the cookieAcceptPolicy that TestWebKitAPI uses, which isn't
        causing any problems because there are no other API tests that do anything with cookies.
        My solution will be to restore the original cookieAcceptPolicy after running this API test to clean up,
        but first I am committing this patch setting the cookieAcceptPolicy to NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain
        to reset any bots that have run tests since r204365.  I will commit a followup that sets it to originalCookieAcceptPolicy.

2016-08-11  Aakash Jain  <aakash_jain@apple.com>

        EWS should check if the patch is still valid before executing every major step
        https://bugs.webkit.org/show_bug.cgi?id=160739
        rdar://problem/27768813

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask.run): validate method is now executed in base class.
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        (EarlyWarningSystemTask.run): validate method is now executed in base class.
        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.validate): Raise an PatchIsNotValid exception instead of returning False.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._run_command): validate the patch before executing any command. This is to ensure
        that we do not waste time on any patch which has become invalid (e.g.: obsolete, r-).
        * Scripts/webkitpy/tool/commands/perfalizer.py:
        (PerfalizerTask.validate): Added.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_manual_reject_during_processing): Updated test case.

2016-08-11  Alex Christensen  <achristensen@webkit.org>

        Add URLParser stub
        https://bugs.webkit.org/show_bug.cgi?id=160770

        Reviewed by Sam Weinig.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp: Added.
        (TestWebKitAPI::TEST_F):

2016-08-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS DRT] Allow DRT to be iPad-sized in the iPad simulator
        https://bugs.webkit.org/show_bug.cgi?id=160761

        Reviewed by Tim Horton.

        Give iOS DRT a Launch storyboard.

        Have it use a UIViewController so future forms testing works correctly.

        Add TARGETED_DEVICE_FAMILY = "1,2" to the build settings for the .app, so that it
        can run in iPad mode.

        Remove empty InfoPlist.strings files.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ios/Info.plist:
        * DumpRenderTree/ios/Launch.storyboard: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerApp/en.lproj/InfoPlist.strings: Removed.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView): Drive-by leak fix.

2016-08-11  Per Arne Vollan  <pvollan@apple.com>

        [Win] Unable to reliably run tests in parallel
        https://bugs.webkit.org/show_bug.cgi?id=140914

        Reviewed by Brent Fulgham.

        The cygpath utility function can fail badly when running with multiple DumpRenderTree
        processes. We can use string replacement to convert the Cygwin path to a Windows path
        instead.

        * Scripts/webkitpy/common/system/path.py:
        (cygpathFast):
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input):

2016-08-10  Alex Christensen  <achristensen@webkit.org>

        Fix crash when changing cookie accept policy after r204327
        https://bugs.webkit.org/show_bug.cgi?id=160758

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieAcceptPolicy.mm: Added.
        (-[CookieAcceptPolicyMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieMessage.html: Added.

2016-08-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Have WebKitTestRunnerApp.app use a UIViewController, and fix to avoid the status bar
        https://bugs.webkit.org/show_bug.cgi?id=160757

        Reviewed by Tim Horton.

        When programmatically creating the test UIWindow, make a root UIViewController and parent
        the WKWebView in its view. This makes the app more like a normal UIKit application.
        
        Move the WKWebView down 20px to avoid the status bar.
        
        Give the UIWindow a gray background so it's obvious where the window and view positioned.

        Sorted the project file. Removed the link to UIKit which showed red, and wasn't necessary.
        
        Remove duplicate references to Launch.storyboard.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerApp/AppDelegate.h: Add license.
        * WebKitTestRunner/WebKitTestRunnerApp/AppDelegate.m: Add license.
        (-[AppDelegate applicationWillResignActive:]): Deleted.
        (-[AppDelegate applicationDidEnterBackground:]): Deleted.
        (-[AppDelegate applicationWillEnterForeground:]): Deleted.
        (-[AppDelegate applicationDidBecomeActive:]): Deleted.
        (-[AppDelegate applicationWillTerminate:]): Deleted.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::viewRectForWindowRect):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::setWindowFrame):

2016-08-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Use the simulated device's screen size, rather than a harcoded size
        https://bugs.webkit.org/show_bug.cgi?id=160748

        Reviewed by Tim Horton.
        
        Use the main UIScreen's bounds for the window size if we're using a flexible viewport. This
        opens the door for tests using other device sizes.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):

2016-08-10  Simon Fraser  <simon.fraser@apple.com>

        Sort the feature flags in the FEATURE_DEFINES lines
        https://bugs.webkit.org/show_bug.cgi?id=160742

        Reviewed by Anders Carlsson.
        
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-08-09  Simon Fraser  <simon.fraser@apple.com>

        Logging and other minor improvements to iOS webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=160722

        Reviewed by Dan Bates.

        Fix --debug-rwt-logging to log all the calls to simctl as well as device state information,
        to make it easier to debug launching issues.

        Have reset_preferences() reset the device, rather than just nuking the data
        directory (which broke some versions of the simulator).

        Make the Simulator.app launch in the background with open -g.

        Wait for the simulator device to be in a known state in some more places.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run):
        (IOSSimulatorPort._quit_ios_simulator):
        (IOSSimulatorPort.clean_up_test_run):
        (IOSSimulatorPort.setup_environ_for_server):
        (IOSSimulatorPort.reset_preferences):
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.create):
        (Device.delete):
        (Device):
        (Device.reset):
        (Simulator.wait_until_device_is_booted):
        (Simulator.wait_until_device_is_in_state):
        (Simulator):
        (Simulator.delete_device):
        (Simulator.reset_device):
        (Simulator.lookup_or_create_device):

2016-08-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][EFL] ALSA_CARD environment variable is not passed for layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=160697

        Reviewed by Antonio Gomes.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Add ALSA_CARD and sort the Linux
        list of environment variables to copy.

2016-08-09  George Ruan  <gruan@apple.com>

        Implement functionality of media capture on iOS
        https://bugs.webkit.org/show_bug.cgi?id=158945
        <rdar://problem/26893343>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Enable Media
        Capture feature on iOS.

2016-08-09  Saam Barati  <sbarati@apple.com>

        Parser<LexerType>::parseFunctionInfo() has the wrong info about captured vars when a function is not cached.
        https://bugs.webkit.org/show_bug.cgi?id=160671
        <rdar://problem/27756112>

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

2016-08-09  Alexey Proskuryakov  <ap@apple.com>

        Make directory reading code in iOSSimulatorDevices() more strict
        https://bugs.webkit.org/show_bug.cgi?id=160702

        Reviewed by Tim Horton.

        * Scripts/webkitdirs.pm:
        (iOSSimulatorDevices):

2016-08-06  Sam Weinig  <sam@webkit.org>

        Replace NodeOrString with std::variant<RefPtr<Node>, String>
        https://bugs.webkit.org/show_bug.cgi?id=160638

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        Add additional tests for the initial state of std::variant and using
        makeVisitor for visiting.

2016-08-09  Aakash Jain  <aakash_jain@apple.com>

        EWS logging should ensure the logging to file is stopped on queue termination
        https://bugs.webkit.org/show_bug.cgi?id=160698
        rdar://problem/24464570

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine._stopping): Stop logging to file on queue termination.
        (QueueEngine._begin_logging): Configure the Python logger to log to file.
        * Scripts/webkitpy/common/system/logutils.py:
        (configure_logger_to_log_to_file): Return the handler so as to enable caller to remove it later.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (QueueEngineTest._run_engine): Removed extra newline character to improve log readability.
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue._log_directory): Reverting to os.path.join as we don't have host object.
        (AbstractQueue.queue_log_path): Same.
        (AbstractQueue.begin_work_queue): Removed logging initialization, it is now being done in QueueEngine.
        (AbstractQueue.__init__): Removed host parameter, not required anymore, it was required by logging initialization
        which moved to QueueEngine now.
        (PatchProcessingQueue.__init__): Same.
        (CommitQueue.__init__): Same.
        (AbstractReviewQueue.__init__): Same.
        (StyleQueue.__init__): Same.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (TestCommitQueue): Removed host parameter.
        (TestCommitQueue.__init__): Same.
        (AbstractPatchQueueTest.test_next_patch): Same.
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch): Same.
        (test_commit_queue_failure): Same.
        (mock_run_webkit_patch):
        (MockCommitQueueTask.results_from_patch_test_run): Same.
        (test_rollout_lands): Same.
        (test_non_valid_patch): Same.
        (test_auto_retry): Same.
        (test_style_queue_with_watch_list_exception): Same.
        (TestQueue.__init__): Deleted.
        (TestReviewQueue.__init__): Deleted.
        (TestFeederQueue.__init__): Deleted.

2016-08-09  Konstantin Tokarev  <annulen@yandex.ru>

        webkit-gtk tarball fails to build due to missing files
        https://bugs.webkit.org/show_bug.cgi?id=160684

        Reviewed by Alex Christensen.

        * gtk/manifest.txt.in: Added back spi directories.

2016-08-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Build the jhbuild with -O2 optimization level by default
        https://bugs.webkit.org/show_bug.cgi?id=160544

        Reviewed by Michael Catanzaro.

        * gtk/jhbuildrc: Pass -O2 when building the JHBuild, as also -g1
        which don't increases the required disk space significatively and
        provides better debug information than no passing it.

2016-08-09  Csaba Osztrogonác  <ossy@webkit.org>

        Allow more --cmakeargs option in build-jsc and build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=160340

        Reviewed by Michael Catanzaro.

        * Scripts/build-jsc:
        * Scripts/build-webkit:

2016-08-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Do not check if WebKitLibraries folder exists on EFL and GTK
        https://bugs.webkit.org/show_bug.cgi?id=160659

        Reviewed by Csaba Osztrogonác.

        Though WebKitLibraries is only needed by mac and win ports,
        EFL and GTK ports have checked whether it exists.

        * Scripts/build-webkit:

2016-08-08  Aakash Jain  <aakash_jain@apple.com>

        Some EWS console logs doesn't go to log file
        https://bugs.webkit.org/show_bug.cgi?id=160585
        rdar://problem/24464570

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/system/logutils.py:
        (FileSystemHandler._open): Ensure that we open logfile in append mode in order to avoid
        any possible overwriting.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.open_text_file_for_writing): Add should_append parameter to append to file.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.open_text_file_for_writing): Same.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_and_write_text_file): Removed unused variable 'hex_equivalent'.
        (RealFileSystemTest.test_append_to_text_file): Added new unit test for testing append functionality.
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.begin_work_queue): Configure the logger for overall webkitpy to log to file.
        This will ensure that all the sub-modules inside webkitpy will log to file.

2016-08-08  Simon Fraser  <simon.fraser@apple.com>

        Have the iOS platform interit from the Apple platform in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=160672

        Reviewed by Dan Bates.
        
        The IOSSimulatorPort used to inherit from Port, rather than ApplePort.
        Fix this, and move duplicated code from IOSSimulatorPort and MacPort into
        ApplePort.
        
        Since WinPort also inherits from ApplePort, it needs to stub out some things
        that are unavailable on Windows (leaks, sampling).
        
        Some SnowLeopard-related code and the associated test were removed.

        * Scripts/webkitpy/port/apple.py:
        (ApplePort.__init__):
        (ApplePort):
        (ApplePort._make_leak_detector):
        (ApplePort.default_timeout_ms):
        (ApplePort.supports_per_test_timeout):
        (ApplePort.should_retry_crashes):
        (ApplePort._generate_all_test_configurations):
        (ApplePort.check_for_leaks):
        (ApplePort.print_leaks_summary):
        (ApplePort._path_to_webcore_library):
        (ApplePort.show_results_html_file):
        (ApplePort._merge_crash_logs):
        (ApplePort._look_for_all_crash_logs_in_log_dir):
        (ApplePort._get_crash_log):
        (ApplePort.look_for_new_crash_logs):
        (ApplePort.sample_process):
        (ApplePort.sample_file_path):
        (ApplePort.look_for_new_samples):
        (ApplePort._path_to_helper):
        (ApplePort.determine_full_port_name): Deleted.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort):
        (IOSSimulatorPort.__init__):
        (IOSSimulatorPort.default_timeout_ms): Deleted.
        (IOSSimulatorPort.supports_per_test_timeout): Deleted.
        (IOSSimulatorPort.should_retry_crashes): Deleted.
        (IOSSimulatorPort.check_for_leaks): Deleted.
        (IOSSimulatorPort.print_leaks_summary): Deleted.
        (IOSSimulatorPort._path_to_webcore_library): Deleted.
        (IOSSimulatorPort.show_results_html_file): Deleted.
        (IOSSimulatorPort.sample_file_path): Deleted.
        (IOSSimulatorPort._merge_crash_logs): Deleted.
        (IOSSimulatorPort._look_for_all_crash_logs_in_log_dir): Deleted.
        (IOSSimulatorPort.look_for_new_crash_logs): Deleted.
        (IOSSimulatorPort.look_for_new_samples): Deleted.
        (IOSSimulatorPort.sample_process): Deleted.
        (IOSSimulatorPort._path_to_helper): Deleted.
        (IOSSimulatorPort.make_command): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.__init__):
        (MacPort.make_command):
        (MacPort._build_java_test_support):
        (MacPort): Deleted.
        (MacPort.default_timeout_ms): Deleted.
        (MacPort.supports_per_test_timeout): Deleted.
        (MacPort.should_retry_crashes): Deleted.
        (MacPort.default_child_processes): Deleted.
        (MacPort.check_for_leaks): Deleted.
        (MacPort.print_leaks_summary): Deleted.
        (MacPort._path_to_webcore_library): Deleted.
        (MacPort.show_results_html_file): Deleted.
        (MacPort.sample_file_path): Deleted.
        (MacPort._merge_crash_logs): Deleted.
        (MacPort._look_for_all_crash_logs_in_log_dir): Deleted.
        (MacPort.look_for_new_crash_logs): Deleted.
        (MacPort.look_for_new_samples): Deleted.
        (MacPort.sample_process): Deleted.
        (MacPort._path_to_helper): Deleted.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_default_child_processes): Deleted.
        * Scripts/webkitpy/port/win.py:
        (WinPort.look_for_new_samples):
        (WinPort):
        (WinPort.sample_process):
        (WinPort._make_leak_detector):
        (WinPort.check_for_leaks):
        (WinPort.print_leaks_summary):
        (WinPort._path_to_webcore_library):

2016-08-08  Matt Baker  <mattbaker@apple.com>

        Unreviewed: moved myself to the reviewers list.

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

2016-08-08  Chris Dumez  <cdumez@apple.com>

        Update API tests in mac/SetDocumentURI.mm after r204247
        https://bugs.webkit.org/show_bug.cgi?id=160660

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/mac/SetDocumentURI.mm:
        (TestWebKitAPI::TEST):

2016-08-08  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests should trigger a spindump when WebContent process is unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=159827

        Reviewed by Daniel Bates.

        This change was spurred by a process hang which occurred between tests and did
        not produce a meaningful crashlog.

        * Scripts/webkitpy/port/driver.py:
        (Driver._check_for_driver_crash_or_unresponsiveness): Notify test controller when finished through stdin.

         * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort):
        (IOSSimulatorPort.sample_process): Attempt spindump, but use sample if spindump fails.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.sample_process): Attempt spindump, but use sample if spindump fails.

        * Scripts/webkitpy/port/mac_unittest.py: Changed expected values to match spindump calls, added specific spindump test.
        * Scripts/webkitpy/port/driver_unittest.py: Added dummy write function.

        * WebKitTestRunner/TestController.h:
        (WTR::TestController::usingServerMode): Added accessor for m_usingServerMode.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness): Wait for stdin before continuing when in server mode.

2016-08-07  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Reply block leaks if the remote object doesn’t call it
        https://bugs.webkit.org/show_bug.cgi?id=160642

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h: Declared a new method.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST): Added a test case that checks that the reply block is released even when it’s not
          called.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn doNotCallCompletionHandler:]): Implement new method by not
          calling the completion handler.

2016-08-07  Chris Dumez  <cdumez@apple.com>

        Write API test to cover crash fix in r204135
        https://bugs.webkit.org/show_bug.cgi?id=160587

        Reviewed by Darin Adler.

        Add API test to cover crash fix in r204135. This reproduces the crash
        by destroying a related WKWebView in the webViewWebContentProcessDidTerminate
        callback.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webViewWebContentProcessDidTerminate:]):
        (TEST):

2016-08-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r204226.

        Broke some API tests

        Reverted changeset:

        "Write API test to cover crash fix in r204135"
        https://bugs.webkit.org/show_bug.cgi?id=160587
        http://trac.webkit.org/changeset/204226

2016-08-06  Aakash Jain  <aakash_jain@apple.com>

        EWS Style Queue fails to process patches which fails validation
        https://bugs.webkit.org/show_bug.cgi?id=160632

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.validate): Add more information about validation failure.
        (StyleQueueTask.run): Pass the error details in the PatchIsNotValid exception.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_non_valid_patch): Add a unit test to test the above code path.

2016-08-06  Sam Weinig  <sam@webkit.org>

        WTF needs a variant implementation
        https://bugs.webkit.org/show_bug.cgi?id=160618

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Variant.cpp: Added.
        Add tests for the variant implementation.

2016-08-06  Chris Dumez  <cdumez@apple.com>

        Write API test to cover crash fix in r204135
        https://bugs.webkit.org/show_bug.cgi?id=160587

        Reviewed by Darin Adler.

        Add API test to cover crash fix in r204135. This reproduces the crash
        by destroying a related WKWebView in the webViewWebContentProcessDidTerminate
        callback.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webViewWebContentProcessDidTerminate:]):
        (TEST):

2016-08-05  Tim Horton  <timothy_horton@apple.com>

        run-api-tests should use a headed simulator
        https://bugs.webkit.org/show_bug.cgi?id=160611

        Reviewed by Sam Weinig.

        CADisplayLink doesn't work in a headless simulator, but is
        vital for the proper functioning of WebKit2 painting on iOS.
        So, we should not use a headless simulator.

        * Scripts/run-api-tests:
        Launch a simulator app, don't just boot the simulator.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        Re-enable a test that works now.

2016-08-05  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKRemoteObjectCoder doesn’t handle NSRange
        https://bugs.webkit.org/show_bug.cgi?id=160589

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h:
        (remoteObjectInterface): Fixed a mistake in the set of allowed classes in one of the reply
          blocks, which wasn’t caught because the test wasn’t run correctly.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST): Fixed the -selectionAndClickInformationForClickAtPoint:completionHandler: test, and
          added a test that sends over an NSRange.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn takeRange:completionHandler:]): Added. Calls the completion
          handler with the range‘s location and length.

2016-08-05  Enrica Casucci  <enrica@apple.com>

        Fixing tests failing after r204175.

        Unreviewed.

        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig:

2016-08-05  Enrica Casucci  <enrica@apple.com>

        Build fix after 204053.

        Unreviewed.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
        (-[MockContentFilterEnabler initWithCoder:]):
        (-[MockContentFilterEnabler dealloc]):

2016-08-05  Konstantin Tokarev  <annulen@yandex.ru>

        Print test name in "Last character read from DRT..." error message.
        https://bugs.webkit.org/show_bug.cgi?id=160559

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test):
        (Driver._read_first_block):
        (Driver._read_optional_image_block):
        (Driver._read_block):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_read_block):
        (DriverTest.test_read_binary_block):
        (DriverTest.test_read_base64_block):

2016-08-05  Commit Queue  <commit-queue@webkit.org>

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

        Caused layout test timeouts on Windows. (Requested by perarne
        on #webkit).

        Reverted changeset:

        "[Win] Unable to reliably run tests in parallel"
        https://bugs.webkit.org/show_bug.cgi?id=140914
        http://trac.webkit.org/changeset/204123

2016-08-04  Saam Barati  <sbarati@apple.com>

        Restore CodeBlock jettison code to jettison when a CodeBlock has been alive for a long time
        https://bugs.webkit.org/show_bug.cgi?id=151241

        Reviewed by Benjamin Poulain.

        * Scripts/run-jsc-stress-tests:

2016-08-04  Dean Johnson  <dean_johnson@apple.com>

        UI improvements to Flakiness Dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=153295

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/flakiness_dashboard.css:
        (td.options-container): Center text in most fields.
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (createBugHTML): Text/Grammar updates.
        (tableHeaders): Ditto.
        (htmlForSingleTestRow): Ditto.
        (headerForTestTableHtml): Ditto.
        * TestResultServer/static-dashboards/ui.js: Removed the "Group: " and "Test type: " headings.
        (ui.html.testTypeSwitcher): Deleted. Removes the "Group:" heading.

2016-08-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies script misses libxslt as build-dependency and some python libs for the run-benchmark script
        https://bugs.webkit.org/show_bug.cgi?id=160518

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_twisted): Twisted requires zope.interface.
        * gtk/install-dependencies:

2016-08-04  Alexey Proskuryakov  <ap@apple.com>

        Optimize bot watcher's dashboard a little
        https://bugs.webkit.org/show_bug.cgi?id=160515
        rdar://problem/26096900

        Reviewed by Lucas Forschler.

        Made re-sorting after loading an iteration more efficient.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._updateWithData):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.updateIterationPosition):

2016-08-04  Per Arne Vollan  <pvollan@apple.com>

        [Win] Unable to reliably run tests in parallel
        https://bugs.webkit.org/show_bug.cgi?id=140914

        Reviewed by Brent Fulgham.

        The cygpath utility function can fail badly when running with multiple DumpRenderTree
        processes. We can use string replacement to convert the Cygwin path to a Windows path
        instead.
 
        * Scripts/webkitpy/common/system/path.py:
        (cygpathFast):
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input):

2016-08-03  Aakash Jain  <aakash_jain@apple.com>

        Document instructions for increasing process and file limits
        https://bugs.webkit.org/show_bug.cgi?id=160528
        rdar://problem/24777576

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_child_processes):

2016-08-03  Anders Carlsson  <andersca@apple.com>

        Remove the Objective-C bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=160526

        Reviewed by Sam Weinig.

        * Scripts/run-bindings-tests:
        Update test.

2016-08-03  Tim Horton  <timothy_horton@apple.com>

        Revise a TestWebKitAPI comment to mention the actual underlying problem

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        Note that this is because of https://bugs.webkit.org/show_bug.cgi?id=160516

2016-08-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Benchmark test content-animation timeouts always
        https://bugs.webkit.org/show_bug.cgi?id=160057

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/benchmark_runner/data/plans/Skipped: Added.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (start):

2016-08-02  Nan Wang  <n_wang@apple.com>

        AX: Simulated touch events are not working on iOS
        https://bugs.webkit.org/show_bug.cgi?id=160395
        <rdar://problem/27633597>

        Reviewed by Chris Fleizach.

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

2016-08-02  Filip Pizlo  <fpizlo@apple.com>

        run-javascriptcore-tests should accept multiple --extra-tests
        https://bugs.webkit.org/show_bug.cgi?id=160486

        Reviewed by Saam Barati.
        
        We want to be able to pass --extra-tests multiple times, to supply an arbitrary number of extra
        test suites. This does it by using GetOpt::Long's array support.

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

2016-08-02  Enrica Casucci  <enrica@apple.com>

        Allow building with content filtering disabled.
        https://bugs.webkit.org/show_bug.cgi?id=160454

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-08-02  Brady Eidson  <beidson@apple.com>

        Removing IndexedDB WebsiteData can fail for some users.
        https://bugs.webkit.org/show_bug.cgi?id=160463

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobThenDelete.mm:

2016-08-01  Alex Christensen  <achristensen@webkit.org>

        _WKDownloadDelegate.didReceiveResponse should be called before decideDestinationWithSuggestedFilename
        https://bugs.webkit.org/show_bug.cgi?id=160437
        <rdar://problem/27578272>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (runTest):
        Add a boolean to make sure that didReceiveResponse is called before decideDestinationWithSuggestedFilename.

2016-08-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [Tools] The GDB backtrace report tool don't checks the gdb return code.
        https://bugs.webkit.org/show_bug.cgi?id=160414

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._wait_for_corefile):

2016-08-01  Youenn Fablet  <youenn@apple.com>

        Make wpt server generate its certificates in layout test results folder
        https://bugs.webkit.org/show_bug.cgi?id=160422

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files): Setting certificate folder to layout tests results directory.

2016-08-01  Jonathan Bedard  <jbedard@apple.com>

        Function Call on NULL Object
        https://bugs.webkit.org/show_bug.cgi?id=160325

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): Changed removeAllWebNotificationPermissions() call to static function call.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Made all web-notification functions static.

2016-08-01  Keith Miller  <keith_miller@apple.com>

        We should not keep the JavaScript tests inside the Source/JavaScriptCore/ directory.
        https://bugs.webkit.org/show_bug.cgi?id=160372

        Rubber stamped by Geoffrey Garen.

        This patch moves all the JavaScript tests from Source/JavaScriptCore/tests to
        a new top level directory, JSTests. Having the tests in the Source directory
        was both confusing an inconvenient for people that just want to checkout the
        source code of WebKit. Since there is no other obvious place to put all the
        JavaScript tests a new top level directory seemed the most sensible.

        * Scripts/import-test262-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/update-javascriptcore-test-res:

2016-07-31  Nan Wang  <n_wang@apple.com>

        AX: Add a check for touch event listener on iOS accessibility object
        https://bugs.webkit.org/show_bug.cgi?id=160388

        Reviewed by Chris Fleizach.

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

2016-07-30  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviewed: add myself to the reviewers list.

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

2016-07-29  Alexey Proskuryakov  <ap@apple.com>

        Undo r203939, and copy over a rule that clips the logos.

        Sierra wasn't the only logo without transparency.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:

2016-07-29  Alan Sien Wei Hshieh  <hshieh@apple.com>

        The Sierra asset at build.webkit.org/dashboard/images/Sierra*.png has a white background
        https://bugs.webkit.org/show_bug.cgi?id=160377

        Reviewed by Brian Weinstein.

        Update assets to remove the white background and use a transparent background instead.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra@2x.png:

2016-07-29  David Kilzer  <ddkilzer@apple.com>

        Ignore most check-webkit-style checks for ANGLE project
        <https://webkit.org/b/160333>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/style/checker.py: Ignore all checkers except:
        - No tabs.
        - No spaces at the end of lines.
        - No carriage returns (DOS line endings).

2016-07-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls are not displayed for some autoplaying videos at certain browser dimensions
        https://bugs.webkit.org/show_bug.cgi?id=160360
        <rdar://problem/27179484>

        Reviewed by Myles C. Maxfield.

        Adds two tests verifying that videos may be considered main content as long as they
        are large enough and cover a majority of the mainframe's viewport.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/full-size-autoplaying-video-with-audio.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/skinny-autoplaying-video-with-audio.html: Added.

2016-07-29  Mark Lam  <mark.lam@apple.com>

        Gardening: removed unused variable.

        Not reviewed.

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

2016-07-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add TestWebKitAPI support for interacting with media controls
        https://bugs.webkit.org/show_bug.cgi?id=160342
        <rdar://problem/27610246>

        Reviewed by Beth Dakin.

        Adds support for testing interaction with some media controls, as well as a basic test
        verifying that media control teardown after interaction does not result in a crash.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (-[WKWebView mouseDownAtPoint:]):
        (-[WKWebView performAfterLoading:]):
        (TestWebKitAPI::TEST):

2016-07-29  Jonathan Bedard  <jbedard@apple.com>

        Crash Log Clobbering on Unbound Crashes
        https://bugs.webkit.org/show_bug.cgi?id=160198
        <rdar://problem/27472618>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs): Fix header order.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.output_filename): Only remove file extension if it is clearly a file extension.

2016-07-29  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Update for contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=160294

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

2016-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove deprecated SPI for video inline / fullscreen controls
        https://bugs.webkit.org/show_bug.cgi?id=160318

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp): Deleted.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration): Deleted.

2016-07-28  Daniel Bates  <dabates@apple.com>

        [iOS] TestWebKitAPI bundle targets are not code signed
        https://bugs.webkit.org/show_bug.cgi?id=160328
        <rdar://problem/27409246>

        Reviewed by Andy Estes.

        Workaround <rdar://problem/27459890> by explicitly defining Xcode build settings
        CODE_SIGNING_ALLOWED and AD_HOC_CODE_SIGNING_ALLOWED to be YES so as to allow the
        the TestWebKitAPI bundle targets to be code signed when building for the iOS simulator.

        * TestWebKitAPI/Configurations/Base.xcconfig:

2016-07-28  Tim Horton  <timothy_horton@apple.com>

        Disable WebKit2.ResizeWithHiddenContentDoesNotHang for now

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (animatedResizeWebView):
        (TEST):
        This test times out only when run in the WebKit Testing simulator environment,
        but not in a fresh simulator. Disabling to keep the bots green while under investigation.

2016-07-28  Tim Horton  <timothy_horton@apple.com>

        Frequent animation lags when interacting with Safari (sidebar, tab switching, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=160289
        <rdar://problem/27553464>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm: Added.
        (-[AnimatedResizeNavigationDelegate _webView:renderingProgressDidChange:]):
        (-[AnimatedResizeWebView _endAnimatedResize]):
        (animatedResizeWebView):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/blinking-div.html: Added.
        Add two tests that ensure that hidden-content and animated resizes
        don't cause unnecessary synchronous waits. Only the hidden-content
        one fails before my patch, but it seemed reasonable to add both anyway.

2016-07-28  David Kilzer  <ddkilzer@apple.com>

        webkit-patch upload --suggest-reviewers shouldn't break in the presence of deleted or moved files
        <https://webkit.org/b/83342>

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.revisions_changing_file): Remove code to raise an exception
        when the file doesn't exist.  If a file was moved or renamed,
        then this caused the script to terminate, which was very
        frustrating when you wanted a list of reviewers.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_revisions_changing_file): Update test
        expectation to return an empty list of revisions.
        (test_create_patch_is_full_patch): Drive-by fix when running all
        webkitpy tests (including scm tests).
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.revisions_changing_file): Catch ScriptError exceptions and
        return an empty array of revisions if this occurs.

2016-07-28  Aakash Jain  <aakash_jain@apple.com>

        EWS error message "Error: * did not process patch" should include explanation
        https://bugs.webkit.org/show_bug.cgi?id=159903
        <rdar://problem/27410788>

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble): Display more detailed error message on bubbles when patch
        is not processed.
        * QueueStatusServer/handlers/processingtimesjson.py:
        (ProcessingTimesJSON._resultFromFinalStatus): Updated error message to match with rest
        of the code.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask.validate): Add more information about validation failure.
        (CommitQueueTask.run): Pass the error details in the PatchIsNotValid exception.
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        (EarlyWarningSystemTask.validate): Add more information about validation failure.
        (EarlyWarningSystemTask.run): Pass the error details in the PatchIsNotValid exception.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchIsNotValid.__init__): Add the failure_message argument.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.review_patch): Re-word the error message and include
        failure details.
        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.process_work_item): Same.
        (StyleQueue.review_patch): Same.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_non_valid_patch): Updated test-cases messages to match the above changes.

2016-07-27  Alexey Proskuryakov  <ap@apple.com>

        LayoutTestRelay should wait for WebKitTestRunnerApp installation to complete
        https://bugs.webkit.org/show_bug.cgi?id=160262

        Reviewed by Daniel Bates.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController installApp]):

2016-07-27  Ryan Haddad  <ryanhaddad@apple.com>

        Disable WebCoreNSURLSessionTest API tests on ios-simulator
        https://bugs.webkit.org/show_bug.cgi?id=160225

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-07-27  Miguel Gomez  <magomez@igalia.com>

        [GTK] Fix some video/canvas tests that should be passing
        https://bugs.webkit.org/show_bug.cgi?id=160023

        Reviewed by Carlos Garcia Campos.

        Add a platform identifier to the TestRunner's page user agent when the tests are run on the
        EFL or GTK platforms.

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformConfigureViewForTest):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformConfigureViewForTest):

2016-07-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [Tools] The built product doesn't contains the dwo files when DEBUG_FISSION is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=160247

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/built-product-archive:
        (createZip):
        (dirContainsdwo):
        (archiveBuiltProduct):

2016-07-26  Alex Christensen  <achristensen@webkit.org>

        Fix tests after r203743.
        https://bugs.webkit.org/show_bug.cgi?id=156947

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Reset the new boolean m_rejectsProtectionSpaceAndContinueForAuthenticationChallenges.

2016-07-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPhone] Playing a video on tudou.com plays only sound, no video
        https://bugs.webkit.org/show_bug.cgi?id=160178
        <rdar://problem/27535468>

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2016-07-26  Simon Fraser  <simon.fraser@apple.com>

        Allow LOG macros to be used outside the namespace, and other logging cleanup
        https://bugs.webkit.org/show_bug.cgi?id=160216

        Reviewed by Anders Carlsson.
        
        initializeLoggingChannelsIfNecessary -> initializeLogChannelsIfNecessary

        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2016-07-26  David Kilzer <ddkilzer@apple.com>

        Networking process crash due to missing -[WebCoreAuthenticationClientAsChallengeSender performDefaultHandlingForAuthenticationChallenge:] implementation
        https://bugs.webkit.org/show_bug.cgi?id=156947
        <rdar://problem/23325160>

        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (setRejectsProtectionSpaceAndContinueForAuthenticationChallengesCallback):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::rejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        (TestRunner::setRejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueNonLoadingScript):
        (WTR::TestRunner::setRejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setRejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        Add TestRunner.setRejectsProtectionSpaceAndContinueForAuthenticationChallenges to use for testing.

2016-07-26  David Kilzer  <ddkilzer@apple.com>

        check-for-exit-time-destructors should be usable outside Xcode
        <https://webkit.org/b/160195>

        Reviewed by Darin Adler.

        * Scripts/check-for-exit-time-destructors: Update to parse
        -h|--help switch, or to take one argument to a binary to check
        for exit time destructors on the command-line.  The clang
        compiler will find these at compile-time with the
        -Wexit-time-destructors switch, but this script will check for
        them after-the-fact.

2016-07-26  Lucas Forschler  <lforschler@apple.com>

        Test svn.webkit.org functionality after maintenance.

2016-07-25  Brady Eidson  <beidson@apple.com>

        Modern IDB: Make sure IndexedDB works from file:// url documents by default
        https://bugs.webkit.org/show_bug.cgi?id=153783

        Reviewed by Alex Christensen.

        Previously, to grant IndexedDB access to file:// urls for testing purposes, 
        we had to call the SPI [WKWebViewConfiguration _setAllowUniversalAccessFromFileURLs:].
        
        As of https://trac.webkit.org/changeset/203695 this is no longer required.
        
        Change the relevant API tests to make sure this continues to be no longer required.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobThenDelete.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:

2016-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls should not be displayed for a video until it starts playing
        https://bugs.webkit.org/show_bug.cgi?id=160092
        <rdar://problem/26986673>

        Reviewed by Beth Dakin.

        Verify that multiple videos do or don't show the media controller depending on whether videos
        are playing. Also tweaks an existing API test (VideoControlsManagerSingleLargeVideo) that was
        passing because we were always showing media controls for large videos with audio, even if they
        had not played back yet. This change ensures that large videos with audio show media controls
        only after they begin to play back, and not by virtue of being large enough for main content.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html: Added.

2016-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls on apple.com don't disappear when movie finishes playing
        https://bugs.webkit.org/show_bug.cgi?id=160068
        <rdar://problem/26668526>

        Reviewed by Darin Adler.

        Adds new API tests. Please see WebCore ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (-[MediaPlaybackMessageHandler initWithWKWebView:finalMessageString:]):
        (-[MediaPlaybackMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        (-[DidPlayMessageHandler initWithWKWebView:]): Deleted.
        (-[DidPlayMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-hides-controls-after-seek-to-end.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-after-ending.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-to-beginning-and-play-after-ending.html: Added.

2016-07-25  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, fix test-webkitpy after r203674.

        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py:
        (GDBCrashLogGeneratorTest.test_generate_crash_log):

2016-07-24  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, forgot to commit this file in r203674.

        * Scripts/process-linux-coredump: Added.
        (main):

2016-07-25  Philippe Normand  <pnormand@igalia.com>

        Improve GDB backtrace generation for GTK/EFL
        https://bugs.webkit.org/show_bug.cgi?id=128928

        Reviewed by Carlos Garcia Campos.

        The PID of the crashed process is now correctly supplied to the
        crash log reporter. The kernel core_pattern needs to be updated
        after this change to something like:

        echo "|/home/phil/WebKit/Tools/Scripts/process-linux-coredump /tmp/core-pid_%p.dump" > /proc/sys/kernel/core_pattern

        * Scripts/process-linux-coredump: Added.
        (main): Minimal python script reading coredump data on stdin and writing it to a file in /tmp/.
        * Scripts/webkitpy/port/efl.py:
        (EflPort._get_crash_log): Supply path of the process-linux-coredump script.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._get_crash_log): Ditto.
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator.__init__): New argument for supplying the path of a coredump processor script.
        (GDBCrashLogGenerator.generate_crash_log): Update error message, the core_pattern should now be set to pipe coredumps to a script.
        (GDBCrashLogGenerator): Deleted.
        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py:
        (GDBCrashLogGeneratorTest.test_generate_crash_log): Update test expectations.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::networkProcessDidCrash): Supply PID of crash process.
        (WTR::TestController::databaseProcessDidCrash): Ditto.
        (WTR::TestController::processDidCrash): Ditto.

2016-07-23  Youenn Fablet  <youenn@apple.com>

        WPT stash server should be kept running when launching wpt server
        https://bugs.webkit.org/show_bug.cgi?id=160052

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (main): waiting to read stdin while stash server is started.

2016-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls should be displayed for media in media documents
        https://bugs.webkit.org/show_bug.cgi?id=160104
        <rdar://problem/27438936>

        Reviewed by Myles C. Maxfield.

        Verifies that even a small video with audio in a media document gets media controls.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):

2016-07-22  Michael Saboff  <msaboff@apple.com>

        REGRESSION(203616): no FTL testing was inadvertently removed
        https://bugs.webkit.org/show_bug.cgi?id=160100

        Rubber-stamped by Filip Pizlo.

        Added runNoFTL back into the set of tests we run on FTL enabled platforms.
        Renamed runLayoutTestNoFTL to runLayoutTestDefault.  Restructured the test
        logic for the runLayout and runNoisy variants to match the run test logic,
        that is we always invoke runXXXDefault and invoke runXXXNoFTL for FTL
        enabled platforms.

        * Scripts/run-jsc-stress-tests:

2016-07-22  Brady Eidson  <beidson@apple.com>

        Removing IndexedDatabases that have stored blobs doesn't remove the blob files.
        https://bugs.webkit.org/show_bug.cgi?id=160089

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobThenDelete.mm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobToBeDeleted.html: Added.

2016-07-22  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] Improved exclusion patterns in make-dist.py manifest.
        https://bugs.webkit.org/show_bug.cgi?id=160094

        Reviewed by Michael Catanzaro.

        * gtk/manifest.txt.in:
        Exclude Platform*.cmake files for more ports.
        Removed obsolete .gyp and .pro.user patterns.
        Exclude 'Configurations' and 'spi' directories.
        Exclude CMakeLists.txt.user (Qt Creator IDE).

2016-07-22  Michael Saboff  <msaboff@apple.com>

        Don't run FTL related JSC stress tests on non-FTL platforms
        https://bugs.webkit.org/show_bug.cgi?id=160033

        Reviewed by Mark Lam.

        Added check for running tests on platforms that don't enable FTL to not run FTL tests.
        Refactored several of the runXXX test methods to always runXXXDefault and made those
        runXXXDefault to pass FTL_OPTIONS.  For platforms that don't enable the FTL, FTL_OPTIONS
        doesn't cause a problem.

        * Scripts/run-jsc-stress-tests:

2016-07-22  Per Arne Vollan  <pvollan@apple.com>

        IWebView::mainFrame crashes if called after IWebView::close
        https://bugs.webkit.org/show_bug.cgi?id=32868

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp:
        (TestWebKitAPI::TEST_F): Added test.

2016-07-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Enable threaded compositor by default
        https://bugs.webkit.org/show_bug.cgi?id=160079

        Reviewed by Žan Doberšek.

        * Scripts/webkitperl/FeatureList.pm:

2016-07-22  Youenn Fablet  <youenn@apple.com>

        run-builtins-generator-tests should be able to test WebCore builtins wrapper with more than one file
        https://bugs.webkit.org/show_bug.cgi?id=159921

        Reviewed by Brian Burg.

        Updated builtin generator test runner to generate WebCore wrapper files based on all WebCore valid separate files.

        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.generate_from_js_builtins): Passing a list of builtin files to the script.
        (BuiltinsGeneratorTests):
        (BuiltinsGeneratorTests.single_builtin_test): Added to handle the case of single builtin generation.
        (BuiltinsGeneratorTests.wrappers_builtin_test): Added to handle the case of WebCore wrappers builtin generation.
        (BuiltinsGeneratorTests.run_test): Helper routine to run a test in reset mode or normal check mode.
        (BuiltinsGeneratorTests.run_tests): Updated to add WebCore wrappers builtin generation test.

2016-07-21  Dan Bernstein  <mitz@apple.com>

        [Mac] webkitdirs.pm contains unused code to support outdated OS X and Xcode versions
        https://bugs.webkit.org/show_bug.cgi?id=160072

        Reviewed by Andy Estes.

        * Scripts/webkitdirs.pm:
        (readXcodeUserDefault): Changed to take a defaults key rather than a suffix. Removed support
          for old Xcode versions.
        (determineBaseProductDir): Removed support for old Xcode versions. Updated for the change
          to readXcodeUserDefault.
        (debugger): Deleted. This was only used for Darwin, where LLDB is now the only supported
          debugger.
        (determineDebugger): Ditto.
        (checkRequiredSystemConfig): Updated to require at least OS X Yosemite v10.10.5 and Xcode
          7.0.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Removed --use-gdb and --use-lldb
          switches.
        (execMacWebKitAppForDebugging): Removed support for GDB.

2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for deprecated SPI inlineMediaPlaybackRequiresPlaysInlineAttribute
        https://bugs.webkit.org/show_bug.cgi?id=160066

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp): Deleted.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration): Deleted.

2016-07-21  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Apps using WKWebView will crash if they set the scroll view's delegate and don't nil it out later
        https://bugs.webkit.org/show_bug.cgi?id=159980
        rdar://problem/27450825

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegateCrash.mm: Added.
        (-[TestDelegateForScrollView dealloc]): Update delegateIsDeallocated to true so that we can tell
        when our delegate has hit -dealloc.
        (TestWebKitAPI::TEST): Ensure that after an object has been set as the scroll view's delegate,
        and has then been deallocated, that the scroll view's delegate is nil and the deallocated delegate
        will not be messaged.

2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Follow-up patch to r203520
        https://bugs.webkit.org/show_bug.cgi?id=159967
        <rdar://problem/26964090>

        Unreviewed.

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

2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPhone] Playing a video on tudou.com plays only sound, no video
        https://bugs.webkit.org/show_bug.cgi?id=159967
        <rdar://problem/26964090>

        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.

        Migrate tests to use new SPI.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2016-07-21  Csaba Osztrogonác  <ossy@webkit.org>

        Clarify testing mode names in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=160021

        Reviewed by Mark Lam.

        Default should mean really default, not default with disabled FTL, renamed
        - runMozillaTestDefault to runMozillaTestNoFTL
        - runMozillaTestDefaultFTL to runMozillaTestDefault
        - runDefault to runNoFTL
        - runDefaultFTL to runDefault
        - runLayoutTestDefault to runLayoutTestNoFTL
        - runLayoutTestDefaultFTL to runLayoutTestDefault
        - runNoisyTestDefault to runNoisyTestNoFTL
        - runNoisyTestDefaultFTL to runNoisyTestDefault

        * Scripts/run-jsc-stress-tests:

2016-07-21  Yongjun Zhang  <yongjun_zhang@apple.com>

        WebBackForwardList's currentIndex could get out of bounds when filtering items.
        https://bugs.webkit.org/show_bug.cgi?id=159986

        Add a test to verify filtering out 2 items from a 3-item list will set the currentIndex
        to 0.

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKBackForwardList.mm: Added.
        (-[WKBackForwardListTestNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2016-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web view background colors don't work in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=159455

        Reviewed by Michael Catanzaro.

        Set always RGBA visual to the view widget when setting a background color.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_set_background_color):

2016-07-20  Youenn Fablet  <youenn@apple.com>

        Bots should run built-ins generator tests
        https://bugs.webkit.org/show_bug.cgi?id=159971

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunBuiltinsTests): New step to run built-in generator tests.
        (TestFactory.__init__): Adding an additional step for bultin generator tests.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Rebasing expectations.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js: Adding additional step for proper display.

2016-07-20  Aakash Jain  <aakash_jain@apple.com>

        Revert temporary fix r203417
        https://bugs.webkit.org/show_bug.cgi?id=160001

        Reviewed by Alexey Proskuryakov.

        * EWSTools/start-queue-mac.sh: Revert the temporary fix.

2016-07-20  Aakash Jain  <aakash_jain@apple.com>

        REGRESSION(r148588): ews classes might get garbage collected
        https://bugs.webkit.org/show_bug.cgi?id=159990

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/__init__.py: Store the loaded ews classes
        in a variable so that they do not get garbage collected.

2016-07-20  Jeremy Jones  <jeremyj@apple.com>

        Add API test for layout constraints after exit fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=159900

        Reviewed by Jon Lee.

        Added Fullscreen.LaytoutConstraints API test. 
        Tests fix from https://bugs.webkit.org/show_bug.cgi?id=159731

        This test compares layout constraints on the web view before and after fullscreen to make sure 
        they are preserved.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenLayoutConstraints.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenLayoutConstraints.mm: Added.
        (-[FullscreenStateChangeMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):

2016-07-20  Ryan Haddad  <ryanhaddad@apple.com>

        Disable two failing API tests.

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/mac/CandidateTests.mm:
        (TestWebKitAPI::TEST):

2016-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed iOS build fix.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm: Only import Carbon.h on Mac.

2016-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls don't appear when pausing a small autoplaying video
        https://bugs.webkit.org/show_bug.cgi?id=159972
        <rdar://problem/27180657>

        Reviewed by Beth Dakin.

        Adds a new test that verifies media controls show up when pausing a small autoplayed video. Also adds mechanisms
        for simulating basic user interaction in VideoControlsManager.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (-[WKWebView mouseDownAtPoint:]):
        (-[DidPlayMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[OnLoadMessageHandler initWithWKWebView:handler:]):
        (-[OnLoadMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/autoplaying-video-with-audio.html: Added.

2016-07-20  Per Arne Vollan  <pvollan@apple.com>

        [Win] MathML fonts are not found.
        https://bugs.webkit.org/show_bug.cgi?id=159920

        Reviewed by Alex Christensen.

        When looking up a font in the registry, use the /v option of the Windows 'reg query' command to query
        for a specific registry key value.

        * Scripts/webkitdirs.pm:
        (fontExists):

2016-07-20  Joseph Pecoraro  <pecoraro@apple.com>

        Improve prepare-ChangeLog for @media blocks
        https://bugs.webkit.org/show_bug.cgi?id=159907

        Reviewed by Timothy Hatcher.

        * Scripts/prepare-ChangeLog:
        (get_selector_line_ranges_for_css):
        Get a range for @media blocks just like a selector.
            Start Line = line with '{'
            End line = line with '}'
            Name = "@media ..."

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests_warning-expected.txt:
        Improved error messages for unbalanced portions.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests.css:
        (.media-query::before):
        (@media only screen and (max-width: 980px)):
        (.media-query a):
        (@media (-webkit-min-device-pixel-ratio: 2)):
        (.both a):
        (.both b):
        (.media-query b):
        (.media-query::after):

2016-07-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix expectedFailErrorHandler in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=159811

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2016-07-20  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Mac cmake buildfix after r203426. Just for fun.

        * TestWebKitAPI/PlatformMac.cmake:

2016-07-19  Filip Pizlo  <fpizlo@apple.com>

        The default testing mode should not involve disabling the FTL JIT
        https://bugs.webkit.org/show_bug.cgi?id=159929

        Rubber stamped by Mark Lam and Saam Barati.
        
        It used to be the case that most actively maintained ports did not have the FTL JIT enabled.
        Heck, for most of the FTL's initial development, it wasn't enabled anywhere. So, testing the
        FTL was not the default. You had to enable it with an option.
        
        For some reason we have kept this arrangement even though the FTL JIT is now the default on
        all of the major ports. This has become a serious pain. For example, it's useful to be able
        to say that a test should only run in the default config that is representative of what a
        normal user would see if they ran JSC. Clearly, this would be a config that does not
        explicitly disable the FTL JIT on the command line. However, if you try to specify this then
        your test won't run at all if the --ftl-jit option is not passed. That's dangerous!
        
        So, this change gets rid of all of this logic. I think it's better to get rid of it then to
        try to fix it, because:
        
        - I don't know what the fix would look like. Presumably it would ensure that ports that don't
          have the FTL enabled never run any tests that explicitly disable the FTL, since that
          doesn't do anything. The code is not really structured to allow this.
        
        - It benefits a minority of clients. Three build bots run tests in a config that has the FTL
          disabled in testing. On the other hand there are already build bots that do FTL tests
          despite having the FTL disabled by virtue of being a 32-bit platform. So, maybe rather than
          preserving this broken feature, we should create something that (a) acknowledges the fact
          that the FTL is the default on those platforms that support it and (b) avoids running
          no-ftl tests on precisely those platforms that don't have FTL.
        
        - To the extent that some bots benefited from disabling FTL tests, they were doing it by
          relying on a feature that was never meant to stick around. The FTL JIT is meant to be the
          default configuration. Disabling the FTL JIT is the non-default. So, we shouldn't be
          pretending that the FTL JIT is not the default just because some bots used that as an
          optimization.
        
        This change allows me to speed up some debug tests and paint some bots green.

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

2016-07-19  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r203426.
        https://bugs.webkit.org/show_bug.cgi?id=159949

        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (TEST):
        If there is website data already on disk, the initial count after putting the AppCache data in place will not be exactly 1.
        This is no problem.  We want to verify that it is a nonzero number and that it decrements by one when we remove the 1 AppCache data.

2016-07-19  Andy Estes  <aestes@apple.com>

        Move WebKitErrorFrameLoadBlockedByContentFilter from WebKitErrors.h to WebKitErrorsPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=159956

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm: Included WKErrorRef.h.
        (-[LoadAlternateNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        Used kWKErrorCodeFrameLoadBlockedByContentFilter instead of WebKitErrorFrameLoadBlockedByContentFilter.
        * TestWebKitAPI/Tests/mac/ContentFiltering.mm: Included WebKitErrorsPrivate.h instead of WebKitErrors.h.

2016-07-19  Alex Christensen  <achristensen@webkit.org>

        Add regression test for r203392
        https://bugs.webkit.org/show_bug.cgi?id=159949

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (fileSize):
        (swizzledBundleIdentifierWebBookmarksD):
        (defaultApplicationCacheDirectory):
        (TEST):
        (swizzledBundleIdentifierMobileSafari): Deleted.
        This actually tests that webbookmarksd uses the path quirk in WebsiteDataStore::defaultApplicationCacheDirectory.
        I wanted to verify that it uses the same path as MobileSafari, but swizzling out the bundleIdentifier twice caused
        problems with the static bools that are set once in RuntimeApplicationChecks.mm.

2016-07-19  Alex Christensen  <achristensen@webkit.org>

        Add regression test for r203392
        https://bugs.webkit.org/show_bug.cgi?id=159949

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ApplicationCache.db: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ApplicationCache.db-shm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ApplicationCache.db-wal: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (TEST):
        (fileSize):
        (swizzledBundleIdentifierMobileSafari):
        (swizzledBundleIdentifierWebBookmarksD):
        (defaultApplicationCacheDirectory):
        * TestWebKitAPI/cocoa/InstanceMethodSwizzler.h: Copied from TestWebKitAPI/mac/InstanceMethodSwizzler.h.
        * TestWebKitAPI/cocoa/InstanceMethodSwizzler.mm: Copied from TestWebKitAPI/mac/InstanceMethodSwizzler.mm.
        * TestWebKitAPI/mac/InstanceMethodSwizzler.h: Removed.
        * TestWebKitAPI/mac/InstanceMethodSwizzler.mm: Removed.

2016-07-19  Keith Miller  <keith_miller@apple.com>

        Test262 should have a file with the revision and url
        https://bugs.webkit.org/show_bug.cgi?id=159937

        Reviewed by Mark Lam.

        The import script should update the information from
        the path to the test262 repository it gets.

        * Scripts/import-test262-tests:

2016-07-19  Alexey Proskuryakov  <ap@apple.com>

        Temporary workaround for iOS EWS failing after the fix for bug 159539.
        To be deleted once the root cause is found and addressed.

        * EWSTools/start-queue-mac.sh:

2016-07-19  Frederic Wang  <fwang@igalia.com>

        [win] Fixup the register name for STIX Math and Latin Modern Math

        Unreviewed follow-up of r203406

        * Scripts/webkitdirs.pm:
        (checkInstalledTools):

2016-07-19  Frederic Wang  <fwang@igalia.com>

        [win] Update the list of MathML fonts
        https://bugs.webkit.org/show_bug.cgi?id=156838

        The set of recommended math fonts is now described at
        https://trac.webkit.org/wiki/MathML/Fonts
        We update the Perl script to use the latest list of fonts.

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (checkInstalledTools):

2016-07-19  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test fast/scrolling/overflow-scroll-past-max.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=159342

        Reviewed by Darin Adler.

        Implement required functions in event sender.

        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/EventSender.cpp:
        (monitorWheelEvents): Added.
        (callAfterScrollingCompletes): Added.

2016-07-19  Youenn Fablet  <youenn@apple.com>

        Add new aliases to http test server
        https://bugs.webkit.org/show_bug.cgi?id=159878

        Reviewed by Darin Adler.

        Adding testharness.css, testharness.js and testharnessreport.js new aliases to http test servers.
        Adding explicitly these links to perl script.
        Extracting default alias in an aliases.json file.
        Reading that file from python scripts to initialize aliases from that file.

        Python script changes covered by unit tests and changed layout test.

        * Scripts/webkitperl/httpd.pm:
        (getDefaultConfigForTestDirectory): Adding 3 new aliases
        * Scripts/webkitpy/layout_tests/servers/aliases.json: Added.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Setting upper class tests_dir member if needed and according constructor parameter.
        Adding -c directives for each alias.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        (TestLayoutTestApacheHttpd.test_start_cmd): Adding aliases.json mock-up file.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__): Setting upper class tests_dir member if needed and according constructor parameter.
        Adding alias directive for each alias.
        (Lighttpd._prepare_config):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.__init__): Adding tests_dir member with a default value being layout tests directory.
        (HttpServerBase.aliases): Computing of alias from the json file, paths to the real files being relative to
        layout tests directory.
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd): Adding aliases.json mock-up file and updating test expectation.
        (TestHttpServer.test_win32_start_and_stop): Adding aliases.json mock-up file.

2016-07-18  Aakash Jain  <aakash_jain@apple.com>

        EWS console logs doesn't go to log file
        https://bugs.webkit.org/show_bug.cgi?id=159539
        <rdar://problem/24464570>

        Reviewed by David Kilzer.

        * Scripts/webkitpy/common/system/logutils.py:
        (configure_logger_to_log_to_file): Added method to configure the logger to log to file.
        (FileSystemHandler): Added class which uses logging.FileHandler as base class and supports writing
        to filesystem. It also supports passing MockFilesystem.
        (FileSystemHandler.__init__): Initialize the class and calls base class __init__.
        (FileSystemHandler._open): Overrides the base class _open method to use filesystem object.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (AbstractEarlyWarningSystemTest.test_failing_tests_message): Added MockHost() parameter.
        (_test_ews): Same.
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.begin_work_queue): Configure the logger to log to file.
        (AbstractQueue._log_directory): Using filesystem object instead of os.
        (AbstractQueue.queue_log_path): Same.
        (AbstractQueue.__init__): Passed host parameter.
        (PatchProcessingQueue.__init__): Same.
        (CommitQueue.__init__): Same.
        (AbstractReviewQueue.__init__): Same.
        (StyleQueue.__init__): Same.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (TestCommitQueue): Passed MockHost() as host.
        (TestCommitQueue.__init__): Same.
        (TestQueue.__init__): Same.
        (TestReviewQueue.__init__): Same.
        (TestFeederQueue.__init__): Same.
        (AbstractPatchQueueTest.test_next_patch): Same.
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch): Same.
        (test_commit_queue_failure): Same.
        (MockCommitQueueTask.results_from_patch_test_run): Same.
        (test_rollout_lands): Same.
        (test_non_valid_patch): Same.
        (test_auto_retry): Same.
        (test_style_queue_with_watch_list_exception): Same.

2016-07-02  Filip Pizlo  <fpizlo@apple.com>

        WTF::Lock should be fair eventually
        https://bugs.webkit.org/show_bug.cgi?id=159384

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:

2016-07-17  Sam Weinig  <sam@webkit.org>

        [WebKit API] Add SPI to track multiple navigations caused by a single user gesture
        <rdar://problem/26554137>
        https://bugs.webkit.org/show_bug.cgi?id=159856

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        Add basic window.open implementation.

        (-[WK2BrowserWindowController webView:decidePolicyForNavigationAction:decisionHandler:]):
        Add basic navigation policy implementation which implements a rule where a user gesture is only allowed
        to open a single non-web URL, all others are dropped.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/open-multiple-external-url.html: Added.
        Add API for the new SPI.

2016-07-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Enable test262 module tests
        https://bugs.webkit.org/show_bug.cgi?id=159854

        Reviewed by Saam Barati.

        Use --module-file instead.

        * Scripts/run-jsc-stress-tests:

2016-07-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r203318.

        Regressed most JS Benchmarks on MacBook Air by ~2% (7% on
        SunSpider)

        Reverted changeset:

        "[JSC] Change some parameters based on a random search"
        https://bugs.webkit.org/show_bug.cgi?id=158514
        http://trac.webkit.org/changeset/203318

2016-07-16  Chris Dumez  <cdumez@apple.com>

        Add move constructor / assignment operator to ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=159837

        Reviewed by Darin Adler.

        Add API tests.

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

2016-07-15  Benjamin Poulain  <bpoulain@apple.com>

        [JSC] Change some parameters based on a random search
        https://bugs.webkit.org/show_bug.cgi?id=158514

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2016-07-15  Jon Davis  <jond@apple.com>

        Changed the start page URL for WebKit Nightly builds.
        https://bugs.webkit.org/show_bug.cgi?id=159816

        Reviewed by Timothy Hatcher.

        * WebKitLauncher/start.html:

2016-07-15  Per Arne Vollan  <pvollan@apple.com>

        Uninitialized variable in DIBPixelData can cause a dangerous memory write
        https://bugs.webkit.org/show_bug.cgi?id=159414

        Reviewed by Brent Fulgham.

        Add test to check that DIBPixelData::setRGBABitmapAlpha does not cause a crash
        when the HDC parameter is invalid.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/win/DIBPixelData.cpp: Added.
        (TestWebKitAPI::TEST):

2016-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add basic tabs support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=159803

        Reviewed by Sergio Villar Senin.

        It's quite common to have issues with web views loaded in secondary tabs, and we need to use an external browser
        like epiphany to debug those issues. It would be a lot easier to work on those bugs if we could use the MiniBrowser.

        * MiniBrowser/gtk/BrowserTab.c: Added.
        (titleChanged):
        (isLoadingChanged):
        (decidePolicy):
        (removeChildIfInfoBar):
        (loadChanged):
        (createInfoBarQuestionMessage):
        (tlsErrorsDialogResponse):
        (loadFailedWithTLSerrors):
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (colorChooserRGBAChanged):
        (popoverColorClosed):
        (colorChooserRequestFinished):
        (runColorChooserCallback):
        (inspectorOpenedInWindow):
        (inspectorClosed):
        (browserTabSetProperty):
        (browserTabFinalize):
        (browser_tab_init):
        (browserTabConstructed):
        (browser_tab_class_init):
        (getInternalURI):
        (browser_tab_new):
        (browser_tab_get_web_view):
        (browser_tab_load_uri):
        (browser_tab_get_title_widget):
        (browser_tab_set_status_text):
        (browser_tab_toggle_inspector):
        (browser_tab_start_search):
        (browser_tab_stop_search):
        (browser_tab_add_accelerators):
        (fullScreenMessageTimeoutCallback):
        (browser_tab_enter_fullscreen):
        (browser_tab_leave_fullscreen):
        * MiniBrowser/gtk/BrowserTab.h: Added.
        * MiniBrowser/gtk/BrowserWindow.c:
        (getExternalURI):
        (browserWindowSetStatusText):
        (reloadOrStopCallback):
        (goBackCallback):
        (goForwardCallback):
        (settingsCallback):
        (webViewURIChanged):
        (browserWindowHistoryItemActivated):
        (browserWindowUpdateNavigationActions):
        (webViewCreate):
        (webViewEnterFullScreen):
        (webViewLeaveFullScreen):
        (webViewDecidePolicy):
        (browserWindowCanZoomIn):
        (browserWindowCanZoomOut):
        (browserWindowZoomIn):
        (browserWindowZoomOut):
        (scrollEventCallback):
        (faviconChanged):
        (webViewIsLoadingChanged):
        (defaultZoomCallback):
        (searchCallback):
        (newTabCallback):
        (toggleWebInspector):
        (reloadPage):
        (reloadPageIgnoringCache):
        (stopPageLoad):
        (loadHomePage):
        (editingCommandCallback):
        (insertImageCommandCallback):
        (insertLinkCommandCallback):
        (browserWindowSetupEditorToolbar):
        (browserWindowSwitchTab):
        (browserWindowTabAddedOrRemoved):
        (browser_window_init):
        (browserWindowConstructed):
        (browserWindowSaveSession):
        (browserWindowDeleteEvent):
        (browser_window_new):
        (browser_window_append_view):
        (browser_window_load_uri):
        (browser_window_load_session):
        (browser_window_set_background_color):
        (resetStatusText): Deleted.
        (activateUriEntryCallback): Deleted.
        (webViewTitleChanged): Deleted.
        (resetEntryProgress): Deleted.
        (browserWindowCreateBackForwardMenu): Deleted.
        (webViewReadyToShow): Deleted.
        (webViewLoadFailed): Deleted.
        (webViewMouseTargetChanged): Deleted.
        (browserWindowUpdateZoomActions): Deleted.
        (webViewZoomLevelChanged): Deleted.
        (updateUriEntryIcon): Deleted.
        (zoomInCallback): Deleted.
        (zoomOutCallback): Deleted.
        (toggleFullScreen): Deleted.
        (browserWindowEditingCommandToggleButtonSetActive): Deleted.
        (browserWindowFinalize): Deleted.
        (browser_window_class_init): Deleted.
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/gtk/main.c:
        (createBrowserTab):
        (aboutURISchemeRequestCallback):
        (main):
        (parseBackgroundColor): Deleted.

2016-07-14  Alex Christensen  <achristensen@webkit.org>

        Allow RefPtrs of const RefCounted types
        https://bugs.webkit.org/show_bug.cgi?id=158269

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::ConstRefCounted::create):
        (TestWebKitAPI::returnConstRefCountedRef):
        (TestWebKitAPI::returnRefCountedRef):

2016-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Test WTF.StringViewIterators is crashing since r203119
        https://bugs.webkit.org/show_bug.cgi?id=159710

        Reviewed by Darin Adler.

        There are two problems in the test case added in r203119. First is that it's testing
        StringView::CodeUnits::Iterator instead of StringView::CodePoints::Iterator, and second is that
        StringView::codePoints() returns a temporary, so the iterator created from the temporary ends up pointing to a
        const reference to the string view member of the deleted CodePoints object.

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

2016-07-13  Daniel Bates  <dabates@apple.com>

        [iOS] Copy WebKitTestRunnerInjectedBundle.bundle into PlugIns subdirectory and code sign it
        https://bugs.webkit.org/show_bug.cgi?id=159738
        <rdar://problem/27304649>

        Reviewed by Dan Bernstein.

        The bundle WebKitTestRunnerInjectedBundle.bundle contains executable code and should be
        code signed if applicable. We should also copy this bundle into the PlugIns subdirectory
        of the WebKitTestRunnerApp.app bundle instead of the top-level bundle directory as the
        PlugIns subdirectory is the directory where loadable bundles of an app are expected to live.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::initializeInjectedBundlePath): Modified code to look for the
        bundle WebKitTestRunnerInjectedBundle.bundle in the plugin directory of the main bundle.

2016-07-13  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2016-07-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r202953): Clicking on input[type=file] doesn't open a file picker
        https://bugs.webkit.org/show_bug.cgi?id=159686

        Reviewed by Chris Dumez.

        Added a code to print "OPEN FILE PANEL" in the text when runOpenPanel is called in the UI delegate.

        * WebKitTestRunner/TestController.cpp:
        (WTR::runOpenPanel):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2016-07-13  Beth Dakin  <bdakin@apple.com>

        Add more candidate tests
        https://bugs.webkit.org/show_bug.cgi?id=159730

        Reviewed by Tim Horton.

        This patch re-names ViewWithEditableAreaLeak.mm to CandidateTests.mm and adds 
        two new tests to that file.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/focus-inputs.html: Added.
        * TestWebKitAPI/Tests/mac/CandidateTests.mm: Copied from TestWebKitAPI/Tests/mac/ViewWithEditableAreaLeak.mm.
        (-[CandidateRequestFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/ViewWithEditableAreaLeak.mm: Removed.

2016-07-13  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] spinbutton-crash.html fails
        https://bugs.webkit.org/show_bug.cgi?id=159723

        Reviewed by Chris Fleizach.

        Implement support for AXDecrementButton and AXIncrementButton in
        ATK's AccessibilityUIElement::uiElementAttributeValue().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::uiElementAttributeValue):

2016-07-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EFL] [GTK] Enable back crypto subtle on development builds.
        https://bugs.webkit.org/show_bug.cgi?id=159260

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm:

2016-07-12  Mark Lam  <mark.lam@apple.com>

        We should use different stack limits for stack checks from JS and host code.
        https://bugs.webkit.org/show_bug.cgi?id=159442
        <rdar://problem/26889188>

        Reviewed by Geoffrey Garen.

        In http://trac.webkit.org/r203067, we limited the amount of stack that tests will
        run with to keep stack overflow tests sane.  Turns out, we also need to teach the
        LayoutTestRelay to pass env vars over to the iOS simulator.  This is needed in
        order to keep the js/regress-139548.html test happy with this patch.

        Also fixed up run_webkit_tests.py to explicitly pass an int size value for the
        JSC_maxPerThreadStackUsage option.  Otherwise, it will pass a float value.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController _environmentVariables]):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2016-07-12  Filip Pizlo  <fpizlo@apple.com>

        platformUserPreferredLanguages on Mac should not try to put the region into the language
        https://bugs.webkit.org/show_bug.cgi?id=159693

        Rubber stamped by Alexey Proskuryakov.
        
        Revert the test change in r200105.

        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm:
        (TestWebKitAPI::languageForSystemLanguage):

2016-07-12  Chris Dumez  <cdumez@apple.com>

        [WK2] Protect against bad database data in LocalStorageDatabase::importItems()
        https://bugs.webkit.org/show_bug.cgi?id=159663
        <rdar://problem/18995873>

        Reviewed by Benjamin Poulain.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.localstorage: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.localstorage-shm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.mm: Added.
        (-[LocalStorageNullEntriesMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

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

        Relax ordering requirements on StringView::CodePoints iterator
        https://bugs.webkit.org/show_bug.cgi?id=159609

        Reviewed by Darin Adler.

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

2016-07-12  Youenn Fablet  <youenn@apple.com>

        Fixing Tools/Scripts/run-builtins-generator-tests after https://trac.webkit.org/changeset/202975
        https://bugs.webkit.org/show_bug.cgi?id=159564

        Reviewed by Brian Burg.

        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.generate_from_js_builtins): Changing --with-wrapper-files option to --wrappers.

2016-07-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove ENABLE_CSS3_TEXT_LINE_BREAK flag
        https://bugs.webkit.org/show_bug.cgi?id=159671

        Reviewed by Csaba Osztrogonác.

        ENABLE_CSS3_TEXT_LINE_BREAK feature was implemented without guards.
        https://bugs.webkit.org/show_bug.cgi?id=89235

        So this guard can be removed in build scripts.

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

2016-07-11  Jason Marcell  <jmarcell@apple.com>

        SVN.create_patch should find svn-create-patch relative to the WebKit root.
        https://bugs.webkit.org/show_bug.cgi?id=159652

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.create_patch): Use WebKitFinder to find the WebKit checkout so that we can find svn-create-patch relative to it.

2016-07-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement grapheme cluster iterator on StringView
        https://bugs.webkit.org/show_bug.cgi?id=159598

        Reviewed by Anders Carlsson.

        This is in preparation for honoring the second argument to FontFaceSet.load().

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::compareLoopIterations):
        (TestWebKitAPI::TEST):

2016-07-11  Nan Wang  <n_wang@apple.com>

        AX: WKWebView should have API to prevent pinch-to-zoom always being allowed
        https://bugs.webkit.org/show_bug.cgi?id=158364

        Reviewed by Anders Carlsson.

        Added a function in TestRunner so that we can toggle the ignoring viewport
        scale limits setting. Also added a test option for that in order to change the 
        configuration of the webview in test.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setNavigationGesturesEnabled):
        (WTR::TestRunner::setIgnoresViewportScaleLimits):
        (WTR::nextUIScriptCallbackID):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::shouldDecideNavigationPolicyAfterDelay):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::setNavigationGesturesEnabled):
        (WTR::TestController::setIgnoresViewportScaleLimits):
        (WTR::TestController::platformWillRunTest):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldDecideNavigationPolicyAfterDelay):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2016-07-11  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] install-dependencies should not install packages built by jhbuild.
        https://bugs.webkit.org/show_bug.cgi?id=159628

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:
        Don't install icu, harfbuzz, orc, llvm, freetype, fontconfig.

2016-07-11  Olivier Blin  <olivier.blin@softathome.com>

        System proxy settings not used when building deps with jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=159567

        Reviewed by Michael Catanzaro.

        This adds the gsettings-desktop-schemas-devel build dep to enable
        the libgiognomeproxy.so gio module in glib-networking, which uses
        GSettings on org.gnome.system.proxy.
        This is needed to query system proxy settings for Gnome desktops.

        dconf can be manually added to jhbuild to build the
        libdconfsettings.so gio module for GSettings, so that
        libgiognomeproxy.so can access system settings.
          https://trac.webkit.org/wiki/WebKitGTK/StartHacking#Workingbehindaproxy

        As an alternative to dconf settings, this commit also adds the
        libproxy-devel build dep to enable the libgiolibproxy.so module in
        glib-networking (suggested by Fujii Hironori).

        It is useful to read proxy settings from environment variables.
        From a Gnome desktop, one may unset the GNOME_DESKTOP_SESSION_ID
        environment variable to force using the envvar module in libproxy.

        * gtk/install-dependencies:

2016-07-11  Mark Lam  <mark.lam@apple.com>

        Change run-webkit-tests.py and run-jsc-stress-tests to use a smaller JS stack size for testing.
        https://bugs.webkit.org/show_bug.cgi?id=159524

        Reviewed by Michael Saboff.

        Forced tests to run with only a 1.5M JS stack size instead of the default 4M.
        Also fixed up some tests to behave better to work with this new limit.  This
        should make stack overflow tests complete sooner.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2016-07-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Whitespace fixes in install-dependencies script

        Unreviewed.

        * gtk/install-dependencies:

2016-07-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Install missing Fedora dependencies

        Unreviewed.

        * gtk/install-dependencies:

2016-07-09  Dan Bernstein  <mitz@apple.com>

        Give git-add-reviewer an option to say “Rubber-stamped by” in non-interactive mode
        https://bugs.webkit.org/show_bug.cgi?id=159600

        Reviewed by Daniel Bates.

        * Scripts/git-add-reviewer:
        Added the -s|--rubber-stamp option.
        (nonInteractive): Set the rubberstamp key in the item passed to addReviewer() based on the
          new option.

2016-07-08  Andy Estes  <aestes@apple.com>

        [Content Filtering] Load blocked pages more like other error pages are loaded
        https://bugs.webkit.org/show_bug.cgi?id=159485
        <rdar://problem/26014076>

        Reviewed by Brady Eidson.

        Added API tests for WebView and WKWebView to verify that alternate HTML loaded in response
        to a content filtering provisional navigation failure is ignored in preference of
        ContentFilter's own error page.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        (-[LoadAlternateNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[LoadAlternateNavigationDelegate webView:didFinishNavigation:]):
        (loadAlternateTest):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
        (-[MockContentFilterEnabler initWithCoder:]):
        * TestWebKitAPI/Tests/mac/ContentFiltering.mm: Added.
        (-[LoadAlternateFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[LoadAlternateFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::loadAlternateTest):
        (TestWebKitAPI::TEST):

2016-07-08  Commit Queue  <commit-queue@webkit.org>

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

        caused some tests to crash under GuardMalloc (Requested by
        estes on #webkit).

        Reverted changeset:

        "[Content Filtering] Load blocked pages more like other error
        pages are loaded"
        https://bugs.webkit.org/show_bug.cgi?id=159485
        http://trac.webkit.org/changeset/202944

2016-07-08  Martin Robinson  <mrobinson@igalia.com>

        Remove mrobinson from the MathML watchlist
        https://bugs.webkit.org/show_bug.cgi?id=159559

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/common/config/watchlist: Remove my email from the watchlist.

2016-07-08  Brady Eidson  <beidson@apple.com>

        Clearing LocalStorage doesn't also delete -wal and -shm files.
        <rdar://problem/27206772> and https://bugs.webkit.org/show_bug.cgi?id=159566

        Reviewed by Brent Fulgham.
        Also helpfully picked over by Andy "Never Forgets" Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm: Added.

2016-07-08  Konstantin Tokarev  <annulen@yandex.ru>

        Removed Qt leftovers from Tools.
        https://bugs.webkit.org/show_bug.cgi?id=159557

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        Removed 'qt' platform config.
        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        Deleted non-functional e-mail address.

2016-07-08  Commit Queue  <commit-queue@webkit.org>

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

        This patch caused crashes in https tests on Windows (Requested
        by perarne on #webkit).

        Reverted changeset:

        "[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
        http://trac.webkit.org/changeset/202967

2016-07-08  Youenn Fablet  <youenn@apple.com>

        Generate WebCore builtin wrapper files
        https://bugs.webkit.org/show_bug.cgi?id=159461

        Reviewed by Brian Burg.

        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.generate_from_js_builtins): Adding generate_wrapper option.
        (BuiltinsGeneratorTests.run_tests): Using this option in WebCore test cases.

2016-07-08  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Fix build when media-stream is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=159206

        Bump up the openwebrtc to find the correct package.

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/openwebrtc-clang-warning-fix.patch: Removed.

2016-07-07  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 Brent Fulgham.

        Allow any https certificate when running tests.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2016-07-07  Beth Dakin  <bdakin@apple.com>

        API Test DoNotLeakWebView.ViewThatLoadsEditableArea times out on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=159532
        -and corresponding-
        rdar://problem/27177179

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/mac/ViewWithEditableAreaLeak.mm:
        (-[DoNotLeakFrameLoadDelegate webView:didFinishLoadForFrame:]):

2016-07-07  Andy Estes  <aestes@apple.com>

        [Content Filtering] Load blocked pages more like other error pages are loaded
        https://bugs.webkit.org/show_bug.cgi?id=159485
        <rdar://problem/26014076>

        Reviewed by Brady Eidson.

        Added API tests for WebView and WKWebView to verify that alternate HTML loaded in response
        to a content filtering provisional navigation failure is ignored in preference of
        ContentFilter's own error page.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        (-[LoadAlternateNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[LoadAlternateNavigationDelegate webView:didFinishNavigation:]):
        (loadAlternateTest):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
        (-[MockContentFilterEnabler initWithCoder:]):
        * TestWebKitAPI/Tests/mac/ContentFiltering.mm: Added.
        (-[LoadAlternateFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[LoadAlternateFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::loadAlternateTest):
        (TestWebKitAPI::TEST):

2016-07-07  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed: add myself to the reviewers list.

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

2016-07-07  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test http/tests/loading/main-resource-delegates-on-back-navigation.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=159509

        Reviewed by Alex Christensen.

        We should always insert the url in the url map when identifierForInitialRequest
        is called. Otherwise we can end up with identifiers not having an entry in the
        url map when urls are written to the test output file. 

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest):

2016-07-06  Tim Horton  <timothy_horton@apple.com>

        Email from June 1st containing text 'Today @ 7:10PM' is linkified, but shouldn't be
        https://bugs.webkit.org/show_bug.cgi?id=159498
        <rdar://problem/26719903>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm: Added.
        (-[DataDetectionNavigationDelegate webView:didFinishNavigation:]):
        (-[DataDetectionUIDelegate _dataDetectionContextForWebView:]):
        (expectLinkCount):
        (TEST):
        Add a test ensuring that ReferenceDate in the DataDetectors context is respected
        when deciding what to linkify.

2016-07-06  Alexey Proskuryakov  <ap@apple.com>

        Build fix - work around rdar://problem/27196668.

        * LayoutTestRelay/Configurations/Base.xcconfig:

2016-07-05  Per Arne Vollan  <pvollan@apple.com>

        Enhance Windows DRT implementation to support platform scroll wheel events.
        https://bugs.webkit.org/show_bug.cgi?id=36002

        Reviewed by Brent Fulgham.

        Implement function continuousMouseScrollBy in Windows event sender.

        * DumpRenderTree/win/EventSender.cpp:
        (mouseScrollBy):
        (continuousMouseScrollBy):

2016-07-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [Sierra] Rebaseline tests to use un-mocked system font metrics
        https://bugs.webkit.org/show_bug.cgi?id=159311
        <rdar://problem/24138411>

        Reviewed in person by Alexey Proskuryakov.

        Stop mocking the system font on Sierra.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2016-07-05  Brady Eidson  <beidson@apple.com>

        Database process crashes deleting a corrupt SQLite database file (null deref).
        https://bugs.webkit.org/show_bug.cgi?id=155506.

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.mm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.sqlite3: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.sqlite3-shm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.sqlite3-wal: Added.

2016-07-05  Alexey Proskuryakov  <ap@apple.com>

        run-webkit-tests should print more complete baseline search paths
        https://bugs.webkit.org/show_bug.cgi?id=159354

        Reviewed by Daniel Bates.

        run-webkit-tests used to only print directory names in baseline search paths.
        This was ok in basic usage, but quickly got confusing when using
        --additional-platform-directory flags.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):
        (Testprinter.test_print_one_line_summary):

2016-07-04  Brady Eidson  <beidson@apple.com>

        WebProcesses don't handle DatabaseProcess going away uncleanly..
        https://bugs.webkit.org/show_bug.cgi?id=159371

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill-1.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm: Added.
        (-[DatabaseProcessKillNavigationDelegate webView:didFinishNavigation:]):
        (-[DatabaseProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):

2016-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EFL][GTK] Layout Test doesn't run on Ubuntu 16.04
        https://bugs.webkit.org/show_bug.cgi?id=158141

        Rubber-stamped by Michael Catanzaro.

        Instead of checking for an specific Ubuntu version, query the apt
        database to see which version of PHP is available.

        * efl/install-dependencies:
        * gtk/install-dependencies:

2016-07-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        webkit-patch failure-reason always raises TypeError
        https://bugs.webkit.org/show_bug.cgi?id=159394

        Reviewed by Benjamin Poulain.

        In r170637 (Bug 133067), the first and second arguments of
        pluralize were swapped.

        * Scripts/webkitpy/tool/commands/queries.py:
        (FailureReason._builder_to_explain): Swap the first and second
        arguments of pluralize.

2016-07-02  Youenn Fablet  <youennf@gmail.com>

        Make it straightforward to start the Web Platform Tests HTTP server using run-webkit-httpd
        https://bugs.webkit.org/show_bug.cgi?id=152486

        Reviewed by Daniel Bates.

        Add launch of web-platform-tests server by run-webkit-httpd.
        Add two options to disable starting httpd and web-platform-tests servers.

        * Scripts/run-webkit-httpd:
        (parse_args):
        (main):

2016-07-01  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r189668): Notification tests are flakey
        https://bugs.webkit.org/show_bug.cgi?id=159375
        <rdar://problem/22760990>

        Reviewed by Alexey Proskuryakov.

        Notifications are objects which must exist in both the UI Process and the Web Process. Each process
        identifies a notification object by a unique ID. When the Web Process sends a message regarding a
        notification to the UI Process, the UI Process's WebNotificationManagerProxy holds a map from
        (Page ID, Web Process notification ID) -> UI Process notification ID. This works as intended.

        Our tests, however, include an additional method, simulateWebNotificationClick(), which is implemented
        by WebKitTestRunner in the Web Process via the Injected Bundle. This method involves sending a message
        to the UI process, to handle the simulated click. However, that RPC didn't perform the same local ->
        global notification ID mapping, causing the wrong notification to be investigated.

        The solution is for WebNotificationProvider, implemented in WebKitTestRunner in the UI Process, to
        manually perform this same mapping. Luckily, this object already receives callbacks every time a
        notification is created or destroyed. However, because this object is implemented outside WebKit,
        it isn't privy to the internal Web Process ID used inside WebNotificationmanagerProxy. Therefore,
        this patch adds a private testing function which returns this internal ID. Once given this intenal ID,
        WebNotificationProvider can properly map between the different IDs.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::simulateWebNotificationClick):
        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::showWebNotification):
        (WTR::removeGlobalIDFromIDMap):
        (WTR::WebNotificationProvider::closeWebNotification):
        (WTR::WebNotificationProvider::removeNotificationManager):
        (WTR::WebNotificationProvider::simulateWebNotificationClick):
        (WTR::WebNotificationProvider::reset):
        * WebKitTestRunner/WebNotificationProvider.h:

2016-07-01  Alexey Proskuryakov  <ap@apple.com>

        Simplify LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=159353

        Reviewed by Daniel Bates.

        1. Use UDID to pass the device from webkitpy to LayoutTestRelay, searching for it
        by name and runtime makes no sense.
        2. Removed code to create devices, webkitpy always does this in advance.
        3. Don't create copies of testing apps - we can install the same one into
        each simulator, now that we don't run multiple tester processes in a single simulator.
        4. Pass information on how to find I/O pipes via environment, not via Info.plist.
        5. Removed code that kept testing apps alive in the background.
        6. Slightly updated coding style in functions that I touched.

        * LayoutTestRelay/LayoutTestRelay/CoreSimulatorSPI.h:
        Updated for what we acually use at this point.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.h:
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController initWithDevice:productDir:appPath:deviceUDID:dumpToolArguments:]):
        (-[LTRelayController ipcIdentifier]):
        (-[LTRelayController processName]):
        (-[LTRelayController didReceiveStdoutData:]):
        (-[LTRelayController didCrashWithMessage:]):
        (-[LTRelayController installApp]):
        (-[LTRelayController _environmentVariables]):
        (-[LTRelayController launchApp]):
        (-[LTRelayController start]):
        (-[LTRelayController initWithDevice:productDir:appPath:identifierSuffix:dumpToolArguments:]): Deleted.
        (-[LTRelayController uniqueAppPath]): Deleted.
        (-[LTRelayController uniqueAppURL]): Deleted.
        (-[LTRelayController uniqueAppIdentifier]): Deleted.
        (-[LTRelayController createUniqueApp]): Deleted.
        * LayoutTestRelay/LayoutTestRelay/main.m:
        (usage):
        (getRequiredStringArgument):
        (main):
        (getTestingSimDevice): Deleted.
        * Scripts/webkitpy/port/driver.py:
        (IOSSimulatorDriver.cmd_line):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp applicationDidEnterBackground:]):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        (-[DumpRenderTree applicationDidEnterBackground:]):

2016-07-01  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Build TestNetscapePlugin only if NPAPI is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=159344

        Reviewed by Alex Christensen.

        * DumpRenderTree/CMakeLists.txt:

2016-07-01  Youenn Fablet  <youennf@gmail.com>

        Add a runtime flag for DOM iterators
        https://bugs.webkit.org/show_bug.cgi?id=159300

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDOMIteratorEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-06-30  Tina Liu  <iting_liu@apple.com>

        Add an API test for WKPageRestoreFromSessionStateWithoutNavigation.
        https://bugs.webkit.org/show_bug.cgi?id=159326

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateWithoutNavigation.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didChangeBackForwardListForPage):
        (TestWebKitAPI::setPageLoaderClient):
        Set the page loader client and register for didFinishLoadForFrame and
        didChangeBackForwardList callbacks.
        (TestWebKitAPI::createSessionStateData):
        Load a webpage ("simple.html") and return the session state for this page.
        (TestWebKitAPI::TEST):
        Restore the page session state with that of "simple.html" without navigation.
        Verify that the committed URL is NULL since there's no navigation involved.
        Verify that the current item in the back forward list, which should be what
        we restored from the session state, has the expected URL.

2016-06-29  Filip Pizlo  <fpizlo@apple.com>

        Generators violate bytecode liveness validation
        https://bugs.webkit.org/show_bug.cgi?id=159279

        Reviewed by Yusuke Suzuki.
        
        Add Basic to our test harness.

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

2016-06-30  Per Arne Vollan  <pvollan@apple.com>

        [Win][Debug] Assertion fails in TestWTF.
        https://bugs.webkit.org/show_bug.cgi?id=159299

        Reviewed by Alex Christensen.

        The assert in the & operator in the UniqueRef class fails, because the instance has been moved.
        The Windows version of the UNUSED_PARAM macro is getting the address of the parameter, causing
        the assertion failure. Since the variable is actually used, there is no need to use the
        UNUSED_PARAM macro.

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

2016-06-30  Youenn Fablet  <youennf@gmail.com>

        LayoutTests intermittently failing to run due to issues starting Web Platform Test server
        https://bugs.webkit.org/show_bug.cgi?id=159166
        <rdar://problem/27051759>

        Reviewed by Alexey Proskuryakov.

        Setting the certificate directory to the copied config.json.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files):

2016-06-29  Mark Lam  <mark.lam@apple.com>

        Add support for collecting cumulative LLINT stats via a JSC_llintStatsFile option.
        https://bugs.webkit.org/show_bug.cgi?id=159274

        Reviewed by Keith Miller.

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

2016-06-29  Alex Christensen  <achristensen@webkit.org>

        WKWebView should ask WKNavigationDelegate about bad ssl certificates
        https://bugs.webkit.org/show_bug.cgi?id=159176

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
        (-[WK2BrowserWindowController webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[WK2BrowserWindowController webView:didFailNavigation:withError:]):

2016-06-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add missing install dependency after r202619
        https://bugs.webkit.org/show_bug.cgi?id=156716

        Unreviewed.

        * gtk/install-dependencies: Missed to add the GLES headers that are needed for building mesa on Debian.

2016-06-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][Wayland] Implement support for running the layout tests under a (virtualized) Wayland environment.
        https://bugs.webkit.org/show_bug.cgi?id=156716

        Reviewed by Carlos Garcia Campos and Michael Catanzaro.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Allow to run the layout tests on Wayland by passing --wayland
        (parse_args):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort._driver_class):
        (GtkPort.setup_environ_for_server): Set the softgl renderer (now with EGL support) for the wayland tests.
        (GtkPort._search_paths): When running inside the wayland environment, use ${port}-wayland as an additional
        platform directory for storing the wayland specific layout test results and expectations for ${port}.
        For example, the file LayoutTests/platform/gtk-wayland/TestExpectations will be used as the most specific
        test expectations file on the GTK port when running the tests with the --wayland command line switch.
        Baseline search path: gtk-wayland -> gtk -> wk2 -> generic.
        * Scripts/webkitpy/port/westondriver.py: Run the weston display server inside Xvfb.
        (WestonDriver.check_driver):
        (WestonDriver.__init__):
        (WestonDriver._start):
        * Scripts/webkitpy/port/westondriver_unittest.py: Fix unittests for the new Weston inside Xvfb driver.
        (WestonXvfbDriverDisplayTest):
        (WestonXvfbDriverDisplayTest.__init__):
        (WestonXvfbDriverDisplayTest._xvfb_run):
        (WestonDriverTest.make_driver):
        (WestonDriverTest.test_start):
        * gtk/install-dependencies: Add the new dependencies that are required for either building weston,
        or to satisfy the pkg-config check of the new added modules in JHBuild.
        * gtk/jhbuild.modules: For building weston new enough on Debian Jessie we also need to build wayland
        and libinput. Declare a pkg-config entry on all this modules to avoid building them if the ones
        provided by the system are already new enough.
        Switch the Mesa software rasterizer from a Xlib based GLX renderer to a DRI based EGL/GLX one.
        It was the only way to get the software EGL rasterizer working without depending on user drivers.
        Due to this the Mesa build now depends on a modern enough libdrm, so we also use JHBuild pkg-config
        feature to avoid building libdrm when the one provided by the system is new enough.
        * gtk/jhbuildrc:
        * gtk/patches/xserver-search-for-DRI-drivers-at-LIBGL_DRIVERS_PATH-environ.patch: Added.
        Xorg had no support for searching the DRI drivers on a custom path at runtime.
        This patch implements support for that reusing the same variable that we use with Mesa to set the
        custom path for the DRI drivers path.

2016-06-29  Alejandro G. Castro  <alex@igalia.com>

        [WebRTC][OWR] Bump gst-plugins-openwebrtc jhbuild version to get scream fixes
        https://bugs.webkit.org/show_bug.cgi?id=159256

        Reviewed by Philippe Normand.

        We need the last fixes in the repository to make the scream queue
        work with apprtc.

        * gtk/jhbuild.modules:

2016-06-28  Commit Queue  <commit-queue@webkit.org>

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

        Caused all WKTR tests to fail on GuardMalloc and Production
        only for unknown reasons, investigating offline. (Requested by
        brrian on #webkit).

        Reverted changeset:

        "RunLoop::Timer should use constructor templates instead of
        class templates"
        https://bugs.webkit.org/show_bug.cgi?id=159153
        http://trac.webkit.org/changeset/202580

2016-06-28  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Use a regex to check if a test step is for JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=159224

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Replace array membership test with regex test.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData): Replace array membership test with regex test.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus): Replace array membership test with regex test.

2016-06-28  Michael Saboff  <msaboff@apple.com>

        btjs no longer accepts optional frame count argument
        https://bugs.webkit.org/show_bug.cgi?id=159235

        Reviewed by Saam Barati.

        Fix the detection of optional backtrace-depth parameter to use the length
        of the command.

        * lldb/lldb_webkit.py:
        (btjs):

2016-06-28  Jon Lee  <jonlee@apple.com>

        Update animometer.plan

        Rubber-stamped by Said Abou-Hallawa.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to r202601.

2016-06-28  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix JSC tests. Air.js moved, and the harness needs to know.

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

2016-06-28  Brian Burg  <bburg@apple.com>

        RunLoop::Timer should use constructor templates instead of class templates
        https://bugs.webkit.org/show_bug.cgi?id=159153

        Reviewed by Alex Christensen.

        Remove the RunLoop::Timer class template argument, and pass its constructor
        a reference to `this` instead of a pointer to `this`.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST):

2016-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r201471): FormClient.textFieldDidEndEditing is no longer called when a text field is removed
        https://bugs.webkit.org/show_bug.cgi?id=159199

        Reviewed by Alexey Proskuryakov.

        Added a test case for removing a text field. Also fixed the flakiness and re-enabled it on Mac.

        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing.cpp:
        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/input-focus-blur.html: Focus a div upfront to avoid the flakiness from
        an input element getting automatically focused on Mac.

2016-06-28  Per Arne Vollan  <pvollan@apple.com>

        [Win] Custom elements tests are failing.
        https://bugs.webkit.org/show_bug.cgi?id=159139

        Reviewed by Alex Christensen.

        Enable custom element API when running tests.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2016-06-27  Lucas Forschler  <lforschler@apple.com>

        Test commit. Please ignore.
        
2016-06-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK][EFL] Disable subtle-crypto in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=155073

        Reviewed by Daniel Bates.

        * Scripts/webkitperl/FeatureList.pm:

2016-06-27  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Make DumpRenderTree and WebKitTestRunner in the simulator use render server snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=159077

        Reviewed by Tim Horton.

        Re-enable render server snapshotting for iOS WTR via the change in InjectedBundlePage.cpp.

        Fix WebPageProxy::forceRepaint() to correctly wait for the next commit from the web process,
        which is necessary for UI-side compositing.

        Add some null checks to fix issues when the WKWebView gets resized to be empty, which
        seems to happen for some tests that call window.resizeTo().

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        (WTR::computeMD5HashStringForContext):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2016-06-27  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Support to build on Debian linux
        https://bugs.webkit.org/show_bug.cgi?id=159123

        Reviewed by Antonio Gomes.

        * efl/install-dependencies: Install libgnutls28-dev.

2016-06-27  Alex Christensen  <achristensen@webkit.org>

        Send canAuthenticateAgainstProtectionSpace calls from NetworkProcess directly to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=159071

        Reviewed by Brady Eidson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setHandlesAuthenticationChallenges):
        (WTR::TestRunner::setShouldLogCanAuthenticateAgainstProtectionSpace):
        (WTR::TestRunner::setAuthenticationUsername):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didFinishNavigation):
        (WTR::TestController::canAuthenticateAgainstProtectionSpace):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::didCommitNavigation):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setBlockAllPlugins):
        (WTR::TestController::setShouldLogHistoryClientCallbacks):
        (WTR::TestController::setShouldLogCanAuthenticateAgainstProtectionSpace):
        (WTR::TestController::isCurrentInvocation):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        Added output so we can see when canAuthenticateAgainstProtectionSpace is called from the test expectations.

2016-06-27  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test fast/events/wheel-event-outside-body.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=159129

        Reviewed by Alex Christensen.

        Implement the function mouseScrollBy in the Windows event sender.

        * DumpRenderTree/win/EventSender.cpp:
        (mouseScrollBy):
        (mouseScrollByWithWheelAndMomentumPhasesCallback):

2016-06-25  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION: Weak symbol warning when linking TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=159104

        Reviewed by Dan Bernstein.
        
        This uses a better approach to turn on -fvisility=hidden. All of the other projects set
        this flag in xcconfig, using "GCC_SYMBOLS_PRIVATE_EXTERN = YES;".

        * TestWebKitAPI/Configurations/TestWTFLibrary.xcconfig: Use GCC_SYMBOLS_PRIVATE_EXTERN here.
        * TestWebKitAPI/Configurations/TestWebKitAPILibrary.xcconfig: Use GCC_SYMBOLS_PRIVATE_EXTERN here.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Revert r202461.

2016-06-25  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test fast/events/wheel-event-destroys-frame.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=159086

        Reviewed by Alex Christensen.

        Implement required wheel event function in event sender.
 
        * DumpRenderTree/win/EventSender.cpp:
        (mouseScrollByWithWheelAndMomentumPhasesCallback):

2016-06-24  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION: Weak symbol warning when linking TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=159104

        Reviewed by Mark Lam.
        
        The problem is that the tests were not compiled with -fvisibility=hidden like the rest of
        WK.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2016-06-24  David Kilzer  <ddkilzer@apple.com>

        parser_unittests.pl should not hardcode list of tests
        <https://webkit.org/b/159074>

        Reviewed by Daniel Bates.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        Update to read the list of tests from the 'resources' directory,
        and instead map file extensions to subroutine names.  Switch to
        use File::Basename::fileparse() to get basename and file
        extension for each test.
        (readTestFiles): Added.  Reads files from the directory passed
        in and ignores: hidden files, anything that isn't a plain file,
        and expected test results files.

2016-06-23  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.h:

2016-06-23  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Change download path of libxslt

        Unreviewed EFL build fix.

        In Korea current download path can't be accessed. Change it.

        * efl/jhbuild.modules:

2016-06-23  Simon Fraser  <simon.fraser@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=159077

        Turn off CARenderServer snapshotting in WTR for now, because it doesn't reliably
        snapshot the final state of the test in release builds. 

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

2016-06-23  Simon Fraser  <simon.fraser@apple.com>

        Fix hardware builds, where USE(IOSURFACE) is true by #ifdeffing.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2016-06-23  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Make DumpRenderTree and WebKitTestRunner in the simulator use render server snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=159077

        Reviewed by Tim Horton.

        Fix both DRT and WTR for iOS to use CARenderServerRenderLayerWithTransform() on the view's layer.
        This allows them to capture compositing layers in snapshots, rather than doing a software paint,
        thus enabling testing of more things.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (createBitmapContext): Moved to this file to share it.
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        (BitmapContext::createFromUIImage): Deleted.
        (BitmapContext::pixelData): Deleted.
        (BitmapContext::BitmapContext): Deleted.
        (computeMD5HashStringForBitmapContext): Deleted.
        (dumpBitmap): Deleted.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig: Don't exclude PixelDumpSupportCG.cpp.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):
        (createBitmapContext): Deleted.
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: link with QuartzCore.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Deleted.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2016-06-23  Konstantin Tokarev  <annulen@yandex.ru>

        [jhbuild] Added libxslt module.
        https://bugs.webkit.org/show_bug.cgi?id=159034

        Unreviewed, followup for r202373.

        * efl/install-dependencies: Removed libxslt 
        * gtk/install-dependencies: Ditto.

2016-06-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Bump gstreamer version from 1.6.3 to 1.8.0
        https://bugs.webkit.org/show_bug.cgi?id=159050

        Reviewed by Antonio Gomes.

        To be sync with GTK port, this patch bumps gstreamer version for EFL port.

        * efl/jhbuild.modules:
        * efl/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch: Added.
        * efl/patches/gst-plugins-good-use-the-tfdt-decode-time.patch: Added.

2016-06-23  Konstantin Tokarev  <annulen@yandex.ru>

        [jhbuild] Added libxslt module.
        https://bugs.webkit.org/show_bug.cgi?id=159034

        Reviewed by Michael Catanzaro.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2016-06-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] Use Windows api function to find top level parent.
        https://bugs.webkit.org/show_bug.cgi?id=159021

        Reviewed by Brent Fulgham.

        Delete findTopLevelParent function, and use Win32 function GetAncestor instead.
 
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runModal):
        (findTopLevelParent): Deleted.
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::runModal):
        (findTopLevelParent): Deleted.

2016-06-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test storage/indexeddb/modern/handle-user-delete.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=158934

        Reviewed by Brent Fulgham.

        DumpRenderTree should also delete indexed databases when clearAllDatabases() is called.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::clearAllDatabases):

2016-06-22  Saam Barati  <sbarati@apple.com>

        run-javascriptcore-tests should have some environment variables for commonly used settings
        https://bugs.webkit.org/show_bug.cgi?id=159047

        Reviewed by Keith Miller.

        This patch adds three environment variables that run-javascriptcore-tests
        consults:
        - RUN_JAVASCRIPTCORE_TESTS_TESTAPI can be set to 'true' or 'false'. It
          determines if we should run the api tests or not.
        - RUN_JAVASCRIPTCORE_TESTS_BUILD can be set to 'true' or 'false'. It
          determines if we will perform a build or not before running the tests.
          to set the default should-build setting.
        - RUN_JAVASCRIPTCORE_TESTS_EXTRA_TESTS can be set to a directory or to
          a yaml file. If set, we will run the extra tests it refers to.

        All the values in these environment variables will be overridden if an
        option is explicitly passed in. For example, the following will run
        the api tests:
        `RUN_JAVASCRIPTCORE_TESTS_TESTAPI=false run-javascriptcore-tests --testapi`

        * Scripts/run-javascriptcore-tests:

2016-06-22  Saam barati  <sbarati@apple.com>

        TypeProfiler and TypeProfilerLog don't play nicely with the concurrent JIT
        https://bugs.webkit.org/show_bug.cgi?id=159037
        <rdar://problem/26935349>

        Reviewed by Benjamin Poulain.

        Run typeProfiler.yaml tests under an additional CJIT enabled mode.

        * Scripts/run-jsc-stress-tests:

2016-06-22  Aakash Jain  <aakash_jain@apple.com>

        Fix style issues in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=159019

        Reviewed by Daniel Bates.

        Fixed the formatting issues as reported by check-webkit-style in webkitpy.
        There is no functionality change.
        Only affected file names retained below for brevity.

        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        * Scripts/webkitpy/benchmark_runner/utils.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/common/checkout/commitinfo_unittest.py:
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/common/config/irc.py:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/irc/ircproxy_unittest.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/common/system/path_unittest.py:
        * Scripts/webkitpy/common/system/platforminfo.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/common/system/user_unittest.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/common/thread/threadedmessagequeue.py:
        * Scripts/webkitpy/common/thread/threadedmessagequeue_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        * Scripts/webkitpy/port/base_unittest.py:
        * Scripts/webkitpy/port/driver.py:
        * Scripts/webkitpy/port/driver_unittest.py:
        * Scripts/webkitpy/port/factory.py:
        * Scripts/webkitpy/port/gtk.py:
        * Scripts/webkitpy/port/server_process_unittest.py:
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/win.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/common_unittest.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        * Scripts/webkitpy/style/checkers/js.py:
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        * Scripts/webkitpy/style/checkers/png.py:
        * Scripts/webkitpy/style/checkers/text.py:
        * Scripts/webkitpy/style/checkers/text_unittest.py:
        * Scripts/webkitpy/style/error_handlers.py:
        * Scripts/webkitpy/style/filter.py:
        * Scripts/webkitpy/style/filter_unittest.py:
        * Scripts/webkitpy/style/optparser.py:
        * Scripts/webkitpy/style/optparser_unittest.py:
        * Scripts/webkitpy/test/main.py:
        * Scripts/webkitpy/w3c/test_converter.py:
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        * Scripts/webkitpy/xcode/simulator.py:

2016-06-22  Brady Eidson  <beidson@apple.com>

        DatabaseProcess doesn't handle WebProcesses going away uncleanly.
        https://bugs.webkit.org/show_bug.cgi?id=158894

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-2.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-3.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:

2016-06-22  Jon Lee  <jonlee@apple.com>

        Update animometer.plan
        https://bugs.webkit.org/show_bug.cgi?id=159012

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to r202318.

2016-06-22  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should generate files to ignore by WebKit SCM
        https://bugs.webkit.org/show_bug.cgi?id=142743

        Reviewed by Darin Adler.

        TestDownloader generates the .gitignore file according submodules git repository information.
        TestImporter requests the generation of .gitignore and the main __init__.py according LayoutTests/imported/w3c/resources/TestRepositories options.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.generate_gitignore): Generating .gitignore according submodules description.
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.process_test_repositories_import_options): Added the generation of .gitignore/__init__.py if the repo has the right option.
        (TestImporter):
        (TestImporter.write_init_py): Writing not empty __init__.py files.
        (TestImporter.import_tests): Using  of write_init_py. 
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_git_ignore_generation): Added .gitignore test.
        (TestImporterTest):
        (TestImporterTest.test_initpy_generation): Added __init__.py test.

2016-06-21  Sam Weinig  <sam@webkit.org>

        WKWebView with no WKNavigationDelegate does not follow universal links
        <rdar://problem/24374110>
        https://bugs.webkit.org/show_bug.cgi?id=158997

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDefaultNavigationDelegate.mm: Added.
        Add a new test that shows that we have a default navigation delegate by swizzling
        -[NSWorkspace openURL:]. This will only be called if there is a default client.

2016-06-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] Implement modal dialog support in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=158976

        Reviewed by Brent Fulgham.

        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest):
        (getHandleFromWebView):
        (PrintWebUIDelegate::webViewClose):
        (PrintWebUIDelegate::setFrame):
        (PrintWebUIDelegate::webViewFrame):
        (PrintWebUIDelegate::canRunModal):
        (findTopLevelParent):
        (PrintWebUIDelegate::runModal):
        (PrintWebUIDelegate::createModalDialog):
        * MiniBrowser/win/PrintWebUIDelegate.h:
        (PrintWebUIDelegate::webViewClose):
        (PrintWebUIDelegate::setFrame):
        (PrintWebUIDelegate::webViewFrame):
        (PrintWebUIDelegate::canRunModal):
        (PrintWebUIDelegate::runModal):

2016-06-22  Per Arne Vollan  <pvollan@apple.com>

        window.showModalDialog doesn't work in DumpRenderTree on Windows
        https://bugs.webkit.org/show_bug.cgi?id=53675

        Reviewed by Brent Fulgham.

        Implement modal dialog support in DumpRenderTree.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::canRunModal):
        (getHandleFromWebView):
        (UIDelegate::createModalDialog):
        (findTopLevelParent):
        (UIDelegate::runModal):
        (UIDelegate::webViewClose):
        * DumpRenderTree/win/UIDelegate.h:

2016-06-21  Aakash Jain  <aakash_jain@apple.com>

        Fix formatting issues reported by check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=159008

        Reviewed by Alexey Proskuryakov.

        Fixed the formatting issues as reported by check-webkit-style in webkitpy/tool folder.
        There is no functionality change.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Restart.execute):
        (Rollout):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_exception_during_command):
        (IRCBotTest.test_exception_during_command.CommandWithException):
        (IRCBotTest.test_exception_during_command.CommandWithException.execute):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (test_missing_unit_test_results_path):
        (test_layout_test_results):
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        (AbstractSequencedCommand):
        (AbstractSequencedCommand.__init__):
        * Scripts/webkitpy/tool/commands/download.py:
        (Land):
        * Scripts/webkitpy/tool/commands/openbugs.py:
        * Scripts/webkitpy/tool/commands/openbugs_unittest.py:
        (OpenBugsTest):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PatchesToCommitQueue):
        (PatchesToCommitQueue.__init__):
        (PatchesToCommitQueue._needs_commit_queue):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_platform):
        (PrintBaselinesTest):
        (PrintBaselinesTest.setUp):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue):
        (AbstractQueue.__init__):
        (AbstractQueue.execute):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_auto_retry):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand._files_to_add):
        (AbstractParallelRebaselineCommand):
        (AbstractParallelRebaselineCommand._rebaseline):
        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        (PostCommits._comment_text_for_commit):
        (PostCommits):
        (PostCommits.execute):
        (MarkBugFixed):
        (MarkBugFixed.__init__):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (UploadCommandsTest):
        (UploadCommandsTest.test_commit_message_for_current_diff):
        * Scripts/webkitpy/tool/grammar_unittest.py:
        (GrammarTest):
        (GrammarTest.test_join_with_separators):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (HelpCommand.__init__):
        (HelpCommand):
        (HelpCommand._help_epilog):
        (HelpCommand._remove_help_options):
        (MultiCommandTool):
        (MultiCommandTool.__init__):
        (MultiCommandTool.main):
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        (TrivialCommand):
        (TrivialCommand.__init__):
        (MultiCommandToolTest):
        (MultiCommandToolTest._assert_tool_main_outputs):
        (MultiCommandToolTest.test_retry):
        (test_command_help):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/applypatch.py:
        * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
        (ApplyPatchWithLocalCommit):
        (ApplyPatchWithLocalCommit.options):
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle):
        (CheckStyle.options):
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest):
        (CloseBugForLandDiffTest.test_empty_state):
        * Scripts/webkitpy/tool/steps/closepatch.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit.run):
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:
        * Scripts/webkitpy/tool/steps/metastep.py:
        (MetaStep):
        (MetaStep.__init__):
        (MetaStep.run):
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest):
        (PrepareChangeLogTest.test_resolve_existing_entry):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        * Scripts/webkitpy/tool/steps/revertrevision.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest):
        (StepsTest._step_options):
        * Scripts/webkitpy/tool/steps/update.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        (UpdateChangeLogsWithReviewerTest):
        (UpdateChangeLogsWithReviewerTest.test_guess_reviewer_from_bug):
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2016-06-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r202296.

        Broke basic browsing in Safari

        Reverted changeset:

        "WKWebView with no WKNavigationDelegate does not follow
        universal links"
        https://bugs.webkit.org/show_bug.cgi?id=158997
        http://trac.webkit.org/changeset/202296

2016-06-21  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-06-21  Anders Carlsson  <andersca@apple.com>

        Begin moving the Apple Pay code to the open source repository
        https://bugs.webkit.org/show_bug.cgi?id=158998

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Add ENABLE_APPLE_PAY.

2016-06-21  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Add system tracing points for requestAnimationFrame() workflow
        https://bugs.webkit.org/show_bug.cgi?id=158723

        Reviewed by Simon Fraser.

        Add new plist entries to be used by kdebug_trace() viewing tools.

        * Tracing/SystemTracePoints.plist:

2016-06-21  Sam Weinig  <sam@webkit.org>

        WKWebView with no WKNavigationDelegate does not follow universal links
        <rdar://problem/24374110>
        https://bugs.webkit.org/show_bug.cgi?id=158997

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDefaultNavigationDelegate.mm: Added.
        Add a new test that shows that we have a default navigation delegate by swizzling
        -[NSWorkspace openURL:]. This will only be called if there is a default client.

2016-06-21  Aakash Jain  <aakash_jain@apple.com>

        run-javascriptcore-tests should have flag to skip mozilla tests
        https://bugs.webkit.org/show_bug.cgi?id=158963
        rdar://problem/25838924

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Added flag to skip mozilla tests.

2016-06-20  Commit Queue  <commit-queue@webkit.org>

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

        JSBench wasn't regressed by r202002 and r202111 on iOS after
        all (Requested by rniwa_ on #webkit).

        Reverted changeset:

        "Unreviewed, rolling out r202002 and r202111."
        https://bugs.webkit.org/show_bug.cgi?id=158638
        http://trac.webkit.org/changeset/202136

2016-06-20  Keith Rollin  <krollin@apple.com>

        Remove RefPtr::release() and change calls sites to use WTFMove()
        https://bugs.webkit.org/show_bug.cgi?id=158369

        Reviewed by Chris Dumez.

        RefPtr::release() releases its managed pointer awkwardly. It's more
        direct and clearer to use WTFMove to transfer ownership of the managed
        pointer.

        As part of this cleanup, also change a lot of explicit data types to
        'auto'.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        (createPagedBitmapContext):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):

2016-06-20  Tim Horton  <timothy_horton@apple.com>

        Add a API test for *DeferringViewInWindowChanges as fixed in r202230
        https://bugs.webkit.org/show_bug.cgi?id=158947

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/DeferredViewInWindowStateChange.mm: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        Add a test ensuring that in-window state changes are deferred when using
        the SPI for deferring them, as fixed in r202230.

2016-06-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        WebKitTestRunner: Missing \n at the line of "#PROCESS UNRESPONSIVE"
        https://bugs.webkit.org/show_bug.cgi?id=158931

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness): Appended missing \n at the end of line.

2016-06-17  Alexey Proskuryakov  <ap@apple.com>

        Add test expectations for macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=158903

        Reviewed by Alex Christensen.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra@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.

2016-06-19  Alexey Proskuryakov  <ap@apple.com>

        Another buid fix for master.cfg.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2016-06-19  Alexey Proskuryakov  <ap@apple.com>

        Another buid fix for master.cfg.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2016-06-19  Lucas Forschler  <lforschler@apple.com>

        Fix master.cfg
        
        Unreviewed build fix.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2016-06-19  Lucas Forschler  <lforschler@apple.com>

        Test another commit.
        
        Unreviewed.

2016-06-19  Lucas Forschler  <lforschler@apple.com>

        Testing fix for trac-mirror.
        
        Unreviewed.

2016-06-19  Lucas Forschler  <lforschler@apple.com>

        Test a commit against the SVN 1.9 server upgrade.
        
        Unreviewed.
        
2016-06-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r202186.

        Broke the Apple Windows, Apple Yosemite, GTK, and WinCairo
        builds.

        Reverted changeset:

        "File scheme should not allow access of a resource on a
        different volume."
        https://bugs.webkit.org/show_bug.cgi?id=158552
        http://trac.webkit.org/changeset/202186

2016-06-17  Pranjal Jumde  <pjumde@apple.com>

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.html: Added.
        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm: Added.
        (-[CrossPartitionFileSchemeAccessNavigationDelegate webView:didFinishNavigation:]):
        When the main page load is complete fetch the contents of the document to check if iframe was loaded
        (createPartition):
        Create a disk image and load the contents of the file.
        (cleanUp):
        (TestWebKitAPI::TEST):

2016-06-17  Enrique Ocaña González  <eocanha@igalia.com>

        Unreviewed. Added myself to the list of committers.

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

2016-06-16  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK] LayoutTest doesn't run on Ubuntu 16.04
        https://bugs.webkit.org/show_bug.cgi?id=158141

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/base.py: Detect php version in system, then use it.
        (Port._is_debian_php_version_7):
        (Port._debian_php_version):
        (Port._apache_config_file_name_for_platform):
        * efl/install-dependencies:
        * gtk/install-dependencies:

2016-06-16  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should be concurrent
        https://bugs.webkit.org/show_bug.cgi?id=158755

        Reviewed by Geoffrey Garen.
        
        Need to disable concurrent JIT when running profiler tests. We should have been doing this
        all along.

        * Scripts/run-jsc-stress-tests:

2016-06-16  Per Arne Vollan  <pvollan@apple.com>

        [Win] Accessibility implementation unable to recurse through document (sometimes) to find named elements
        https://bugs.webkit.org/show_bug.cgi?id=140798

        Reviewed by Brent Fulgham.
       
        Make sure layout is up-to-date before trying to find named elements. 

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::rootElement):

2016-06-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r202002 and r202111.

        Ryosuke says this was a JSBench regression on iOS

        Reverted changesets:

        "Make HashMap and HashSet work with Refs"
        https://bugs.webkit.org/show_bug.cgi?id=158638
        http://trac.webkit.org/changeset/202002

        "Improve HashMap and HashSet support for Ref"
        https://bugs.webkit.org/show_bug.cgi?id=158789
        http://trac.webkit.org/changeset/202111

2016-06-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
        https://bugs.webkit.org/show_bug.cgi?id=158828

        Reviewed by Enrica Casucci.
        
        Expose "forceIPadStyleZoomOnInputFocus" on UIScriptController, which allows iPad-style
        zooming behavior on <input> focus in the iPhone simulator, which is used for testing.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus):
        (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::forceIPadStyleZoomOnInputFocus):
        (WTR::UIScriptController::setForceIPadStyleZoomOnInputFocus):

2016-06-15  Sam Weinig  <sam@webkit.org>

        Forward/Back keyboard shortcuts need to flip for RTL
        https://bugs.webkit.org/show_bug.cgi?id=158823
        <rdar://problem/25975359>

        Reviewed by Darin Adler.

        Add tests for flipping the behavior of command-left and command-right
        under RTL mode.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/CommandBackForward.mm: Added.
        (-[CommandBackForwardOffscreenWindow isKeyWindow]):
        (-[CommandBackForwardOffscreenWindow isVisible]):
        (simulateCommandArrow):
        (WebKit2_CommandBackForwardTest::SetUp):
        (WebKit2_CommandBackForwardTestWKView::didFinishLoadForFrame):
        (WebKit2_CommandBackForwardTestWKView::SetUp):
        (WebKit2_CommandBackForwardTestWKView::loadFiles):
        (-[CommandBackForwardNavigationDelegate webView:didFinishNavigation:]):
        (WebKit2_CommandBackForwardTestWKWebView::SetUp):
        (WebKit2_CommandBackForwardTestWKWebView::loadFiles):

2016-06-15  Tim Horton  <timothy_horton@apple.com>

        Expose _shouldExpandContentToViewHeightForAutoLayout SPI on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=158824
        <rdar://problem/23713857>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (-[AutoLayoutWKWebView load:withWidth:expectingContentSize:]):
        (-[AutoLayoutWKWebView load:withWidth:expectingContentSize:resettingWidth:]):
        (-[AutoLayoutWKWebView layoutAtMinimumWidth:andExpectContentSizeChange:resettingWidth:]):
        (TEST):
        Add a test for _shouldExpandContentToViewHeightForAutoLayout.

2016-06-13  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make it possible to test the Next/Previous buttons in the keyboard accessory bar
        https://bugs.webkit.org/show_bug.cgi?id=158714

        Reviewed by Enrica Casucci.

        Add UIScriptController.keyboardAccessoryBar{Next,Previous} and hook it up to the WKContentView
        method that gets called from UIKit.

        Add a test that exercises it.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::keyboardAccessoryBarNext):
        (WTR::UIScriptController::keyboardAccessoryBarPrevious):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::keyboardAccessoryBarNext):
        (WTR::UIScriptController::keyboardAccessoryBarPrevious):

2016-06-15  Sam Weinig  <sam@webkit.org>

        Improve HashMap and HashSet support for Ref
        https://bugs.webkit.org/show_bug.cgi?id=158789

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        Add more cases to WTF_HashMap.Ref_Key, WTF_HashMap.Ref_Value and WTF_HashSet.Ref

2016-06-15  Aakash Jain  <aakash_jain@apple.com>

        Too much log data generated during layout-tests on iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=158751

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.developer_dir): memoized the property so that it is not called
        repeatedly.

2016-06-15  Per Arne Vollan  <pvollan@apple.com>

        [Win][CMake] Changes in WebKit options are not reflected in incremental builds.
        https://bugs.webkit.org/show_bug.cgi?id=158727

        Reviewed by Alex Christensen.

        Delete CMake cache file if WebKit options have been modified.

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

2016-06-15  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        Enabling Shadow DOM for all platforms
        https://bugs.webkit.org/show_bug.cgi?id=158738

        Reviewed by Ryosuke Niwa.

        Removed Shadow DOM from options (enabled by default)

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

2016-06-15  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test accessibility/selected-text-range-aria-elements.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=158732

        Reviewed by Brent Fulgham.

        Implement selectedTextRange() method.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectedTextRange):

2016-06-15  Per Arne Vollan  <pvollan@apple.com>

        [Win] MiniBrowser is not DPI aware.
        https://bugs.webkit.org/show_bug.cgi?id=158733

        Reviewed by Brent Fulgham.

        Call Win32 api function to let Windows know that we will scale the contents ourselves.

        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2016-06-15  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed: add new email address to contributors.json.

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

2016-06-14  Keith Miller  <keith_miller@apple.com>

        JSBench should use geometric mean
        https://bugs.webkit.org/show_bug.cgi?id=158775

        Reviewed by Mark Lam.

        For some reason JSBench was using algebraic mean. Since each test
        is pretty substantially different it should use geometric mean
        instead.

        * Scripts/run-jsc-benchmarks:

2016-06-14  Alexey Proskuryakov  <ap@apple.com>

        Debug crash logs are not fully symbolicated on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=158760

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Don't enable dSYM generation
        for debug builds on Yosemite.

2016-06-14  Alexey Proskuryakov  <ap@apple.com>

        Tests don't work in iOS Simulator when ASan is enabled
        https://bugs.webkit.org/show_bug.cgi?id=158726

        Reviewed by David Kilzer.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Added a FIXME.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Don't try to insert a dylib built for
        simulator into LayoutTestRelay, which is a macOS tool.

2016-06-14  Aakash Jain  <aakash_jain@apple.com>

        Continuous "Reentrancy avoided" error messages in run-webkit-tests if Simulator quits unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=158756

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.wait_until_device_is_booted): If checking Simulator boot state fails, verify if
        the "simulator device" is still in booted state. Since we ensured that simulator device 
        was in booted state earlier in this method, this indicates that simulator device has shut down
        unexpectedly.

2016-06-14  David Kilzer  <ddkilzer@apple.com>

        Follow-up fix #2: REGRESSION (r202020): El Capitan CMake Debug build broken
        <https://webkit.org/b/158743>

        Unreviewed build fix.

        * DumpRenderTree/PlatformMac.cmake: Fix silly typo.

2016-06-14  Aakash Jain  <aakash_jain@apple.com>

        Too much log data generated during layout-tests on iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=158751

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._quit_ios_simulator): Do not use -v flag.
        (IOSSimulatorPort.clean_up_test_run): Ditto.
        (IOSSimulatorPort._createSimulatorApp): Ditto.

2016-06-14  David Kilzer  <ddkilzer@apple.com>

        Follow-up fix: REGRESSION (r202020): El Capitan CMake Debug build broken
        <https://webkit.org/b/158743>

        Unreviewed build fix.

        The fix in r202056 clobbered DumpRenderTree_SOURCES and
        TestNetscapePlugin_SOURCES from DumpRenderTree/CMakeLists.txt,
        so the build failure is now that we're not building the common
        sources.

        Fix that by saving the common sources (which are all C++ source
        files) into *_Cpp_SOURCES lists first, then setting the compiler
        flags, then creating the final *_SOURCES lists.

        * DumpRenderTree/PlatformMac.cmake: Add
        ${TestNetscapePlugin_Cpp_SOURCES} to list that needs
        "-std=c++14" compiler switch.
        (TestNetscapePlugin_Cpp_SOURCES): Add new list for C++ source
        files for TestNetscapePlugin.  Seeded with
        ${TestNetscapePlugin_SOURCES} from CMakeLists.txt.
        (TestNetscapePlugin_SOURCES): Add
        ${TestNetscapePlugin_Cpp_SOURCES} to the list of files.
        (DumpRenderTree_Cpp_SOURCES): Seed list for C++ source files
        with ${DumpRenderTree_SOURCES} from CMakeLists.txt.
        (DumpRenderTree_SOURCES): Reformat and sort source lists.

2016-06-14  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r202020): El Capitan CMake Debug build broken
        <https://webkit.org/b/158743>

        Reviewed by Alex Christensen.

        The bug was that pure C++ source files (and Objective-C source
        files) were being compiled as Objective-C++ source files.  This
        is obviously incorrect, so the fix was to split out the list of
        source files by language, then define compiler switches based on
        each file type.

        * DumpRenderTree/PlatformMac.cmake: Replace add_definitions()
        with separate foreach loops that set compiler flags based on
        each source file's type.
        (TestNetscapePlugin_ObjCpp_SOURCES): Rename from
        TestNetscapePlugin_SOURCES.
        (TestNetscapePlugin_SOURCES): Create based on
        ${TestNetscapePlugin_ObjCpp_SOURCES}.
        (DumpRenderTree_ObjC_SOURCES): Split from DumpRenderTree_SOURCES.
        (DumpRenderTree_Cpp_SOURCES): Ditto.
        (DumpRenderTree_ObjCpp_SOURCES): Ditto.
        (DumpRenderTree_SOURCES): Create from above three lists.

2016-06-14  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/26685782>
        Teach the copy-webkitlibraries-to-product-directory script about WebKitSystemInterfaceOSX10.12

        Rubber-stamped by Jessie Berlin.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-06-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Activate CMake export compile commands option
        https://bugs.webkit.org/show_bug.cgi?id=158734

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Activating this option for all CMake builds.
        This allows using ymcd for WebKit hacking.

2016-06-14  David Kilzer  <ddkilzer@apple.com>

        Modernize DumpRenderTreeMac.h
        <https://webkit.org/b/158721>

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        - Update copyright.
        - Update license.
        - Use #pragma once.
        - Use OBJC_CLASS macro.

2016-06-13  David Kilzer  <ddkilzer@apple.com>

        False-positive over-release of WebView in destroyWebViewAndOffscreenWindow() in DumpRenderTree.mm
        <https://webkit.org/b/158716>

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (destroyWebViewAndOffscreenWindow): Change this function to take
        a WebView, and assert that it's the same as [mainFrame webView].
        (dumpRenderTree): Pass 'webView' into
        destroyWebViewAndOffscreenWindow().
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        (createWebViewAndOffscreenWindow): Add NS_RETURNS_RETAINED since
        this function returns a +1 WebView.  Declare this method only for
        Objective-C[++] source.

2016-06-13  Sam Weinig  <sam@webkit.org>

        Make HashMap and HashSet work with Refs
        https://bugs.webkit.org/show_bug.cgi?id=158638

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        Add tests for using Refs in HashMaps (both as key and value) and HashSets.

2016-06-13  Mark Lam  <mark.lam@apple.com>

        Add a mechanism for collecting LLINT stats.
        https://bugs.webkit.org/show_bug.cgi?id=158668

        Reviewed by Filip Pizlo.

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

2016-06-13  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [GTK] Enabling Shadow DOM by default
        https://bugs.webkit.org/show_bug.cgi?id=158686

        Reviewed by Carlos Garcia Campos.

        Added support for enabling Shadow DOM by default for GTK.
        Changed GTK test expectations for fast/shadow-dom tests (most tests
        pass).

        * Scripts/webkitperl/FeatureList.pm:

2016-06-12  Aakash Jain  <aakash_jain@apple.com>

        run-safari/run-webkit-app fail to quit iOS simulator after Xcode installation
        https://bugs.webkit.org/show_bug.cgi?id=158651
        rdar://problem/26499824

        Reviewed by Daniel Bates.

        This change is to make our tools more robust. Sometimes run-safari/run-webkit-app fails 
        to start the tests as one of the first thing these scripts do is to relaunch iOS Simulators,
        and in process call quitIOSSimulator. In case the Simulator is not registered in LaunchServices
        for some reason, quitIOSSimulator fails and the script stops. This change will make the scripts
        still continue when they fail to quit iOS Simuator, and modify the way Simulator is opened, 
        so that Simulator is implicitly registered with LaunchServices while opening it.

        * Scripts/webkitdirs.pm:
        (relaunchIOSSimulator):
        Launch iOS Simulator using complete path. Partially reverting http://trac.webkit.org/changeset/184202.
        (quitIOSSimulator):
        Do not die if quitting ios Simulator fails, so that relaunchIOSSimulator can still 
        attempt to launch the simulator.
        (waitUntilIOSSimulatorDeviceIsInState):
        Added a FIXME.

2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments after r201978.
        https://bugs.webkit.org/show_bug.cgi?id=158649
        <rdar://problem/13258122>

        Unreviewed.

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

2016-06-11  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed leak fix after r201863.

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

2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Map commonly used Chinese Windows font names to names present on Cocoa operating systems
        https://bugs.webkit.org/show_bug.cgi?id=158649
        <rdar://problem/13258122>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/WTFString.h:
        (TestWebKitAPI::TEST):

2016-06-10  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * TestWebKitAPI/PlatformMac.cmake:

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        Rename JSAir to Air.js

        Rubber stamped by Mark Lam.

        * Scripts/run-javascriptcore-tests:

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        JSC Stress Test failing: jsair-tests.yaml/test.js.ftl-eager-no-cjit
        https://bugs.webkit.org/show_bug.cgi?id=158571

        Reviewed by Keith Miller.
        
        Unskip the JSAir test.

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

2016-06-10  Sam Weinig  <sam@webkit.org>

        Re-disable the UserMedia tests which are timing out.

        They used to be accidentally disabled, due to not including
        the FeatureDefines correctly, but not we explicitly disable it.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::TEST):

2016-06-10  Alex Christensen  <achristensen@webkit.org>

        Introduce WTF::UniqueRef
        https://bugs.webkit.org/show_bug.cgi?id=158596

        Reviewed by Brady Eidson.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/UniqueRef.cpp: Added.
        (TestWebKitAPI::B::B):
        (TestWebKitAPI::C::C):
        (TestWebKitAPI::function):
        (TestWebKitAPI::TEST):

2016-06-10  Sam Weinig  <sam@webkit.org>

        Refactor TestWebKitAPI to allow just testing WTF
        https://bugs.webkit.org/show_bug.cgi?id=158625

        Reviewed by Tim Horton.

        Extract all the WTF tests into a new target to allow a faster build / test / fix
        cycle when working on WTF bugs and features.
        
        By calling `run-api-tests --wtf-only`, you don't need to have a build of JavaScriptCore/WebCore/etc
        to test WTF only changes.

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        (buildTestTool):
        (testToolPaths):
        Add new options to build-api-tests and run-api-tests to only build/run the WTF test runner.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Configurations/TestWTF.xcconfig: Added.
        * TestWebKitAPI/Configurations/TestWTFLibrary.xcconfig: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add two new targets, TestWTFLibrary which contains all the WTF tests, and TestWTF,
        the test runner that runs the WTF tests.
    
        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        Use Utilities.h rather than PlatformUtilities.h.

        * TestWebKitAPI/Utilities.h: Added.
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm: Added.
        Move the sleep and run functions into a new Utilities.h/cpp file. This file contains utilities
        that don't depend on anything in the WebKit project. 

2016-06-10  Brady Eidson  <beidson@apple.com>

        REGRESSION(r201928?) API test WTF.StringOperators failing
        https://bugs.webkit.org/show_bug.cgi?id=158623

        Unreviewed, but buddy coded with Alex Christensen.

        * TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:
        (TestWebKitAPI::LifetimeLogger::fullName): Only one file in all of TestWebKitAPI is allowed
          to use string concatenation, otherwise the linker will mess up on the symbol related to
          this bizarre WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING macro expansion.

2016-06-10  Brady Eidson  <beidson@apple.com>

        WTF_CrossThreadTask.Basic fails in all non mac ports.
        https://bugs.webkit.org/show_bug.cgi?id=158612

        Reviewed by Alex Christensen.

        The test is very sensitive to argument evaluation order which is explicitly undefined in C++.
        
        Instead, we should just count the appropriate events to forget their order.
        
        * TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:
        (TestWebKitAPI::LifetimeLogger::LifetimeLogger):
        (TestWebKitAPI::LifetimeLogger::~LifetimeLogger):
        (TestWebKitAPI::LifetimeLogger::isolatedCopy):
        (TestWebKitAPI::LifetimeLogger::fullName):
        (TestWebKitAPI::testFunction):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::LifetimeLogger::log): Deleted.
        (TestWebKitAPI::LifetimeLogger::takeLogStr): Deleted.

2016-06-09  Alex Christensen  <achristensen@webkit.org>

        Clean up Tools *.vcxproj after switching to CMake.

        * DumpRenderTree/DumpRenderTree.sln: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.def: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.rc: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/resource.h: Removed.
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/TestNetscapePlugin.def: Copied from DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.def.
        * DumpRenderTree/win/TestNetscapePlugin.rc: Copied from DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.rc.
        * DumpRenderTree/win/resource.h: Copied from DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/resource.h.
        * MiniBrowser/MiniBrowser.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.ico: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.rc: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserResource.h: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/small.ico: Removed.
        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/MiniBrowser.ico: Copied from MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.ico.
        * MiniBrowser/win/MiniBrowser.rc: Copied from MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.rc.
        * MiniBrowser/win/MiniBrowserLib.rc: Copied from MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc.
        * MiniBrowser/win/MiniBrowserLibResource.h: Copied from MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h.
        * MiniBrowser/win/MiniBrowserResource.h: Copied from MiniBrowser/MiniBrowser.vcxproj/MiniBrowserResource.h.
        * MiniBrowser/win/small.ico: Copied from MiniBrowser/MiniBrowser.vcxproj/small.ico.
        * WebKitTestRunner/WebKitTestRunner.sln: Removed.
        * win/DLLLauncher/DLLLauncherWinCairo.props: Removed.

2016-06-09  Zalan Bujtas  <zalan@apple.com>

        Add testing support for 3x device scale factor.
        https://bugs.webkit.org/show_bug.cgi?id=158597

        Reviewed by Simon Fraser.

        Set 3x device scale factor on the test canvas when the test url is prefixed with hidpi-3x-. 

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (changeWindowScaleIfNeeded):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::updateWindowScaleForTest):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::deviceScaleFactorForTest):
        (WTR::TestOptions::TestOptions):
        (WTR::isHiDPITestPath): Deleted.
        * WebKitTestRunner/TestOptions.h:

2016-06-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add comments to clarify feature enablement
        https://bugs.webkit.org/show_bug.cgi?id=158567

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm:

2016-06-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, skip jsair tests while we figure out the debug timeouts.

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

2016-06-09  Commit Queue  <commit-queue@webkit.org>

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

        This broke the cmake build. (Requested by lforschler on
        #webkit).

        Reverted changeset:

        "Teach cmake about libWebKitSystemInterfaceOSX10.12"
        http://trac.webkit.org/changeset/201815

2016-06-09  Brady Eidson  <beidson@apple.com>

        Greatly simplify CrossThreadTask.h.
        https://bugs.webkit.org/show_bug.cgi?id=158542

        Reviewed by Darin Adler.

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

2016-06-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r201836, r201845, and r201848.

        Looks like a 1-2% PLT regression on iOS

        Reverted changesets:

        "[JSC] Change some parameters based on a random search"
        https://bugs.webkit.org/show_bug.cgi?id=158514
        http://trac.webkit.org/changeset/201836

        "Tempory fix for the debug bots"
        http://trac.webkit.org/changeset/201845

        "Change thresholdForOptimizeSoon to match
        thresholdForOptimizeAfterWarmUp"
        http://trac.webkit.org/changeset/201848

2016-06-09  Michael Saboff  <msaboff@apple.com>

        WebKitTestRunner and DumpRenderTree do not handle dangling surrogate characters
        https://bugs.webkit.org/show_bug.cgi?id=154863

        Reviewed by Alexey Proskuryakov.

        Added a non-strict verions of WKStringGetUTF8CString() that will handle dangling
        surrogates.  Changed the extraction of inner text from frames in DumpRenderTree
        to use the new WKStringGetUTF8CStringNonStrict() function instead of NSString
        conversion since NSString doesn't have a way to handle dangling surrogates.
        The code added in DumpRenderTree matches what was changed in WebKitTestRunner.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText):
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWTFString):

2016-06-08  Hunseop Jeong  <hs85.jeong@samsung.com>

        Try to fix the EFL build. 

        Unreviewed. 

        * TestWebKitAPI/CMakeLists.txt:

2016-06-08  Alex Christensen  <achristensen@webkit.org>

       Fix WinCairo build

        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:

2016-06-08  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build

        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):

2016-06-08  Benjamin Poulain  <benjamin@webkit.org>

        [JSC] Change some parameters based on a random search
        https://bugs.webkit.org/show_bug.cgi?id=158514

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2016-06-08  Aakash Jain  <aakash_jain@apple.com>

        tests fail if display sleeps while run-webkit-tests is running
        https://bugs.webkit.org/show_bug.cgi?id=153919

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (releaseSleepAssertions): Release both Display sleep and System sleep assertions.
        (addSleepAssertions): Add sleep assertion for both Display sleep and System sleep.

2016-06-08  Lucas Forschler  <lforschler@apple.com>

        Reverted changeset 201814.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-06-08  Per Arne Vollan  <pvollan@apple.com>

        [Win] Shadow DOM tests are failing.
        https://bugs.webkit.org/show_bug.cgi?id=158524

        Reviewed by Brent Fulgham.

        Enable Shadow DOM when running tests.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2016-06-08  Lucas Forschler  <lforschler@apple.com>

        Teach cmake about libWebKitSystemInterfaceOSX10.12
        This patch also removes duplicated logic inside DumpRenderTree/PlatformMac.cmake

        Rubber-stamped by Alex Christensen.
 
        * DumpRenderTree/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2016-06-07  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/26685782>
        Teach the copy-webkitlibraries-to-product-directory script about WebKitSystemInterfaceOSX10.12

        Rubber-stamped by Jessie Berlin.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-06-08  Aakash Jain  <aakash_jain@apple.com>

        Don't try to cleanup non-existing ios Simulators
        https://bugs.webkit.org/show_bug.cgi?id=158510

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.clean_up_test_run): 
        Check if simulator exists before trying to clean it up.

2016-06-08  Brady Eidson  <beidson@apple.com>

        Try to fix the Windows build.

        Unreviewed.

        * TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:
        (TestWebKitAPI::LifetimeLogger::log):
        (TestWebKitAPI::LifetimeLogger::takeLogStr):
        (TestWebKitAPI::testFunction):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::log): Deleted. (VS was seeing it as a dupe symbol)
        (TestWebKitAPI::takeLogStr): Deleted. (VS was seeing it as a dupe symbol)

2016-06-08  Brady Eidson  <beidson@apple.com>

        Make CrossThreadCopier more efficient (fewer copies!).
        https://bugs.webkit.org/show_bug.cgi?id=158456

        Reviewed by Alex Christensen.

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

2016-06-07  Filip Pizlo  <fpizlo@apple.com>

        Add result validation to JSAir
        https://bugs.webkit.org/show_bug.cgi?id=158493

        Reviewed by Saam Barati.
        
        Run JSAir.

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

2016-06-08  Brady Eidson  <beidson@apple.com>

        Add an API test that confirms object constructor/destructor calls during creation of a CrossThreadTask.
        https://bugs.webkit.org/show_bug.cgi?id=158528

        Reviewed by Alex Christensen.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp: Added.
        (TestWebKitAPI::log):
        (TestWebKitAPI::takeLogStr):
        (TestWebKitAPI::LifetimeLogger::LifetimeLogger):
        (TestWebKitAPI::LifetimeLogger::~LifetimeLogger):
        (TestWebKitAPI::LifetimeLogger::isolatedCopy):
        (TestWebKitAPI::testFunction):
        (TestWebKitAPI::TEST):

2016-06-08  Konstantin Tokarev  <annulen@yandex.ru>

        TestWebKitAPI: Removed redunandant check PLATFORM(GTK) && !defined(BUILDING_WEBKIT2__)
        https://bugs.webkit.org/show_bug.cgi?id=158521

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/config.h:

2016-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a longer timeout for glib unit tests
        https://bugs.webkit.org/show_bug.cgi?id=158476

        Reviewed by Darin Adler.

        The timeout is supposed to be per test case, but in the case of GLib tests it affects all the tests cases of the
        same test program. Some test programs like TestLoaderClient, that have a lot of test cases, often time out in
        the bots because the timeout is not enough to run all the tests cases. So, we should use a longer timeout for
        GLib tests.

        * Scripts/run-gtk-tests:
        (TestRunner._run_test_glib):

2016-06-07  Keith Rollin  <krollin@apple.com>

        Remove all uses of PassRefPtr in WTF
        https://bugs.webkit.org/show_bug.cgi?id=157596
        <rdar://problem/26234391>

        Reviewed by Chris Dumez.

        Update calls to interfaces that no longer take or return PassRefPtrs.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::stringFromUTF8):
        (TestWebKitAPI::TEST):

2016-06-07  Per Arne Vollan  <pvollan@apple.com>

        [Win] Imported markup insertion test is failing.
        https://bugs.webkit.org/show_bug.cgi?id=158477

        Reviewed by Darin Adler.

        Make sure the empty synchronous request is loaded after each test.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2016-06-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r201449) [GTK] ARMv7 build fails with libicudata.so.55: cannot open shared object file on gtkdoc-scangobj step.
        https://bugs.webkit.org/show_bug.cgi?id=158417

        Reviewed by Michael Catanzaro.

        The toolchain on armhf (ARMv7) seems unable to properly handle
        a shared library that doesn't link with anything.

        And libicudata is built by default in this way because it only
        contains static data.

        That makes icu unusable on armhf because the linker will be
        unable to resolve the libicudata dependencies.

        Most (if not all) distributions workaround this by linking
        libicudata with libc6, which is already a needed dependency for
        any of the other icu shared libraries.

        So import here the Debian patch fixing this issue. For further
        details check https://bugs.debian.org/653457

        * gtk/jhbuild.modules:
        * gtk/patches/icudata-stdlibs.patch: Added.

2016-06-06  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r104174): 500+ tests failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=75965

        Reviewed by Michael Catanzaro.

        Reset WebView scale factors before running next test.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):

2016-06-04  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r201263): Some tests have become flaky timeouts.
        https://bugs.webkit.org/show_bug.cgi?id=157990

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::invoke):
        It is somewhat legitimate for WebContent to not respond to messages after the test
        is done; it can be e.g. re-doing a costly repaint. So, we should restart is silently,
        without making the current test fail.

2016-06-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [GTK] Update YouCompleteMe script to make all include paths absolute
        https://bugs.webkit.org/show_bug.cgi?id=158301

        Reviewed by Michael Catanzaro.

        Before this patch, some include paths were not made absolute.
        This could make YouCompleteMe plugin to fail extracting information or validating cpp files.

        * gtk/ycm_extra_conf.py:

2016-06-03  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        Unreviewed: add myself to the committers list.

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

2016-06-02  Per Arne Vollan  <pvollan@apple.com>

        [Win] Fetch API tests are failing.
        https://bugs.webkit.org/show_bug.cgi?id=158296

        Reviewed by Alex Christensen.

        Enable Fetch API when running tests.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2016-06-02  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Really display failing JSC stress tests in buildbot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=158324

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Correctly check for string membership in array.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData): Correctly check for string membership in array.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverContentForJavaScriptCoreTestRegressions): Correctly check for string
        membership in array.
        (BuildbotQueueView.prototype._presentPopoverForJavaScriptCoreTestRegressions): Ensure that the correct URL is
        generated after the first time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus): Correctly check for string membership in array.

2016-06-02  Michael Saboff  <msaboff@apple.com>

        [iOS]: Some JSC stress tests fail running out of executable memory when the LLInt is disabled
        https://bugs.webkit.org/show_bug.cgi?id=158317

        Reviewed by Saam Barati.

        Added defaultNoNoLLIntRun variant to run the default tests with the exception of the no-llint
        variant.

        * Scripts/run-jsc-stress-tests:

2016-06-02  Aakash Jain  <aakash_jain@apple.com>

        LayoutTests time out intermittently due to alert about reopening Simulator after it unexpectedly quit
        https://bugs.webkit.org/show_bug.cgi?id=158305

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.clean_up_test_run): Delete simulator's savedState directories during cleanup.

2016-06-01  Brian Burg  <bburg@apple.com>

        REGRESSION(r191907): Can't enter combining diacritic marks in Web Inspector fields
        https://bugs.webkit.org/show_bug.cgi?id=158227
        <rdar://problem/26232464>

        Reviewed by Alexey Proskuryakov.

        Add a regression test that runs on Mac only.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewTextInput.mm: Added.
        (-[DummyNavigationDelegate webView:didFinishNavigation:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/editable-body.html: Added.

2016-06-01  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VoiceOver can't access attachments in mail messages
        https://bugs.webkit.org/show_bug.cgi?id=158198

        Reviewed by Joanmarie Diggs.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::stringForRange):
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):

2016-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Mark GTK+ test /webkit2/WebKitWebInspectorServer/test-open-debugging-session as slow.

        It's timing out in the bots, but it seems to pass when running run-gtk-tests with no timeout. For GLib tests the
        timeout is applied per tester program not per test case, so we need to mark the whole test
        WebKit2Gtk/TestInspectorServer as slow.

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner._run_test_glib):

2016-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip media permission request GTK+ unit tests.

        They are timing out in the bots.

        * Scripts/run-gtk-tests:
        (TestRunner):

2016-05-31  Jer Noble  <jer.noble@apple.com>

        Yet another unreviewed build fix; move the closing brace of the namespace declaration inside
        the #if check.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:

2016-05-31  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix; only run FullscreenTopContentInset test on Mac.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:

2016-05-31  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; only run FullscreetTopContentInset test on platforms
        where WK_API_ENABLED is set.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:

2016-05-31  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r201405): trailers.apple.com HUD is missing in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=158156
        <rdar://problem/26519589>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm: Added.
        (-[FullscreenChangeMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):

2016-05-31  Jon Lee  <jonlee@apple.com>

        Unreviewed: add myself to the reviewers list.

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

2016-05-31  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Provide alternative mirror for the ICU tarball.
        https://bugs.webkit.org/show_bug.cgi?id=154530

        Unreviewed.

        * gtk/jhbuild.modules: After r201449 the GTK+ ARM buildbot is having
        a hard time trying to download the ICU tarball from download.icu-project.org
        (which redirects to sourceforge and gives problems with something related to
        SSL). Provide this alternative mirror to make things working back.

2016-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/geolocation-permission-requests is failing since r201423
        https://bugs.webkit.org/show_bug.cgi?id=158200

        Reviewed by Philippe Normand.

        This is because geolocation is no longer allowed for non secure sites, like HTTP. In that case
        POSITION_UNAVAILABLE is returned without asking the API layer.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests): Keep the HTTP case to check that it indeed returns
        POSITION_UNAVAILABLE and use HTTPS URLs to check permission requests are allowed or denied. Also stop using the
        document title, and use user script messages that are more reliable instead.

2016-05-28  Aakash Jain  <aakash_jain@apple.com>

        tests fail if display sleeps while run-webkit-tests is running
        https://bugs.webkit.org/show_bug.cgi?id=153919

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (addDisplaySleepAssertion): Use PreventUserIdleSystemSleep flag, same as set by caffeinate tool.

2016-05-27  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Display failing JSC stress tests in buildbot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=156595

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.javaScriptCoreTestFailuresURLForIteration):
        (Buildbot.prototype.javaScriptCoreTestStdioUrlForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration):
        (BuildbotIteration.prototype._parseData):
        (BuildbotIteration.prototype.loadLayoutTestResults):
        (BuildbotIteration.prototype.):
        (BuildbotIteration.prototype.loadJavaScriptCoreTestResults):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._createLoadingIndicator):
        (BuildbotQueueView.prototype.):
        (BuildbotQueueView.prototype._onPopoverCopy):
        (BuildbotQueueView.prototype._popoverContentForJavaScriptCoreTestRegressions):
        (BuildbotQueueView.prototype._presentPopoverForJavaScriptCoreTestRegressions):
        (BuildbotQueueView.prototype._addIterationHeadingToPopover):
        (BuildbotQueueView.prototype._testStepFailureDescription):
        (BuildbotQueueView.prototype._testStepFailureDescriptionWithCount):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults.prototype.addJavaScriptCoreTestFailures):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype.update):
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions):
        (BuildbotTesterQueueView.prototype._presentPopoverForLayoutTestRegressions):
        (BuildbotTesterQueueView.prototype._testStepFailureDescription): Deleted.
        (BuildbotTesterQueueView.prototype._testStepFailureDescriptionWithCount): Deleted.
        (BuildbotTesterQueueView.prototype.): Deleted.
        (BuildbotTesterQueueView.prototype.content.oncopy): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js.
        (MockBuildbot):
        (MockBuildbot.prototype.buildPageURLForIteration):
        (MockBuildbot.prototype.javaScriptCoreTestFailuresURLForIteration):
        (MockBuildbot.prototype.javaScriptCoreTestStdioUrlForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js:
        (MockBuildbotQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js.
        (MockBuildbotTestResults):
        (MockBuildbotTestResults.prototype.addJavaScriptCoreTestFailures):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js:

2016-05-27  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Display failing JSC stress tests in buildbot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=156595

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.javaScriptCoreTestFailuresURLForIteration): Generate the URL for raw JSON output of
        JSC tests.
        (Buildbot.prototype.javaScriptCoreTestStdioURLForIteration): Generate the URL for human-readable stdio output
        of JSC tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Display JSC test results in popover.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration): Add javaScriptCoreTestResults variable.
        (BuildbotIteration.prototype.): Check for javascriptcore tests step.
        (BuildbotIteration.prototype.loadLayoutTestResults): Add comma at closing brace.
        (BuildbotIteration.prototype.loadJavaScriptCoreTestResults): Fetch JSON from Buildbot server.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._createLoadingIndicator): Reusable function.
        (BuildbotQueueView.prototype._onPopoverCopy): Reusable copy event handler to allow accurate copying of text
        from popovers.
        (BuildbotQueueView.prototype._popoverContentForJavaScriptCoreTestRegressions): Generates the popover bubble's
        inner HTML from the JSC failure data.
        (BuildbotQueueView.prototype._presentPopoverForJavaScriptCoreTestRegressions): Generate the popover bubble
        for JSC results and handle request failures.
        (BuildbotQueueView.prototype._testStepFailureDescription): Moved from subclass.
        (BuildbotQueueView.prototype._testStepFailureDescriptionWithCount): Moved from subclass.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults.prototype.addJavaScriptCoreTestFailures): Parse JSON into a list of failing tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus): Instantiate PopoverTrackers for builds whose 
        only failures are JSC tests.
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions): Use _onPopoverCopy.
        (BuildbotTesterQueueView.prototype._presentPopoverForLayoutTestRegressions): Use _createLoadingIndicator.
        (BuildbotTesterQueueView.prototype._testStepFailureDescription): Deleted. Moved to superclass.
        (BuildbotTesterQueueView.prototype._testStepFailureDescriptionWithCount): Deleted. Moved to superclass.
        (BuildbotTesterQueueView.prototype.content.oncopy): Deleted. Using superclass's reusable function as copy handler instead.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html: Add new script files.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js: Added.
        (MockBuildbot): Mocked version of Buildbot, only containing URL methods.
        (MockBuildbot.prototype.buildPageURLForIteration): Same as real Buildbot.js
        (MockBuildbot.prototype.javaScriptCoreTestFailuresURLForIteration): Points to local file containing JSON for test.
        (MockBuildbot.prototype.javaScriptCoreTestStdioURLForIteration): Same as real Buildbot.js
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js:
        (MockBuildbotQueue): Use a MockBuildbot() instead of a string.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js: Added.
        (MockBuildbotTestResults): Mocked version of BuildbotTestResults.
        (MockBuildbotTestResults.prototype.addJavaScriptCoreTestFailures): Sets the 'regressions' variable.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js: Add four groups of tests.

2016-05-27  Chris Dumez  <cdumez@apple.com>

        WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables
        https://bugs.webkit.org/show_bug.cgi?id=158111

        Reviewed by Darin Adler.

        WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables.
        These are often used cross-thread and copying the captured lambda variables can be
        dangerous (e.g. we do not want to copy a String after calling isolatedCopy() upon
        capture).

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForNavigationAction):

2016-05-27  Brady Eidson  <beidson@apple.com>

        Modern IDB: After closing a Netflix video, trying to watch it again fails.
        <rdar://problem/25092473> and https://bugs.webkit.org/show_bug.cgi?id=158160

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup-1.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup-2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm: Added.

2016-05-27  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] accessibility/gtk/no-notification-for-unrendered-iframe-children.html began failing after r201416
        https://bugs.webkit.org/show_bug.cgi?id=158152

        Reviewed by Chris Fleizach.

        The failure is actually a bug fix because only one child is being added, but two
        notifications were being emitted. Now there is only one notification. To verify
        this was the case, we really should examine the child reportedly being added. That
        child is the ATK event's any_data, so pass along that child to the listener.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:

2016-05-26  Alex Christensen  <achristensen@webkit.org>

        Expose content extension failure error codes in SPI
        https://bugs.webkit.org/show_bug.cgi?id=158095
        rdar://problem/26475651

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:
        (checkDomain):
        (TEST_F):
        Add tests that use the new enum.

2016-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        New intl-numberformat.js test fails on many Linux platforms
        https://bugs.webkit.org/show_bug.cgi?id=154530

        Reviewed by Darin Adler.

        The test is actually failing because of a bug in the icu version installed in the bots, using a newer version of
        icu makes the tests pass and explains why it worked for some people. So, let's add icu 55.1 to the internal
        jhbuild to ensure JSC tests pass in the bots no matter what the icu version installed is.

        * gtk/jhbuild.modules:

2016-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Allow JSBench to use precise time
        https://bugs.webkit.org/show_bug.cgi?id=158050

        Reviewed by Geoffrey Garen.

        JSBench use `new Date().getTime()` without options and there is no way to use precise time.
        This patch modifies the JSBench code to inject the code taking the precise time.
        `currentTimeInMS` is given by the benchmerk harness and JSBench uses it.
        run-jsc-benchmark switches this function's implementation between `Date.now()` and
        testRunner's precise time one.

        While this patch modifies the code of JSBench, the last release of JSBench is Jan 2013 and
        the contents are not changed for a long time. As described in the original paper[1], the
        tests can be generated by using JSBench's record & replay system, but in that case, we can
        adopt this modification by changing the tool side.

        We also add currentTimeInMS implementation in harness.js and u?rem.js directly.
        u?rem.js implementation is required when it is executed in u?rem.html without harness.
        And harness.js implementation is required when it is executed in the JSBench's harness.
        In these implementation, we follow the JetStream's time measuring function: performance.now(),
        preciseTime(), or Date.now().

        [1]: http://dl.acm.org/citation.cfm?id=2048119

        * Scripts/run-jsc-benchmarks:

2016-05-26  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r201427.
        https://bugs.webkit.org/show_bug.cgi?id=157423
        <rdar://problem/23751632>

        A debug assertion was firing during some test runs due to the Geolocation permission
        being turned off during the test. The timer logic was originally written to assert
        if the timer fired when permissions were disabled. But this is no longer valid,
        because we expect the Geolocation system to be active and become deactivated if the
        browsing context violates one of the security criteria.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate timerFired]): Remove invalid assertion.

2016-05-26  Filip Pizlo  <fpizlo@apple.com>

        ScopedLambda should have a lifetime story that makes sense to the compiler
        https://bugs.webkit.org/show_bug.cgi?id=158118

        Reviewed by Mark Lam.
        
        Added a test case. This test crashes before the fix and now it passes.

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

2016-05-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Build fix

        Rubber stamped by Lucas Forschler.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2016-05-25  Anders Carlsson  <andersca@apple.com>

        Get rid of WTF/Functional.h
        https://bugs.webkit.org/show_bug.cgi?id=158081

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Functional.cpp: Removed.
        (TestWebKitAPI::returnFortyTwo): Deleted.
        (TestWebKitAPI::TEST): Deleted.
        (TestWebKitAPI::multiplyByTwo): Deleted.
        (TestWebKitAPI::multiplyByOneAndAHalf): Deleted.
        (TestWebKitAPI::multiply): Deleted.
        (TestWebKitAPI::subtract): Deleted.
        (TestWebKitAPI::A::A): Deleted.
        (TestWebKitAPI::A::f): Deleted.
        (TestWebKitAPI::A::addF): Deleted.
        (TestWebKitAPI::B::B): Deleted.
        (TestWebKitAPI::B::~B): Deleted.
        (TestWebKitAPI::B::ref): Deleted.
        (TestWebKitAPI::B::deref): Deleted.
        (TestWebKitAPI::B::f): Deleted.
        (TestWebKitAPI::B::g): Deleted.
        (TestWebKitAPI::Number::create): Deleted.
        (TestWebKitAPI::Number::~Number): Deleted.
        (TestWebKitAPI::Number::value): Deleted.
        (TestWebKitAPI::Number::Number): Deleted.
        (TestWebKitAPI::multiplyNumberByTwo): Deleted.

2016-05-25  Daniel Bates  <dabates@apple.com> and Brent Fulgham  <bfulgham@apple.com>

        [WebSockets] No infrastructure for testing secure web sockets (wss)
        https://bugs.webkit.org/show_bug.cgi?id=157884
        <rdar://problem/26477197>

        Reviewed by Andy Estes.

        Add support to webkitpy to start and stop a secure Web Socket server running on port 9323
        using the certificate, private-key from file LayoutTests/http/conf/webkit-httpd.pem. Also
        teaches run-webkit-httpd to start and stop the Web Socket servers.

        Modify DumpRenderTree and WebKitTestRunner to understand a new testRunner method,
        'setAllowsAnySSLCertificate', which allows us to use the same self-signed test certificate
        we do for our HTTPS tests.
        
        * DumpRenderTree/TestRunner.cpp:
        (setAllowsAnySSLCertificateCallback):
        (TestRunner::setAllowsAnySSLCertificate):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Make sure we turn off the new flag between tests.
        * Scripts/run-webkit-httpd:
        (main): Start the websocket server at launch.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Remove dead code.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket.__init__): Cleanup code.
        (PyWebSocket): Pass '--tls-client-ca' to start command.
        (PyWebSocket._prepare_config): Cleanups.
        * Scripts/webkitpy/port/base.py:
        (Port.to.start_http_server):
        (Port.to):
        (Port.to._extract_certificate_from_pem): Added.
        (Port.to._extract_private_key_from_pem): Added.
        (Port.to.start_websocket_server): Start secure socket server.
        (Port.to.stop_websocket_server): Stop secure socket server.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Add new API.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setAllowsAnySSLCertificate): Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowsAnySSLCertificate): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-05-25  Keith Miller  <keith_miller@apple.com>

        run-jsc-benchmarks should use the new JSBench rather than look for it in the config file.
        https://bugs.webkit.org/show_bug.cgi?id=158077

        Reviewed by Mark Lam.

        Since we didn't have JSBench in the tree before we needed to lookup the path to it from
        benchmark config file. That's no longer the case so we should just fix it in the script.

        * Scripts/run-jsc-benchmarks:

2016-05-24  Aakash Jain  <aakash_jain@apple.com>

        Reorganize dashboard code: move code from _timeIntervalString to base class
        https://bugs.webkit.org/show_bug.cgi?id=158047
        rdar://problem/26457274

        Reviewed by Alexey Proskuryakov and Dean Johnson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueView.js:
        (BubbleQueueView.prototype._timeIntervalString): Moved core logic to base class so as to make it re-usable.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js:
        (QueueView.prototype._readableTimeString): Same.

2016-05-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][GTK][EFL] Allow run-jsc-benchmark to use WebKitTestRunner in EFL / GTK ports
        https://bugs.webkit.org/show_bug.cgi?id=158016

        Reviewed by Darin Adler.

        This patch easily allows run-jsc-benchmark to run WebKitTestRunner-based tests in GTK / EFL ports.
        This change encourages us to run tests with the browser-heap in nix environments.
        Two things are modified.

        1. Add a fall-back to look up the library path in GTK / EFL / JSCOnly environment.

            In GTK / EFL / JSCOnly ports, the hierarchy of the build directory is slightly different from Apple port.
            For example, the jsc bin locate at "WebKitBuild/XXX/Release/bin/jsc" and the lib path is "WebKitBuild/XXX/Release/lib"
            while the one of Apple port is "WebKitBuild/XXX/Release/jsc" and "WebKitBuild/XXX/Release/lib".
            And based on this library path, we configure the required environment variables to run WebKitTestRunner in GTK / EFL ports.

        2. Add --dependencies option to add dependent library paths.

            While Apple ports does not require any additional dependent library path, GTK and EFL ports require this path,
            typically WebKitBuild/DependenciesGTK and WebKitBuild/DependenciesEFL respectively. So we need to add such paths to LD_LIBRARY_PATH.
            Instead of adding platform options like --gtk / --efl, we add --dependencies option to add the additional dependent library paths.
            The platform options still require the build path to look up the dependent library directory. So we pass it directly through --dependencies.
            Multiple additional dependent library paths can be added by using --dependencies multiple times.

        By using these change, we can run benchmarks that require WebKitTestRunner in GTK / EFL ports (If you would like to run them in a headless manner, you can use xvbuf.).
        Example:
            `Tools/Scripts/run-jsc-benchmarks baseline:WebKitBuild/baseline/Release/bin/WebKitTestRunner patched:WebKitBuild/patched/Release/bin/WebKitTestRunner --dependencies WebKitBuild/DependenciesGTK/Root/lib --js-bench`

        * Scripts/run-jsc-benchmarks:

2016-05-20  Keith Miller  <keith_miller@apple.com>
        We should have JSBench in PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=157952

        Rubber-stamped by Saam Barati.

        This changes the runner to use the layout of the newest version of JSBench.

        * Scripts/run-jsc-benchmarks:

2016-05-24  Chris Dumez  <cdumez@apple.com>

        Use auto for some of our lambda function parameters
        https://bugs.webkit.org/show_bug.cgi?id=158001

        Reviewed by Darin Adler.

        Use auto for some of our lambda function parameters now that we build with c++14.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::willDestroyPage):

2016-05-23  Brady Eidson  <beidson@apple.com>

        check-webkit-style gets flags std::literals::chrono_literals as bad naming.
        https://bugs.webkit.org/show_bug.cgi?id=157969

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2016-05-22  Alexey Proskuryakov  <ap@apple.com>

        RELEASE_ASSERT(TestController::singleton().isCurrentInvocation(testInvocation)) is sometimes hit when running tests
        https://bugs.webkit.org/show_bug.cgi?id=157977
        rdar://problem/20874156

        Reviewed by David Kilzer.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): Be more certain to launch a new process when there was
        a timeout detected. If we don't, there is a chance that the process is not quite frozen,
        and will still send a response that we no longer expect.
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness): Print timeout details to stderr
        too, as stdout is not available, at least not in the case that I was observing.

2016-05-22  Brady Eidson  <beidson@apple.com>

        Move to C++14.
        https://bugs.webkit.org/show_bug.cgi?id=157948

        Reviewed by Michael Catanzaro.

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

2016-05-21  Aakash Jain  <aakash_jain@apple.com>

        Simulator launch fails intermittently due to failure in checking simulator boot status
        https://bugs.webkit.org/show_bug.cgi?id=157965
        rdar://problem/26402404

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.wait_until_device_is_booted): Ignore CalledProcessError exception while checking
        whether simulator has finished booting.

2016-05-21  Dan Bernstein  <mitz@apple.com>

        Silence warnings from svn propget when using newer versions of Subversion.
        https://bugs.webkit.org/show_bug.cgi?id=157879

        Reviewed by Daniel Bates.

        * Scripts/prepare-ChangeLog:
        (attributeCommand): Redirect svn propget stderr to /dev/null.
        * Scripts/svn-create-patch:
        (findMimeType): Ditto.

2016-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark's results should contain Animometer's debug output
        https://bugs.webkit.org/show_bug.cgi?id=157941

        Reviewed by Stephanie Lewis.

        Modified the Animometer patch to store debug output and made benchmark_runner extract them together as a single array.
        The result can be dragged and dropped into Animometer's developer.html page.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner._run_one_test): Parse JSON here instead of doing it in multiple call sites.
        (BenchmarkRunner._run_benchmark): Strip debugOutput from individual test result, and merge them together separately.
        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch:
        Modified the patch to store the debug output.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        (ServerControl.render_POST): Fixed a bug that POST to /report results in 500 because getvalue is not defined
        when the request body is larger than a certain size on twisted.

2016-05-20  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Use clearer names for JSON output of javascriptcore test results
        https://bugs.webkit.org/show_bug.cgi?id=157921

        Reviewed by Alexey Proskuryakov.

        "failures" and "apiTestResult" were somewhat ambiguous names. 
        
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): "failures" -> "stressFailures", "apiTestResult" -> "allApiTestsPassed".

2016-05-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix API test introduced in r201213.

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

2016-05-20  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>

        Implement operator== for WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=157883

        Reviewed by Chris Dumez.

        Implement operator== and operator!= for WeakPtr and update code to use the operators.

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

2016-05-19  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add JSON results to 32-bit and CLoop JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=157929

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunLLINTCLoopTests): Change command-line parameters to run-javascriptcore-tests in order to get JSON output.
        (Run32bitJSCTests): Change command-line parameters to run-javascriptcore-tests in order to get JSON output.

2016-05-19  Csaba Osztrogonác  <ossy@webkit.org>

        Typo fix in import-test262-tests
        https://bugs.webkit.org/show_bug.cgi?id=157902

        Reviewed by Keith Miller.

        * Scripts/import-test262-tests:

2016-05-19  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix the gst-libav build on ARM Thumb2 after r199649
        https://bugs.webkit.org/show_bug.cgi?id=157893

        Reviewed by Antonio Gomes.

        * efl/patches/gst-libav.patch:

2016-05-19  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r200951): VideoControlsManager API tests time out
        https://bugs.webkit.org/show_bug.cgi?id=157896
        <rdar://problem/26326293>

        Reviewed by Eric Carlson.

        Explicitly disable user gesture requirements for playback.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):

2016-05-19  Csaba Osztrogonác  <ossy@webkit.org>

        Slow JSC stress tests times out in 32 bit debug mode
        https://bugs.webkit.org/show_bug.cgi?id=154964

        Reviewed by Michael Catanzaro.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Pass through the --debug option.
        * Scripts/run-jsc-stress-tests: Increase the timeout for debug builds.

2016-05-18  Aakash Jain  <aakash_jain@apple.com>

        Remove underline from Status Bubbles on dashboard
        https://bugs.webkit.org/show_bug.cgi?id=157870
        rdar://problem/26332321

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css: Reverted style 
        change made in http://trac.webkit.org/r200880

2016-05-18  Michael Saboff  <msaboff@apple.com>

        r199812 broke test262
        https://bugs.webkit.org/show_bug.cgi?id=157595

        Reviewed by Filip Pizlo.

        Added a new run type, runOneLargeHeap, for tests that use a large amount of memory.
        This run type will not run with the --memory-limited option.  Without that option,
        we'll only the default test variant.

        * Scripts/run-jsc-stress-tests:

2016-05-18  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r200534) Command-+ no longer zooms pages 
        https://bugs.webkit.org/show_bug.cgi?id=157826
        rdar://problem/26334636

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Remove ENABLE() #ifdefs that do nothing (see http://webkit.org/b/157828).

2016-05-18  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/meter-element.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=115633

        Reviewed by Chris Fleizach.

        Implement AccessibilityUIElement::valueDescription() and add mapping
        from ATK_ROLE_LEVEL_BAR to AXProgressIndicator.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::valueDescription):

2016-05-18  Brady Eidson  <beidson@apple.com>

        Modern IDB: Make TestRunner.clearAllDatabases also delete IndexedDB databases (once doing so is supported).
        https://bugs.webkit.org/show_bug.cgi?id=157823

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::clearAllDatabases):
        
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearAllDatabases):
        
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2016-05-18  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Use WebCore Accessibility's AccessibilityText for AtkObject name and description
        https://bugs.webkit.org/show_bug.cgi?id=157822

        Reviewed by Chris Fleizach.

        Fix AccessibilityUIElement::helpText() so that it returns an empty string rather than
        nullptr upon failure.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::helpText):

2016-05-17  Beth Dakin  <bdakin@apple.com>

        Make handleAcceptedCandidate a public function
        https://bugs.webkit.org/show_bug.cgi?id=157763
        -and corresponding-
        rdar://problem/26206397

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/autofocused-text-input.html: Added.
        * TestWebKitAPI/Tests/mac/ViewWithEditableAreaLeak.mm: Added.
        (-[DoNotLeakWebView dealloc]):
        (-[DoNotLeakWebView showCandidates:forString:inRect:forSelectedRange:view:completionHandler:]):
        (-[DoNotLeakFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2016-05-17  Keith Miller  <keith_miller@apple.com>

        Add test262 harness support code
        https://bugs.webkit.org/show_bug.cgi?id=157797

        Reviewed by Filip Pizlo.

        The import-test262-tests script is used to generate the yaml file used to run test262. It
        takes a path to the local copy of the Test262 repository as well as an optional path to file
        containing a list of failures. This script currently just creates the yaml file used to run
        the script. It does not relocate the test files into our tests directory. In the future I
        plan to add that feature but it didn't seem essential for the first iteration. Since many
        test262 tests need to be run in both strict and non-strict mode, import-test262-tests
        creates two separate runs for those tests. This enables us to distinguish between failures
        in only one of the two modes.

        This patch also updates the run-jsc-stress-tests Script to run tests from Test262. In order
        to do so two new run commands were needed runTest262 and prepareTest262Fixture. runTest262
        takes an actual test file along with the metadata associated with it. prepareTest262Fixture
        takes a fixture file (used by module tests for importing) and makes sure that file is
        properly relocated to the test runner directory.

        The proccess I used to import the tests was to first run import-test262-tests to create a
        yaml for all the tests (import-test262-tests assumes all tests pass if to failures file is
        passed). Then I ran the generated yaml file with "run-jsc-stress-tests -v -c 1" piping the
        output to a file and collected all the lines with "FAIL" in it. Finally, I reran
        import-test262-tests with the new failure file to create the final yaml.

        * Scripts/import-test262-tests: Added.
        * Scripts/run-jsc-stress-tests:

2016-05-16  Enrica Casucci  <enrica@apple.com>

        build fix after r200968 and r200969

        Unreviewed.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2016-05-16  Jer Noble  <jer.noble@apple.com>

        API test WebKit2.MSEIsPlayingAudio timing out after r200951
        https://bugs.webkit.org/show_bug.cgi?id=157748

        Reviewed by Eric Carlson.

        The file-with-mse.html testcase only calls play() once it's own XHR loading is complete; the
        "user gesture" check fails at that point.  Call play() up front; playback will begin as soon
        as enough data is loaded.

        * TestWebKitAPI/Tests/WebKit2/file-with-mse.html:

2016-05-16  Enrica Casucci  <enrica@apple.com>

        Remove unused initializer for WebEvent on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=157689

        Reviewed by Anders Carlsson.

        Adopting different initializer for WebEvent to fix the build.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2016-05-16  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add machine-readable results for JSC API tests to the Buildbot json log
        https://bugs.webkit.org/show_bug.cgi?id=157642

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): Use --no-fail-fast option on run-javascriptcore-tests
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Abstracted out writing JSON to file (new function below)
        (writeJsonDataIfApplicable): Added

2016-04-06  Jer Noble  <jer.noble@apple.com>

        [WK2] Add API to WKWebViewConfiguration to control autoplay policy.
        https://bugs.webkit.org/show_bug.cgi?id=156312

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (TEST_F):

2016-05-16  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r192098): Content missing after copy and paste to Notes App on retina displays
        https://bugs.webkit.org/show_bug.cgi?id=157630
        <rdar://problem/25277577>

        Reviewed by Simon Fraser.

        Update test infrastructure to support checking the number of images in the pasteboard.

        * DumpRenderTree/TestRunner.cpp:
        (imageCountInGeneralPasteboardCallback): Added.
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::imageCountInGeneralPasteboard): Added.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::imageCountInGeneralPasteboard): Added stub method.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::imageCountInGeneralPasteboard): Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::imageCountInGeneralPasteboard): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::imageCountInGeneralPasteboard): Added stub implementation.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): Handle copy message.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::imageCountInGeneralPasteboard): Added.

2016-05-13  Dewei Zhu  <dewei_zhu@apple.com>

        Fix JSBench which causes math domain error in run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=157697
        <rdar://problem/26279292>

        Reviewed by Ryosuke Niwa.

        Some tests of JSBench give time usage to be 0 ms which will causes error while calculating geometric mean.
        Also fix a round-off error while calculating stdev.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults._format_values):
        * Scripts/webkitpy/benchmark_runner/data/patches/JSBench.patch:

2016-05-13  Brady Eidson  <beidson@apple.com>

        Extend protector naming code style guideline to cover operator= assignment.
        https://bugs.webkit.org/show_bug.cgi?id=157693

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2016-05-13  Aakash Jain  <aakash_jain@apple.com>

        Dashboard code restructuring
        https://bugs.webkit.org/show_bug.cgi?id=157680
        <rdar://problem/14736888>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueView.js:
        (BubbleQueueView.prototype.addLinkToRow): Moved to base class.
        (BubbleQueueView.prototype.addTextToRow): Moved to base class.
        (BubbleQueueView.prototype._addDividerToPopover): Moved to base class.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update): Passing additional argument to _appendPendingRevisionCount.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Passing additional argument to _appendPendingRevisionCount.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update): Passing additional argument to _appendPendingRevisionCount.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Moved to base class and modified to take
        additional argument.
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Moved to base class.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Moved to base class.
        (BuildbotQueueView.prototype._addDividerToPopover): Moved to base class.
        (BuildbotQueueView.prototype._formatRevisionForDisplay): Moved to base class.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady): Display any customView if available.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js:
        (QueueView.prototype.addLinkToRow): Moved from child class, no changes.
        (QueueView.prototype.addTextToRow): Moved from child class, no changes.
        (QueueView.prototype._addDividerToPopover): Moved from child class, no changes.
        (QueueView.prototype._appendPendingRevisionCount): Moved from child class, made it more generic
        by taking latestIterationGetter method as an argument.
        (QueueView.prototype._popoverLinesForCommitRange): Moved from child class, no changes.
        (QueueView.prototype._presentPopoverForPendingCommits): Moved from child class, no changes.
        (QueueView.prototype._formatRevisionForDisplay): Moved from child class, no changes.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (a:hover:link): Underline only when there is a link.

2016-05-13  Yoav Weiss  <yoav@yoav.ws>

        Turn on WEB_TIMING for all ports
        https://bugs.webkit.org/show_bug.cgi?id=157673

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm: Make sure that WEB_TIMING is on by default.

2016-05-13  Brady Eidson  <beidson@apple.com>

        Protector Ref/RefPtrs should have a specified naming style.
        https://bugs.webkit.org/show_bug.cgi?id=157591

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2016-05-12  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(ES6_ARROWFUNCTION_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=157564

        Reviewed by Darin Adler.

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

2016-05-11  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/aria-readonly.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98357

        Reviewed by Chris Fleizach.

        Add checks to isAttributeSettable() for ATK_STATE_READ_ONLY and the 'readonly'
        AtkObject attribute along with ATK_STATE_CHECKABLE for toggle-able elements,
        ATK_STATE_SELECTABLE for select elements, and ATK_STATE_FOCUSABLE combined
        with range verification for inputs which implement AtkValue. The latter two
        additions are admittedly a heuristic workaround for platform accessibility
        API differences. But they should be sufficient to facilitate cross-platform
        testing of isAttributeSettable() for form elements which lack ARIA attributes.

        Bump the minimum version of at-spi2-core and at-spi2-atk
        to 2.15.4 (earliest version that supports STATE_READ_ONLY).

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isAttributeSettable):
        * gtk/jhbuild.modules:

2016-05-10  Ryan Haddad  <ryanhaddad@apple.com>

        Another attempt to fix the build after r200668.

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-05-10  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Mac build after r200668.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2016-05-10  Sam Weinig  <sam@webkit.org>

        Tweak underline style for data detected links
        https://bugs.webkit.org/show_bug.cgi?id=157546

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/Color.cpp: Added.
        (TestWebKitAPI::TEST):
        Add tests for the new Color::getHSV() function.

2016-05-10  Filip Pizlo  <fpizlo@apple.com>

        Internal JSC profiler should have a timestamped log of events for each code block
        https://bugs.webkit.org/show_bug.cgi?id=157538

        Reviewed by Benjamin Poulain.

        * Scripts/display-profiler-output:

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

        [Linux] Remove seccomp filters support
        https://bugs.webkit.org/show_bug.cgi?id=157380

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp: Removed.
        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2016-05-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS] visibility:hidden -webkit-overflow-scrolling: touch divs can interfere with page scrolling
        https://bugs.webkit.org/show_bug.cgi?id=157496
        rdar://problem/22963278

        Reviewed by Tim Horton.

        Enhance UIScriptController to generate a drag, which is useful for scrolling.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dragFromPointToPoint):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dragFromPointToPoint):

2016-05-09  Simon Fraser  <simon.fraser@apple.com>

        Remove testRunner.setTextAutosizingEnabled and migrate the one test that uses it
        https://bugs.webkit.org/show_bug.cgi?id=157480

        Reviewed by Zalan Bujtas.

        Migrate the one test that used testRunner.setTextAutosizingEnabled() to window.internals.settings.setTextAutosizingEnabled()
        and move it next to the other iOS text autosizing tests.
        
        Remove testRunner.setTextAutosizingEnabled(), which was only implemented in DumpRenderTree.

        * DumpRenderTree/TestRunner.cpp:
        (setTextAutosizingEnabledCallback): Deleted.
        (TestRunner::staticFunctions): Deleted.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setTextAutosizingEnabled): Deleted.

2016-05-07  Darin Adler  <darin@apple.com>

        Next step on dictionary bindings, along with other bindings refinements
        https://bugs.webkit.org/show_bug.cgi?id=157451

        Reviewed by Chris Dumez.

        * Scripts/do-webcore-rename: Use this to rename JSDOMBuild.h to JSDOMConvert.h.
        Also skip test expectations in a directory that this was modifying unnecessarily.

2016-05-06  Simon Fraser  <simon.fraser@apple.com>

        Enable IOS_TEXT_AUTOSIZING on Mac and make it testable
        https://bugs.webkit.org/show_bug.cgi?id=157432
        rdar://problem/16406720

        Reviewed by Dean Jackson.

        Enable IOS_TEXT_AUTOSIZING on Mac so it can be tested.

        Make the setTextAutosizingEnabled() Setting work, and plumb it through WK1 and WK2
        preferences for WTR and DRT. Make textAutosizingWindowSizeOverride() work, for layout tests.
        These two settings are shared with TEXT_AUTOSIZING.

        Add a TextAutosizing log channel, which is useful for generated -expected.html results.

        Move adjustComputedFontSizesOnBlocks() and related code from RenderObject to RenderElement
        without changes.

        An implication of this set of changes is that the way clients enable text autosizing
        has changed. Previously, they set the "MinimumZoomFontSize" preference to 0.
        Settings::defaultMinimumZoomFontSize() used to do this in order to enable text autosizing
        on iPhone only, not iPad.

        Now the preferred technique is to leave minimumZoomFontSize alone, and to use textAutosizingEnabled()
        instead. Settings::defaultTextAutosizingEnabled() now does the check for iPhone.

        UIWebView calls WebKitGetMinimumZoomFontSize() to setup the default minimum font zoom size,
        which will now always return 15, but had no other code that toggled this. So it's safe to just rely
        on Settings::defaultTextAutosizingEnabled() doing the right thing for iPhone/iPad.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setTextAutosizingEnabled):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):

2016-05-06  Dean Jackson  <dino@apple.com>

        Regions, Shapes and Tracks don't need runtime features
        https://bugs.webkit.org/show_bug.cgi?id=157426
        <rdar://problem/26146262>

        Reviewed by Simon Fraser.

        The following RuntimeEnabledFeatures can be removed since
        we have no need to disable them (they are stable and have
        shipped for a while):
        - CSS Regions
        - CSS Shapes
        - Media tracks

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Deleted.

2016-05-06  Ryan Haddad  <ryanhaddad@apple.com>

        Increase delay when launching multiple ios-simulators in parallel
        https://bugs.webkit.org/show_bug.cgi?id=157422

        Reviewed by Alexey Proskuryakov.

        Tests are intermittently failing when launching multiple simulators in parallel due to "You are opening
        this application for the first time" confirmation dialogs. Increasing the delay to alleviate this issue.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run):

2016-05-06  Per Arne Vollan  <peavo@outlook.com>

        [Win] Remove WinXP support.
        https://bugs.webkit.org/show_bug.cgi?id=157416

        Reviewed by Brent Fulgham.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (enableTerminationOnHeapCorruption):

2016-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Unprefix CSS Grid Layout properties
        https://bugs.webkit.org/show_bug.cgi?id=157137

        Reviewed by Simon Fraser.

        Remove "-webkit" prefix from all the grid layout properties,
        including the display value.
        Update the source code to remove the prefix where it was used too.

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

2016-05-05  Alexey Proskuryakov  <ap@apple.com>

        Partially revert http://trac.webkit.org/r200504
        Improve HTTP test names in WebKitTestRunner's crash report information
        https://bugs.webkit.org/show_bug.cgi?id=157389

        * WebKitTestRunner/cocoa/CrashReporterInfo.mm: Turns out that we can't have URLs
        in crash reporter information.

2016-05-05  Alexey Proskuryakov  <ap@apple.com>

        Improve HTTP test names in WebKitTestRunner's crash report information
        https://bugs.webkit.org/show_bug.cgi?id=157389

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame): Added a FIXME.

        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        (WTR::testDescription): Don't bail out if the port is neither 8000 nor 8443; we
        use other port numbers too. For http tests, return the complete URL string, not
        just the path.

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

        Blocked redirected main resource requests need descriptive errors
        https://bugs.webkit.org/show_bug.cgi?id=156828
        rdar://problem/25711316

        Reviewed by Daniel Bates.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        Print out the error type to make sure we have the most descriptive error type.

2016-05-05  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Bump internal jhbuild versions to 1.8.0 and patches to support MSE
        https://bugs.webkit.org/show_bug.cgi?id=157341

        Reviewed by Xabier Rodriguez-Calvar.

        * gtk/jhbuild.modules:
        * gtk/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch: Added.
        * gtk/patches/gst-plugins-good-use-the-tfdt-decode-time.patch: Added.

2016-05-04  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add JSC test results in JSON format to a Buildbot log
        https://bugs.webkit.org/show_bug.cgi?id=156920

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): Move command-line option for output file out
        of WithProperties.

2016-05-04  Dean Jackson  <dino@apple.com>

        TestRunner should always enable all the experimental features
        https://bugs.webkit.org/show_bug.cgi?id=157360
        <rdar://problem/26099748>

        Reviewed by Anders Carlsson.

        Call the new SPI that enables all the experimental features.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2016-05-04  Mark Lam  <mark.lam@apple.com>

        ES6 Function.name inferred from property names of literal objects can break some websites.
        https://bugs.webkit.org/show_bug.cgi?id=157246

        Reviewed by Geoffrey Garen.

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

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        - Add needsSiteSpecificQuirks to WKTR options that can be set. 

2016-05-04  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: ARIA 'region' role is now a landmark; HTML 'section' element should be a landmark only if named
        https://bugs.webkit.org/show_bug.cgi?id=157331

        Reviewed by Chris Fleizach.

        Add AXLandmarkRegion to the landmark strings handled by roleToString
        for objects with ATK_ROLE_LANDMARK.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2016-05-03  Beth Dakin  <bdakin@apple.com>

        Add VideoControlsManager tests
        https://bugs.webkit.org/show_bug.cgi?id=157332
        -and corresponding-
        rdar://problem/24358431

        Reviewed by Sam Weinig.

        This patch adds three VideoControlsManager tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm: Added.
        (-[DidPlayMessageHandler initWithWKWebView:]):
        (-[DidPlayMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.mp4: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-without-audio.html: Added.

2016-05-03  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] accessibility/document-attributes.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=125348

        Reviewed by Chris Fleizach.

        The test was failing because the WebArea is now being exposed with the role of
        ATK_ROLE_DOCUMENT_WEB; not ATK_ROLE_DOCUMENT_FRAME. Unfortunately, when that
        change was made, documentEncoding() and documentURI() were not updated accordingly.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):

2016-05-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * EWSTools/start-queue-win.sh: Establish proper VS2015 build
        environment at start of queue run.

2016-05-03  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] accessibility/content-editable-as-textarea.html fails
        https://bugs.webkit.org/show_bug.cgi?id=155353

        Reviewed by Darin Adler.

        The test was timing out because it expected an AXValueChanged notification.
        In ATK, AXValueChanged notifications are made for widgets which implement
        the AtkValue interface (sliders, progress bars, etc.). We should be listening
        for AXTextChanged instead. AtkText's text-insert and text-remove have been
        added to the AccessibilityNotificationHandler.

        Also, ATK's AccessibilityUIElement support had a number of unimplemented
        methods that are being used as part of the previously-failing test. Those
        methods are now implemented so that the ATK results are much more similar
        to those on the Mac.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):

2016-05-02  Brady Eidson  <beidson@apple.com>

        Add the ability to accumulate logs for specific logging channels to help diagnose test timeouts.
        https://bugs.webkit.org/show_bug.cgi?id=157274

        Reviewed by Alex Christensen.

        Add the new accumulate method to DRT's TestRunner, dump the accumulated logs if there's a timeout,
        and reset them in between tests:
        * DumpRenderTree/TestRunner.cpp:
        (accummulateLogsForChannel):
        (TestRunner::staticFunctions):
        (TestRunner::waitToDumpWatchdogTimerFired):
        (TestRunner::setAccummulateLogsForChannel):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

        Also add the new method to WKTR's TestRunner, but just stubbed for now:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::accummulateLogsForChannel):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-05-02  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add fail-fast option to run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=157270

        Reviewed by Geoffrey Garen.

        * Scripts/run-javascriptcore-tests: Add fail-fast command line option.
        Defaults to yes, which is the current behavior.

2016-05-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] MiniBrowser fails to build because libsoup link flags are not defined.
        https://bugs.webkit.org/show_bug.cgi?id=157268

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/CMakeLists.txt:

2016-04-30  Darin Adler  <darin@apple.com>

        Streamline and remove unused bindings generation code
        https://bugs.webkit.org/show_bug.cgi?id=157237

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Replace non-standard "int" with standard "long", which means the same thing.

2016-04-30  Darin Adler  <darin@apple.com>

        Next batch of conversions to use C++ enum class instead of strings for enumerations
        https://bugs.webkit.org/show_bug.cgi?id=157232

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/style/checker.py: Skip the bindings script tests when doing style
        checking. We don't want to waste time trying to make our generated code match our style.

2016-04-29  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add JSC test results in JSON format to a Buildbot log.
        https://bugs.webkit.org/show_bug.cgi?id=156920

        Reviewed by Daniel Bates.

        Generate JSON results for JSC tests and upload them to the master
        using Buildbot's logfiles machinery.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): Use --json-output option when invoking the
        run-javascriptcore-tests Perl script, and expose this JSON output as a 
        Buildbot log.
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Change key names and remove redundant count key.

2016-04-29  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Expose the value of aria-roledescription via an AtkObject attribute
        https://bugs.webkit.org/show_bug.cgi?id=146719

        Reviewed by Chris Fleizach.

        Implement roleDescription() so that the implementation can be tested.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::roleDescription):

2016-04-27  Alexey Proskuryakov  <ap@apple.com>

        Don't throttle GuardMalloc on 8-core Macs
        https://bugs.webkit.org/show_bug.cgi?id=157108

        Reviewed by Alex Christensen.

        This was making them slower unnecessarily.

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

2016-04-26  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed: add myself to the committers list.

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

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

        Fix text in log files autogenerated by import-w3c-tests
        https://bugs.webkit.org/show_bug.cgi?id=157021

        Unreviewed. Fixing the second typo.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_import_log):

2016-04-26  Filip Pizlo  <fpizlo@apple.com>

        WebCore on Mac ignores the user's preferred region (country) while getting the language
        https://bugs.webkit.org/show_bug.cgi?id=156993

        Reviewed by Geoffrey Garen.

        Change the test expectations for this test. If the variant is not explicitly specified in
        the AppleLanguage, then we use the locale's country code, which this test assumes is US.

        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm:
        (TestWebKitAPI::languageForSystemLanguage):
        (TestWebKitAPI::TEST):

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

        Remove the build flag for template elements
        https://bugs.webkit.org/show_bug.cgi?id=157022

        Reviewed by Daniel Bates.

        Removed the build option.

        * Scripts/webkitperl/FeatureList.pm:

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

        Fix text in log files autogenerated by import-w3c-tests
        https://bugs.webkit.org/show_bug.cgi?id=157021

        Reviewed by Chris Dumez.

        s/Webkit/WebKit/ and end each sentence with a period.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_import_log):

2016-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Guarantee FontPlatformData's m_cgFont is never nullptr
        https://bugs.webkit.org/show_bug.cgi?id=156929

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm:
        (TestWebKitAPI::TEST):

2016-04-25  Caitlin Potter  <caitp@igalia.com>

        [Tools] whitelist all-uppercase JSTokenType enum in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=156976

        Reviewed by Darin Adler.

        Mitigate style-checker spam on bugs which introduce new JavaScript
        token types.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.__init__):
        (_EnumState.process_clean_line):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing):

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

        Fix issues with content-animation performance tests
        https://bugs.webkit.org/show_bug.cgi?id=157001

        Reviewed by Sam Weinig.

        Add patch content for svg-animation.html, and fix the paths in the patch so
        it applies correctly.

        Add the patch file to the .plan file.

        * Scripts/webkitpy/benchmark_runner/data/patches/ContentAnimation.patch:
        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan:

2016-04-25  Brady Eidson  <beidson@apple.com>

        Tweaking IndexedDB watchlist and adding myself to it.

        * Scripts/webkitpy/common/config/watchlist:

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

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

        Might break buildbot when master is restarted (Requested by
        Srinivasan Vijayaraghava, Guest100, on #webkit).

        Reverted changeset:

        "Add JSC test results in json format to a buildbot log"
        https://bugs.webkit.org/show_bug.cgi?id=156920
        http://trac.webkit.org/changeset/199916

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

        [WebIDL] Drop [Default] WebKit-IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=156955

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:

2016-04-23  Csaba Osztrogonác  <ossy@webkit.org>

        Really enable INDEXED_DATABASE on Apple Mac cmake build
        https://bugs.webkit.org/show_bug.cgi?id=156902

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

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

        check-webkit-style: fix false-positive warnings about @synchronized
        https://bugs.webkit.org/show_bug.cgi?id=156957

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call): Ignore @synchronized lines.
        (check_braces): Ditto.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line): Added a test case.

2016-04-22  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add JSC test results in json format to a buildbot log
        https://bugs.webkit.org/show_bug.cgi?id=156920

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests):
        Add runtime flag to output json into buildbot
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        Change key names and remove redundant count key

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

        Update expected result for WKPreferencesGetOfflineWebApplicationCacheEnabled after r199854

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

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

        [GTK] Enable the download attribute support
        https://bugs.webkit.org/show_bug.cgi?id=99025

        Reviewed by Žan Doberšek.

        * Scripts/webkitperl/FeatureList.pm:

2016-04-21  Keith Miller  <keith_miller@apple.com>

        WebScriptObject description swizzler should work in a multi-threaded world
        https://bugs.webkit.org/show_bug.cgi?id=156808

        Add a test for our NSObject swizzling TLS implementation. The test runs on
        two threads. One in JS and another in Objective-C. We expect the JS thread
        to use our NSObject description override and the Objective-C thread to act
        as though it was using the original NSObject description method.

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WebScriptObjectDescription.html: Added.
        * TestWebKitAPI/Tests/mac/WebScriptObjectDescription.mm: Added.
        (nsObjectDescriptionTest):
        (-[WebScriptDescriptionTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2016-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView should claim the contents size as its natural size
        https://bugs.webkit.org/show_bug.cgi?id=156835

        Reviewed by Žan Doberšek.

        Add test case to check the WebKitWebView preferred size.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewPreferredSize):
        (beforeAll):

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827
        
        Update the .plan file now that the files are present in SVN.

        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan:

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827
        rdar://problem/24358135

        Reviewed by Stephanie Lewis.

        Enhance benchmark_runner so that a benchmark can load a set of tests sequentially,
        and collate results across them. Also add the ability for the browser_driver to supply
        additional results, allowing for tests that collect results data in native code, rather
        than generating it in the web page.

        Add a set of "content animation" tests that use this new functionality, which test
        CSS animation and requestAnimationFrame performance.

        'plan' files have two new optional keys:
            'test_files': a list of files to run as a suite
            'options': optional parameters. Currently supports one new option,
                'animation_command', which affects the way that iOS tests are run,
                and is passed to MobileSafari as a parameter on launch.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__): If options is not specified in the plan file, set it to an empty dictionary.
        (BenchmarkRunner._get_result): Allow the browser_driver to modify the test results.
        (BenchmarkRunner):
        (BenchmarkRunner._run_one_test): Factored out of _run_benchmark, this contains logic for
        running a single test. It starts and stops the http_server_driver.
        (BenchmarkRunner._run_benchmark): Run a test in the traditional way if the plan has an 'entry_point'
        key, otherwise look for the new 'test_files' and load each in a loop.
        (BenchmarkRunner._dump):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.launch_url): Pass options.
        (BrowserDriver.add_additional_results): Allow a driver to supply additional results.
        (BrowserDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py:
        (GTKMiniBrowserDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._terminate_processes): Fix spelling mistake.
        (OSXBrowserDriver._terminiate_processes): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_url):
        (OSXChromeCanaryDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_url):
        (OSXFirefoxNightlyDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/data/patches/ContentAnimation.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan: Added.

2016-04-20  Dustin Falgout  <dustin@falgout.us>

        [GTK] Expose AllowUniversalAccessFromFileURLs preference now that calling localStorage.getItem() results in SecurityError: DOM Exception 18
        https://bugs.webkit.org/show_bug.cgi?id=156651

        Reviewed by Michael Catanzaro.

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

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

        Modern IDB (Workers): Enable INDEXED_DATABASE_IN_WORKERS compile time flag, but disabled in RuntimeEnabledFeatures.
        https://bugs.webkit.org/show_bug.cgi?id=156782

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-04-19  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r199752.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didChangeIcons): Remove call to removed function.

2016-04-19  Brent Fulgham  <bfulgham@apple.com>

        Remove remaining bits of dynamic <link> rel='icon' loading
        https://bugs.webkit.org/show_bug.cgi?id=156727

        Reviewed by Darin Adler.

        Remove unused test infrastructure. This code never existed in WebKit2
        testing since was only used on Windows.

        * DumpRenderTree/TestRunner.cpp:
        (dumpIconChangesCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::dumpIconChanges): Deleted.
        (TestRunner::setDumpIconChanges): Deleted.

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

        ObjcInstance::stringValue should not call NSObject's description method
        https://bugs.webkit.org/show_bug.cgi?id=156758

        Reviewed by Geoffrey Garen.

        Add new methods to ObjCController that expose two Types of WebScriptObjects. The first is
        an NSObject and the second is an NSArray of NSObjects. These are used to test that we don't
        call the NSObjects description method without first swizzling it.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testArrayOfObjects]):
        (-[ObjCController testObject]):

2016-04-18  Dan Bernstein  <mitz@apple.com>

        Fixed building with old Xcode.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:
        (TEST):

2016-04-18  Dean Jackson  <dino@apple.com>

        New SPI to export a dictionary of runtime features
        https://bugs.webkit.org/show_bug.cgi?id=156645
        <rdar://problem/23621666>

        Reviewed by Darin Adler.

        Test the experimental features SPI on WKPreferences.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:

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

        [JSCOnly] Implement RunLoop and remove glib dependency
        https://bugs.webkit.org/show_bug.cgi?id=155706

        Reviewed by Michael Catanzaro.

        Add TestWTF to JSCOnly port to test WorkQueue and RunLoop.
        Platform specific ones locate under jsconly directory since
        it is not `generic` (Since it includes the GLIB event loop case).

        * CMakeLists.txt:
        * TestWebKitAPI/PlatformJSCOnly.cmake: Added.
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/jsconly/PlatformUtilitiesJSCOnly.cpp: Renamed from Source/WTF/wtf/none/RunLoopNone.cpp.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::sleep):
        * TestWebKitAPI/jsconly/main.cpp: Renamed from Source/WTF/wtf/none/WorkQueueNone.cpp.
        (main):

2016-04-18  Jon Lee  <jonlee@apple.com>

        Update Animometer plan.
        https://bugs.webkit.org/show_bug.cgi?id=156652

        Reviewed by Darin Adler.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to r199616.

2016-04-18  Dana Burkart  <dburkart@apple.com>

        svn-apply: add option for ignoring changes to ChangeLog files
        https://bugs.webkit.org/show_bug.cgi?id=156618

        Reviewed by Darin Adler.

        This change adds a new option to svn-apply, --skip-changelogs, which short-circuits out of
        patch() if the file in question is a ChangeLog.

        * Scripts/svn-apply:
        (patch):

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API Request URL is wrong after reloading
        https://bugs.webkit.org/show_bug.cgi?id=139342

        Reviewed by Darin Adler.

        Update test case to check that the active URL should remain the
        same after a reload.

        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API request URL no set when loading Data, Alternate HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=136916

        Reviewed by Darin Adler.

        Add new test to check that active URL is the requested one right
        after calling WKPage load methods.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::loadPlainText): Remove FIXME.
        (WebViewTest::loadBytes): Ditto.
        (WebViewTest::loadAlternateHTML): Ditto.

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

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

        It broke the iOS build (Requested by KaL on #webkit).

        Reverted changeset:

        "Pending API request URL no set when loading Data, Alternate
        HTML or plain text"
        https://bugs.webkit.org/show_bug.cgi?id=136916
        http://trac.webkit.org/changeset/199660

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API request URL no set when loading Data, Alternate HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=136916

        Reviewed by Darin Adler.

        Add new test to check that active URL is the requested one right
        after calling WKPage load methods.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::loadPlainText): Remove FIXME.
        (WebViewTest::loadBytes): Ditto.
        (WebViewTest::loadAlternateHTML): Ditto.

2016-04-18  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        Fix incorrect assumption that APPLE implies Mac.
        https://bugs.webkit.org/show_bug.cgi?id=156679

        Addresses build failure introduced in r198947

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/mouse-target fails with overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=156621

        Reviewed by Martin Robinson.

        This is a problem of the test itself, we are using an overflow that is not actually scrollable, but that shows
        scrollbar troughs when not using overlay scrollbars because it's marked as scrollable. It would be easier to
        simply use the main frame scrollbars to test that and it will work no matter of scrollbars are overlay or not.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewMouseTarget): Remove the div and move the mouse over the main frame scrollbar to test scrolbars hit test.

2016-04-17  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Bump gstreamer from 1.4.4 to 1.6.3
        https://bugs.webkit.org/show_bug.cgi?id=156655

        Reviewed by Antonio Gomes.

        To support html5 video feature, we should bump gstreamer version.

        * efl/jhbuild.modules:
        * efl/patches/gst-libav.patch: Update against newer version.
        * efl/patches/gst-plugins-bad-remove-gnustep-support.patch: Removed because this patch was merged.

2016-04-16  Sam Weinig  <sam@webkit.org>

        More build fixing.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController share:]):

2016-04-16  Sam Weinig  <sam@webkit.org>

        Another build fix.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController sharingServicePicker:sharingServicesForItems:proposedSharingServices:]):

2016-04-16  Sam Weinig  <sam@webkit.org>

        Fix 32-bit build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController share:]):
        (-[BrowserWindowController fetch:]):
        (-[BrowserWindowController sharingService:transitionImageForShareItem:contentRect:]):

2016-04-15  Sam Weinig  <sam@webkit.org>

        Add support for NSSharingService to MiniBrowser, for no great reasons
        https://bugs.webkit.org/show_bug.cgi?id=156658

        Reviewed by Darin Adler.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        Add the share button.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        Set the share button to fire it's actions on mouse down, as it is supposed to act like a menu.

        (-[BrowserWindowController share:]):
        Show the picker when the button is pressed.
        (-[BrowserWindowController mainContentView]):
        Add a new override to get the main content view of derived classes (either a WKWebView or the WebView).

        (-[BrowserWindowController sharingServicePicker:sharingServicesForItems:proposedSharingServices:]):
        (-[BrowserWindowController sharingServicePicker:delegateForSharingService:]):
        (-[BrowserWindowController sharingServicePicker:didChooseSharingService:]):
        (-[BrowserWindowController sharingService:sourceFrameOnScreenForShareItem:]):
        (-[BrowserWindowController sharingService:transitionImageForShareItem:contentRect:]):
        (-[BrowserWindowController sharingService:sourceWindowForShareItems:sharingContentScope:]):
        Add delegate methods.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController mainContentView]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController mainContentView]):
        Implement to return the web view.

2016-04-16  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        Temporary workaround for rdar://problem/25754945.

        * LayoutTestRelay/LayoutTestRelay/CoreSimulatorSPI.h:

2016-04-15  Commit Queue  <commit-queue@webkit.org>

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

        It didn't help (Requested by ap_ on #webkit).

        Reverted changeset:

        "Build fix."
        http://trac.webkit.org/changeset/199600

2016-04-15  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * LayoutTestRelay/LayoutTestRelay/main.m: Allow some deprecated methods.

2016-04-14  Alexey Proskuryakov  <ap@apple.com>

        Some GuardMalloc bots are not happy when running many parallel processes
        https://bugs.webkit.org/show_bug.cgi?id=156614
        rdar://problem/24711525

        Reviewed by David Kilzer.

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

2016-04-14  Brent Fulgham  <bfulgham@apple.com>

        Make <a download> a runtime enabled option
        https://bugs.webkit.org/show_bug.cgi?id=156583
        <rdar://problem/25733449>

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDownloadAttributeEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-04-14  Anders Carlsson  <andersca@apple.com>

        Another build fix attempt.

        * MiniBrowser/mac/WK2BrowserWindowController.m:

2016-04-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2016-04-14  Anders Carlsson  <andersca@apple.com>

        [Mac] Add API for open panel handling to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=137759
        rdar://problem/23278623

        Reviewed by Tim Horton.

        Have MiniBrowser implement the new delegate method.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2016-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, rolling out r199554.

        The change breaks Yosemite Release/Debug build

        Reverted changeset:

        "[Mac] Add API for open panel handling to WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=137759
        http://trac.webkit.org/changeset/199554

2016-04-14  Anders Carlsson  <andersca@apple.com>

        [Mac] Add API for open panel handling to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=137759
        rdar://problem/23278623

        Reviewed by Tim Horton.

        Have MiniBrowser implement the new delegate method.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2016-04-14  Jon Lee  <jonlee@apple.com>

        Update Animometer plan
        https://bugs.webkit.org/show_bug.cgi?id=156569

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to r199328. Includes update to screen
        resolution, starting with complexity of 1, and fixing SVG, multiply, and text tests.

2016-04-13  Alex Christensen  <achristensen@webkit.org>

        CMake MiniBrowser should be an app bundle
        https://bugs.webkit.org/show_bug.cgi?id=156521

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/CMakeLists.txt:
        Make an app bundle and compile nibs.
        * MiniBrowser/mac/Info.plist:
        CMake doesn't know what to do with :rfc1034identifier and there's no reason to keep it.  This is just MiniBrowser.

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

        We should not speculatively revalidate cached redirects
        https://bugs.webkit.org/show_bug.cgi?id=156548
        <rdar://problem/25583886>

        Reviewed by Darin Adler.

        Re-enable speculative loading in the context of layout tests. This was
        turned off by mistake when speculative loading was turned into a
        setting recently.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2016-04-12  Alexey Proskuryakov  <ap@apple.com>

        Python test webkitpy.common.system.executive_unittest.ExecutiveTest.serial_test_kill_process is flaky
        https://bugs.webkit.org/show_bug.cgi?id=155367

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/executive.py: (Executive.kill_process):
        Don't flakily consume the return code with waitpid, callers need to do waitpid on
        their own. Not sure if this line of code was even intentional.

2016-04-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Flakey crash after ScrollAnimatorMac destruction
        https://bugs.webkit.org/show_bug.cgi?id=156372

        Reviewed by Darin Adler.

        Implement the new <!-- webkit-test-runner --> flag.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WKR::PlatformWebView::viewSupportsOptions):

2016-04-12  Tomas Popela  <tpopela@redhat.com>

        Modify the CXXFLAGS in webkitdirs.pm just on architectures where the flags are supported
        https://bugs.webkit.org/show_bug.cgi?id=156338

        Reviewed by Michael Catanzaro.

        Add the "-march=pentium4 -msse2 -mfpmath=sse " into the CXXFLAGS just
        for the i686 where it is supported and not for other architectures
        (such as s390(x) and ppc(64)) where the build will fail with these
        CXXFLAGS.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2016-04-11  Alex Christensen  <achristensen@webkit.org>

        Build MiniBrowser with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156471

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/mac/CMakeLists.txt: Added.

2016-04-11  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Do not pass context to EwkViewCreate
        https://bugs.webkit.org/show_bug.cgi?id=156461

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        (TestWebKitAPI::TEST): Removed context argument from EwkViewCreate calls.
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Ditto.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView): Ditto.

2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>

        [CMake] Make FOLDER property INHERITED
        https://bugs.webkit.org/show_bug.cgi?id=156460

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        Set FOLDER property as a directory property not a target property

2016-04-10  Caitlin Potter  <caitp@igalia.com>

        [Tools] correctly check for braces in multiline branches in macro definition
        https://bugs.webkit.org/show_bug.cgi?id=156441

        Reviewed by Darin Adler.

        Prevents emitting whitespace/braces warning for code like the
        following:

        ```
        #define MACRO(x) \
            if (x) { \
                doTheThing(); \
                continue; \
            }
        ```

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

2016-04-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Testharness-based tests that time out should be able to produce a detailed output
        https://bugs.webkit.org/show_bug.cgi?id=145313

        Reviewed by Xabier Rodriguez-Calvar.

        Adding timeout readonly accessor to TestRunner for both WK1 and WK2.

        * DumpRenderTree/TestRunner.cpp:
        (getTimeoutCallback): The js "timeout" property getter.
        (TestRunner::staticValues): Adding "timeout" property to DumpRenderTree so that testRunner.timeout called from JS returns the timeout value.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::timeout): Adding access to DRT m_timeout private value.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Adding timeout readonly attribute so that testRunner.timeout can be called from JS.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Adding DOM timeout getter to implement timeout IDL definition.
        (WTR::TestRunner::timeout):

2016-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        stylebot should know about TestWebKitAPI FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=156387

        Rubber-stamped by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/featuredefines.py:
        (FeatureDefinesChecker.check):

2016-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(ENABLE_ES6_CLASS_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=156384

        Reviewed by Ryosuke Niwa.

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

2016-04-06  Dean Jackson  <dino@apple.com>

        Watchlist modifications:
        - remove roger_fong
        - add myself to a few areas
        - remove graouts from WebInspectorAPI

        * Scripts/webkitpy/common/config/watchlist:

2016-04-07  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test effect of view exposed rect on tiled backing
        https://bugs.webkit.org/show_bug.cgi?id=156365

        Reviewed by Tim Horton.

        Expose testRunner.setViewSize() and internals.setViewExposedRect() to enable
        testing of tile coverage when setViewExposedRect() is passed a non-null rectangle.

        testRunner.setViewSize() is used instead of using window.resizeTo(), since we
        can't easily resize a window to larger than the screen being tested on.

        * DumpRenderTree/TestRunner.cpp:
        (setViewSizeCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setViewSize):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetViewSize):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setViewSize):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2016-04-07  Jason Marcell  <jmarcell@apple.com>

        Adding layout tests for the bot watcher's dashboard QUnit tests.
        https://bugs.webkit.org/show_bug.cgi?id=155272

        Reviewed by Daniel Bates.

        Moved supporting resources into a resources folder and updated index.html accordingly
        to point to the new locations. Added code to tests.js to dumpAsText when QUnit is done.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index-expected.txt: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html: Updated to point to tests.js and Mock files in resources directory.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueue.js.
        (MockBuildbotQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueueView.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueueView.js.
        (MockBuildbotQueueView):
        (MockBuildbotQueueView.prototype._latestProductiveIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockTrac.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js.
        (MockTrac):
        (MockTrac.prototype.get oldestRecordedRevisionNumber):
        (MockTrac.prototype.get latestRecordedRevisionNumber):
        (MockTrac.prototype.loadMoreHistoricalData):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-fixture-git-trac-rss.xml: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-git-trac-rss.xml.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-fixture-trac-rss.xml: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-trac-rss.xml.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js.
        Updated the unit tests for Trac._loaded() to point to the XML files that are now located in the 'resources' directory.
        (QUnit.done): Added. Removes machine-specific output from test results and calls testRunner.notifyDone to let the layout test harness know that all testing is done.
        * Scripts/run-dashboard-tests: Added.

2016-04-06  ChangSeok Oh  <changseok@webkit.org>

        Unreviewed, Update my primary email address and expertise.

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

2016-04-06  Jon Lee  <jonlee@apple.com>

        Update the Animometer patch and plan files
        https://bugs.webkit.org/show_bug.cgi?id=156263

        Reviewed by Ryosuke Niwa.

        Measure the latest set of tests by updating the plan revision to r199134.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch: Update to run the master suite only.
        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to use the release page instead
        of the developer page.

2016-04-06  Saam barati  <sbarati@apple.com>

        jsc-layout-tests.yaml/js/script-tests/regress-141098.js failing on Yosemite Debug after r198989
        https://bugs.webkit.org/show_bug.cgi?id=156187

        Reviewed by Keith Miller.

        * Scripts/run-jsc-stress-tests:

2016-04-06  Alex Christensen  <achristensen@webkit.org>

        Compile WebKitTestRunner with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156310

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformMac.cmake: Added.

2016-04-05  Simon Fraser  <simon.fraser@apple.com>

        Implement operator== and operator!= for Optional<>
        https://bugs.webkit.org/show_bug.cgi?id=156266

        Reviewed by Anders Carlsson.

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

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

        Make CMake-generated binaries on Mac able to run
        https://bugs.webkit.org/show_bug.cgi?id=156268

        Reviewed by Daniel Bates.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformMac.cmake:
        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/PlatformMac.cmake:

2016-04-05  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Fetch API] Add a runtime flag to fetch API and related constructs
        https://bugs.webkit.org/show_bug.cgi?id=156113
 
        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebGL2Enabled):
        (WTR::TestRunner::setFetchAPIEnabled):
        (WTR::TestRunner::setAllowUniversalAccessFromFileURLs):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-04-05  Keith Miller  <keith_miller@apple.com>

        Make Keith a reviewer!
        https://bugs.webkit.org/show_bug.cgi?id=156246

        Reviewed by Mark Lam.

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

2016-04-05  Antoine Quint  <graouts@apple.com>

        [WebGL2] Allow enabling WebGL2 with a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=156166
        <rdar://problem/25526929>

        Always enable WebGL2 during testing.

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebGL2Enabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-04-04  Bill Ming  <mbbill@gmail.com>

        [win] run-webkit-tests failed to launch DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=156150

        Reviewed by Alex Christensen.

        * Tools/Scripts/webkitpy/port/base.py:

2016-04-04  Bill Ming  <mbbill@gmail.com>

        prepare-ChangeLog set endl incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=156151

        Reviewed by Alex Christensen.

        * Tools/Scripts/prepare-ChangeLog:

2016-04-03  Sam Weinig  <sam@webkit.org>

        Add SPI to allow install script message handlers in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=156153

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        Add new test, WKUserContentController.ScriptMessageHandlerBasicPostIsolatedWorld

2016-04-04  Jiewen Tan  <jiewen_tan@apple.com>

        Build fix for r198956.

        Unreviewed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):

2016-04-04  Bill Ming  <mbbill@gmail.com>

        [win] prepare-ChangeLog should treat windows path differently.
        https://bugs.webkit.org/show_bug.cgi?id=156120

        Reviewed by Brent Fulgham.

        * Scripts/prepare-ChangeLog:

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

        REGRESSION(r198492): [GTK] The WEB_RTC flag was not correctly added in some situations
        https://bugs.webkit.org/show_bug.cgi?id=156164

        Reviewed by Philippe Normand.

        Enable the new WEB_RTC option by default for Gtk+.

        * Scripts/webkitperl/FeatureList.pm:

2016-04-03  Dan Bernstein  <mitz@apple.com>

        Use the correct value for the first nightly build with frameworks built for OS X 10.11.

        * Scripts/bisect-builds:
        (makeNightlyList):

2016-04-03  Dan Bernstein  <mitz@apple.com>

        Made bisect-builds work again.

        Rubber-stamped by Sam Weinig.

        * Scripts/bisect-builds:
        Changed to use HTTPS to access nightly.webkit.org, and added a minimum revision for OS X 10.11.

2016-04-01  Jiewen Tan  <jiewen_tan@apple.com>

        Build fix for r198956.

        Unreviewed.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLNotChange.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLChange.mm.
        (-[ProvisionalURLNotChangeController webView:didFinishNavigation:]):
        (-[ProvisionalURLNotChangeController webView:didFailProvisionalNavigation:withError:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        (-[LoadInvalidSchemeDelegate browsingContextController:didFailProvisionalLoadWithError:]):
        (TestWebKitAPI::TEST):

2016-04-01  Jiewen Tan  <jiewen_tan@apple.com>

        WebKit should dispatchDidFailProvisionalLoad while loading invalid URLs
        https://bugs.webkit.org/show_bug.cgi?id=155995
        <rdar://problem/14967004>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadAlternateHTMLString.mm:
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didFailProvisionalNavigation:withError:]):
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didStartProvisionalNavigation:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm: Added.
        (literalURL):
        (-[LoadInvalidURLNavigationActionDelegate webView:didCommitNavigation:]):
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.html: Added.
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm: Added.
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (TestWebKitAPI::TEST):

2016-04-01  Brent Fulgham  <bfulgham@apple.com>

        Confirm <a download> satisfies specification criteria
        https://bugs.webkit.org/show_bug.cgi?id=156057

        Reviewed by Andy Estes.

        Revise WebKitTestRunner:
        (1) Provide a download client delegate.
        (2) Teach WKTR to wait to finish a test until a download finishes.
        (3) Allow WKTR to notify the current TestRunner that it can finish.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): Update to recognize a new
        message "NotifyDownloadDone".
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction): Handle 'download'
        attribute case.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::waitUntilDownload): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::shouldFinishAfterDownload): Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Set up the download client.
        (WTR::TestController::downloadDidStart): Added.
        (WTR::TestController::decideDestinationWithSuggestedFilename): Added.
        (WTR::TestController::downloadDidFinish): Added.
        (WTR::TestController::downloadDidFail): Added.
        (WTR::TestController::downloadDidCancel): Added.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::notifyDownloadDone): Added.
        * WebKitTestRunner/TestInvocation.h:

2016-04-01  Alex Christensen  <achristensen@webkit.org>

        Compile DumpRenderTree with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156088

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DefaultPolicyDelegate.m:
        (-[DefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.m:
        * DumpRenderTree/PlatformMac.cmake: Added.
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/mac/AppleScriptController.m:
        (convertAEDescToObject):
        * DumpRenderTree/mac/DumpRenderTreeMain.mm:
        * DumpRenderTree/mac/LayoutTestHelper.m:

2016-03-31  Bill Ming  <mbbill@gmail.com>

        https://bugs.webkit.org/show_bug.cgi?id=156094
        [Win] TestWebCore target build sometimes fail.

        Reviewed by Alex Christensen.

        * Tools/TestWebKitAPI/PlatformWin.cmake:

2016-03-31  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Bump EFL version to 1.17.0
        https://bugs.webkit.org/show_bug.cgi?id=153008

        Reviewed by Michael Catanzaro.

        Original author is Csaba Osztrogonác  <ossy@webkit.org>

        * efl/jhbuild.modules:

2016-03-31  Daniel Bates  <dabates@apple.com>

        run-webkit-tests fails to create user's cache directory when System Integrity Protection is enabled
        https://bugs.webkit.org/show_bug.cgi?id=156071
        <rdar://problem/25467827>

        Reviewed by Brent Fulgham.

        Fixes an issue where run-webkit-tests will fail to create the suffixed user's cache directory
        on non-Apple Internal machines with System Integrity Protection enabled because the OS only
        honors the suffix, specified by the environment variable DIRHELPER_USER_DIR_SUFFIX, in
        privileged processes. And python(1) does not have sufficient privileges. As a workaround for
        systems that have System Integrity Protection enabled we compute the path to the suffixed
        user's cache directory by hand.

        Additionally, fix an issue where the user's cache directory created by run-webkit-test was
        never deleted on cessation of the test run.

        * Scripts/webkitpy/port/driver.py:
        (Driver._start): Actually store the path to the user's cache directory in self._driver_user_cache_directory
        so that we can delete this directory on cessation of the test run.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort._path_to_user_cache_directory): Unset the environment variable DIRHELPER_USER_DIR_SUFFIX (if set),
        query the OS for the path to the user's cache directory and concatenate this path with the
        specified suffix.

2016-03-31  Jiewen Tan  <jiewen_tan@apple.com>

        WebKit should set Original URL of a download request correctly
        https://bugs.webkit.org/show_bug.cgi?id=155914
        <rdar://problem/10473811>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadRequestOriginalURLDelegate initWithExpectOriginalURL:]):
        (-[DownloadRequestOriginalURLDelegate _downloadDidStart:]):
        (-[DownloadRequestOriginalURLNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURL.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURL2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURLFrame.html: Added.

2016-03-30  Dewei Zhu  <dewei_zhu@apple.com>

        Extend animometer timeout for slow CPUs.
        https://bugs.webkit.org/show_bug.cgi?id=156047

        Reviewed by Ryosuke Niwa.

        Extend animometer timeout to 30 minutes for slow device.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan:

2016-03-30  Daniel Bates  <dabates@apple.com>

        run-webkit-tests must create parent directory of user's cache directory before running tests
        https://bugs.webkit.org/show_bug.cgi?id=156009
        <rdar://problem/25442682>

        Reviewed by Alexey Proskuryakov.

        The script run-webkit-tests must create the parent directory of the user's cache directory
        before running tests because a WebKit2 child process expects that this directory exists
        when it starts.

        The script run-webkit-tests influences the path chosen by a WebKit2 child process for the
        user's temporary directory and user's cache directory via the environment variable
        DIRHELPER_USER_DIR_SUFFIX. For the user's temporary directory, run-webkit-tests creates it
        as part of setting up the test environment. But run-webkit-tests does not create the user's
        cache directory. Therefore there is race between the time AppKit creates it and when the
        launched WebContent and Network processes query for the path to the user's cache directory
        such that the OS may return the empty string to the WebContent and Network processes if
        queried for this directory before AppKit creates it.

        * Scripts/webkitpy/port/base.py:
        (Port._path_to_user_cache_directory): Added. Base class implementation that returns the
        empty string. We will override this method for the OS X port to return the path to the
        user's cache directory with the specified suffix.
        (Port.remove_cache_directory): Deleted.
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Initialize self._driver_user_directory_suffix and self._driver_user_cache_directory
        to the suffix to use for the user's temporary and cache directories and the path to the
        user's cache directory, respectively.
        (Driver._setup_environ_for_driver): Modified to set the environment variable DIRHELPER_USER_DIR_SUFFIX
        to self._driver_user_directory_suffix.
        (Driver._start): Compute the user directory suffix and the path to the user's cache
        directory. Create the user's cache directory (if applicable).
        (Driver.stop): Modified to remove directory self._driver_user_cache_directory (if applicable).
        * Scripts/webkitpy/port/mac.py:
        (MacPort.user_cache_directory): Added. Overrides Port._path_to_user_cache_directory().
        (MacPort.remove_cache_directory): Deleted.

2016-03-29  Benjamin Poulain  <bpoulain@apple.com>

        [WTF] Removing a smart pointer from HashTable issues two stores to the same location
        https://bugs.webkit.org/show_bug.cgi?id=155676

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:

2016-03-29  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add machine-readable results for JSC stress tests
        https://bugs.webkit.org/show_bug.cgi?id=155771

        Reviewed by Darin Adler and Dean Johnson

        Add an option to output JSC stress test results to a user-specified file in JSON format.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Add JSON output support
        (readAllLines): Remove trailing newline from the end of each item

2016-03-29  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.

        * TestWebKitAPI/PlatformWin.cmake:

2016-03-29  Timothy Hatcher  <timothy@apple.com>

        Update WebKit nightly to have a red needle to better match Safari

        https://bugs.webkit.org/show_bug.cgi?id=155983

        Reviewed by Joseph Pecoraro.

        * WebKitLauncher/webkit.icns:

2016-03-28  Joanmarie Diggs  <jdiggs@igalia.com>

        Adding myself as a reviewer.

        Unreviewed.

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

2016-03-25  Dewei Zhu  <dewei_zhu@apple.com>

        Dromaeo patch used by run-benchmark should not include an invalid address.
        https://bugs.webkit.org/show_bug.cgi?id=155910

        Reviewed by Ryosuke Niwa.

        Should not use invalid 'http://127.0.0.1/Icons/w3c_home' in the patched version of test.
        * Scripts/webkitpy/benchmark_runner/data/patches/Dromaeo.patch:

2016-03-25  Daniel Bates  <dabates@apple.com>

        Add WebKitSystemInterface for iOS 9.3
        https://bugs.webkit.org/show_bug.cgi?id=155893

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-03-25  Daniel Bates  <dabates@apple.com>

        Use webkitdirs::determineXcodeSDK() instead of webkitdirs::willUseIOSDeviceSDK()
        in copy-webkitlibraries-to-product-directory
        https://bugs.webkit.org/show_bug.cgi?id=155869

        Reviewed by Alexey Proskuryakov.

        It is sufficient and more direct to call webkitdirs::determineXcodeSDK() instead of
        webkitdirs::willUseIOSDeviceSDK() to process the --sdk/--device/--ios-simulator command
        line argument.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-03-25  Konstantin Tokarev  <annulen@yandex.ru>

        Turned on ENABLE_REQUEST_ANIMATION_FRAME by default for any port.
        https://bugs.webkit.org/show_bug.cgi?id=155882

        Reviewed by Michael Catanzaro.

        It was already enabled in all trunk ports, and is required for
        WebInspectorUI to work.

        * Scripts/webkitperl/FeatureList.pm:

2016-03-24  Jeremy Zerfas  <WebKit@JeremyZerfas.com>

        Improve update-webkit-dependency script.
        https://bugs.webkit.org/show_bug.cgi?id=155576

        Reviewed by Brent Fulgham.

        * Scripts/update-webkit-dependency:
        -Updated script to also use ETags for helping to determine whether dependency is up to date.
        -Updated script so it usually won't need to download the entire dependency each time it is
         ran.
        -Updated script to ensure zip file contains expected directories before trying to install.
        -Added some more error checking and improved error messages.
        (lastModifiedToUnixTime): Deleted.

        * Scripts/update-webkit-wincairo-libs:
        -Corrected comment about what script does.

2016-03-24 Bill Ming <mbbill@gmail.com>

        Fix webkitpy tests after r198617
        https://bugs.webkit.org/show_bug.cgi?id=155827

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff._show_pretty_diff):

2016-03-23  Bill Ming  <mbbill@gmail.com>

        webkit-patch failed to open pretty diff on Windows
        https://bugs.webkit.org/show_bug.cgi?id=155827

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff._show_pretty_diff):

2016-03-23  Jer Noble  <jer.noble@apple.com>

        [ios-sim] RequiresUserActionForPlaybackTest.DoesNotRequireUserActionForMediaPlayback and RequiresUserActionForVideoButNotAudioPlayback failing
        https://bugs.webkit.org/show_bug.cgi?id=155764

        Reviewed by Eric Carlson.

        Remove the requirement for media elements to have webkit-playsinline attributes on iOS.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):

2016-03-23  Anders Carlsson  <andersca@apple.com>

        Crash when using KVO from within -[WebView initWithCoder:]
        https://bugs.webkit.org/show_bug.cgi?id=155816
        rdar://problem/17073265

        Reviewed by Dan Bernstein.

        Add test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/EarlyKVOCrash.mm: Added.
        (-[EarlyKVOCrashResponder initWithWebView:]):
        (-[EarlyKVOCrashResponder initWithCoder:]):
        (-[EarlyKVOCrashResponder dealloc]):
        (-[EarlyKVOCrashResponder encodeWithCoder:]):
        (TestWebKitAPI::TEST):

2016-03-23  Lucas Forschler  <lforschler@apple.com>

        Teach kill-old-processes about perl 5.18.
        
        Reviewed by Alexey Proskuryakov

        * BuildSlaveSupport/kill-old-processes:
        (main):

2016-03-22  Keith Rollin  <krollin@apple.com>

        Unreviewed: add Keith Rollin to the committers list.

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

2016-03-22  Per Arne Vollan  <peavo@outlook.com>

        [Win] [64-bit] Remove MSVC 2013 FMA3 Bug Workaround
        https://bugs.webkit.org/show_bug.cgi?id=141499

        Reviewed by Brent Fulgham.

        As we have moved on to VS2015, this workaround is no longer needed.

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (main):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/win/ImageDiffCairo.cpp:
        (main):
        * MiniBrowser/win/Common.cpp:
        (DllMain):
        * TestWebKitAPI/win/main.cpp:
        (main):
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain):

2016-03-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] ASMBench cannot be run without JSBENCH_PATH
        https://bugs.webkit.org/show_bug.cgi?id=155751

        Reviewed by Saam Barati.

        Check ASMBENCH_PATH instead of JSBENCH_PATH for ASMBench files.

        * Scripts/run-jsc-benchmarks:

2016-03-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] SharedBuffer::copy() can cause a segmentation fault.
        https://bugs.webkit.org/show_bug.cgi?id=155739

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/PlatformWin.cmake: Build and run the
        SharedBuffer tests.

2016-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Move ARM Linux bots to JSCOnly port
        https://bugs.webkit.org/show_bug.cgi?id=155655

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ConfigureBuild.__init__):
        (appendCustomBuildFlags):
        (CompileJSCOnly):
        (Factory.__init__):
        (BuildAndRemoteJSCTestsFactory):
        (BuildAndRemoteJSCTestsFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/clean-build:
        (main):

2016-03-21  Brent Fulgham  <bfulgham@apple.com>

        Improve SharedBuffer testing
        https://bugs.webkit.org/show_bug.cgi?id=93078
        <rdar://problem/25277829>

        Reviewed by Ryosuke Niwa.

        Based on a Blink patch by Huang Dongsung <luxtella@company100.net>.
        <https://src.chromium.org/viewvc/blink?revision=153850&view=revision,
        and a Blink patch by <tyoshino@chromium.org>
        <https://src.chromium.org/viewvc/blink?view=rev&revision=151617>

        Add three test cases from the Blink project that cover various append,
        copy, and createArrayBuffer calls.

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

2016-03-21  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [Win] Connect layoutTestController.findString() to support testing
        https://bugs.webkit.org/show_bug.cgi?id=50234

        Reviewed by Alex Christensen.

        Implement TestRunner::findString().

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::findString):

2016-03-20  Dan Bernstein  <mitz@apple.com>

        [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
        https://bugs.webkit.org/show_bug.cgi?id=155707
        <rdar://problem/24980691>

        Reviewed by Darin Adler.

        * ContentExtensionTester/Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR
          based on the last component of MACOSX_DEPLOYMENT_TARGET.
        * ContentExtensionTester/Configurations/DebugRelease.xcconfig: For engineering builds,
          preserve the behavior of TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.

        Similarly for these projects:

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/Base.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2016-03-20  Dan Bernstein  <mitz@apple.com>

        Update build settings

        Rubber-stamped by Andy Estes.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Synced up to the ones in ../Source.
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * asan/asan.xcconfig:

2016-03-18  Sam Weinig  <sam@webkit.org>

        Add test for HashMap::ensure that shows that moving into the lambda does not incure extra cost
        https://bugs.webkit.org/show_bug.cgi?id=155621

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::ObjectWithRefLogger::ObjectWithRefLogger):
        (TestWebKitAPI::testMovingUsingEnsure):
        (TestWebKitAPI::testMovingUsingAdd):
        Add tests ensuring that objects moved into a map using ensure don't
        have extra ref-churn.

2016-03-17  Tim Horton  <timothy_horton@apple.com>

        Fix some deprecation warnings in WebEditingTester
        https://bugs.webkit.org/show_bug.cgi?id=155601

        Reviewed by Simon Fraser.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate showOperations:]):
        (-[WebEditingAppDelegate _updateNewWindowKeyEquivalents]):

2016-03-17  Tim Horton  <timothy_horton@apple.com>

        Find-in-page indicator in Mail viewer is the wrong scale and cut off
        https://bugs.webkit.org/show_bug.cgi?id=155605
        <rdar://problem/23948165>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:
        (TEST):
        Add a test that ensures that the find result image is correctly @2x.
        The NSImage size should be in points.

2016-03-16  Commit Queue  <commit-queue@webkit.org>

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

        Potentially break testing on iOS (Requested by Guest23 on
        #webkit).

        Reverted changeset:

        "Add twisted-15.5.0 module to
        webkitpy.thirdparty.autoinstalled."
        https://bugs.webkit.org/show_bug.cgi?id=154667
        http://trac.webkit.org/changeset/198187

2016-03-16  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: should warn about blank lines after #include "config.h" in TestWebKitAPI
        <http://webkit.org/b/155445>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        (_PATH_RULES_SPECIFIER): Do not ignore "build/include*" checks
        on TestWebKitAPI since this project uses a config.h header as of
        r95188.  Also remove references to WebKitAPITest, which ceased
        to exist in r95944.

        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier): Add tests.
        Remove reference to WebKitAPITest project.

2016-03-16  Tim Horton  <timothy_horton@apple.com>

        [mac] Printing test snapshots are upside-down after r198242
        https://bugs.webkit.org/show_bug.cgi?id=155543

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):
        Flip printing snapshots in DRT so that everything is right-side-up.

2016-03-16  Alexey Proskuryakov  <ap@apple.com>

        Update unit test for iOS debug queues.

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

2016-03-16  Jiewen Tan  <jiewen_tan@apple.com>

        URL Parsing should signal failure for illegal IDN
        https://bugs.webkit.org/show_bug.cgi?id=154945
        <rdar://problem/8014795>

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2016-03-15  Tim Horton  <timothy_horton@apple.com>

        [iOS Simulator] Test result snapshots are upside down
        https://bugs.webkit.org/show_bug.cgi?id=154761

        Reviewed by Simon Fraser.

        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        In r97104, Simon added code to take WindowServer snapshots, which came
        in flipped, and added code to flip them back. At this point, WindowServer
        snapshots got flipped, and software snapshots did not.

        In r140067, Simon noticed that WindowServer ref test images were upside-down
        on Mac (not sure why this changed), so turned off the flipping code (but
        didn't delete it!). Now, WindowServer snapshots and software snapshots both
        are not flipped.

        In r190304, Carlos added an enum for the source of the snapshot ("WebView"
        for window server snapshots, and "WebContent" for software snapshots),
        and - critically - changed the flipping logic to flip software snapshots!

        We didn't notice this on Mac because at this point we've made it so that
        we *always* have WindowServer snapshots, but on iOS we still don't have
        WindowServer snapshots, so now they're flipped.

        And that's how we got here.

        To restore the behavior from r140067, and correctly unflip snapshots on
        iOS, just delete this code.

2016-03-15  Alexey Proskuryakov  <ap@apple.com>

        run-api-tests doesn't print test name when the test crashes
        https://bugs.webkit.org/show_bug.cgi?id=155476

        Reviewed by Daniel Bates.

        * Scripts/run-api-tests: Print "UNEXPECTEDLY EXITED" with a test name when output
        doesn't contain the test name yet. Changed test name output to always be before raw
        stdout for clarity.

2016-03-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r198203.

        Favorites view is no longer loading on iOS

        Reverted changeset:

        "URL Parsing should signal failure for illegal IDN"
        https://bugs.webkit.org/show_bug.cgi?id=154945
        http://trac.webkit.org/changeset/198203

2016-03-15  Jiewen Tan  <jiewen_tan@apple.com>

        URL Parsing should signal failure for illegal IDN
        https://bugs.webkit.org/show_bug.cgi?id=154945
        <rdar://problem/8014795>

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2016-03-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r197981.

        Caused a massive PLT regression on Mac.

        Reverted changeset:

        "Font antialiasing (smoothing) changes when elements are
        rendered into compositing layers"
        https://bugs.webkit.org/show_bug.cgi?id=23364
        http://trac.webkit.org/changeset/197981

2016-03-14  Dewei Zhu  <dewei_zhu@apple.com>

        Add twisted-15.5.0 module to webkitpy.thirdparty.autoinstalled.
        https://bugs.webkit.org/show_bug.cgi?id=154667

        Reviewed by Ryosuke Niwa and Simon Fraser.

        Add twisted-15.5.0 to webkitpy.thirdparty.autoinstalled.
        Minor fix for twsited_http_server used by run-benchmark that we should only stop http server while recieving 'GET /shutdown'.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        (ServerControl.render_POST): Deleted.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_twisted_15_5_0):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports):

2016-03-14  Mark Lam  <mark.lam@apple.com>

        Need to distinguish between Symbol() and Symbol("").
        https://bugs.webkit.org/show_bug.cgi?id=155438

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        - Test that the a symbol with an empty string is not equivalent to a null symbol. 

2016-03-14  David Kilzer  <ddkilzer@apple.com>

        Remove blank lines after #include "config.h"

        Follow-up fix from review comments on Bug 155394.

        * TestWebKitAPI/PlatformUtilities.cpp:
        * TestWebKitAPI/Tests/WTF/RefLogger.cpp:

2016-03-14  Frederic Wang  <fred.wang@free.fr>

        Unreviewed: Add my professional email address.

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

2016-03-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Web platform test server should not try to launch servers on already bound sockets
        https://bugs.webkit.org/show_bug.cgi?id=141157

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (wpt_config_json): Load WPT config from LayoutTests/imported/w3c/resources/config.json.
        (base_url): Refactored to use wpt_config_json routine.
        (WebPlatformTestServer.__init__): Fill port mappings according WPT config.

2016-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(ES6_TEMPLATE_LITERAL_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=155417

        Reviewed by Yusuke Suzuki.

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

2016-03-13  Dean Jackson  <dino@apple.com>

        DRT should enable WebGL by default on Mac
        https://bugs.webkit.org/show_bug.cgi?id=155419
        <rdar://problem/25136981>

        Reviewed by Sam Weinig.

        For some reason, lost in time, WebGL was enabled
        by default on trunk, but disabled by default
        in DumpRenderTree when using WebKit 1. This
        was very annoying, because each test had
        an explicit command to enable it.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Deleted WebGL line.

2016-03-13  Konstantin Tokarev  <annulen@yandex.ru>

        Added new port JSCOnly.
        https://bugs.webkit.org/show_bug.cgi?id=154512

        Reviewed by Michael Catanzaro.

        This port allows to build JavaScriptCore engine with minimal
        dependencies.

        * Scripts/build-jsc:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (executableProductDir):
        (determinePortName):
        (isJSCOnly):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeGeneratedProject):

2016-03-13  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI: fix linker warnings
        <http://webkit.org/b/155394>

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        - Add RefLogger.cpp source file.
        - Add other missing cross-platform source files.
        - Add FIXMEs about RunLoop.cpp and about missing
          platform-specific source files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add RefLogger.cpp source file.

        * TestWebKitAPI/Counters.cpp:
        (DeleterCounter<ConstructorDestructorCounter>::deleterCount):
        Move specific declaration here to fix linker warning.
        * TestWebKitAPI/Counters.h:
        (DeleterCounter<T>::deleterCount): Remove declaration of global
        template variable.

        * TestWebKitAPI/Tests/WTF/RefLogger.cpp: Added.
        (TestWebKitAPI::log): Added.  Move inline definition in
        RefLogger.h to here to fix linker warning.

        * TestWebKitAPI/Tests/WTF/RefLogger.h:
        (TestWebKitAPI::log): Replace inline function with declaration.

2016-03-12  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r178615): Fix incorrect case in included header for WeakPtr.cpp

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Change "test.h" to
        "Test.h" to fix incorrect case.  This was discovered when adding
        WeakPtr.cpp to CMakeLists.txt for the patch on Bug 155394.

2016-03-12  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: handle Darwin framework/library environment variables more consistently
        <http://webkit.org/b/155392>

        Reviewed by Daniel Bates.

        These changes will make it possible to pass through environment
        variables from the run-webkit-tests command-line.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Add DYLD_FRAMEWORK_PATH,
        __XPC_DYLD_FRAMEWORK_PATH and __XPC_DYLD_LIBRARY_PATH to the
        list of variables to keep from the run-webkit-test environment.

        * Scripts/webkitpy/port/driver.py:
        (Driver._append_environment_variable_path): Add method to append
        a path to an environment variable, or set the path if the
        variable doesn't exist.
        (Driver._setup_environ_for_driver): Extract build_root_path into
        a local variable.  Use Driver._append_environment_variable_path
        to extend DYLD_LIBRARY_PATH, __XPC_DYLD_LIBRARY_PATH,
        DYLD_FRAMEWORK_PATH and __XPC_DYLD_FRAMEWORK_PATH instead of
        overwriting them.

        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test__append_environment_variable_path): Add test
        method to test Driver._append_environment_variable_path.

2016-03-11  Alexey Proskuryakov  <ap@apple.com>

        [ios-sim debug] API test WTF_Lock.ContendedShortSection and WTF_ParkingLot.UnparkOneFifty timing out
        https://bugs.webkit.org/show_bug.cgi?id=155276

        [ios-sim] API test WTF_Condition.TenProducersTenConsumersOneSlot timing out
        https://bugs.webkit.org/show_bug.cgi?id=155345

        [iOS Simulator] API test timeout: WTF_ParkingLot.UnparkOneFiftyThenFiftyAll
        https://bugs.webkit.org/show_bug.cgi?id=153997
        <rdar://problem/23580034>

        <rdar://problem/23580018> TestWebKitAPI Timeout: WTF_ParkingLot.UnparkOneFifty

        Rubber-stamped by Filip Pizlo.

        * Scripts/run-api-tests: These tests are pretty slow. Increase API test timeout.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp: Start running WTF_ParkingLot.UnparkOneFiftyThenFiftyAll
        on iOS again.

2016-03-11  Jer Noble  <jer.noble@apple.com>

        [ios-sim debug] API tests RequiresUserActionForPlaybackTest.DoesNotRequireUserActionForMediaPlayback and RequiresUserActionForAudioButNotVideoPlayback asserting
        https://bugs.webkit.org/show_bug.cgi?id=155365

        Reviewed by Darin Adler.

        Allow tests running on iOS simulator to play video inline, avoiding this assert.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):

2016-03-11  Frederic Wang  <fwang@igalia.com>

        [jhbuild] Disable LLVM OCaml bindings.
        https://bugs.webkit.org/show_bug.cgi?id=153274

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: disable all (actually only OCaml) bindings for LLVM.

2016-03-11  Commit Queue  <commit-queue@webkit.org>

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

        LLVM is needed to run update-webkitgtk-libs reliably
        (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "[jhbuild] Remove LLVM dependency."
        https://bugs.webkit.org/show_bug.cgi?id=153274
        http://trac.webkit.org/changeset/197495

2016-03-11  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WTF should have a similar function as equalLettersIgnoringASCIICase to match beginning of strings
        https://bugs.webkit.org/show_bug.cgi?id=153419

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST): Adding test case for startsWithLettersIgnoringASCIICase.


2016-03-10  Simon Fraser  <simon.fraser@apple.com>

        Font antialiasing (smoothing) changes when elements are rendered into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=23364

        Reviewed by Tim Horton.

        Turn off smoothed layer text because it affects many layout test results.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2016-03-10  Jer Noble  <jer.noble@apple.com>

        Partial roll-out of r197953; test fails because encode/decode support of those properties were never added.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST): Deleted.

2016-03-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Main frame scrollbars should appear on the left on RTL systems
        https://bugs.webkit.org/show_bug.cgi?id=155149

        Reviewed by Simon Fraser.

        Setting the volatile default needs to be done early, so it is
        plumbed through the injected bundle's initialization routine.

        Control of RTL scrollbars is handled by putting the string
        <!-- webkit-test-runner [ rtlScrollbars=true ] -->
        on the first line of a test.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::shouldUseRTLScrollbars):
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::getInjectedBundleInitializationUserData):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):

2016-03-08  Jer Noble  <jer.noble@apple.com>

        Add separate WK and WK2 preferences for requiring user gestures for video media, distinct from user gestures for media generally
        https://bugs.webkit.org/show_bug.cgi?id=155141

        Reviewed by Beth Dakin.

        Set the default values for media preferences unconditionally, not just on PLATFORM(IOS). Set "video requires user gesture"
        to sane defaults in addition to "audio requires user gesture" and (in the case of DumpREnderTree) instead of "media requires user gesture".

        Add a new test of WK2 user gesture requirement preferences.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm: Added.
        (-[RequiresUserActionForPlaybackNavigationDelegate webView:didFinishNavigation:]):
        (-[RequiresUserActionForPlaybackMessageHandler userContentController:didReceiveScriptMessage:]):
        (RequiresUserActionForPlaybackTest::SetUp):
        (RequiresUserActionForPlaybackTest::createWebView):
        (RequiresUserActionForPlaybackTest::testVideoWithAudio):
        (RequiresUserActionForPlaybackTest::testVideoWithoutAudio):
        (RequiresUserActionForPlaybackTest::testAudioOnly):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-03-10  Brian Burg  <bburg@apple.com>

        Web Inspector: should be able to run protocol and input generator scripts from any directory
        https://bugs.webkit.org/show_bug.cgi?id=155307

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.main):
        * Scripts/webkitpy/replay/main.py:
        (InputGeneratorTests.main):
        Compute the current SCM based on the location of the script being executed, not
        the $CWD which could be anything. There's rarely a good reason to use $CWD.

2016-03-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] DumpRenderTree crashes when accessing window.testRunner.inspectorTestStubURL
        <http://webkit.org/b/155295>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL): Always return nullptr for
        PLATFORM(IOS).  This matches what we did in r192604 for
        WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm.

2016-03-10  Frederic Wang  <fwang@igalia.com>

        [GTK] Add support for WOFF2
        https://bugs.webkit.org/show_bug.cgi?id=152616

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/style/checker.py: Only verify basic style for third party modules brotli and woff2.

2016-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Add runtime flags for shadow DOM and custom elements
        https://bugs.webkit.org/show_bug.cgi?id=155213

        Reviewed by Dean Jackson.

        Always enable shadow DOM and custom elements during testing.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShadowDOMEnabled): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Handling 'allowUniversalAccessFromFileURLs' on WKWebViewConfiguration causes test breakage
        https://bugs.webkit.org/show_bug.cgi?id=155265
        <rdar://problem/11101440>

        Reviewed by Andy Estes.

        WK2 localStorage tests need the 'AllowUniversalAccessFromFileURLs' preference set by default.
        Tests that confirm blocking localStorage manually set the flag to "False" in the test.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration): Set the default state to the correct value.

2016-03-09  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: fix false-positive warnings about @try/@catch blocks in Objective-C++ source files
        <http://webkit.org/b/155273>

        Reviewed by Andy Estes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call): Ignore @catch lines.
        (check_braces): Ditto.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line): Add test case.

2016-03-09  Jason Marcell  <jmarcell@apple.com>

        Removing reference to Dashboard.Repository.Internal.trac from open source unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=155274

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js:
        (setup): Deleted. In bug 154180 we removed Dashboard.Repository.Internal which was causing an
        error in the unit tests.

2016-03-09  Aakash Jain  <aakash_jain@apple.com>

        use ulimit command to check process limit in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=155260

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_child_processes): Use ulimit command output instead of 
        launchctl limit maxproc command.

2016-03-09  Alexey Proskuryakov  <ap@apple.com>

        Stop building armv7 on iOS device builders
        https://bugs.webkit.org/show_bug.cgi?id=155246

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Building both armv7 and
        armv7s makes the bots unnecessarily slow. We can catch super rare v7-only regressions
        elsewhere.

        * Scripts/webkitpy/common/config/ews.json: Changed EWS to match, as we always want
        EWS configuration to be verified by buildbot queues.

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/port/ios.py:
        Changed default to arm64. I think that the default is probably not used in any
        practical scenarios, but it's nice to make it more sensible.

2016-03-09  Alexey Proskuryakov  <ap@apple.com>

        Add iOS Simulator EWS to bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=155220

        Reviewed by Lucas Forschler.

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

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Local HTML should be blocked from localStorage access unless "Disable Local File Restrictions" is checked
        https://bugs.webkit.org/show_bug.cgi?id=155185
        <rdar://problem/11101440>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST): Allow local file accesss to run test.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        (TEST): Ditto.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
        (TEST): Ditto.

2016-03-09  Tim Horton  <timothy_horton@apple.com>

        Removing and re-adding a script message handler with the same name results in an unusable message handler
        https://bugs.webkit.org/show_bug.cgi?id=155223

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (TEST):
        Add a test ensuring that it is possible to remove and re-add a script message handler
        with the same name and still dispatch messages to it.

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Fix iOS Simulator EWS.

        Unreviewed build fix.

        * Scripts/webkitpy/common/config/ports.py:

2016-03-08  Aakash Jain  <aakash_jain@apple.com>

        Booting multiple iOS simulator parallely fails sometimes
        https://bugs.webkit.org/show_bug.cgi?id=155208
        <rdar://problem/25019651>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run): Increase the time delay between subsequent
        simulator boot.

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Add iOS debug testers to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=155206

        Reviewed by Darin Adler.

        * TestResultServer/static-dashboards/builders.jsonp:

2016-03-08  Oliver Hunt  <oliver@apple.com>

        Start moving to separated writable and executable mappings in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=155178

        Reviewed by Fil Pizlo.

        Making run-jsc-benchmarks slightly happier on my machine.

        * Scripts/run-jsc-benchmarks:

2016-03-08  Anders Carlsson  <andersca@apple.com>

        Use NSUInteger instead of NSWindowStyleMask.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2016-03-08  Anders Carlsson  <andersca@apple.com>

        Fix build.

        We intentionally don't use AppKitCompatibilityDeclarations.h here, since we want
        MiniBrowser to build without WTF.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Add iOS simulator EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=155175

        Reviewed by Lucas Forschler.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:

2016-03-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197793 and r197799.
        https://bugs.webkit.org/show_bug.cgi?id=155195

        something weird happened while landing this and everything
        broke (Requested by olliej on #webkit).

        Reverted changesets:

        "Start moving to separated writable and executable mappings in
        the JIT"
        https://bugs.webkit.org/show_bug.cgi?id=155178
        http://trac.webkit.org/changeset/197793

        "arm64 build fix after r197793."
        http://trac.webkit.org/changeset/197799

2016-03-08  Oliver Hunt  <oliver@apple.com>

        Start moving to separated writable and executable mappings in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=155178

        Reviewed by Filip Pizlo.

        Making run-jsc-benchmarks slightly happier on my machine.

        * Scripts/run-jsc-benchmarks:

2016-03-08  Daniel Bates  <dabates@apple.com>

        Support iterating over an OptionSet and checking if it is empty
        https://bugs.webkit.org/show_bug.cgi?id=154941
        <rdar://problem/24964187>

        Reviewed by Darin Adler.

        Add tests to ensure that we do not regression both iteration of an OptionSet and
        determining whether an OptionSet is empty.

        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::Util::assertStrongEnum): Helper function to assert two strong enum type for equality.
        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        (TestWebKitAPI::TEST):

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Add debug iOS Simulator bots to the dashboard
        https://bugs.webkit.org/show_bug.cgi?id=155157

        Reviewed by Darin Adler.

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

2016-03-08  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed EFL build fix after r197752.

        * Scripts/webkitperl/FeatureList.pm: Avoid MEDIA_STREAM
        compilation by default until EFL bumps gstreamer to 1.6.

2016-03-08  Alejandro G. Castro  <alex@igalia.com>

        [GTK] [EFL] Avoid running mediastream tests by default until we compile by default
        https://bugs.webkit.org/show_bug.cgi?id=153540

        Reviewed by Philippe Normand.

        After bumping gstreamer to 1.6.3 in r196804 we can enable again
        compilation of mediastream and running the tests.

        * Scripts/run-gtk-tests:
        (TestRunner): Enable again the UserMedia API test.
        * Scripts/webkitperl/FeatureList.pm: Enable the compilation of the
        mediastream by default.
        * gtk/jhbuild-webrtc.modules: Removed the specific jhbuild modules
        file.
        * gtk/jhbuild.modules: Bumped the openwebrtc version to the one we
        are currently using.

2016-03-07  Jon Lee  <jonlee@apple.com>

        Update perf bot configuration for Animometer
        https://bugs.webkit.org/show_bug.cgi?id=155134

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch: Refactor the patch
        to work with the latest version of the harness.
        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Bump up the timeout,
        and use the latest version of the harness.

2016-03-07  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][jhbuild] OpenWebRTC build fails with GCC 6.0
        https://bugs.webkit.org/show_bug.cgi?id=154839

        Reviewed by Michael Catanzaro.

        Add '-Wno-error' to jhbuildrc; remove it from the module sets for macos.

        * gtk/jhbuild-webrtc.modules:
        * gtk/jhbuild.modules:
        * gtk/jhbuildrc:

2016-03-07  Aakash Jain  <aakash_jain@apple.com>

        webkitpy should verify timestamp from CrashLogs while collecting all crash logs
        https://bugs.webkit.org/show_bug.cgi?id=155000
        <rdar://problem/24860219>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_all_logs_darwin): Make sure that crash log timestamp is within expected 
        time range, because file modification time is not always accurate.
        (CrashLogs.get_timestamp_from_logs): Parse the timestamp from logs.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_get_timestamp_from_logs_darwin): Testcase for above function.

2016-03-06  Alexey Proskuryakov  <ap@apple.com>

        build-webkit prints an error on iOS simulator bots
        https://bugs.webkit.org/show_bug.cgi?id=155078

        Reviewed by Dan Bernstein.

        This happens when build-layouttestrelay sets $xcodeSDK to undefined, to use host SDK.

        * Scripts/webkitdirs.pm: (buildXCodeProject): There is no need to pass -sdk, because
        XcodeOptions() already passes SDKROOT as appropriate.

        * Scripts/build-layouttestrelay: Added a FIXME. Resetting $xcodeSDK doesn't reset
        any other configuration variables that were derived from its initial value, like $portName.

2016-03-05  Tim Horton  <timothy_horton@apple.com>

        Create a DOMHTMLVideoElement when wrapping <video> elements
        https://bugs.webkit.org/show_bug.cgi?id=155084
        <rdar://problem/24997193>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DOMHTMLVideoElementWrapper.mm: Added.
        (-[VideoWrapperFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):
        Add an API test for this behavior.

2016-03-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix logging details after r197505 (Run the run-benchmark script on the performance bot.)
        https://bugs.webkit.org/show_bug.cgi?id=154595

        Unreviewed.

        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (start): Use logging.exception when a test fails in order to get the details about the error.

2016-03-04  Alexey Proskuryakov  <ap@apple.com>

        Add iOS simulator debug bots
        https://bugs.webkit.org/show_bug.cgi?id=155053

        Reviewed by Lucas Forschler.

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

2016-03-04  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Gather resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=154278
        <rdar://problem/24702892>

        Reviewed by Andy Estes.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration): Retrieve state of the ResourceLoadStatisticsEnabled setting.
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]): Move setting from WK1-only to be
        universally applicable.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]): Recognize when the
        Resource Load Statistics flag has changed.

2016-03-04  Alex Christensen  <achristensen@webkit.org>

        Remove vcxproj build system
        https://bugs.webkit.org/show_bug.cgi?id=154388

        Rubber-stamped by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree.sln: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj.filters: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeApple.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommonWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPostBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPreBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPostBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPreBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.vcxproj.filters: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCF.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCFLite.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCommon.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserDebug.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj.filters: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibCommon.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibDebug.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibPreBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibProduction.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibRelease.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserPreBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserProduction.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserRelease.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.sln: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebug.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPostBuild.cmd: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPreBuild.cmd: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props: Removed.
        * win/AssembleBuildLogs: Removed.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj: Removed.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj.filters: Removed.
        * win/AssembleBuildLogs/AssembleLogs.cmd: Removed.
        * win/AssembleBuildLogs/README: Removed.

2016-03-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Whitespace causes font-variant: all-small-caps to synthesize
        https://bugs.webkit.org/show_bug.cgi?id=155004
        <rdar://problem/24630796>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2016-03-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Crash during font loading when injected bundle cancels load
        https://bugs.webkit.org/show_bug.cgi?id=155001

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/Ahem.ttf: Added.
        * TestWebKitAPI/Tests/WebKit2/webfont.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresource.mm: Added.
        (-[Myles webView:didFinishNavigation:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresourcePlugIn.mm: Added.
        (-[CancelFontSubresourcePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[CancelFontSubresourcePlugIn webProcessPlugInBrowserContextController:frame:willSendRequestForResource:request:redirectResponse:]):

2016-03-04  Konstantin Tokarev  <annulen@yandex.ru>

        [check-webkit-style] Added checks for redundant virtual specifiers.
        https://bugs.webkit.org/show_bug.cgi?id=155017

        Reviewed by Darin Adler.

        Added 3 new checks related to virtual, override, and final specifiers:

        1. When "override" is present, "virtual" is redundant.
        2. When "final" is present, "virtual" is redundant.
        3. When "final" is present, "override" is redundant.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.begin):
        (_FunctionState.is_virtual):
        (_check_parameter_name_against_text):
        (_error_redundant_specifier):
        (check_function_definition):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (FunctionDetectionTest.perform_function_detection):
        (FunctionDetectionTest.test_basic_function_detection):
        (FunctionDetectionTest.test_function_declaration_detection):
        (FunctionDetectionTest.test_pure_function_detection):
        (FunctionDetectionTest.test_override_and_final_function_detection):
        (FunctionDetectionTest.test_non_functions):
        (FunctionDetectionTest.test_parameter_list):

2016-03-03  Darin Adler  <darin@apple.com>

        Followup to:
        Remove "virtual" from all lines that have both "virtual" and "override".
        https://bugs.webkit.org/show_bug.cgi?id=155005

        Reviewed by Geoffrey Garen.

        * Scripts/do-webcore-rename: Added more regular expressions to make sure we always
        use either override or final, not both, and to remove virtual from all lines that
        have both virtual and final.

2016-03-03  Darin Adler  <darin@apple.com>

        Remove "virtual" from all lines that have both "virtual" and "override".
        https://bugs.webkit.org/show_bug.cgi?id=155005

        Reviewed by Geoffrey Garen.

        * Scripts/do-webcore-rename: Added a regular expression to this script to do the job.

2016-03-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed fix after r197505 (Run the run-benchmark script on the performance bot.)
        https://bugs.webkit.org/show_bug.cgi?id=154595

        Unreviewed fix after r197505.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunBenchmarkTests.start):

2016-03-03  Daniel Bates  <dabates@apple.com>

        Add unit tests for WTF::OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=154925
        <rdar://problem/24964211>

        Reviewed by Darin Adler.

        Add tests to ensure that we do not regress the behavior of WTF::OptionSet.

        * TestWebKitAPI/CMakeLists.txt: Add file TestWebKitAPI/Tests/WTF/OptionSet.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/OptionSet.cpp: Added.
        (TestWebKitAPI::TEST):

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

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

        Broke tests, and also uses a wrong approach (Requested by ap
        on #webkit).

        Reverted changeset:

        "Disable FTL JIT testing on 32-bit JSC tester bots"
        https://bugs.webkit.org/show_bug.cgi?id=154858
        http://trac.webkit.org/changeset/197442

2016-03-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Run the run-benchmark script on the performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=154595

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add new RunBenchmarkTests step on the perf bots (only for the GTK+ port at this moment).
        (RunBenchmarkTests):
        (RunBenchmarkTests.start):
        (RunBenchmarkTests.getText):
        (RunBenchmarkTests.getText2):
        (BuildAndPerfTestFactory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Add new test for RunBenchmarkTests and update expected steps of GTK+ perf bot.
        (RunBenchmarkTest):
        (RunBenchmarkTest.assertResults):
        (RunBenchmarkTest.test_success):
        (RunBenchmarkTest.test_tests_failed):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: Log both the current iteration as also the total iterations for the current benchmark/plan.
        (BenchmarkRunner._run_benchmark):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py: Use python logging also for errors.
        (GTKMiniBrowserDriver.close_browsers):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Implement support for running all available benchmark plans.
        (parse_args):
        (start):
        (main):

2016-03-03  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Remove u-szeged.hu SVN mirror in EFL perf bot
        https://bugs.webkit.org/show_bug.cgi?id=154960

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove szeged univ's svn mirror.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2016-03-03  Frederic Wang  <fwang@igalia.com>

        [jhbuild] Remove LLVM dependency.
        https://bugs.webkit.org/show_bug.cgi?id=153274

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:

2016-03-02  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed build fix for media-stream after r197114.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack):

2016-03-01  Csaba Osztrogonác  <ossy@webkit.org>

        Disable FTL JIT testing on 32-bit JSC tester bots
        https://bugs.webkit.org/show_bug.cgi?id=154858

        Reviewed by Saam Barati.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Run32bitJSCTests):

2016-03-01  Dean Johnson  <dean_johnson@apple.com>

        Fix iOS EWS.
        https://bugs.webkit.org/show_bug.cgi?id=154880

        Reviewed by Alexey Proskuryakov.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-02-29  Chris Dumez  <cdumez@apple.com>

        Have parseHTMLInteger() / parseHTMLNonNegativeInteger() use WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=154845

        Reviewed by Ryosuke Niwa.

        Update API tests accordingly.

        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp:
        (TestWebKitAPI::testParseHTMLInteger):
        (TestWebKitAPI::parseHTMLIntegerFails):
        (TestWebKitAPI::testParseHTMLNonNegativeInteger):
        (TestWebKitAPI::parseHTMLNonNegativeIntegerFails):
        (TestWebKitAPI::TEST): Deleted.

2016-02-29  Simon Fraser  <simon.fraser@apple.com>

        Remove the experimental feature of antialiased font dilation
        https://bugs.webkit.org/show_bug.cgi?id=154843

        Reviewed by Zalan Bujtas.

        Remove the "antialiased font dilation" code path, and related prefs.

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

2016-02-29  Brady Eidson  <beidson@apple.com>

        Fix timing flakiness in test I added in http://trac.webkit.org/changeset/197372

        Unreviewed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-1.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-2.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        (TEST): Sometimes a third message from the first html file was leaking through. The message is expected
          so we should always wait for it and make sure we got it.

2016-02-29  Brady Eidson  <beidson@apple.com>

        Modern IDB: WebKit 2 IPC layer easily confused about multiple web processes being connected.
        https://bugs.webkit.org/show_bug.cgi?id=154837

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-1.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm: Added.

2016-02-29  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][jhbuild] GLib build fails with GCC 6.0
        https://bugs.webkit.org/show_bug.cgi?id=154825

        Use the upstream work-around. https://bugzilla.gnome.org/show_bug.cgi?id=761550

        Reviewed by Csaba Osztrogonác.

        * gtk/jhbuild.modules: Apply upstream path.
        * gtk/patches/gdate-suppress-string-format-literal-warning.patch: Added.

2016-02-29  Filip Pizlo  <fpizlo@apple.com>

        We've been running Octane/regexp all wrong in run-jsc-benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=154827

        Reviewed by Andreas Kling.

        Octane v.2 and JetStream v.1.1 run this benchmark with warmup. This script was running
        it without warmup. This patches fixes this by making this script run it with warmup.

        This fix shows that my last patch, which added FTL support for regexp, was actually a 3%
        speed-up on Octane/regexp, not a slow-down as the ChangeLog claimed.

        It discovered this bug because for each Octane test that I want to debug, I usually make
        a standalone .js file that contains the whole test along with a miniharness - usually
        a plain loop - that runs it almost like it would for real but with whatever hacks I'm
        using for debugging. When I wrote such a thing for regexp, I used a ~20 iteration warmup
        to match the one second of warmup that this benchmark gets in Octane. To my surprise,
        this quite faithful regexp runner did not see the regression that run-jsc-benchmarks
        saw. That's when I found out that run-jsc-benchmarks was running it wrong.

        The reason for the no-warmup slow-down is that the FTL is actually fairly expensive to
        run on some of these very large functions in the regexp benchmark. I don't think we can
        do anything about that, and I'd argue that the speed-up we see after the compilation is
        done suggests that it was worth it.

        * Scripts/run-jsc-benchmarks:

2016-02-29  Gavin Barraclough  <barraclough@apple.com>

        RefCounter<T>::Event -> RefCounterEvent
        https://bugs.webkit.org/show_bug.cgi?id=154767

        Reviewed by Darin Adler.

        RefCounter<T>::Event is kinda verbose to use, and there is no need for this
        to be specific to a particular typeof RefCounter. Move the enum class up to
        the top level & rename to RefCounterEvent.

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

2016-02-29  Csaba Osztrogonác  <ossy@webkit.org>

        Remove more LLVM related cruft
        https://bugs.webkit.org/show_bug.cgi?id=154821

        Reviewed by Darin Adler.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/export-llvm-build: Removed.
        * Scripts/run-jsc-stress-tests:

2016-02-28  Sam Weinig  <sam@webkit.org>

        Reimplement WKPageGroup in terms of WKUserContentController
        https://bugs.webkit.org/show_bug.cgi?id=154804

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageGroup.cpp: Added.

2016-02-28  Sam Weinig  <sam@webkit.org>

        Bind _WKUserStyleSheets to WKUserContentWorlds to allow for grouping of user content by associating to a world
        https://bugs.webkit.org/show_bug.cgi?id=154798

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        Add tests for removing _WKUserStyleSheets and WKUserScripts

2016-02-27  Alexey Proskuryakov  <ap@apple.com>

        Silence leaks under TextCodecICU::registerCodecs
        https://bugs.webkit.org/show_bug.cgi?id=154737

        Reviewed by Darin Adler.

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

2016-02-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Fix incorrect cast

        Unreviewed.

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

2016-02-26  Chris Dumez  <cdumez@apple.com>

        Fix the behavior of reflecting IDL attributes of type unsigned long
        https://bugs.webkit.org/show_bug.cgi?id=154771

        Reviewed by Ryosuke Niwa.

        Update API tests to cover the fixes to the parseHTMLNonNegativeInteger()
        implementation:
        - "-0" is parsed as 0.
        - Range boundaries are now [0; 2147483647].

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

2016-02-26  Brady Eidson  <beidson@apple.com>

        Modern IDB: New database versions are never committed to SQLite.
        <rdar://problem/24860952> and https://bugs.webkit.org/show_bug.cgi?id=154741
        
        Modern IDB: If a database handle is not open, files are not actually deleted from disk
        https://bugs.webkit.org/show_bug.cgi?id=154756

        Reviewed by Alex Christensen.

        This also happens to test the previously untested fix for http://trac.webkit.org/changeset/197190

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence-1.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence-2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm: Added.
        (-[IndexedDBNavigationDelegate webView:didFinishNavigation:]):
        (-[IndexedDBMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2016-02-26  Commit Queue  <commit-queue@webkit.org>

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

        Test simply needs updated result (Requested by litherum on
        #webkit).

        Reverted changeset:

        "Unreviewed, rolling out r197158."
        https://bugs.webkit.org/show_bug.cgi?id=154758
        http://trac.webkit.org/changeset/197216

2016-02-26  Alexey Proskuryakov  <ap@apple.com>

        [iOS Simulator] Reftests don't work
        https://bugs.webkit.org/show_bug.cgi?id=154764

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/image_diff.py: (IOSSimulatorImageDiffer._start):
        Use simctl instead of sim.

2016-02-26  Chris Dumez  <cdumez@apple.com>

        Add API test coverage for parseHTMLInteger / parseHTMLNonNegativeInteger
        https://bugs.webkit.org/show_bug.cgi?id=154714

        Reviewed by Darin Adler.

        Add API test coverage for parseHTMLInteger / parseHTMLNonNegativeInteger as per:
        - https://html.spec.whatwg.org/multipage/infrastructure.html#signed-integers
        - https://html.spec.whatwg.org/multipage/infrastructure.html#non-negative-integers

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp: Added.
        (TestWebKitAPI::testParseHTMLInteger):
        (TestWebKitAPI::parseHTMLIntegerFails):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testParseHTMLNonNegativeInteger):
        (TestWebKitAPI::parseHTMLNonNegativeIntegerFails):

2016-02-26  Commit Queue  <commit-queue@webkit.org>

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

        This change did not fix the failing test (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "REGRESSION(r195795): [WK2] fast/text/crash-complex-text-
        surrogate.html is flakey"
        https://bugs.webkit.org/show_bug.cgi?id=154709
        http://trac.webkit.org/changeset/197158

2016-02-26  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore/WKWebsiteDataRecord needs to provide size information about each type of data
        https://bugs.webkit.org/show_bug.cgi?id=154750
        rdar://problem/23861395

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetchWebsiteData:]):
        Use the new WKWebsiteDataStore SPI to compute data sizes.

2016-02-25  Gavin Barraclough  <barraclough@apple.com>

        RefCounter value changed callback should be called on all changes (not just zero edge).
        https://bugs.webkit.org/show_bug.cgi?id=154699

        Reviewed by Geoff Garen.

        RefCounter currently only triggers a callback when the count goes from zero
        to non-zero and vice-versa. Change that, to be useful to more clients.

        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
            - Updated for change in RefCounter callback siganture & behaviour.

2016-02-25  Sam Weinig  <sam@webkit.org>

        Allow WKUserScripts to be run in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=154701

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentWorld.mm: Added.
        (-[SimpleDelegate webView:didFinishNavigation:]):
        (-[UserContentWorldRemoteObject didObserveNormalWorld]):
        (-[UserContentWorldRemoteObject didObserveWorldWithName:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentWorldPlugIn.mm: Added.
        (-[_WKUserContentWorldPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[_WKUserContentWorldPlugIn webProcessPlugInBrowserContextController:globalObjectIsAvailableForFrame:inScriptWorld:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentWorldProtocol.h: Added.

2016-02-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should have an option to clean the destination directory
        https://bugs.webkit.org/show_bug.cgi?id=152685

        Reviewed by Darin Adler.

        Adding --clean-dest-dir option to W3C test importer.
        When this option is set, all files in the destination directory will be deleted
        except for WebKit specific files (test expectations, .gitignore...) before new tests import.
        Dangling test expectations are removed after tests import.'

        Adding unit test and minor refactoring for the other tests.

        * Scripts/webkitpy/w3c/test_importer.py:
        (parse_args): Add '--clean-dest-dir' option.
        (TestImporter.do_import):
        (TestImporter._is_baseline): helper routine to capture -expected.txt files.
        (TestImporter):
        (TestImporter._should_not_keep_when_importing): helper routine to filter files that should not be cleaned before importing.
        (TestImporter.clean_destination_directory):
        (TestImporter.remove_dangling_expectations):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest._parse_options):
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):
        (TestImporterTest.test_import_dir_with_empty_init_py):
        (test_clean_directory_option):

2016-02-25  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r195795): [WK2] fast/text/crash-complex-text-surrogate.html is flakey
        https://bugs.webkit.org/show_bug.cgi?id=154709
        <rdar://problem/24483596>

        Reviewed by Dan Bernstein.

        Force auto-activation rules to a consistent state.

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

2016-02-25  Jiewen Tan  <jiewen_tan@apple.com>

        Unreivewed build fix for r197150.

        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm:

2016-02-25  Jiewen Tan  <jiewen_tan@apple.com>

        Restrict information passed with navigation action which is triggered by untrusted event
        https://bugs.webkit.org/show_bug.cgi?id=154571
        <rdar://problem/15967937>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm: Added.
        (-[WKNavigationActionDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TestWebKitAPI::TEST):
        (-[NavigationActionDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.html: Added.

2016-02-25  Gavin Barraclough  <barraclough@apple.com>

        Should template RefCounter instead of RefCounter::Token
        https://bugs.webkit.org/show_bug.cgi?id=154691

        Reviewed by Anders Carlsson.

        Mechanical update per RefCounter interface change.

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

2016-02-25  Skachkov Aleksandr  <gskachkov@gmail.com>

        Unreviewed: Add Aleksandr Skachkov as a commiter

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

2016-02-25  Sam Weinig  <sam@webkit.org>

        HashMap::ensure() should return an AddResult like all the other add-like functions
        https://bugs.webkit.org/show_bug.cgi?id=154680

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Update tests to use/test the new AddResult result.

2016-02-25  Alexey Proskuryakov  <ap@apple.com>

        Enable MallocScribble when detecting leaks
        https://bugs.webkit.org/show_bug.cgi?id=154679

        Reviewed by Geoffrey Garen.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server):
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_setup_environ_for_server):

2016-02-25  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, fix iOS builds after r197114.

        * WebKitTestRunner/TestController.cpp:
        (WTR::createCanonicalUUIDString):
        (WTR::TestController::saltForOrigin):

2016-02-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] MediaDeviceInfo deviceId and groupId must be unique to the page's origin
        https://bugs.webkit.org/show_bug.cgi?id=153163
        <rdar://problem/24334526>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPermissionForOrigin): Take top level document origin.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPermissionForOrigin): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForUserMediaPermissionRequest): Pass through top level document origin.
        (WTR::checkUserMediaPermissionForOrigin): Ditto.
        (WTR::TestController::resetStateToConsistentValues): m_userMediaOriginPermissions -> m_cahcedUserMediaPermissions.
        (WTR::originUserVisibleName): Return a String.
        (WTR::userMediaOriginHash): Create a hash of the origin plus top level document origin.
        (WTR::TestController::saltForOrigin): Return salt for an origin.
        (WTR::TestController::setUserMediaPermissionForOrigin): Return permission for an origin.
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin):
        (WTR::TestController::handleUserMediaPermissionRequest):
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):
        (WTR::OriginSettings::OriginSettings): New, class to cache settings for an origin.
        (WTR::OriginSettings::persistentPermission): Persistent permissions for origin.
        (WTR::OriginSettings::setPersistentPermission): Set permissions for origin.
        (WTR::OriginSettings::persistentSalt): Return the persistent salt for the origin, if any.
        (WTR::OriginSettings::setPersistentSalt): Set the persistent salt for the origin
        (WTR::OriginSettings::ephemeralSalts): Return hashmap used to store per-frame salts.
        * WebKitTestRunner/TestController.h:

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2016-02-24  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [web-animations] Add AnimationTimeline, DocumentTimeline and add extensions to Document interface
        https://bugs.webkit.org/show_bug.cgi?id=151688

        Reviewed by Dean Jackson.

        Enables the WEB_ANIMATIONS compiler switch by default.

        * Scripts/webkitperl/FeatureList.pm:

2016-02-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C importer should generate all web-platform-tests submodules descriptions
        https://bugs.webkit.org/show_bug.cgi?id=154587

        Reviewed by Darin Adler.

        Updated submodules description format (removing submodule name as it is the last string of the path really).
        Added git subroutines.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.origin_url):
        (Git):
        (Git.init_submodules):
        (Git.submodules_status):
        (Git.deinit_submodules):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._install_modules): Updated to submodule name removal.
        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._git_submodules_description): Updated to cope with recursive submodules (use of submodule init/deinit).
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_submodules_generation): Reactivated partially this test.

2016-02-23  Dan Bernstein  <mitz@apple.com>

        [Xcode] Linker errors display mangled names, but no longer should
        https://bugs.webkit.org/show_bug.cgi?id=154632

        Reviewed by Sam Weinig.

        * ContentExtensionTester/Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Ditto.
        * LayoutTestRelay/Configurations/Base.xcconfig: Ditto.
        * MiniBrowser/Configurations/Base.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebEditingTester/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebView should implement NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=137160

        Reviewed by Dan Bernstein.

        Add tests.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKProcessPool should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154608

        Reviewed by Sam Weinig.

        Add tests.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154605

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebViewConfiguration should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154602

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKPreferences should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154597

        Reviewed by Sam Weinig.

        Test encoding and decoding WKPreferences.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (encodeAndDecode):
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        (-[SyntheticBackingScaleFactorWindow initWithContentRect:styleMask:backing:defer:]):

2016-02-23  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Allow to run the WebKitGTK+ MiniBrowser with the run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=153993

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (createBrowserWindow): Support --geometry argument for MiniBrowser.
        We use this on the gtk_minibrowser_driver script to start the MiniBrowser maximized.
        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Fix loading of subclasses:
        The base class has to be loaded first, otherwise any subclase referencing it will give import error.
        In OSX the ordering of os.listdir() causes the base class (browser_driver.py) to be first on the list, but not on Linux.
        By specifiying the name of the base class file, we ensure it is always loaded first on any system despite the ordering of listdir.
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory.create):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py: Added.
        (GTKBrowserDriver):
        (GTKBrowserDriver.prepare_env):
        (GTKBrowserDriver.restore_env):
        (GTKBrowserDriver.close_browsers):
        (GTKBrowserDriver._launch_process):
        (GTKBrowserDriver._terminate_processes):
        (GTKBrowserDriver._screen_size):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py: Added.
        (GTKMiniBrowserDriver):
        (GTKMiniBrowserDriver.prepare_env):
        (GTKMiniBrowserDriver.launch_url):
        (GTKMiniBrowserDriver.close_browsers):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Fix loading of subclasses. See description above.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver.kill_server): Check if the server is still running before trying to terminate it.
        Usually the server ends gracefully (no need to terminate it), so this was causing ugly errors on the log.
        * Scripts/webkitpy/benchmark_runner/utils.py: Fix loading of subclasses. See description above.
        (load_subclasses):

2016-02-23  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Missing configuration patch for openh264 compilation
        https://bugs.webkit.org/show_bug.cgi?id=154455

        This patch is required for the openh264 compilation with the
        jhbuild-webrtc.modules. The code was implemented by Alessandro
        Decina.

        Reviewed by Philippe Normand.

        * gtk/patches/openh264-configure.patch: Added.

2016-02-20  Olivier Blin  <olivier.blin@softathome.com>

        [cmake] Use ICU include dirs in WebKit2 and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=154479

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/CMakeLists.txt:

2016-02-19  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] Fixed link error when G_DEFINE_AUTOPTR_CLEANUP_FUNC is not defined.
        https://bugs.webkit.org/show_bug.cgi?id=154467

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutocleanups.cpp:
        (beforeAll):
        (afterAll):

2016-02-19  Brady Eidson  <beidson@apple.com>

        Add "databaseProcessDidCrash" to the WKContextClient; Adopt it in WKTR.
        https://bugs.webkit.org/show_bug.cgi?id=154428

        Reviewed by Jer Noble.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::databaseProcessName):
        (WTR::TestController::databaseProcessDidCrash):
        * WebKitTestRunner/TestController.h:

2016-02-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Bump internal jhbuild versions to 1.6.3
        https://bugs.webkit.org/show_bug.cgi?id=149594

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Bump to GStreamer 1.6.3.
        * gtk/patches/gst-plugins-bad-fix-faad2-version-check.patch: Removed.
        * gtk/patches/gst-plugins-bad-remove-gnustep-support.patch: Removed.
        * gtk/patches/gst-plugins-base-rtp-rtcpbuffer-fix-typo-in-enum.patch: Removed.

2016-02-18  Brent Fulgham  <bfulgham@apple.com>

        Extend HashCountedSet with a method to efficiently set the count of an entry
        https://bugs.webkit.org/show_bug.cgi?id=154352

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/CMakeLists.txt: Add new HashCountedSet test files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp: Added.

2016-02-18  Commit Queue  <commit-queue@webkit.org>

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

        broke windows build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Extend HashCountedSet with a method to efficiently set the
        count of an entry"
        https://bugs.webkit.org/show_bug.cgi?id=154352
        http://trac.webkit.org/changeset/196791

2016-02-18  Brent Fulgham  <bfulgham@apple.com>

        Extend HashCountedSet with a method to efficiently set the count of an entry
        https://bugs.webkit.org/show_bug.cgi?id=154352

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/CMakeLists.txt: Add new HashCountedSet test files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp: Added.

2016-02-18  Anders Carlsson  <andersca@apple.com>

        Get rid of the --target-web-process and --use-web-process-xpc-service options.

        Rubber-stamped by Dan Bernstein.

        We now always use XPC, and --target-web-process is no longer supported.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging):
        (shouldTargetWebProcess): Deleted.
        (determineShouldTargetWebProcess): Deleted.
        (shouldUseXPCServiceForWebProcess): Deleted.
        (determineShouldUseXPCServiceForWebProcess): Deleted.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Deleted.
        (argumentsForRunAndDebugMacWebKitApp): Deleted.

2016-02-18  Ryan Haddad  <ryanhaddad@apple.com>

        Skip API test WTF_ParkingLot.UnparkOneFiftyThenFiftyAll on ios-simulator
        https://bugs.webkit.org/show_bug.cgi?id=153997

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:

2016-02-18  Jer Noble  <jer.noble@apple.com>

        run-webkit-httpd should use webkitpy to run httpd.
        https://bugs.webkit.org/show_bug.cgi?id=154271

        Reviewed by Alexey Proskuryakov.

        Update run-webkit-httpd to use webkitpy.port to launch httpd. Pass on http_port and http_all_interface
        options to match the current run-webkit-httpd (optional) behavior.

        * Scripts/run-webkit-httpd:
        (parse_args):
        (main):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config):
        * Scripts/webkitpy/port/base.py:
        (Port.to.start_http_server):

2016-02-18  Filip Pizlo  <fpizlo@apple.com>

        Remove remaining references to LLVM, and make sure comments refer to the backend as "B3" not "LLVM"
        https://bugs.webkit.org/show_bug.cgi?id=154383

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2016-02-17  Filip Pizlo  <fpizlo@apple.com>

        Remove LLVM dependencies from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=154323

        Reviewed by Antti Koivisto and Benjamin Poulain.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (isContentOfFileEqualToString):
        (fileContains): Deleted.
        (buildLLVM): Deleted.
        (symlinkLLVMLibrariesIfNeeded): Deleted.

2016-02-16  Sam Weinig  <sam@webkit.org>

        Add an ensure function on HashMap that takes a key and a function to make the lazy value initialization idiom easier
        https://bugs.webkit.org/show_bug.cgi?id=134857

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        Add tests for HashMap::ensure.

2016-02-17  Nan Wang  <n_wang@apple.com>

        AX: Implement sentence related text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=154312

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (nextParagraphEndTextMarkerForTextMarkerCallback):
        (sentenceTextMarkerRangeForTextMarkerCallback):
        (previousSentenceStartTextMarkerForTextMarkerCallback):
        (nextSentenceEndTextMarkerForTextMarkerCallback):
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):

2016-02-15  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Gather some rudimentary statistics during resource load 
        https://bugs.webkit.org/show_bug.cgi?id=153575
        <rdar://problem/24075254>

        Reviewed by Brady Eidson.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]): Add menu item for new debug flag.
        (-[SettingsController toggleResourceLoadStatisticsEnabled:]): Added.
        (-[SettingsController resourceLoadStatisticsEnabled]): Added.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]): React to changes in
        users's desire to track resource load statistics.

2016-02-15  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Update Tools/efl/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=154239

        Reviewed by Michael Catanzaro.

        * efl/install-dependencies:

2016-02-15  Alex Christensen  <achristensen@webkit.org>

        Fix internal Windows build of projects built after WebKit
        https://bugs.webkit.org/show_bug.cgi?id=154249
        rdar://problem/24644805

        Reviewed by Chris Dumez.

        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/win/CMakeLists.txt:
        Don't include DerivedSources/WebKit/Interfaces to make MiniBrowser and DumpRenderTree
        more like projects built internally after WebKit.  They should only need to use what
        is in ForwardingHeaders/WebKit.

2016-02-12  Nan Wang  <n_wang@apple.com>

        AX: Implement paragraph related text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=154098
        <rdar://problem/24269675>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (nextWordEndTextMarkerForTextMarkerCallback):
        (paragraphTextMarkerRangeForTextMarkerCallback):
        (previousParagraphStartTextMarkerForTextMarkerCallback):
        (nextParagraphEndTextMarkerForTextMarkerCallback):
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):

2016-02-12  Jason Marcell  <jmarcell@apple.com>

        Open source bot watcher's dashboard fails assertion in BuildbotQueue.prototype.compareIterationsByRevisions
        https://bugs.webkit.org/show_bug.cgi?id=154180

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Remove reference to Internal
        repository.

2016-02-12  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt MediaResourceLoader (instead of CachedResourceLoader) in WebCoreNSURLSession.
        https://bugs.webkit.org/show_bug.cgi?id=154136

        Reviewed by Alex Christensen.

        Use a MediaResourceLoader instead of a CachedResourceLoader for WebCoreNSURLSession.

        Drive-by fix: generate USE and ENABLE macros for TestWebKitAPI by adding FEATURE_DEFINES
        to GCC_PREPROCESSOR_DEFINES.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        (TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
        (TestWebKitAPI::TEST_F):

2016-02-11  Dana Burkart  <dburkart@apple.com>

        Large logs can bring down the webkit master
        https://bugs.webkit.org/show_bug.cgi?id=122112

        Reviewed by Lucas Forschler.

        Implement the suggested fix of throwing away stdout / stderr.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKit1LeakTests):

2016-02-10  Jason Marcell  <jmarcell@apple.com>

        Remove calls to parseInt in order to work with non-integer revisions
        https://bugs.webkit.org/show_bug.cgi?id=153820

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.sourceStampChanges): Remove calls to parseInt in order to work with non-integer
        revisions.
        (BuildbotIteration.prototype._parseData): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueueView.js:
        (MockBuildbotQueueView.prototype._latestProductiveIteration): Change integers to strings in test code.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac.prototype.get oldestRecordedRevisionNumber): Ditto.
        (MockTrac.prototype.get latestRecordedRevisionNumber): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Ditto.

2016-02-10  Jason Marcell  <jmarcell@apple.com>

        Teach dashboard code to compare non-integer revisions
        https://bugs.webkit.org/show_bug.cgi?id=152345

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.compareIterationsByRevisions): Compare non-integer revisions.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Use Trac.indexOfRevision in order to compare non-integer
        revisions. Also uses new Trac.commitsOnBranchLaterThanRevision method.
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Ditto.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Use Trac.indexOfRevision in order to compare non-integer
        revisions. Also uses new Trac.nextRevision method to calculate a revision range.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._commitsOnBranch): Renamed this to indicate that it should be a private method used by the latter two new
        methods.
        (Trac.prototype.commitsOnBranchLaterThanRevision): Finds revisions on a branch later than the specified revision.
        (Trac.prototype.commitsOnBranchInRevisionRange): Finds revisions on a branch within a specified range.
        (Trac.prototype.nextRevision): Finds the next revision after a given revision on a specific branch.
        (Trac.prototype.indexOfRevision): Finds the index of a given revision within the recordedCommits array.
        (Trac.prototype.commitsOnBranch): Deleted. Renamed to _commitsOnBranch.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit tests.

2016-02-09  Nan Wang  <n_wang@apple.com>

        AX: Implement word related text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=153939
        <rdar://problem/24269605>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (endTextMarkerCallback):
        (leftWordTextMarkerRangeForTextMarkerCallback):
        (rightWordTextMarkerRangeForTextMarkerCallback):
        (previousWordStartTextMarkerForTextMarkerCallback):
        (nextWordEndTextMarkerForTextMarkerCallback):
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setBoolAttributeValue):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):

2016-02-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove eail related cruft after r195725
        https://bugs.webkit.org/show_bug.cgi?id=154030

        Reviewed by Alex Christensen.

        * efl/jhbuildrc:

2016-02-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove LLVM related cruft after r196077
        https://bugs.webkit.org/show_bug.cgi?id=154031

        Reviewed by Alex Christensen.

        * efl/jhbuild.modules:
        * efl/patches/llvm-elf-add-stackmaps-arm64.patch: Removed.
        * efl/patches/llvm-elf-allow-fde-references-outside-the-2gb-range-arm64.patch: Removed.
        * efl/patches/llvm-version-arm64.patch: Removed.

2016-02-05  Aakash Jain  <aakash_jain@apple.com>

        tests fail if display sleeps while run-webkit-tests is running
        https://bugs.webkit.org/show_bug.cgi?id=153919

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (addDisplaySleepAssertion): Add the assertion so that the display doesn't turn off.
        (releaseDisplaySleepAssertion): Release the DisplaySleep Assertion.
        (simpleSignalHandler): Release the DisplaySleepAssertion in case of any iterrupt.

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

        Fix iOS API tests after r196082
        https://bugs.webkit.org/show_bug.cgi?id=153900

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        [WebView initialize] doesn't call JSC::initializeThreading on iOS.

2016-02-04  Jason Marcell  <jmarcell@apple.com>

        The status message for passing combined builder queues should say "all builds succeeded" when expanded.
        https://bugs.webkit.org/show_bug.cgi?id=153882

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Set status to "all builds succeeded" for combined builder queues
        when expanded.

2016-02-03  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should be better at telling you details about test failures
        https://bugs.webkit.org/show_bug.cgi?id=153845

        Reviewed by Geoffrey Garen.

        Here's an example of the contents of results/resultsByFamily, one of the new files that this
        generates, for some local testing I'm doing.  Notice how it groups families of tests together.

        You won't see this unless you cat results/resultsByFamily.

        regress.yaml/Regress/radar-24289839.js:
            regress.yaml/Regress/radar-24289839.js.default: PASS
            regress.yaml/Regress/radar-24289839.js.ftl: PASS
            regress.yaml/Regress/radar-24289839.js.ftl-no-cjit: FAIL
            regress.yaml/Regress/radar-24289839.js.ftl-eager-no-cjit: FAIL
        
        regress.yaml/Regress/radar-24290639.js:
            regress.yaml/Regress/radar-24290639.js.default: PASS
            regress.yaml/Regress/radar-24290639.js.ftl: PASS
            regress.yaml/Regress/radar-24290639.js.ftl-no-cjit: PASS
            regress.yaml/Regress/radar-24290639.js.ftl-eager-no-cjit: FAIL
        
        regress.yaml/Regress/radar-24290670.js: FAILED
        
        * Scripts/run-jsc-stress-tests:

2016-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WTR] Crash in EventSendingController::contextClick() when context menu event is not handled
        https://bugs.webkit.org/show_bug.cgi?id=153835

        Reviewed by Martin Robinson.

        WKBundlePageCopyContextMenuAtPointInWindow() returns nullptr when
        the context menu event is not handled, but we are using the
        returned value without null checking it.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):

2016-02-03  Jason Marcell  <jmarcell@apple.com>

        Format revisions for display according to repository type
        https://bugs.webkit.org/show_bug.cgi?id=153818

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Use new _formatRevisionForDisplay to display revisions according
        to repository type.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Ditto.
        (BuildbotQueueView.prototype._formatRevisionForDisplay): Formats revisions for display according to repository type.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit tests to test new
        _formatRevisionForDisplay function.

2016-02-03  Aakash Jain  <aakash_jain@apple.com>

        Logs/CoreSimulator filling up OS disk on WebKit testers
        https://bugs.webkit.org/show_bug.cgi?id=153853
        <rdar://problem/24496003>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.clean_up_test_run): Delete Logs during cleanup.

2016-02-03  Brian Burg  <bburg@apple.com>

        git-add-reviewer should work when run from a subdirectory within the repository
        https://bugs.webkit.org/show_bug.cgi?id=153842

        Reviewed by David Kilzer.

        There are two problems that needed to be fixed:

         - We can't assume .git is in $PWD/.git
         - We can't specify absolute paths to `git commit`

        Fix these problems using the helpers in VCSUtils that were added to
        fix this same issue for prepare-changeCogs.

        * Scripts/VCSUtils.pm: Export gitDirectory()
        * Scripts/git-add-reviewer:
        (nonInteractive): Cache gitDirectory() result.
        (addReviewer):
        (commit):
        (changeLogsForCommit): Make paths relative.

2016-02-03  Jer Noble  <jer.noble@apple.com>

        Yet another Yosemite build fix.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-02-03  Jer Noble  <jer.noble@apple.com>

        iOS build fix after Yosemite build fix broke iOS build.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-02-03  Jer Noble  <jer.noble@apple.com>

        Yosemite build fix; hide the entire WebCoreNSURLSessionDataTask class from Yosemite and prior.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-02-03  Joonghun Park  <jh718.park@samsung.com>

        [Tools] Remove $additionalCMakeArgs variable because without this variable --cmakeargs options works well
        https://bugs.webkit.org/show_bug.cgi?id=153827

        Reviewed by Michael Catanzaro.

        When an array is passed to subroutines as argument in perl,
        a list containing its element is returned from the array.
        Currently @$ arguments are being passed, then it is going to be one list
        including all the elements not only from @ but also from $.
        As a result, --cmakeargs option's value is included in @cmakeArgs
        at generateBuildSystemFromCMakeProject subroutine,
        so $additionalCMakeArgs doesn't needed anymore.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2016-02-03  Jer Noble  <jer.noble@apple.com>

        [Mac] Wrap a resource and resource loader in a NSURLSession-like object for use by lower level frameworks
        https://bugs.webkit.org/show_bug.cgi?id=153669

        Reviewed by Alex Christensen.

        Add an API test for WebCoreNSURLSession, testing that it behaves like a regulare NSURLSession, including
        calling appropriate NSURLSessionDelegate callbacks.

        Drive-by fix: Add a FeatureDefines.xcconfig to TestWebKitAPI.  Without this, the ENABLE macros in WebCore
        header files will not match the one used when compiling WebCore, leading to strange crashes and weird
        inconsistencies when calling, e.g., inline methods.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm: Added.
        (-[TestNSURLSessionLoaderDelegate webView:didCommitLoadForFrame:]):
        (-[TestNSURLSessionDataDelegate URLSession:task:didCompleteWithError:]):
        (-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveData:]):
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        (TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
        (TestWebKitAPI::TEST_F):

2016-02-03  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Clarify logic behind is{PortName} functions.
        https://bugs.webkit.org/show_bug.cgi?id=153554

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (prohibitUnknownPort): This function makes determinePortName()
        failure fatal.
        (determinePortName): Added new function which decides which port are
        we building based on command line switches and platform defaults.
        (portName): Added getter for determined $portName.
        (isEfl): Modified to use portName().
        (isGtk): Ditto.
        (isWinCairo): Ditto.
        (isAppleMacWebKit): Ditto.
        (isAppleWinWebKit): Ditto.
        (isIOSWebKit): Ditto.
        (cmakeBasedPortName): Return portName() with capitalized first letter.
        (determineIsEfl): Deleted.
        (determineIsGtk): Deleted.
        (determineIsWinCairo): Deleted.

        * Scripts/build-jsc: Call prohibitUnknownPort().
        * Scripts/run-minibrowser: Ditto.
        * Scripts/webkitperl/FeatureList.pm: Ditto.
        * Scripts/update-webkit: Call determinePortName() instead of
        determineIsWinCairo().

2016-02-02  Dan Bernstein  <mitz@apple.com>

        Better fix for Layout Test fast/parser/external-entities-in-xslt.xml is flaky on El Capitan (but fails most of the time)
        https://bugs.webkit.org/show_bug.cgi?id=153683

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Reverted change from r196013. DUMPRENDERTREE_TEMP is not
          used by any code in the Web Content process. If that ever changed, we should send it over
          as a bundle parameter.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Reverted change from r196013.

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

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize): Set XML_CATALOG_FILES in the Web Process
          environment. This is early enough that libxml2 has not been initialized yet.

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

2016-02-02  Dan Bernstein  <mitz@apple.com>

        Layout Test fast/parser/external-entities-in-xslt.xml is flaky on El Capitan (but fails most of the time)
        https://bugs.webkit.org/show_bug.cgi?id=153683

        Reviewed by Alexey Proskuryakov.

        Ensure that XML_CATALOG_FILES is set in the Web Content service’s environment as well.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Also set __XPC_DUMPRENDERTREE_TEMP.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Set __XPC_XML_CATALOG_FILES.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server): Ditto.

2016-01-29 Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Virtual Keyboard overlaps MiniBrowser's WebView
        https://bugs.webkit.org/show_bug.cgi?id=153009

        Reviewed by Gyuyoung Kim.

        On mobile, virtual keyboard represented by ecore_imf module appears on
        the top of application layer usually covering bottom part of the screen.
        If the web page contains the editable content on the bottom of the page
        it will be overlapped by keyboard which prevents user from seeing the
        typed text.

        Pack MiniBrowser layout into conformant widget to allow EFL to guess
        the space that will be required by the keyboard, finally resizing it
        to the desired size. As a result, webview gets resized and scrolled
        into focused elements which makes the editable elements visible while
        typing.

        More details about elm_conformant widger can be found at:
        https://docs.enlightenment.org/elementary/1.15.0/group__Conformant.html
        https://docs.enlightenment.org/elementary/1.15.0/conformant_example.html

        * MiniBrowser/efl/main.c:
        (window_create): pack a box into conformant widget.

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

        [GTK][EFL] Upgrade OpenWebRTC dependency
        https://bugs.webkit.org/show_bug.cgi?id=153489

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner): Avoid running the mediastream API test.
        * Scripts/webkitperl/FeatureList.pm: Stop compiling mediastream by
        default for gtk and efl.
        * gtk/jhbuild-webrtc.modules: Added modules files with
        dependencies required to compile and test the mediastream.

2016-02-01  Jason Marcell  <jmarcell@apple.com>

        Add code to parse the git branches out of the Trac RSS feed
        https://bugs.webkit.org/show_bug.cgi?id=153624

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype.commitsOnBranch): Update filter to check for Git branches.
        (Trac.prototype._convertCommitInfoElementToObject): Parse Git branches from the Trac RSS feed. Also changed "branchName" to
        "branches" and updated the code to work with an array instead of a string.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Refactored example commits out into a constant, MockTrac.EXAMPLE_TRAC_COMMITS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-git-trac-rss.xml: Added. Test
        fixture that contains XML with a Git branch.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit test to test parsing Git
        branches from Trac RSS feed. Also updated code to work with the new MockTrac.EXAMPLE_TRAC_COMMITS constant.

2016-02-01  Brady Eidson  <beidson@apple.com>

        Add command line flag to DRT to output the number of tests completed in server mode.
        https://bugs.webkit.org/show_bug.cgi?id=153750

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (runTestingServerLoop):

2016-02-01  Jason Marcell  <jmarcell@apple.com>

        Improvements to botwatcher's dashboard unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=153621

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/PopoverTracker.js:
        (PopoverTracker): Retain a reference to the PopoverTracker so that we can make assertions about it in the unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Changing revision 33019 to be on a different branch so that _appendPendingRevisionCount and
        _popoverLinesForCommitRange have to traverse commits from different branches.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Changing equal to strictEqual
        in unit test for _appendPendingRevisionCount. Also added assertions for Popover in test for
        _revisionContentWithPopoverForIteration.

2016-02-01  Jason Marcell  <jmarcell@apple.com>

        Refactor to add event listeners and start periodic updates for all trac instances.
        https://bugs.webkit.org/show_bug.cgi?id=153609

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Adding event listeners for all trac instances.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js: Starting periodic updates
        for all trac instances.

2016-01-31  Darin Adler  <darin@apple.com>

        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
        https://bugs.webkit.org/show_bug.cgi?id=153639

        Reviewed by Filip Pizlo.

        * Scripts/do-webcore-rename: Use script to do this rename.

2016-01-30  Commit Queue  <commit-queue@webkit.org>

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

        Caused frequent assertion failures on bots (Requested by ap on
        #webkit).

        Reverted changeset:

        "Replace CaseFoldingHash with ASCIICaseInsensitiveHash"
        https://bugs.webkit.org/show_bug.cgi?id=153639
        http://trac.webkit.org/changeset/195911

2016-01-30  Darin Adler  <darin@apple.com>

        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
        https://bugs.webkit.org/show_bug.cgi?id=153639

        Reviewed by Filip Pizlo.

        * Scripts/do-webcore-rename: Use script to do this rename.

2016-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        TouchList should be retargeted
        https://bugs.webkit.org/show_bug.cgi?id=149592

        Reviewed by Antti Koivisto.

        Added touchDownAtPoint and liftUpAtPoint to UIScriptController so that we can test touch events with
        multiple touch targets on iOS. fast/shadow-dom/touch-event-ios.html uses this new testing feature.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::touchDownAtPoint): Added.
        (WTR::UIScriptController::liftUpAtPoint): Added.
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator touchDown:touchCount:completionBlock:]): Added. Sends touch down and waits.
        (-[HIDEventGenerator liftUp:touchCount:completionBlock:]): Ditto for lift up.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::touchDownAtPoint): Added.
        (WTR::UIScriptController::liftUpAtPoint): Added.

2016-01-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        Enable SamplingProfiler on POSIX environment
        https://bugs.webkit.org/show_bug.cgi?id=153584

        Reviewed by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2016-01-29  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        update-webkit-dependency fails to fetch updates through firewall on Windows
        https://bugs.webkit.org/show_bug.cgi?id=153619

        Reviewed by Myles C. Maxfield.

        On Windows, when a firewall is present we need to read proxy settings
        from environment variables.

        This patch relies on the following environment variables being set:
        HTTP_PROXY
        HTTPS_PROXY

        * Scripts/update-webkit-dependency:

2016-01-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Use the non-Development variants of XPC services for development
        https://bugs.webkit.org/show_bug.cgi?id=152545

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (setUpGuardMallocIfNeeded): Ensure that libgmalloc is loaded into XPC services as well.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Ensure that the DYLD_LIBRARY_PATH and ASAN_OPTIONS are
          set in the XPC services as well.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Ensure that malloc stack logging for leaks and
          Guard Malloc are enabled in XPC services as well.

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

2016-01-28  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r195743.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported):

2016-01-12  Jer Noble  <jer.noble@apple.com>

        Custom protocol loading through AVFoundation does not support byte-range requests.
        https://bugs.webkit.org/show_bug.cgi?id=152919
        <rdar://problem/23664657>

        Reviewed by Alex Christensen.

        Add tests for new ParsedContntRange class.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ParsedContentRange.cpp: Added.
        (TestWebKitAPI::TEST):

2016-01-28  Konstantin Tokarev  <annulen@yandex.ru>

        Use isAnyWindows() instead of isCygwin() || isWindows() in Perl scripts.
        https://bugs.webkit.org/show_bug.cgi?id=153594

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs):
        (jscPath):
        (checkFrameworks):
        (setupCygwinEnv):
        (wrapperPrefixIfNeeded):
        (cmakeGeneratedBuildfile):
        (generateBuildSystemFromCMakeProject):
        * Scripts/webkitperl/features.pm:
        (libraryContainsSymbol):

2016-01-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r195742.

        Broke EWS

        Reverted changeset:

        "[webkitdirs] Clarify logic behind is{PortName} functions."
        https://bugs.webkit.org/show_bug.cgi?id=153554
        http://trac.webkit.org/changeset/195742

2016-01-28  Darin Adler  <darin@apple.com>

        Remove equalIgnoringCase since all callers really wanted equalIgnoringASCIICase
        https://bugs.webkit.org/show_bug.cgi?id=153411

        Reviewed by Ryosuke Niwa.

        * Scripts/do-webcore-rename: Removed rename of equalIgnoringCase since we
        have removed the function instead.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST): Updated test since nullptr is now ambiguous since we
        added overloads for const char*.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported): Use equalLettersIgnoringASCIICase.
        (WTR::AccessibilityUIElement::hasPopup): Ditto.
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        (WTR::testPathFromURL): Ditto.

2016-01-28  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Clarify logic behind is{PortName} functions.
        https://bugs.webkit.org/show_bug.cgi?id=153554

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (determinePortName): Added new function which decides which port are
        we building based on command line switches and platform defaults.
        (portName): Added getter for determined $portName.
        (isEfl): Modified to use portName().
        (isGtk): Ditto.
        (isWinCairo): Ditto.
        (isAppleMacWebKit): Ditto.
        (isAppleWinWebKit): Ditto.
        (isIOSWebKit): Ditto.
        (cmakeBasedPortName): Code replaced with portName() call.
        (determineIsEfl): Deleted.
        (determineIsGtk): Deleted.
        (determineIsWinCairo): Deleted.

2016-01-28  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Don't pass cmakeBasedPortName around.
        https://bugs.webkit.org/show_bug.cgi?id=153589

        Reviewed by Darin Adler.

        It should be local function of webkitdirs.pm instead.

        * Scripts/build-jsc: Don't pass cmakeBasedPortName to
        buildCMakeProjectOrExit().
        * Scripts/build-webkit: Don't pass cmakeBasedPortName to
        buildCMakeProjectOrExit() and generateBuildSystemFromCMakeProject().
        * Scripts/run-efl-tests: Don't pass cmakeBasedPortName to
        generateBuildSystemFromCMakeProject().
        * Scripts/webkitdirs.pm: Don't export cmakeBasedPortName.
        (generateBuildSystemFromCMakeProject): Removed $port argument as we
        can get it from cmakeBasedPortName().
        (buildCMakeProjectOrExit): Ditto.

2016-01-28  Gwang Yoon Hwang  <yoon@igalia.com>

        [GStreamer] Clean up includes and headers related with GStreamerGL
        https://bugs.webkit.org/show_bug.cgi?id=153590

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py: Skips
        include_order check for MediaPlayerPrivateGStreamerBase.cpp
        Removes VideoSinkGStreamer1.cpp which doesn't exist anymore.

2016-01-27  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Remove unused accessibility related code
        https://bugs.webkit.org/show_bug.cgi?id=153543

        Reviewed by Darin Adler.

        Removed reference to EAIL library.
        It not going to be support anymore. There have been changes in
        EFL/Elementary in terms of the accessibility and we should
        follow those.

        * efl/jhbuild-optional.modules:

2016-01-27  Daniel Bates  <dabates@apple.com>

        Remove WebKitSystemInterface for iOS SDK < 9
        https://bugs.webkit.org/show_bug.cgi?id=153570

        Reviewed by Andy Estes.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-01-27  Jason Marcell  <jmarcell@apple.com>

        Fix bugs caused by incorrect usage of "branch" vs. "branchName".
        https://bugs.webkit.org/show_bug.cgi?id=153330

        Reviewed by Daniel Bates.

        In an earlier patch we started using the name "branch" to indicate a branch object, whereas
        "branchName" implies that the variable or property in question is simply a string. We fixed some
        inconsistencies regarding this issue in 152982 but further bugs and inconsistencies were recently
        spotted in BuildbotQueueView.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Change branchName to branch in method signature.
        Changed branchName to branch.name in call to commitsOnBranch.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Change branch.name to branch in call to
        _popoverLinesForCommitRange.
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange): Changed context.branchName to context.branch.name.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Changed branch.name to branch.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added tests to verify
        fix.

2016-01-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add API to access closed shadowRoot in InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=153533

        Reviewed by Antti Koivisto.

        Added WebKit2 API test for WKBundleScriptWorldMakeAllShadowRootsOpen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakrAllShadowRootOpen_Bundle.cpp: Added.
        (TestWebKitAPI::InjectedBundleMakrAllShadowRootOpenTest::InjectedBundleMakrAllShadowRootOpenTest):
        (TestWebKitAPI::InjectedBundleMakrAllShadowRootOpenTest::initialize):

2016-01-27  Jason Marcell  <jmarcell@apple.com>

        Refactor logic for parsing Trac revisions into its own function and add logic for parsing git hashes.
        https://bugs.webkit.org/show_bug.cgi?id=153332

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._xmlTimelineURL): Uses new function.
        (Trac.prototype._parseRevisionFromURL): Added. Pulled out logic for parsing revisions from a URL. Also added
        logic for parsing git hashes.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added tests for
        Trac._parseRevisionFromURL.

2016-01-27  Alexey Proskuryakov  <ap@apple.com>

        Remove Mavericks from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=153521

        Reviewed by Dan Bernstein.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2016-01-27  Alexey Proskuryakov  <ap@apple.com>

        Remove ENABLE_CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=153545

        Reviewed by Simon Fraser.

        * Scripts/webkitperl/FeatureList.pm:

2016-01-26  Jason Marcell  <jmarcell@apple.com>

        Sort incoming commits via date instead of revision number.
        https://bugs.webkit.org/show_bug.cgi?id=153467

        Reviewed by Alexey Proskuryakov.

        Future Trac instances may use Git or other revision control systems where we cannnot rely on the revision number
        for sorting revisions. Instead we use the commit date to sort revisions chronologically.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._loaded): Sort via date instead of revision number.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Fix up the mock data to look more like real-world data.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-trac-rss.xml: Added.
        Fake RSS feed that adds three more commits.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit tests to test
        Trac._loaded().

2016-01-26  I-Ting Liu  <iting_liu@apple.com>

        Add a test for WebKit::stringMatchesWildcardString.
        https://bugs.webkit.org/show_bug.cgi?id=153090

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the file to the project.

        * TestWebKitAPI/Tests/WebKit2/mac/StringUtilities.mm: Added.
        (TestWebKitAPI::TEST):
        Test that a string matches another string that may contain wildcard characters.

2016-01-26  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Removed check for bison, gperf, and flex.
        https://bugs.webkit.org/show_bug.cgi?id=153496

        Reviewed by Alex Christensen.

        This prerequisites are checked in WebKitCommon.cmake and don't
        have to be in $PATH.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig):

2016-01-26  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] isCMakeBuild should be true by default
        https://bugs.webkit.org/show_bug.cgi?id=153497

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (isCMakeBuild):

2016-01-26  Daniel Bates  <dabates@apple.com>

        Add WebKitSystemInterface for iOS 9.2
        https://bugs.webkit.org/show_bug.cgi?id=153355

        Rubber-stamped by David Kilzer.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-01-26  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Credential cache is not cleared between tests
        https://bugs.webkit.org/show_bug.cgi?id=153407
        <rdar://problem/24280834>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Call WKContextClearCachedCredentials()
        to clear cached credentials.

2016-01-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        kill-old-processes: allow to specify on the environment of the bot a list of process that should be killed.
        https://bugs.webkit.org/show_bug.cgi?id=153483

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/kill-old-processes:
        (main): Allow to specify extra tasks to kill via the environment variable WEBKITBOT_TASKSTOKILL

2016-01-25  Simon Fraser  <simon.fraser@apple.com>

        Give the layout test results file a <title> showing the date and time the tests were run
        https://bugs.webkit.org/show_bug.cgi?id=153187

        Reviewed by Darin Adler.
        
        Include a 'date' property in the JSON with the date and time the tests completed.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):

2016-01-25  Commit Queue  <commit-queue@webkit.org>

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

        regressed performance of test bots by ~6% (Requested by dydz
        on #webkit).

        Reverted changeset:

        "WebKitTestRunner: Credential cache is not cleared between
        tests"
        https://bugs.webkit.org/show_bug.cgi?id=153407
        http://trac.webkit.org/changeset/195543

2016-01-25  Aakash Jain  <aakash_jain@apple.com>

        Failing to upload to flakiness dashboard should not be a hard error
        https://bugs.webkit.org/show_bug.cgi?id=153444
        <rdar://problem/22146294>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files): If JSON file is not generated, do not try to upload it.

2016-01-25  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Credential cache is not cleared between tests
        https://bugs.webkit.org/show_bug.cgi?id=153407
        <rdar://problem/24280834>

        Reviewed by Brady Eidson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Reset testing network session
        to clear cached credentials.

2016-01-24  Dan Bernstein  <mitz@apple.com>

        Added project.xcworkspace and xcuserdata to this project’s svn:ignore.

        * LayoutTestRelay/LayoutTestRelay.xcodeproj: Added property svn:ignore.

2016-01-22  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/195474.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2016-01-22  Tim Horton  <timothy_horton@apple.com>

        Add a test for iOS arrow-key repeat
        https://bugs.webkit.org/show_bug.cgi?id=152857
        <rdar://problem/24017380>

        Reviewed by Darin Adler.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator keyPress:completionBlock:]):
        (-[HIDEventGenerator keyDown:completionBlock:]):
        (-[HIDEventGenerator keyUp:completionBlock:]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard):
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard):
        Make it possible to independently send keyUp/keyDown, instead of just paired.

2016-01-22  Tim Horton  <timothy_horton@apple.com>

        Reproducible "Unhanded web process message 'WebUserContentController:AddUserScripts'" and friends
        https://bugs.webkit.org/show_bug.cgi?id=153193
        <rdar://problem/24222034>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (webViewForScriptMessageHandlerMultipleHandlerRemovalTest):
        (TEST):
        Add a test that exhibits the problems we're fixing here.
        Before, it would both log and assert in debug, and crash in release.
        Now it runs happily to completion.

2016-01-22  Enrica Casucci  <enrica@apple.com>

        Add support for testing data detection.
        https://bugs.webkit.org/show_bug.cgi?id=153360

        Reviewed by Tim Horton.

        Adding a new testing option (useDataDetection) to turn on
        data detection when running the a test.

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

2016-01-21  Simon Fraser  <simon.fraser@apple.com>

        Fix the lldb WebCoreLayoutUnitProvider to not dynamically look up the LayoutUnit denominator
        https://bugs.webkit.org/show_bug.cgi?id=153334

        Reviewed by Zalan Bujtas.
        
        Evaluating expressions in the LayoutUnit summary provider seems to cause
        re-entrancy problems in lldb python bindings, so just hardcode the LayoutUnit
        denominator to 64.

        * lldb/lldb_webkit.py:
        (WebCoreLayoutUnitProvider.to_string):

2016-01-21  Filip Pizlo  <fpizlo@apple.com>

        display-profiler-output should be able to display code blocks sorted by machine counts
        https://bugs.webkit.org/show_bug.cgi?id=153298

        Reviewed by Oliver Hunt.

        * Scripts/display-profiler-output:

2016-01-21  Julien Isorce  <j.isorce@samsung.com>

        Ensure to use compatible liborc version with wanted gstreamer version
        https://bugs.webkit.org/show_bug.cgi?id=153276

        For example gst-plugins-base-1.4.4 fails to build with liborc-0.4.24.
        The user may have a very recent liborc installed on his system.

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules: add liborc-0.4.17 and make it a gst dependency.
        * gtk/jhbuild.modules: add liborc-0.4.17 and make it a gst depencendy.

2016-01-21  Nan Wang  <n_wang@apple.com>

        AX: [IOS] Implement next/previous text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=153292
        <rdar://problem/24268243>

        Reviewed by Chris Fleizach.

        Made text marker tests available on iOS.

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added.
        (AccessibilityTextMarker::AccessibilityTextMarker):
        (AccessibilityTextMarker::~AccessibilityTextMarker):
        (AccessibilityTextMarker::isEqual):
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::isEqual):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::pathDescription):
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::selectedTextMarkerRange):
        (AccessibilityUIElement::resetSelectedTextMarkerRange):
        (AccessibilityUIElement::textMarkerRangeLength):
        (AccessibilityUIElement::textMarkerRangeForMarkers):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        (AccessibilityUIElement::endTextMarkerForBounds):
        (AccessibilityUIElement::startTextMarkerForBounds):
        (AccessibilityUIElement::textMarkerForPoint):
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (AccessibilityUIElement::indexForTextMarker):
        (AccessibilityUIElement::isTextMarkerValid):
        (AccessibilityUIElement::textMarkerForIndex):
        (AccessibilityUIElement::startTextMarker):
        (AccessibilityUIElement::endTextMarker):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::getLinkedUIElements):
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::removeSelection):
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):

2016-01-20  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert accidental unreviewed commit.

        * Scripts/display-profiler-output:

2016-01-20  Jason Marcell  <jmarcell@apple.com>

        Refactor compareIterations to remove duplicate code.
        https://bugs.webkit.org/show_bug.cgi?id=152913

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.compareIterations): Refactored to remove duplicate code.
        (BuildbotQueue.prototype.sortIterations): Add binding to call to compareIterations.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added tests in order to ensure
        the same behavior before and after refactor.

2016-01-20  Dana Burkart  <dburkart@apple.com>

        Botwatcher's dashboard should show an 'X' when the build is broken
        https://bugs.webkit.org/show_bug.cgi?id=152507

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotStaticAnalyzerQueueView.js:
        (BuildbotStaticAnalyzerQueueView.prototype.appendStaticAnalyzerQueueStatus):
        (BuildbotStaticAnalyzerQueueView.prototype.update):

2016-01-19  Jason Marcell  <jmarcell@apple.com>

        Remove assertion from revisionContentForIteration that is causing errors on the dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=153262

        Reviewed by Alexey Proskuryakov.

        Occasionaly some buildbot iterations will not have their "got_revisions" property populated. In
        such cases this revisionContentForIteration method does not have any content to return, thus the
        assertion fails.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype.revisionContentForIteration): Removed assertion that was causing errors.

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime critical warnings when loading a URL after a session restore
        https://bugs.webkit.org/show_bug.cgi?id=153233

        Reviewed by Michael Catanzaro.

        Add new test case.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp:
        (viewLoadChanged):
        (testWebKitWebViewNavigationAfterSessionRestore):
        (beforeAll):

2016-01-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Remove jhbuild-optional.modules
        https://bugs.webkit.org/show_bug.cgi?id=152964

        Reviewed by Alex Christensen.

        * gtk/jhbuild-optional.modules: Removed.
        * gtk/jhbuild.modules:

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support to load/save session in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=153201

        Reviewed by Michael Catanzaro.

        It makes it easier to test the new WebView session API.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowFinalize): Free the session file path.
        (browserWindowSaveSession): Save the current WebView session if
        there's a session file path.
        (browserWindowDeleteEvent): Call browserWindowSaveSession().
        (browser_window_load_session): Try to load the session from the
        given file path, otherwise fall back to homepage and keep the
        session file to save the session on window close.
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserWindow): Pass the given session file path when
        shouldLoadSession is TRUE.
        (main): Only allow to restore/save session when MiniBrowser is
        launched without URL arguments.

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/geolocation-permission-requests after r195075.

        Geolocation is no longer allowed for unique origins after r195075.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests):

2016-01-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][EFL] Layout tests abort with PulseAudioSanitizer instance has no attribute '_pa_module_index' when the build is not ready.
        https://bugs.webkit.org/show_bug.cgi?id=153216

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/pulseaudio_sanitizer.py:
        (PulseAudioSanitizer.__init__): initialize _pa_module_index in the constructor.

2016-01-18  Nan Wang  <n_wang@apple.com>

        AX: [Mac] Implement next/previous text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=152728

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):

2016-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Add testair to the build system
        https://bugs.webkit.org/show_bug.cgi?id=153126

        Reviewed by Michael Catanzaro.

        * Scripts/build-jsc:

2016-01-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove TextRun::allowsRoundingHacks()
        https://bugs.webkit.org/show_bug.cgi?id=153185

        Reviewed by Simon Fraser.

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

2016-01-15  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Avoid list form of open because it broke WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=153106

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-15  Simon Fraser  <simon.fraser@apple.com>

        Add kdebug_trace signposts for a few WebCore operations
        https://bugs.webkit.org/show_bug.cgi?id=153136
        rdar://problem/24208487

        Reviewed by Sam Weinig.
        
        Plist used by kdebug_trace() viewing tools.

        * Tracing/SystemTracePoints.plist: Added.

2016-01-14  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Replaced grep invocation with perl code
        https://bugs.webkit.org/show_bug.cgi?id=153106

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-14  Brian Burg  <bburg@apple.com>

        prepare-changelog does not read paths containing spaces properly
        https://bugs.webkit.org/show_bug.cgi?id=137982

        Reviewed by Joseph Pecoraro.

        Escape whitespace in filenames before passing the file path to other functions.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Use the more explicit 3-argument form of 'open'.

2016-01-14  Jason Marcell  <jmarcell@apple.com>

        Standardize the usage of "branch" vs. "branchName".
        https://bugs.webkit.org/show_bug.cgi?id=152982

        Reviewed by Daniel Bates.

        In an earlier patch we started using the name "branch" to indicate a branch object, whereas
        "branchName" implies that the variable or property in question is simply a string.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Change branch to branchName.
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange): Change branch to branch.name.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Change branch to branchName.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype.commitsOnBranch): Change branch to branchName.
        (Trac.prototype._convertCommitInfoElementToObject): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Ditto.

2016-01-14  Jason Marcell  <jmarcell@apple.com>

        Add a unit test to test BuildbotQueueView._appendPendingRevisionCount.
        https://bugs.webkit.org/show_bug.cgi?id=152910

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueue.js: Added.
        (MockBuildbotQueue): Added. Mock BuildbotQueue object that doesn't need to talk to an actual Buildbot server.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueueView.js: Added.
        (MockBuildbotQueueView): Added. Mock BuildbotQueueView object that returns a pre-specified _latestProductiveIteration without
        the need to talk to a real Buildbot server.
        (MockBuildbotQueueView.prototype._latestProductiveIteration): Added. Returns a pre-specified _latestProductiveIteration
        without the need to talk to a real Buildbot server.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js: Added.
        (MockTrac): Added. Mock Trac constructor that has pre-populated "recordedCommits" and does not need to talk to a real Trac
        server.
        (MockTrac.prototype.get oldestRecordedRevisionNumber): Added. Returns a pre-specified revision.
        (MockTrac.prototype.get latestRecordedRevisionNumber): Ditto.
        (MockTrac.prototype.loadMoreHistoricalData): Added. Overrides the real loadMoreHistoricalData so that we don't waste time
        trying to talk to Trac.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html: Added. Web page container for
        QUnit unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added. QUnit unit tests.

2016-01-14  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [CMake][GTK] CMake Error: Could not create named generator Eclipse CDT4 - Ninja
        https://bugs.webkit.org/show_bug.cgi?id=132599

        Reviewed by Michael Catanzaro.

        Check if cmake Ninja generators are installed.

        * Scripts/webkitdirs.pm:
        (canUseNinjaGenerator):
        (canUseEclipseNinjaGenerator):
        (generateBuildSystemFromCMakeProject):
        (canUseEclipse): Deleted.

2016-01-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Testing with font family name "System Font" is unused
        https://bugs.webkit.org/show_bug.cgi?id=153073
        <rdar://problem/24091683>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet): Deleted.
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet): Deleted.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet): Deleted.

2016-01-13  Daniel Bates  <dabates@apple.com>

        [XSS Auditor] Add test when XSS payload is in the path portion of the URL
        https://bugs.webkit.org/show_bug.cgi?id=152871

        Reviewed by Brent Fulgham.

        Merged from Blink (patch by Tom Sepez <tsepez@chromium.org>):
        <https://src.chromium.org/viewvc/blink?revision=164746&view=revision>

        * Scripts/webkitpy/layout_tests/servers/lighttpd.conf:

2016-01-08  Andy Estes  <aestes@apple.com>

        [Content Filtering] Lazily load platform frameworks
        https://bugs.webkit.org/show_bug.cgi?id=152881
        rdar://problem/23270886

        Reviewed by Brady Eidson.

        Added an API test that verifies that the Parental Controls and Network Extension frameworks are loaded at the
        expected times. The test verifies that they are not loaded after creating a WKWebView, loading an HTML string,
        loading NSData, loading a file, or loading from a custom protocol. It verifies that Network Extension on Mac/iOS
        and Parental Controls on iOS are loaded after an HTTP request. It finally verifies that Parental Controls on Mac
        is loaded after an HTTPS request.

        To accomplish this, TestProtocol was generalized to allow tests to specify the scheme they wish to use.
        Other tests that used TestProtocol were updated to account for this change. TestProtocol was removed from
        WebKit2.PreventImageLoadWithAutoResizingTest, which didn't actually need to use it. ContentFiltering tests were
        also re-enabled on iOS after mistakenly being disabled by r188892.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.h: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        (TEST):
        (downloadTest):
        (-[LazilyLoadPlatformFrameworksController init]):
        (-[LazilyLoadPlatformFrameworksController webView]):
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):
        (-[LazilyLoadPlatformFrameworksController webView:didFinishNavigation:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
        (-[ContentFilteringPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[ContentFilteringPlugIn observeValueForKeyPath:ofObject:change:context:]):
        (-[ContentFilteringPlugIn checkIfPlatformFrameworksAreLoaded:]):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        (TestWebKitAPI::TEST): Deleted.
        * TestWebKitAPI/cocoa/TestProtocol.h:
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (+[TestProtocol registerWithScheme:]):
        (+[TestProtocol unregister]):

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

        Fix the Sunpider converage in slow device.
        https://bugs.webkit.org/show_bug.cgi?id=152938
        <rdar://problem/22511411>

        Reviewed by Ryosuke Niwa.

        Updated the patch for RunBenchmark to resume sunspider coverage by removing unused subresources in sub-tests.

        * Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch:

2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>

        Add a build flag for custom element
        https://bugs.webkit.org/show_bug.cgi?id=153005

        Reviewed by Alex Christensen.

        Added --custom-elements option to enable custom elements support.

        * Scripts/webkitperl/FeatureList.pm:

2016-01-12  Benjamin Poulain  <bpoulain@apple.com>

        [JSC] Add a help message when run-jsc-stress-tests fails
        https://bugs.webkit.org/show_bug.cgi?id=153014

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests:

2016-01-11  Saam barati  <sbarati@apple.com>

        run-jsc-stress-tests should try to figure out a JSC path
        https://bugs.webkit.org/show_bug.cgi?id=152971

        Reviewed by Yusuke Suzuki.

        This patch now allows run-jsc-stress-tests to be run
        without a "--jsc <jsc-path>" argument. It tries
        to take its best guess at a <jsc-path> automagically.
        
        This makes it much easier to just run run-jsc-stress-tests
        with a directory or a yaml file as an argument.
        You now just do this:
        `run-jsc-stress-tests <path-to-yaml>`
        or
        `run-jsc-stress-tests <path-to-directory-of-js-files>`
        
        I wrote this patch because I'd often find myself hacking the 
        run-javascriptcore-tests file just to run a particular subset of tests.
        Because I always forget the arguments to run-jsc-stress-tests (which means
        I always forgot to provide a --jsc argument), I always found it easier to 
        just hack on that file instead of calling run-jsc-stress-tests directly.
        No longer is this true!

        * Scripts/run-jsc-stress-tests:

2016-01-09  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to opt out a URL scheme from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=152950
        rdar://problem/24066652

        Reviewed by Tim Horton.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AlwaysRevalidatedURLSchemes.mm: Added.
        (+[AlwaysRevalidatedURLSchemeProtocol canInitWithRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol canonicalRequestForRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol requestIsCacheEquivalent:toRequest:]):
        (-[AlwaysRevalidatedURLSchemeProtocol startLoading]):
        (-[AlwaysRevalidatedURLSchemeProtocol stopLoading]):
        (-[AlwaysRevalidatedURLSchemesDelegate webView:didFinishNavigation:]):
        (TEST):

2016-01-11  Commit Queue  <commit-queue@webkit.org>

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

        This change broke the mac build (Requested by ryanhaddad on
        #webkit).

        Reverted changeset:

        "[Cocoa] Add SPI to opt out a URL scheme from the memory
        cache"
        https://bugs.webkit.org/show_bug.cgi?id=152950
        http://trac.webkit.org/changeset/194866

2016-01-11  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to opt out a URL scheme from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=152950
        rdar://problem/24066652

        Reviewed by Tim Horton.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AlwaysRevalidatedURLSchemes.mm: Added.
        (+[AlwaysRevalidatedURLSchemeProtocol canInitWithRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol canonicalRequestForRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol requestIsCacheEquivalent:toRequest:]):
        (-[AlwaysRevalidatedURLSchemeProtocol startLoading]):
        (-[AlwaysRevalidatedURLSchemeProtocol stopLoading]):
        (-[AlwaysRevalidatedURLSchemesDelegate webView:didFinishNavigation:]):
        (TEST):

2016-01-11  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Use CMake to determine architecture on isCMakeBuild()
        https://bugs.webkit.org/show_bug.cgi?id=152959

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] W3C CSS2.1 anonymous table tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=152455

        Reviewed by Mario Sanchez Prada.

        Add shared-mime-info to the jhbuild environment, since it affects the results of layout
        tests. Add upstream patches to fix detection of XHTML files.

        * gtk/jhbuild.modules:
        * gtk/patches/shared-mime-info-xht-glob.patch: Added.
        * gtk/patches/shared-mime-info-xhtml-magic.patch: Added.

2016-01-10  Saam barati  <sbarati@apple.com>

        Implement a sampling profiler
        https://bugs.webkit.org/show_bug.cgi?id=151713

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2016-01-10  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Try arch and uname commands on non-windows OS
        https://bugs.webkit.org/show_bug.cgi?id=152958

        Reviewed by Michael Catanzaro.

        Right now, determineArchitecture()  uses `arch` and `uname -m`
        commands to determine architecture in case of condition (isGtk() ||
        isAppleMacWebKit() || isEfl()) is true. This should be !anyWindows()
        instead, because this code is applicable to any non-windows OS WebKit
        supports (even Haiku which once was supported is moderately
        POSIX-compliant and has uname command).

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-08  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests mis-counts totals when there are other crashes
        https://bugs.webkit.org/show_bug.cgi?id=152894
        <rdar://problem/24098697>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.add): Do not update result counters for other crashes.

2016-01-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        webkit-patch build-and-test should have an option to iterate over new tests
        https://bugs.webkit.org/show_bug.cgi?id=143093

        Reviewed by Michael Catanzaro.

        This patch introduces the --iterate-on-new-tests option to webkit-patch build-and-test.
        It allows running run-webkit-tests on modified or new paths in LayoutTests.
        Computation of new or modified tests is done by LayoutTestFinder.find_touched_tests
        It implements the translation of -expected.* paths to their related tests.
        It also implements the removal of skipped tests.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_touched_tests):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py: Added.
        (MockPort):
        (MockPort.__init__):
        (MockPort.tests):
        (LayoutTestFinderTests):
        (LayoutTestFinderTests.touched_files):
        (LayoutTestFinderTests.test_touched_test):
        (LayoutTestFinderTests.test_expected_touched_test):
        (LayoutTestFinderTests.test_platform_expected_touched_test):
        (LayoutTestFinderTests.test_platform_duplicate_touched_test):
        (LayoutTestFinderTests.test_touched_but_skipped_test):
        * Scripts/webkitpy/port/base.py:
        (Port.potential_test_names_from_expected_file):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest._default_options):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.options):
        (RunTests.run):
        (RunTests):
        (RunTests._new_or_modified_tests):
        (RunTests._run_webkit_tests):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest._step_options):

2016-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        prepare-ChangeLog should include radar number
        https://bugs.webkit.org/show_bug.cgi?id=152839
        <rdar://problem/24093563>

        Reviewed by Daniel Bates.

        When running `prepare-ChangeLog -b ###`, check for a bugzilla comment that
        starts with a "<rdar://problem/####>" URL. If found, include that radar URL
        in the ChangeLog description after the bug URL.

        * Scripts/prepare-ChangeLog:
        (main): Update signatures.
        (fetchBugXMLData): XML Data is now used for multiple reasons. Extract this to just get the data.
        (fetchBugDescriptionFromBugXMLData): Search data for <short_desc>.
        (fetchRadarURLFromBugXMLData): Search comment text for radar URL.
        (generateNewChangeLogs): Include radar URL if we found one.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/fetchRadarURLFromBugXMLData.pl: Added.
        Tests for the radar URL extraction.

2016-01-07  Alexey Proskuryakov  <ap@apple.com>

        testRunner.runUIScript crashes while running multiple tests in a row that invokes the same UIScript
        https://bugs.webkit.org/show_bug.cgi?id=152390
        <rdar://problem/23948321>

        Reviewed by Simon Fraser.

        Fix two use-after-frees.

        1. WKPageCallAfterNextPresentationUpdate's callback has a pointer to TestInvocation,
        but we may have already progressed to another test by the time the callback fires,
        having destroyed the TestInvocation.
        2. UIScriptController is a RefCounted object, but it has a raw pointer to
        UIScriptContext which has the same lifetime as a TestInvocation.
        As a result, completion blocks of UIScriptController actions would use a destroyed
        TestInvocation.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::url):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::runUISideScriptAfterUpdateCallback):
        (WTR::TestInvocation::runUISideScript):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext):
        (UIScriptContext::~UIScriptContext):
        (UIScriptContext::runUIScript):
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::UIScriptController):
        (WTR::UIScriptController::contextDestroyed):
        (WTR::UIScriptController::makeWindowObject):
        (WTR::UIScriptController::setWillBeginZoomingCallback):
        (WTR::UIScriptController::willBeginZoomingCallback):
        (WTR::UIScriptController::setDidEndZoomingCallback):
        (WTR::UIScriptController::didEndZoomingCallback):
        (WTR::UIScriptController::setDidEndScrollingCallback):
        (WTR::UIScriptController::didEndScrollingCallback):
        (WTR::UIScriptController::setDidShowKeyboardCallback):
        (WTR::UIScriptController::didShowKeyboardCallback):
        (WTR::UIScriptController::setDidHideKeyboardCallback):
        (WTR::UIScriptController::didHideKeyboardCallback):
        (WTR::UIScriptController::uiScriptComplete):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::create):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::singleTapAtPoint):
        (WTR::UIScriptController::doubleTapAtPoint):
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::contentVisibleRect):
        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
        (WTR::UIScriptController::platformSetDidShowKeyboardCallback):
        (WTR::UIScriptController::platformSetDidHideKeyboardCallback):
        (WTR::UIScriptController::platformSetDidEndScrollingCallback):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAsyncTask):

2016-01-07  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [buildbot] clean-build script should remove untracked files and revert local changes too
        https://bugs.webkit.org/show_bug.cgi?id=142400

        Reviewed by Ryosuke Niwa.

        This patch cleans the WebKit folder by reverting tracked files changes and deleting SCM untracked files, including SCM ignored files.
        A helper routine SCM.discard_untracked_files is added for that purpose.

        * BuildSlaveSupport/clean-build:
        (main): Making call to Scripts/clean-webkit
        * Scripts/clean-webkit: Added.
        (main): Revert changes and delete untracked files.
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.discard_untracked_files): Helper function to discard untracked files or folders found by SCM.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_discard_untracked_files):
        (test_discard_untracked_files): Tests that untracked file and untracked folder get discarded correctly.

2016-01-06  Simon Fraser  <simon.fraser@apple.com>

        Add a setting and preferences to enable display-list drawing. Does nothing yet.
        https://bugs.webkit.org/show_bug.cgi?id=152807

        Reviewed by Zalan Bujtas.
        
        Add an item to the Settings menu to toggle display-list drawing.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleDisplayListDrawingEnabled:]):
        (-[SettingsController displayListDrawingEnabled]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2016-01-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files - Add GIT support
        https://bugs.webkit.org/show_bug.cgi?id=143135

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.untracked_files): Adding support for git.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitTest.setUp):
        (GitTest.test_untracked_files): Adding test.

2016-01-05  Mark Lam  <mark.lam@apple.com>

        Rename badly named JSC_timeout env var to JSCTEST_timeout.
        https://bugs.webkit.org/show_bug.cgi?id=152748

        Reviewed by Geoffrey Garen.

        Now that we validate JSC options, the badly named JSC_timeout env var causes the
        bots to have a bad time.

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

2016-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to save and restore session
        https://bugs.webkit.org/show_bug.cgi?id=115600

        Reviewed by Michael Catanzaro.

        Add test case to check the new session API.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp:
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        (beforeAll):

2016-01-04  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.16.1
        https://bugs.webkit.org/show_bug.cgi?id=152688

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2016-01-04  Aakash Jain  <aakash_jain@apple.com>

        error running layout tests on iOS simulator on latest build
        https://bugs.webkit.org/show_bug.cgi?id=152719
        <rdar://problem/24009549>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.wait_until_device_is_booted): Ensure that simulator device is in booted state
          before running simctl spawn command.

2016-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move Frédéric Wang to committers list

        He seems to be on the contributors list by accident. He has been landing his own commits for
        about two years now.

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

2016-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move Sebastian Dröge to committers list harder

        He accidentally added himself to the reviewers list because the file is confusing. Then I
        accidentially moved him to the contributors list because the file is confusing, even though
        I knew the contributors list existed in this file and was attempting to add him to the
        committers list. Really move him to the committers list now.

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

2016-01-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files - Add SVN support
        https://bugs.webkit.org/show_bug.cgi?id=152546

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (test_untracked_files): Activating test for SVN.
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.untracked_files): Implementing untracked files retrieval for SVN.

2015-12-31  Andy Estes  <aestes@apple.com>

        Replace WTF::move with WTFMove
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Brady Eidson.

        * DumpRenderTree/TestRunner.h:
        (TestRunner::setAllowedHosts):
        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::SetData):
        * TestWebKitAPI/Tests/WTF/Deque.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Ref.cpp:
        (TestWebKitAPI::passWithRef):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter):
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::InMemoryCompiledContentExtension::InMemoryCompiledContentExtension):
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFACombiner.cpp:
        (TestWebKitAPI::combine):
        * TestWebKitAPI/Tests/WebCore/DFAHelpers.h:
        (TestWebKitAPI::createNFAs):
        * TestWebKitAPI/Tests/WebKit2/cocoa/WeakObjCPtr.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (WebProcessTest::add):

2016-01-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] REGRESSION(r192761): Broke resource URIs for applications that use g_resource_load in a web extension
        https://bugs.webkit.org/show_bug.cgi?id=152634

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testLoadFromGResource): Added test.
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (registerGResource): Added.
        (webkit_web_extension_initialize_with_user_data): Load the test gresource.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/boring.html: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml: Add an HTML file.

2015-12-31  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r194470): Fix warnings uncovered by migrating to WTF_MOVE
        <https://bugs.webkit.org/show_bug.cgi?id=152601>

        Ignore unknown pragmas on older clangs.  Fixes the following
        build failure:

            Tools/TestWebKitAPI/Tests/WTF/NakedPtr.cpp:184:34: error: unknown warning group '-Wself-move', ignored [-Werror,-Wunknown-pragmas]
            #pragma clang diagnostic ignored "-Wself-move"
                                             ^
            1 error generated.

        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):

2015-12-31  Andy Estes  <aestes@apple.com>

        Update the style checker to advise using WTFMove() instead of WTF::move()
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_move):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_move):

2015-12-31  Andy Estes  <aestes@apple.com>

        Fix warnings uncovered by migrating to WTF_MOVE
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Daniel Bates.

        Ignored -Wself-move warnings in these two API tests. It's useful to test that these classes properly handle
        self-move, even if doing so would trigger a warning.

        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):

2015-12-31  Martin Robinson  <mrobinson@igalia.com>

        [GTK] The install-dependencies script has a syntax error
        https://bugs.webkit.org/show_bug.cgi?id=152613

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: Add the missing 'then.'

2015-12-30  Philippe Normand  <pnormand@igalia.com>

        [Mac][GTK] Jhbuild support for OSX
        https://bugs.webkit.org/show_bug.cgi?id=150799

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: Install dependencies on OSX with Homebrew.
        * gtk/jhbuild.modules: Moved platform-specific build settings in condition tags.
        * gtk/patches/foxbntconfig-fix-osx-cache.diff: Added.
        * gtk/jhbuildrc: GTK+ makeargs clean-up, the 3.0.12 hack is no longer needed.

2015-12-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move Sebastian Dröge to committers list

        He accidentally added himself to the reviewers list because the file is confusing.

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

2015-12-24  Simon Fraser  <simon.fraser@apple.com>

        Remove the unused #define _USE_MATH_DEFINES
        https://bugs.webkit.org/show_bug.cgi?id=152034

        Reviewed by Tim Horton.
        
        Update this test to use piDouble from MathExtras.h, and
        std::numeric_limits<>.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:

2015-12-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files - Generic changes
        https://bugs.webkit.org/show_bug.cgi?id=152536

        Reviewed by Brent Fulgham.

        This patch introduces SCM.untracked_files to retrieve a list of untracked files.
        No support is yet added to GIT and SVN specific implementations.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.untracked_files):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_untracked_files):

2015-12-23  Dewei Zhu  <dewei_zhu@apple.com>

        SVN checkout used by RunBenchmark should be non-interactive
        https://bugs.webkit.org/show_bug.cgi?id=152542

        Reviewed by Ryosuke Niwa.

        RunBenchmark should not require user interaction while running.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder._checkout_with_subversion):

2015-12-23  Brent Fulgham  <bfulgham@apple.com>

        Web Inspector: add support for running protocol-test.js tests on Windows
        https://bugs.webkit.org/show_bug.cgi?id=148037
        <rdar://problem/22292237>

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::inspectorTestStubURL): Provide implementation.

2015-12-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] MediaDeviceInfo.label must be empty in some situations
        https://bugs.webkit.org/show_bug.cgi?id=152000

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPermission):
        (WTR::InjectedBundle::setUserMediaPermissionForOrigin): New.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPermissionForOrigin): New.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUserMediaPermissionForOrigin):
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin): Add NULL check.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Don't add 
          persistent permission for origin, that can be done from script now.
        * WebKitTestRunner/TestController.h:

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Add support for
          SetUserMediaPermissionForOrigin.

2015-12-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix: Recognize Windows 10 variants.

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

2015-12-23  Chris Aljoudi <chris@chrismatic.io> and Alex Christensen <achristensen@webkit.org>

        Content blockers should be able to promote http to https
        https://bugs.webkit.org/show_bug.cgi?id=148966

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):
        (TestWebKitAPI::TEST_F):

2015-12-22  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] MiniBrowser should be able to choose the offline-web-application-cache option
        https://bugs.webkit.org/show_bug.cgi?id=152516

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:

2015-12-22  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed: Add John Wilander as a contributor.

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

2015-12-22  Chris Fleizach  <cfleizach@apple.com>

        [WK2] Looping in testcase: fast/dom/Window/property-access-on-cached-window-after-frame-removed.html
        https://bugs.webkit.org/show_bug.cgi?id=152482

        Reviewed by Brent Fulgham.

        vertical/horizontalScrollbar returns an accessibility element. That element can also be queried
        for the same property. On WK2, the element returned will not be valid, but is still present and
        that can lead to looping.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):

2015-12-22  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json: Marking myself as reviewer.

2015-12-21  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] test_ewk2_context failed after r192808
        https://bugs.webkit.org/show_bug.cgi?id=151846

        Reviewed by Gyuyoung Kim.

        Used the added ewk_context_web_process_count_limit_set api
        instead of the deprecated ewk_context_process_model_set.

        * MiniBrowser/efl/main.c:
        (elm_main):

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

        Unreviewed, move myself to reviewer list.

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

2015-12-21  Aakash Jain  <aakash_jain@apple.com>

        Unreviewed, add myself to the committers list.

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

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

        [GTK] jquery.min.js violates DFSG
        https://bugs.webkit.org/show_bug.cgi?id=152428

        Reviewed by Joseph Pecoraro.

        Stop distributing Source/WebInspectorUI/Tools. It is not needed in tarballs. This brings us
        into compliance with DFSG by removing a bundled, minified copy of jQuery from our tarball.

        * gtk/manifest.txt.in:

2015-12-19  Dan Bernstein  <mitz@apple.com>

        [Mac] WebKit contains dead source code for OS X Mavericks and earlier
        https://bugs.webkit.org/show_bug.cgi?id=152462

        Reviewed by Alexey Proskuryakov.

        - Removed definitions of MACOSX_DEPLOYMENT_TARGET and WEBKIT_SYSTEM_INTERFACE_LIBRARY for
          OS X 10.9:

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

        - Simplified expressions involving __MAC_OS_X_VERSION_MIN_REQUIRED and removed code that was
          never getting compiled:

        * DumpRenderTree/mac/TextInputController.m:
        * MiniBrowser/mac/BrowserWindowController.m:
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:

2015-12-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, add WebKitGTK+ Bugzilla email to committers list

        This is to make it easy to CC it on Bugzilla.

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

2015-12-18  Aakash Jain  <aakash_jain@apple.com>

        Pasteboard get messed up after running kill-old-processes
        https://bugs.webkit.org/show_bug.cgi?id=152426

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/kill-old-processes:
        (main): Do not kill pasteboard anymore.

2015-12-17  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests shouldn't start multiple iOS simulators while only running one test
        https://bugs.webkit.org/show_bug.cgi?id=152157
        <rdar://problem/23851817>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.get_worker_count): Calculate required number of workers.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._get_test_inputs): Common method to calculate test_inputs.
        (Manager._update_worker_count): Calculate and update required number of workers.

2015-12-16  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests fails to delete Simulator device during cleanup
        https://bugs.webkit.org/show_bug.cgi?id=152363

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.delete_device): Ensure that device is Shutdown before deleting it.

2015-12-16  Tim Horton  <timothy_horton@apple.com>

        [mac-wk2] fast/events force click tests crashing
        https://bugs.webkit.org/show_bug.cgi?id=152339

        Reviewed by Beth Dakin.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        Set the NSEvent's _type member in addition to overriding -type,
        because there are assertions in touch event handling code that depend on it.

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Enforce temporarily bots to sync WebKit and WPT testharness.js
        https://bugs.webkit.org/show_bug.cgi?id=152334

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files): Temporarily overwrite wpt testharness.js with WebKit testharness.js.

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Fetch API] Add fetch API compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=152254

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2015-12-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        Added files that have impact in building Streams API to the watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2015-12-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        Added imported tests to Streams API watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove default copy of wpt testharness.js when launching wpt server
        https://bugs.webkit.org/show_bug.cgi?id=152298

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files): Deleted default copy of WebKit testharness.js to WPT.

2015-12-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r192375): DumpRenderTree.app exits immediately with no error
        <http://webkit.org/b/152314>

        Reviewed by Daniel Bates.

        The change to DumpRenderTreeMain.mm in r192375 caused the iOS
        code path to exit immediately when calling main().
        Unfortunately, DumpRenderTreeMain.mm was used for both
        DumpRenderTree command-line binary and DumpRenderTree.app, which
        meant that the app would exit immediately with no error code
        when run!

        The workaround is to introduce a separate source file called
        DumpRenderTreeAppMain.mm, similar to what WebKitTestRunner
        already does.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Add
        DumpRenderTreeAppMain.mm to the project.  Make it the only
        compiled source for the DumpRenderTree.app target.
        * DumpRenderTree/ios/DumpRenderTreeAppMain.mm: Copied from Tools/DumpRenderTree/mac/DumpRenderTreeMain.mm.
        (main): Call DumpRenderTreeMain() on iOS.  Assert on OS X in
        case someone tries mistakenly to use the app.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Link to JavaScriptCore.framework on iOS for the assert.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        Link to JavaScriptCore.framework on OS X for the assert.  Remove
        unneeded EXCLUDED_SOURCE_FILE_NAMES setting.
        * DumpRenderTree/mac/DumpRenderTreeMain.mm:
        (main): Add assert for iOS so that a crash occurs if someone
        tries to run the wrong command.

2015-12-14  Tim Horton  <timothy_horton@apple.com>

        Frequent crash under -[WKPDFView web_setMinimumSize:]_block_invoke
        https://bugs.webkit.org/show_bug.cgi?id=152266
        <rdar://problem/22092676>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFViewResizeCrash.mm: Added.
        Add a test that crashed before this change, and doesn't crash after.

2015-12-14  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Text field variations do not have the correct traits
        https://bugs.webkit.org/show_bug.cgi?id=152237

        Reviewed by Mario Sanchez Prada.

        Add iOS calls for determing if an object is a search field or a text area.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsSearchFieldCallback):
        (getIsTextAreaCallback):
        (stringForSelectionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::identifier):
        (AccessibilityUIElement::isTextArea):
        (AccessibilityUIElement::isSearchField):
        (AccessibilityUIElement::traits):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::scrollPageRight):
        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::isSearchField):
        (WTR::AccessibilityUIElement::isTextArea):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::isTextArea):
        (WTR::AccessibilityUIElement::isSearchField):
        (WTR::AccessibilityUIElement::rowCount):

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

        [GTK] [JHBuild] package libtool-bin is now required on Debian systems.
        https://bugs.webkit.org/show_bug.cgi?id=152252

        Reviewed by Sergio Villar Senin.

        * gtk/install-dependencies: Add libtool-bin to the list of packages required
        for building the JHBuild on Debian systems.

2015-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        check-for-inappropriate-objc-class-names should check all class names, not just externally visible ones
        https://bugs.webkit.org/show_bug.cgi?id=152156

        Reviewed by Dan Bernstein.

        Our frameworks should appropriately prefix all ObjC classes,
        not just external symbols.

        * Scripts/check-for-inappropriate-objc-class-names:
        Remove the -g switch to check all ObjC class names.

2015-12-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Expose media capture devices persistent permissions to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=152087

        Add support for the new user media permission checker page UI client method.

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForUserMediaPermissionRequest):
        (WTR::checkUserMediaPermissionForOrigin):
        (WTR::TestController::createOtherPage): Add checkUserMediaPermissionForOrigin.
        (WTR::TestController::createWebViewWithOptions): Ditto.
        (WTR::TestController::resetStateToConsistentValues): Clear m_userMediaOriginPermissions.
        (WTR::originUserVisibleName): New, create a string for the origin.
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin): Set the WKUserMediaPermissionCheckRef
          according to the state of the origin permission map.
        (WTR::TestController::handleUserMediaPermissionRequest): Remember both the origin and the
          request so we can update the origin permission map in decidePolicyForUserMediaPermissionRequestIfPossible.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Update the
          origin permission map.
        * WebKitTestRunner/TestController.h:

2015-12-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r192796) WKBundlePageResourceLoadClient should be able to setHTTPBody in willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=152022
        rdar://problem/23763584

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::setWillSendRequestReturnsNull):
        (WTR::TestRunner::willSendRequestReturnsNullOnRedirect):
        (WTR::TestRunner::setWillSendRequestReturnsNullOnRedirect):
        (WTR::TestRunner::setWillSendRequestAddsHTTPBody):
        (WTR::TestRunner::willSendRequestHTTPBody):
        Added setWillSendRequestAddsHTTPBody that uses new SPI for testing.

2015-12-10  Aakash Jain  <aakash_jain@apple.com>

        Remove additional simulator checks before running layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=152146

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.check_sys_deps): Removed additional simulators verifications.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator._boot_and_shutdown_simulator_device): Deleted.
        (Simulator.check_simulator_device_and_erase_if_needed): Deleted.

2015-12-09  Aakash Jain  <aakash_jain@apple.com>

        Run atleast one simulator even if max process limit is low
        https://bugs.webkit.org/show_bug.cgi?id=152081
        <rdar://problem/23819694>

        Reviewed by Alexey Proskuryakov.

2015-12-09  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] Crash in WebProcess when loading large content with custom URI schemes
        https://bugs.webkit.org/show_bug.cgi?id=144262

        Reviewed by Carlos Garcia Campos.

        Added new unit test to check the additional scenarios we now
        handle for custom URI schemes.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (generateHTMLContent): New helper function to generate big enough content.
        (testWebContextURIScheme): New unit test.

2015-12-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Fix unhandled web process message when launching MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=152048

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        (TestWebKitAPI::TEST):

2015-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to handle beforeunload events
        https://bugs.webkit.org/show_bug.cgi?id=139090

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed):
        (browserWindowDeleteEvent):
        (browser_window_class_init):
        Handle delete-event to prevent the window from being closed when
        the page has beforeunload handlers. Use
        webkit_web_view_try_close() when the window is requested to be
        closed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):
        Add a test case for the WEBKIT_SCRIPT_DIALOG_BEFORE_UNLOAD_CONFIRM
        script dialog type.

2015-12-09  Mario Sanchez Prada  <mario@endlessm.com>

        Refactored initialization code in LoadTrackingTest.

        Rubber-stamped by Carlos Garcia Campos.

        Small refactoring to make sure that the state of a LoadTrackingTest
        gets properly reset before loading new web content.

        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (LoadTrackingTest::reset): New, refactored code from *load*() and go*()
        functions and reset the remaining local variables.
        (LoadTrackingTest::loadURI): Call reset();
        (LoadTrackingTest::loadHtml): Ditto.
        (LoadTrackingTest::loadPlainText): Ditto.
        (LoadTrackingTest::loadBytes): Ditto.
        (LoadTrackingTest::loadRequest): Ditto.
        (LoadTrackingTest::reload): Ditto.
        (LoadTrackingTest::goBack): Ditto.
        (LoadTrackingTest::goForward): Ditto.

2015-12-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] REGRESSION(r193616): WKPreferences test has been failed since r193616
        https://bugs.webkit.org/show_bug.cgi?id=151942

        Reviewed by Darin Adler.

        * MiniBrowser/efl/main.c:
        (window_create): Enable offline web application cache feature on MiniBrowser.
        (elm_main):

2015-12-08  Aakash Jain  <aakash_jain@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=151243
        <rdar://problem/22955197>

        Reviewed by Alexey Proskuryakov.

        * LayoutTestRelay/LayoutTestRelay/main.m:
        (getTestingSimDevice): Use separate testing device for each worker.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Perform cleanup even if setup fails.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_child_processes): Calculate number of simulators to use.
        (IOSSimulatorPort.child_processes): Gets the number of simulators from options variable.
        (IOSSimulatorPort.setup_test_run): Handle mulitple simulators.
        (IOSSimulatorPort._quit_ios_simulator): Same
        (IOSSimulatorPort.clean_up_test_run): Same
        (IOSSimulatorPort.check_sys_deps): Same
        (IOSSimulatorPort.testing_device): Same
        (IOSSimulatorPort.reset_preferences): Same
        (IOSSimulatorPort.get_simulator_path): Return simulator path.
        (IOSSimulatorPort._createSimulatorApp): Create the copy of simulator app.
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.delete): Delete the simulator device.
        (Simulator.delete_device): Same
        (Simulator.wait_until_device_is_booted): Wait for device booting.

2015-12-08  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add API to provide preferences before creating ewk_view
        https://bugs.webkit.org/show_bug.cgi?id=151587

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (quit):
        (window_create):
        Moved settings related code to configuration() not to update settings
        whenever ewk_view is created.
        (configuration):
        (elm_main):

2015-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ API tests after r193639.

        The new jhbuild version needs some more variables ot be present in
        the builtin dict, even if they are set to None.

        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available):

2015-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Notify WebCore when notification is clicked
        https://bugs.webkit.org/show_bug.cgi?id=151951

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification): test the new API.

2015-12-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        'jhbuild build' should fail immediately when building any module fails
        https://bugs.webkit.org/show_bug.cgi?id=145697

        Reviewed by Carlos Garcia Campos.

        * efl/jhbuildrc: Update jhbuildrc to account for the removal of the use_lib64 option.
        * gtk/jhbuildrc: Update jhbuildrc to account for the removal of the use_lib64 option.
        Everything is placed under lib instead of lib64 now.
        * jhbuild/jhbuild-wrapper: Update jhbuild to the latest upstream commit, and pass
        --exit-on-error when running 'jhbuild build'.
        * jhbuild/jhbuildrc_common.py:
        (init): Don't override PKG_CONFIG_PATH, CMAKE_PREFIX_PATH, or CMAKE_LIBRARY_PATH. Modern
        jhbuild should be able to handle these for us without breaking things....

2015-12-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Add support to import w3c tests from a repository with a different root that the main repo dir
        https://bugs.webkit.org/show_bug.cgi?id=151751

        Reviewed by Ryosuke Niwa and Youenn Fablet.

        We should be able to import tests from repositories that are not pure test repositories and where tests are kept
        in a different directory than the repository root.

        This patch introduces a new parameter tests_directory that we will use as root directory to search for
        tests. All paths will be flattened when copying tests to have a less complicated directory structure. This
        requires having the copy_path lists including tuples of origin and destination directories.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._add_test_suite_paths): Adds the paths as a tuple of origin and destination directory.
        (TestDownloader.copy_tests): Uses the origin and destination tuple for the paths to copy when copying files.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_tests_directory): Test.

2015-12-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Mock TestRepositories in W3C importer tests
        https://bugs.webkit.org/show_bug.cgi?id=151938

        Reviewed by Youenn Fablet.

        The test importer tests should use a fake repository instead of using the real one. The reason why this happened
        is because the test repository method reading the file was using the filesystem directly instead of taking the
        host one. This patch changes that.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.load_test_repositories): Take a filesystem and use it. If we get no filesystem, we use the
        default one.
        (TestDownloader.__init__): When loading the repositories, pass the host filesystem.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_harnesslinks_conversion):
        (TestImporterTest.test_submodules_generation): Use a fake test repository file.

2015-12-07  David Kilzer  <ddkilzer@apple.com>

        TestNetscapePlugIn: Address review comment on 193607
        <http://webkit.org/b/151881>

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testSetStatus): Initializing std::unique_ptr<char[]> with
        nullptr is redundant.

2015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_request_get_http_method
        https://bugs.webkit.org/show_bug.cgi?id=151601

        Reviewed by Martin Robinson.

        Add test case to check HTTP method of WebKitURIRequest.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testURIRequestHTTPMethod):
        (serverCallback):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (sendRequestCallback):

2015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebPage::console-message-sent signal to Web Extensions API
        https://bugs.webkit.org/show_bug.cgi?id=79918

        Reviewed by Gustavo Noronha Silva.

        Add unit tests to check the different console messages.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp: Added.
        (ConsoleMessageTest::ConsoleMessage::operator==):
        (ConsoleMessageTest::consoleMessageReceivedCallback):
        (ConsoleMessageTest::ConsoleMessageTest):
        (ConsoleMessageTest::~ConsoleMessageTest):
        (ConsoleMessageTest::waitUntilConsoleMessageReceived):
        (testWebKitConsoleMessageConsoleAPI):
        (testWebKitConsoleMessageJavaScriptException):
        (testWebKitConsoleMessageNetworkError):
        (testWebKitConsoleMessageSecurityError):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (consoleMessageSentCallback):
        (pageCreatedCallback):

2015-12-07  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] MiniBrowser doesn't exit when called ewk_view_try_close()
        https://bugs.webkit.org/show_bug.cgi?id=151934

        Reviewed by Csaba Osztrogonác.

        * MiniBrowser/efl/main.c:
        (on_window_deletion): Revert the changes of r192767.

2015-12-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] update-webkitgtk-libs cannot build mesa
        https://bugs.webkit.org/show_bug.cgi?id=151535

        Reviewed by Martin Robinson.

        Upgrade to newer mesa in order to build successfully against LLVM 3.7. Add missing
        dependency of mesa on LLVM, to ensure LLVM is built first. Build LLVM unconditionally, even
        on architectures where FTL is not supported, to ensure mesa is always buildable, since LLVM
        does not have a stable API and we cannot expect mesa to be buildable unless we control the
        LLVM version. Build mesa with --disable-egl since --enable-egl conflicts with
        --enable-xlib-glx. This fixes update-webkitgtk-libs on distros with LLVM 3.7.

        * gtk/jhbuild.modules:

2015-12-07  Philippe Normand  <pnormand@igalia.com>

        [GTK][Mac] libWebExtensionTest link error
        https://bugs.webkit.org/show_bug.cgi?id=150802

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: add dependencies to the webextension library.

2015-12-06  David Kilzer  <ddkilzer@apple.com>

        TestNetscapePlugIn: Fix leaks found by static analyzer
        <http://webkit.org/b/151881>

        Reviewed by Darin Adler.

        Fixes the following leaks found by the static analyzer:
            DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:808:16: warning: Potential leak of memory pointed to by 'path'
                    return false;
                           ^~~~~
            DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:808:16: warning: Potential leak of memory pointed to by 'target'
                    return false;
                           ^~~~~
            DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:808:16: warning: Potential leak of memory pointed to by 'url'
                    return false;
                           ^~~~~

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (toCString): Switch to returning std::unique_ptr<char[]>.  Add
        early return if allocation fails.
        (testPostURLFile): Switch to using std::unique_ptr<char[]>.
        Make sure to call fclose() on filehandle, even for an early
        return.
        (testSetStatus): Switch to using std::unique_ptr<char[]>.

2015-12-05  David Kilzer  <ddkilzer@apple.com>

        prepare-ChangeLog: Fix some warning messages when using svn
        <http://webkit.org/b/151914>

        Reviewed by Daniel Bates.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Simplify logic so that we never call
        normalizePath() with an undefined value.
        (attributeCommand): Quote $subPath for the shell so that we
        don't try to run "svn propget" on invalid paths.

2015-12-04  David Kilzer  <ddkilzer@apple.com>

        TestNetscapePlugIn: Fix remaining static analyzer warnings
        <http://webkit.org/b/151888>

        Reviewed by Alexey Proskuryakov.

        Fixes the following static analyzer warnings:
            Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp:101:9: warning: Called function pointer is null (null dereference)
                    CRASH();
                    ^~~~~~~
            Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp:46:5: note: expanded from macro 'CRASH'
                ((void(*)())0)(); /* More reliable, but doesn't say BBADBEEF */ \
                ^~~~~~~~~~~~~~~~
            Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp:375:12: warning: Access to field 'pluginTest' results in a dereference of a null pointer (loaded from variable 'obj')
                return obj->pluginTest->NPP_SetWindow(window);
                       ^~~~~~~~~~~~~~~
            2 warnings generated.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (CRASH): Use __builtin_trap() for gcc/clang.
        (NPP_SetWindow): Add early return if obj is nullptr.

2015-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebResource/get-data is flaky
        https://bugs.webkit.org/show_bug.cgi?id=151797

        Reviewed by Martin Robinson.

        Since we switched to use the network process to run the unit tests
        the test /webkit2/WebKitWebResource/get-data sometimes fails and
        sometimes passes. We are now also getting the notification for the
        css image. Since we wait for 3 resources, sometimes the css image
        is loaded before and then checkResourceData is called for it, but
        not handled. When the css image is the last one loaded the test
        passes. So, we just need to wait for the 4 resources.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebResourceGetData):

2015-12-03  David Kilzer  <ddkilzer@apple.com>

        DumpRenderTree: Use-after-free in createBitmapContext() in PixelDumpSupportMac.mm
        <http://webkit.org/b/151845>

        Reviewed by Simon Fraser.

        Fixes the following static analyzer warning:
            DumpRenderTree/mac/PixelDumpSupportMac.mm:67:9: warning: Use of memory after it is freed
                    WTFLogAlways("DumpRenderTree: CGBitmapContextCreate(%p, %llu, %llu, 8, %llu, %p, 0x%x) failed\n", buffer, pixelsHigh, pixelsWide, rowBytes, colorSpace.get(), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext): Free 'buffer' after using it in logging
        to fix the use-after-free.  Assign a value of nullptr to buffer
        so we don't return with it set to a freed address.

2015-12-03  Jer Noble  <jer.noble@apple.com>

        Expose WebCore's InvisibleAutoplayNotPermitted setting to WebKit & WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=151830

        Reviewed by Anders Carlsson.

        Set invisibleAutoplayNotPermitted to NO by default both in WKTR and DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2015-12-03  Anders Carlsson  <andersca@apple.com>

        Remove Objective-C GC support
        https://bugs.webkit.org/show_bug.cgi?id=151819
        rdar://problem/23746991

        Reviewed by Dan Bernstein.

        * asan/asan.xcconfig:

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

        Allow nil for unspecified benchmark pathes
        https://bugs.webkit.org/show_bug.cgi?id=151784

        Reviewed by Filip Pizlo.

        `Pathname.new(nil)` will raise an error.
        Only generate Pathname if the benchmark path is specified.

        * Scripts/run-jsc-benchmarks:

2015-12-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] Run non-http tests without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=151721

        Reviewed by Andy Estes.

        Support native 32-bit and 64-bit Python (and Perl) builds
        for running tests:

        1. Use "startswith('win')", rather than "== 'win32'" to support
        various Windows build types.
        2. Supply full path for some native Windows utilities, since the
        path environment does not always have the specified, and they are
        guaranteed to exist in those specific locations.
        3. Make sure native Windows Python test runs pass proper environment
        variables to run programs.
        4. Append 'exe' suffix when running Windows executables.
        5. Use the _winreg Python module on Windows, since the Cygwin 'regtool'
        command doesn't exist.
        
        * Scripts/update-webkit: Use Perl $^X command to refer to the path of
        the current Perl executable, rather than requiring a new path search.
        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.test_win): Use startswith('win').
        * Scripts/webkitpy/common/prettypatch_unittest.py:
        (test_pretty_diff_encodings): Ditto.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive._should_close_fds): Ditto.
        (Executive.shell_command_for_script): Use startswith('win').
        (Executive.kill_process): Use full path to killall executable.
        (Executive.check_running_pid): Use startswith('win').
        (Executive.running_pids): Ditto.
        (Executive.kill_all): Ditto. Also use path to 'killall' executable when
        running under native Windows Python.
        (Executive._child_process_encoding): Use startswith('win').
        (Executive._should_encode_child_process_arguments): Ditto.
        (Executive.popen): Recognize proper script engine on Windows, since it
        does not support the shebang syntax.
        (Executive.run_in_parallel): Use startswith('win').
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (never_ending_command): Ditto.
        (ExecutiveTest.test_run_command_with_unicode): Ditto.
        (ExecutiveTest.serial_test_kill_process): Ditto.
        (ExecutiveTest.serial_test_kill_all): Ditto.
        (ExecutiveTest.serial_test_check_running_pid): Ditto.
        (ExecutiveTest.serial_test_run_in_parallel): Ditto.
        (main): Ditto.
        * Scripts/webkitpy/common/system/file_lock.py:
        (FileLock._create_lock): Ditto.
        (FileLock._remove_lock): Ditto.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_chdir): Ditto.
        (RealFileSystemTest.test_chdir__notexists): Ditto.
        (RealFileSystemTest.test_maybe_make_directory__failure): Ditto.
        * Scripts/webkitpy/common/system/path_unittest.py:
        (AbspathTest.test_abspath_to_uri_win): Ditto.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_os_name): Ditto.
        * Scripts/webkitpy/common/system/user.py: Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.integration_test_needs_servers): Ditto.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Handle upper and lower-case
        driver letters.
        (LayoutTestApacheHttpd._get_apache_config_file_path): Ditto.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        (TestLayoutTestApacheHttpd.test_start_cmd): Ditto.
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._check_that_all_ports_are_available): Ditto.
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd): Ditto.
        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Include 'COMSPEC', 'SYSTEMDRIVE',
        and 'SYSTEMROOT' in environment passed to test runners.
        (Port._apache_config_file_name_for_platform): Use startswith('win').
        (Port._build_path): Ditto.
        (Port._path_to_driver): Include 'exe' suffix when running under native
        Windows.
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Explicitly make some environment
        variables strings.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Use startswith('win').
        * Scripts/webkitpy/port/win.py:
        (WinPort): Use the win32 registry utilities on Windows, and appropriate
        registry key formats.
        (WinPort._ntsd_location): Revise tool search paths for Windows 10.
        (WinPort.read_registry_value): Revise to use _winreg library on Windows,
        and regtool on Cygwin.
        (WinPort.write_registry_value): Ditto.
        (WinPort.setup_crash_log_saving): Ditto.
        (WinPort.restore_crash_log_saving): Ditto.
        (WinPort.prevent_error_dialogs): Ditto.
        (WinPort.allow_error_dialogs): Ditto.
        (WinPort.find_system_pid): Revise to use Windows management
        infrastructure on native Windows, continue using 'ps' on Cygwin.
        (WinPort.read_registry_string): Deleted.
        (WinPort.write_registry_string): Deleted.
        * Scripts/webkitpy/test/main.py:
        (main): Use startswith('win').
        (Tester._parse_args): Ditto.

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

        [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
        https://bugs.webkit.org/show_bug.cgi?id=150792

        Reviewed by Saam Barati.

        * Scripts/webkitperl/FeatureList.pm:

2015-12-01  Commit Queue  <commit-queue@webkit.org>

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

        JSC tests for this change are failing on 32 and 64-bit bots
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
        enable this feature"
        https://bugs.webkit.org/show_bug.cgi?id=150792
        http://trac.webkit.org/changeset/192914

2015-12-01  David Kilzer  <ddkilzer@apple.com>

        EventSenderProxy::swipeGestureWithWheelAndMomentumPhases() leaks an EventSenderSyntheticEvent
        <http://webkit.org/b/151726>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::swipeGestureWithWheelAndMomentumPhases):
        Deploy RetainPtr<EventSenderSyntheticEvent> to fix leak.

2015-12-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Give String and AtomicString an existingHash() function
        https://bugs.webkit.org/show_bug.cgi?id=151717

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/AtomicString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

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

        [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
        https://bugs.webkit.org/show_bug.cgi?id=150792

        Reviewed by Saam Barati.

        * Scripts/webkitperl/FeatureList.pm:

2015-12-01  Sam Weinig  <sam@webkit.org>

        Need completionHandler-based WebKit C SPI for alert, confirm, and prompt
        <rdar://problem/23320863>
        https://bugs.webkit.org/show_bug.cgi?id=151708

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        Update for new WKPageUIClient.

2015-12-01  Anders Carlsson  <andersca@apple.com>

        Remove WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=151715

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad_bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:

2015-12-01  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed common typo fix "occurance" => "occurrence".

        * Scripts/webkitpy/tool/commands/queries.py:
        (FindFlakyTests._print_statistics):

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

        Make ProcessModel always MultipleSecondaryProcesses
        https://bugs.webkit.org/show_bug.cgi?id=151662

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

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

        Make usesNetworkProcess always true
        https://bugs.webkit.org/show_bug.cgi?id=151580

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

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

        Unreviewed. Skip GTK+ test /webkit2/WebKitWebView/editable/editable in Debug.

        Add a way to skip unit tests only for Debug or Release builds and
        skipt the test /webkit2/WebKitWebView/editable/editable only for Debug.

        * Scripts/run-gtk-tests:
        (SkippedTest):
        (SkippedTest.__init__):
        (SkippedTest.__str__):
        (SkippedTest.skip_entire_suite):
        (SkippedTest.skip_for_build_type):
        (TestRunner):
        (TestRunner.__init__):

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

        Unreviewed. Fix a crash in GTK+ test /webkit2/WebKitWebView/custom-charset.

        It's an assert hit because we are reloading a view loaded with
        HTML data which is not supported. Use loadURI instead.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewCustomCharset):

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

        [GLIB] Remove GMainLoopSource and GThreadSafeMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=151633

        Reviewed by Csaba Osztrogonác.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/glib/GMainLoopSource.cpp: Removed.

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

        [GTK] Remove the remaining uses of GMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=151632

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebViewSyncRequestOnMaxConns):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::timeoutSource):
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):

2015-11-27  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Add testb3 to the build system
        https://bugs.webkit.org/show_bug.cgi?id=151619

        Reviewed by Gyuyoung Kim.

        * Scripts/build-jsc:

2015-11-27  Csaba Osztrogonác  <ossy@webkit.org>

        [jhbuild] Fix pixman build with clang
        https://bugs.webkit.org/show_bug.cgi?id=151441

        Reviewed by Carlos Garcia Campos.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2015-11-26  David Kilzer  <ddkilzer@apple.com>

        Extract prependToEnvironmentVariableList
        <http://webkit.org/b/151536>

        Reviewed by Daniel Bates.

        Tests: webkitdirs_unittest/appendToEnvironmentVariableList.pl
               webkitdirs_unittest/prependToEnvironmentVariableList.pl

        * Scripts/webkitdirs.pm: Export appendToEnvironmentVariableList
        and prependToEnvironmentVariableList.
        (appendToEnvironmentVariableList): Simplify variable name.
        Switch to use $Config{path_sep}.
        (prependToEnvironmentVariableList): Add new method.
        (setupMacWebKitEnvironment): Switch to use
        prependToEnvironmentVariableList().
        (setupIOSWebKitEnvironment): Ditto.

        * Scripts/webkitperl/webkitdirs_unittest/appendToEnvironmentVariableList.pl: Added.
        * Scripts/webkitperl/webkitdirs_unittest/prependToEnvironmentVariableList.pl: Added.

2015-11-24  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r192053): MiniBrowser doesn't exit when clicking on the close-window button
        https://bugs.webkit.org/show_bug.cgi?id=151567

        Reviewed by Darin Adler.

        * MiniBrowser/efl/main.c: Call window_close() instead of ewk_view_try_close().
        (on_window_deletion):

2015-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use the network process unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=151541

        Reviewed by Alex Christensen.

        Fix TestInspectorServer test. Do not assume we already have the
        title we want when the page has been loaded, since the title is
        changed afterwards. So, check if the title has already been set,
        and if not wait for it.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (openRemoteDebuggingSession):

2015-11-23  Alex Christensen  <achristensen@webkit.org>

        Fix crash in ~WebProcessPool when using Geolocation with useNetworkProcess=true
        https://bugs.webkit.org/show_bug.cgi?id=151532

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::GeolocationTransitionToHighAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::GeolocationTransitionToLowAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::GeolocationTransitionToHighAccuracyStateTracker::GeolocationTransitionToHighAccuracyStateTracker): Deleted.
        (TestWebKitAPI::GeolocationTransitionToLowAccuracyStateTracker::GeolocationTransitionToLowAccuracyStateTracker): Deleted.
        Properly load about:blank in all WebViews to clean up.  Without this change, we had a 
        Geolocation provider stopping after its state tracker was destroyed with its stack frame,
        so it was calling a function on a test object that had gone out of scope.
        Also, call WKContextSetUsesNetworkProcess(context, true) to show what crash this fixed,
        but that will become the default soon and that call will be removed.

2015-11-22  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: http server for imported W3C tests doesn't work with --layout-tests-directory switch
        <http://webkit.org/b/151542>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (base_url): Use the Port object (already passed in) to give us
        the path to the LayoutTests directory, which already checks for a
        --layout-tests-directory command-line switch.
        (WebPlatformTestServer.__init__): Remove layout_test_results_dir
        argument since we can get this from the Port object already
        passed in via Port.results_directory().  Also switch to use
        Port.layout_tests_dir() to get the LayoutTests directory.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_custom_layout_tests_directory):
        Add test case for custom LayoutTests directory.
        (TestWebPlatformTestServer.test_previously_spawned_instance):
        Update Port object to set mock results directory as if it was
        set on the command-line.  Remove unneeded argument from
        WebPlatformTestServer constructor.
        (TestWebPlatformTestServer.test_corrupted_subserver_files): Ditto.

        * Scripts/webkitpy/port/base.py:
        (Port.to.start_web_platform_test_server): Remove unneeded
        argument from WebPlatformTestServer constuctor.

2015-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Some unit tests fail when using the network process
        https://bugs.webkit.org/show_bug.cgi?id=151490

        Reviewed by Martin Robinson.

        Run the soup server in a separate thread in TestResources test to
        avoid deadlocks.

        This fixes /webkit2/WebKitWebView/sync-request-on-max-conns and
        /webkit2/WebKitWebResource/get-data when using the network process.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (beforeAll): Create the WebKitTestServer with ServerRunInThread flag.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer): When ServerRunInThread is
        present, create a WorkQueue to run the server.
        (WebKitTestServer::run): Run the server in the work queue if it
        has been created.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h: Convert server
        type into server options as flags.

2015-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ImageDiff should normalize the diff image
        https://bugs.webkit.org/show_bug.cgi?id=151261

        Reviewed by Sergio Villar Senin.

        * ImageDiff/gtk/ImageDiff.cpp:
        (readPixbufFromStdin): Fix memory leak.
        (differenceImageFromDifferenceBuffer): Normalize diff buffer.
        (calculateDifference): Pass max distance to differenceImageFromDifferenceBuffer.

== Rolled over to ChangeLog-2015-11-21 ==
