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