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