2015-11-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, add watchlist for PerformanceTests/Animometer and add myself.
 
        * Scripts/webkitpy/common/config/watchlist:

2015-11-20  Alexey Proskuryakov  <ap@apple.com>

        Went a bit too far, revert part of the previous patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks@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:

2015-11-20  Alexey Proskuryakov  <ap@apple.com>

        Remove Mavericks bots.

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks@2x.png: Removed.
        * 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/templates/root.html:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        * Scripts/copy-webkitlibraries-to-product-directory:

2015-11-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Update the patch and the plan files of the graphics benchmark with the latest revision
        https://bugs.webkit.org/show_bug.cgi?id=151503

        Reviewed by Ryosuke Niwa.
        
        The time for each graphics test has been shortened from 30 seconds to 10
        seconds. We need to update the graphics benchmark patch and plan files so
        we can get the results faster. Also this will allow running the benchmark
        also on the iOS performance bots.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch:
        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan:

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

        Unreviewed, fix installation of ninja-build after the previous commit

        * gtk/install-dependencies:

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

        [GTK] install-dependencies should run installer exactly once
        https://bugs.webkit.org/show_bug.cgi?id=151477

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies:

2015-11-20  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Enable FTL JIT by default on X86_64
        https://bugs.webkit.org/show_bug.cgi?id=143822

        Reviewed by Carlos Garcia Campos.

        * Scripts/build-jsc:
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitperl/FeatureList.pm:
        * efl/jhbuild.modules:
        * gtk/jhbuildrc:
        * jhbuild/jhbuildrc_common.py:
        (init):

2015-11-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, install llvm-static on Fedora to fix build now FTL is enabled

        * gtk/install-dependencies:

2015-11-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192667 and r192668.
        https://bugs.webkit.org/show_bug.cgi?id=151476

        broke api tests (Requested by alexchristensen on #webkit).

        Reverted changesets:

        "Remove the non-NetworkProcess configurations"
        https://bugs.webkit.org/show_bug.cgi?id=151418
        http://trac.webkit.org/changeset/192667

        "Fix GTK Build after r192667."
        http://trac.webkit.org/changeset/192668

2015-11-19  Alex Christensen  <achristensen@webkit.org>

        Remove the non-NetworkProcess configurations
        https://bugs.webkit.org/show_bug.cgi?id=151418

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2015-11-19  Alexey Proskuryakov  <ap@apple.com>

        LayoutTestRelay processes leak on iOS testers
        https://bugs.webkit.org/show_bug.cgi?id=151447

        Reviewed by Tim Horton.

        * BuildSlaveSupport/kill-old-processes: Added LayoutTestRelay.

2015-11-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] webkitpy is applying abspath to DOS paths, yielding invalid paths
        https://bugs.webkit.org/show_bug.cgi?id=151156

        Unreviewed test fix.
        
        I tracked down the cause of the test regression on the Windows builders. Once I fixed that,
        I realized that the new 'abs_results_directory' value was not needed, so this change reverts
        that code.

        * Scripts/webkitpy/port/base.py:
        (Port.to.start_websocket_server): We don't need a special directory variable on Cygwin anymore.
        (Port.abs_results_directory): Deleted.
        * Scripts/webkitpy/port/win.py:
        (WinPort.__init__): Deleted.
        (WinPort.abs_results_directory): Deleted.
        (WinPort.results_directory): Deleted.

2015-11-19  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Move layoutTestResultsDirectoryURLForIteration implementation to base class
        https://bugs.webkit.org/show_bug.cgi?id=151425

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.layoutTestResultsDirectoryURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.layoutTestResultsDirectoryURLForIteration): Deleted.

2015-11-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WPT server should use its own testharness.js file and generate a warning when it does not match WebKit version
        https://bugs.webkit.org/show_bug.cgi?id=150332

        Reviewed by Darin Adler and Ryosuke Niwa.

        Removing testharness.js overwriting from LayoutTests/resources to LayoutTests/imported/w3c/web-platform-tests/resources.
        Adding support for file comparison in python filesystem.
        #NousSommesUnis.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.compare): Adding compare as a wrapper around filecmp.cmp.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.compare): Adding a mock compare.
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__): Removed testharness.js as file to copy from WK to WPT.
        (WebPlatformTestServer._copy_webkit_test_files): Added warning generation when WK testharness.js is not matching WPT version.
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_previously_spawned_instance): Updated tests to add testharness.js to mock filesystem.
        (TestWebPlatformTestServer.test_corrupted_subserver_files): Ditto.

2015-11-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WK1] Crash loading Blink layout test fast/dom/Window/property-access-on-cached-window-after-frame-removed.html
        https://bugs.webkit.org/show_bug.cgi?id=150198
        <rdar://problem/23136026>

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):
        Since WebInspectorUI.framework is not available for iOS, the framework
        and corresponding functions are disabled in iOS.

2015-11-18  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Swipe tests depend on user preferences
        https://bugs.webkit.org/show_bug.cgi?id=151403

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm: (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/mac/main.mm: (setDefaultsToConsistentValuesForTesting):
        Override these preferences to match the default for a new OS X installation.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        Swipe tests are not enabled in WK1, but let's override the default anyway.

2015-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Update xserver version in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=151383

        Reviewed by Alejandro G. Castro.

        In r192568 I assumed the bots would have a recent enough Xvfb
        to use the -displayfd option, but I forgot we build our own
        xserver just for Xvfb. The version we build is too old, so
        we could just use an updated version (the same bots have
        installed, for example) to use the -displayfd option.

        * gtk/jhbuild.modules: Update xserver to 1.16.4.
        * gtk/patches/xserver-fix-glx-init.patch: Deleted.
        * gtk/patches/xserver-remove-bogus-dependencies.patch: Updated to
        apply on 1.16.4.

2015-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix webkitpy tests after r192568.

        Instead of ignoring exception when closing mock fds, use a helper
        function that the unit test can override to do nothing.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._xvfb_close_pipe):
        (XvfbDriver._xvfb_run):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):

2015-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [XvfbDriver] Fail to run all layout tests when X server started with -displayfd option
        https://bugs.webkit.org/show_bug.cgi?id=151135

        Reviewed by Darin Adler.

        The XvfbDriver uses the x server command line to check the
        displays that are currently in use. This doesn't work when X
        server was started with -displayfd option. This option is used to let
        the server find the display id available that is written to the
        given file descriptor. With this option xorg doesn't need to
        create the lock files in tmp either. The -displayfd option is also
        available in Xvfb, so we could use it too. That would simplify the
        code, fixing also race conditions between the check for available
        displays and Xvfb opening the connection, we wouldn't need to wait
        for 4 seconds after launching Xvfb, and all lock files we are
        using won't be needed either.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._xvfb_pipe): Helper function to create the pipe, only
        needed to be overriden by unit tests.
        (XvfbDriver._xvfb_read_display_id): Helper function to read from
        the pipe, only needed to be overriden by unit tests.
        (XvfbDriver._xvfb_run): Run Xvfb with -displayfd option, using a
        pipe to read the display id.
        (XvfbDriver._start): Call _xvfb_run() and remove the code to run
        Xvfb for a given display.
        (XvfbDriver.stop): Remove code to release and delete file locks.
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_stop):
        (XvfbDriverTest.assertDriverStartSuccessful): Deleted.
        (XvfbDriverTest): Deleted.
        (XvfbDriverTest.test_stop.FakeXvfbProcess): Deleted.

2015-11-17  Alexey Proskuryakov  <ap@apple.com>

        run-webkit-tests should not truncate persistent lines
        https://bugs.webkit.org/show_bug.cgi?id=151376
        rdar://problem/23162775

        Reviewed by Antti Koivisto.

        It is OK to truncate progress lines, but it's not OK to truncate error (or otherwise
        unexpected result) messages that remain on the screen to be read. In practice, this
        almost always truncates the test path, which is important to see.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._test_status_line):
        (Printer.print_finished_test):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_test_status_line):

2015-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ unit tests after r192469.

        In r192469 jhbuild version was updated and coinfig lcas API changed.

        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available): Pass an empty list for
        conditions to the Config constructor.

2015-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Use commit id instead of tag name for jhbuild revision.

        In r192469 I updated the jhbuild version to 3.12.0, and used the
        tag instead of the commit id to make it easier to read and
        remember. But we use the commit id to check if the current
        revision is up to date, and when compared to the tag id it always
        fails and jhbuild is always updated.

        * jhbuild/jhbuild-wrapper: Use commit id and add a comment to
        remember this is the id of 3.12.0.

2015-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ layout tests running after r192469.

        We fail to find the Gallium llvmpipe driver because of the build
        directory change in r192469.

        * gtk/jhbuildrc: Use buildroot instead of checkoutdir to build
        the LLVMPIPE_LIBGL_PATH.

2015-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use FTL by default when LLVM 3.7 is available
        https://bugs.webkit.org/show_bug.cgi?id=142128

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-javascriptcore-tests: Enable FTL for GTK+ port when
        architecture is x86_64.
        * Scripts/update-webkit-libs-jhbuild:
        (cleanJhbuild): Remove also the separate Build directory used by
        GTK+ port now.
        * Scripts/webkitdirs.pm:
        (isX86_64):
        * Scripts/webkitperl/FeatureList.pm: Enable FTL by default for
        GTK+ port when architecture is x86_64.
        * gtk/jhbuild-optional.modules: Remove llvm.
        * gtk/jhbuild.modules: Add llvm 3.7 and include it as dependecy
        only when architecture is x86_64.
        * gtk/jhbuildrc: Set a buildroot to use a separate build
        directory. LLVM 3.7 fails to build if configure script is run from
        source dir. Since it's not possible to use a separate build dir
        only for llvm, we do it now globally. Modules not supporting non
        source build dirs are marked in the moduleset. Also set x86_64
        condition when the architecture is x86_64.
        * gtk/patches/llvm-elf-add-stackmaps-arm64.patch: Removed.
        * gtk/patches/llvm-elf-add-stackmaps.patch: Removed.
        * gtk/patches/llvm-elf-allow-fde-references-outside-the-2gb-range-arm64.patch: Removed.
        * gtk/patches/llvm-elf-allow-fde-references-outside-the-2gb-range.patch: Removed.
        * jhbuild/jhbuild-wrapper: Use a newer jhbuild version to be able
        to use conditions.

2015-11-15  Commit Queue  <commit-queue@webkit.org>

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

        failing python tests (Requested by youenn on #webkit).

        Reverted changeset:

        "WPT server should use its own testharness.js file and
        generate a warning when it does not match WebKit version"
        https://bugs.webkit.org/show_bug.cgi?id=150332
        http://trac.webkit.org/changeset/192462

2015-11-15  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WPT server should use its own testharness.js file and generate a warning when it does not match WebKit version
        https://bugs.webkit.org/show_bug.cgi?id=150332

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__): Removed testharness.js as file to copy from WK to WPT.
        (WebPlatformTestServer._copy_webkit_test_files): Added warning generation when WK testharness.js is not matching WPT version.

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

        AX: add a new trait for elements in fieldset on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151281

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (assistiveTechnologySimulatedFocusCallback):
        (fieldsetAncestorElementCallback):
        (childAtIndexCallback):
        (getElementTextLengthCallback):
        (hasContainedByFieldsetTraitCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::elementTextLength):
        (AccessibilityUIElement::hasContainedByFieldsetTrait):
        (AccessibilityUIElement::fieldsetAncestorElement):
        (AccessibilityUIElement::url):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::scrollPageDown):
        (WTR::AccessibilityUIElement::scrollPageLeft):
        (WTR::AccessibilityUIElement::scrollPageRight):
        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::identifier):
        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::rowCount):

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

        Unreviewed, change JavaScriptCore watchlist to exclude inspector things.

        * Scripts/webkitpy/common/config/watchlist:

2015-11-13  Tim Horton  <timothy_horton@apple.com>

        Support printing in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=151276
        <rdar://problem/23525715>

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController printWebView:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController printWebView:]):
        Hook up printing to Minibrowser!

2015-11-13  Tim Horton  <timothy_horton@apple.com>

        Hardware keyboard spacebar scrolls too far on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151227
        <rdar://problem/23500681>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidEndScrollingCallback):
        (WTR::UIScriptController::didEndScrollingCallback):
        (WTR::UIScriptController::platformSetDidEndScrollingCallback):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _didFinishScrolling]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformSetDidEndScrollingCallback):
        (WTR::UIScriptController::platformClearAllCallbacks):
        Expose _didFinishScrolling on WKWebView to the UIScriptController.

2015-11-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix.

        * Scripts/webkitpy/port/win.py:
        (WinPort.results_directory): Our 'results_directory' should be an absolute path (even when not
        using Cygwin), but should be in DOS format for non-Cygwin clients.

2015-11-12  Daniel Bates  <dabates@apple.com>

        Add my apple.com email address to contributors.json

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

2015-11-12  Daniel Bates  <dabates@apple.com>

        webkitpy: Remove extraneous word "the" from the description of command attach-to-bug

        * Scripts/webkitpy/tool/commands/upload.py:
        (AttachToBug):

2015-11-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] webkitpy is applying abspath to DOS paths, yielding invalid paths
        https://bugs.webkit.org/show_bug.cgi?id=151156

        Reviewed by Anders Carlsson.

        My earlier patch was incomplete. There are some Python libraries that want
        to receive UNIX style paths, even though all of our applications and tools
        use DOS paths. To handle this special case, we need to track a UNIX-style
        absolute path that can be given to things like the Python socket server.
        
        When we cut over to all-native Windows Python we can get rid of this
        special case code.
        
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.abspath): Add special code for Cygwin to convert a DOS-style
        path into something Cygwin can use internally.
        * Scripts/webkitpy/port/base.py:
        (Port.results_directory): Remove custom Windows code. Instead, override
        the method in the windows port object.
        (Port.abs_results_directory): Add stub.
        (Port.to.start_websocket_server): For Cygwin, use special cygwin absolute
        path.
        * Scripts/webkitpy/port/win.py:
        (WinPort.__init__): Added to initialze new _abs_results_directory value.
        (WinPort.abs_results_directory): Added,
        (WinPort.results_directory): Modified to also create a value for
        _abs_results_directory

2015-11-12  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add Michael Saboff to the JavaScriptCore watchlist, per request.

        * Scripts/webkitpy/common/config/watchlist:

2015-11-12  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add watchlist for Source/JavaScriptCore and add myself, Saam, and Mark.

        * Scripts/webkitpy/common/config/watchlist:

2015-11-12  Daniel Bates  <dabates@apple.com>

        Support building configuration Production of DumpRenderTree and WebKitTestRunner for iOS
        https://bugs.webkit.org/show_bug.cgi?id=151191

        Reviewed by Andy Estes.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Remove hardcoded SKIP_INTALL.
        Will override this setting in DumpRenderTree.xcconfig.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: When building for iOS we now
        compile source file DumpRenderTreeMain.mm to produce a built product and make the Apple
        Internal build system happy. Do not waste time coping OpenType font files (*.otf files)
        and skip installation when building for iOS since we are not interested in the build product
        and are only building this target to make the Apple Internal build system happy.
        * DumpRenderTree/mac/DumpRenderTreeMain.mm:
        (main): Added dummy implementation for iOS so that we build an actual command line tool to
        make the Apple Internal build system happy.
        * WebKitTestRunner/Configurations/Base.xcconfig: Add iOS-specific definition for WEBKIT_UMBRELLA_FRAMEWORKS_DIR.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig: Remove variable WEBKIT_UMBRELLA_FRAMEWORKS_DIR.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Build file WebKitTestRunner/mac/main.mm
        on iOS Only to produce a built product and make the Apple Internal build system happy. No need
        to define OTHER_LDFLAGS when building this target for iOS as the default linker flags are sufficient.
        * WebKitTestRunner/mac/main.mm:
        (main): Added dummy implementation for iOS so that we build an actual command line tool to
        make the Apple Internal build system happy.

2015-11-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, add watchlist for history/ and add myself.

        * Scripts/webkitpy/common/config/watchlist:

2015-11-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update my watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2015-11-12  Daniel Bates  <dabates@apple.com>

        Rename webkitdirs::willUseIOS{Device, Simulator}SDKWhenBuilding() to willUseIOS{Device, Simulator}SDK()
        https://bugs.webkit.org/show_bug.cgi?id=151207

        Rubber-stamped by Alexey Proskuryakov.

        The functions webkitdirs::willUseIOS{Device, Simulator}SDKWhenBuilding() are not specific to building
        iOS software. We should rename these functions to webkitdirs::willUseIOS{Device, Simulator}SDK() to
        convey their general-purpose nature of determining whether we are using the iphoneos or iphonesimulator SDK.

        * Scripts/build-jsc:
        * Scripts/build-layouttestrelay:
        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/run-api-tests:
        (runTest):
        (prepareEnvironmentForRunningTestTool):
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:
        (XcodeOptions):
        (willUseIOSDeviceSDK): Formerly named willUseIOSDeviceSDKWhenBuilding.
        (willUseIOSSimulatorSDK): Formerly name willUseIOSSimulatorSDKWhenBuilding.
        (isIOSWebKit):
        (runIOSWebKitApp):
        (willUseIOSDeviceSDKWhenBuilding): Deleted.
        (willUseIOSSimulatorSDKWhenBuilding): Deleted.

2015-11-12  Daniel Bates  <dabates@apple.com>

        run-api-tests fails to run with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=151076

        Reviewed by Alexey Proskuryakov.

        Use the command line tool simctl as the sim tool was removed from the public iOS 9 SDK.

        A side benefit of this change it is sufficient to run the tests without launching Simulator.app
        to boot the simulator device beforehand because simctl will boot the device for us.

        Additionally, use Perl pragma sigtrap to install signal handlers to catch SIG{HUP, INT, PIPE, TERM}
        signals and ultimately run our END block so that we shutdown the simulator device (if applicable).
        This makes Control-C terminate the app gracefully.

        * Scripts/run-api-tests:
        (runTest):
        (listAllTests):
        (prepareEnvironmentForRunningTestTool): When running for iOS Simulator use setupIOSWebKitEnvironment()
        to setup the environment variables for iOS instead of using setupMacWebKitEnvironment(). We also
        prefix the name of these environment variables with "SIMCTL_CHILD_" so that simctl sets these environment
        variables in the simulator environment.
        * Scripts/webkitdirs.pm:
        (shutDownIOSSimulatorDevice): Added.
        (restartIOSSimulatorDevice): Added.

2015-11-12  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] fix EvasGL configuration error
        https://bugs.webkit.org/show_bug.cgi?id=151180

        Reviewed by Csaba Osztrogonác.

        EvasGL backend and depth, stencil buffer size should be specified before elm_win_add to let EvasGL keep quiet.
        Additionally, duplicated elm_config_accel_preference_set() call is eleminated.  

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix EFL 1.16 with enabled NEON support
        https://bugs.webkit.org/show_bug.cgi?id=151188

        Unreviewed buildfix, disable NEON temporarily after r192358.

        * efl/jhbuild.modules:

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.16.0
        https://bugs.webkit.org/show_bug.cgi?id=150228

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/efl-remove-XPrint.patch: Removed.

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(SATURATED_LAYOUT_ARITHMETIC) guards
        https://bugs.webkit.org/show_bug.cgi?id=150972

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:

2015-11-12  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] fix EvasGL configuration error
        https://bugs.webkit.org/show_bug.cgi?id=151180

        Reviewed by Gyuyoung Kim.

        EvasGL backend and depth, stencil buffer size should be specified before elm_win_add to let EvasGL keep quiet

        * MiniBrowser/efl/main.c:
        (window_create):

2015-11-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] webkitpy is applying abspath to DOS paths, yielding invalid paths
        https://bugs.webkit.org/show_bug.cgi?id=151156

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/port/base.py:
        (Port.results_directory): Don't pass paths through 'abspath'
        (Port._build_path): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort._build_path): Ditto.

2015-11-11  Akos Kiss  <akiss@inf.u-szeged.hu>

        Unreviewed, add myself to the committers list.

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

2015-11-11  Anders Carlsson  <andersca@apple.com>

        _WKRemoteObjectInterface should handle specifying allowed classes for reply block arguments
        https://bugs.webkit.org/show_bug.cgi?id=151144

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h:
        (remoteObjectInterface):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RemoteObjectRegistryPlugIn selectionAndClickInformationForClickAtPoint:completionHandler:]):

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

        UI-side scripts in WebKitTestRunner should wait until event handling completes before finishing
        https://bugs.webkit.org/show_bug.cgi?id=151101
        <rdar://problem/23428601>

        Reviewed by Simon Fraser.

        WebKitTestRunner may still crash in the scenario where a marker event is dequeued and handled
        after uiScriptComplete has been called. This patch teaches the UI script execution context to
        defer script completion until all non-persistent tasks (currently tap, double tap and hardware
        keyboard) have been handled, so marker events will no longer bleed through tests.

        We accomplish this by changing the behavior of uiScriptComplete. When calling uiScriptComplete,
        we store that a request to complete the UI-side script for the current parent callback has been
        made. Subsequently, when a callback (either persistent or non-persistent) finishes invoking and
        a request has been made to complete the UI script (this request may have been made when running
        a previous callback) we check if all the non-persistent callbacks that have the same parent
        callback as the current one have finished. If so, we complete the callback immediately;
        otherwise, we wait until the in-flight non-persistent callbacks finish execution to complete the
        UI script.

        This patch also refactors some logic in UIScriptContext. It introduces a new convention for
        assigning IDs to callbacks: IDs 1000 and above are treated as non-persistent callbacks, whereas
        IDs between 0 and 999 are persistent task callbacks. This is similar to the existing convention
        for assigning IDs in the 100s range to parent callbacks, and allows us to easily differentiate
        between callbacks that are persistent and non-persistent, as well as determine when an existing
        persistent callback must be unregistered before a new callback function can be set.

        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:
        (isPersistentCallbackID):
        (UIScriptContext::runUIScript):
        (UIScriptContext::nextTaskCallbackID):
        (UIScriptContext::prepareForAsyncTask):
        (UIScriptContext::asyncTaskComplete):
        (UIScriptContext::registerCallback):
        (UIScriptContext::fireCallback):
        (UIScriptContext::requestUIScriptCompletion):
        (UIScriptContext::tryToCompleteUIScriptForCurrentParentCallback):
        (UIScriptContext::currentParentCallbackHasOutstandingAsyncTasks):
        (UIScriptContext::uiScriptComplete): Deleted.
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
        (WTR::UIScriptContext::currentParentCallbackIsPendingCompletion):
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillBeginZoomingCallback):
        (WTR::UIScriptController::willBeginZoomingCallback):
        (WTR::UIScriptController::setDidEndZoomingCallback):
        (WTR::UIScriptController::didEndZoomingCallback):
        (WTR::UIScriptController::setDidShowKeyboardCallback):
        (WTR::UIScriptController::didShowKeyboardCallback):
        (WTR::UIScriptController::setDidHideKeyboardCallback):
        (WTR::UIScriptController::didHideKeyboardCallback):
        (WTR::UIScriptController::uiScriptComplete):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::singleTapAtPoint):
        (WTR::UIScriptController::doubleTapAtPoint):
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
        (WTR::UIScriptController::platformSetDidShowKeyboardCallback):
        (WTR::UIScriptController::platformSetDidHideKeyboardCallback):
        (WTR::UIScriptController::platformClearAllCallbacks): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAsyncTask):

2015-11-10  Daniel Bates  <dabates@apple.com>

        Teach Makefile to build LayoutTestRelay when building for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=150849

        Reviewed by Alexey Proskuryakov.

        Unless variable DO_NOT_BUILD_LAYOUT_TEST_RELAY is non-empty, build LayoutTestRelay when
        building WebKit tools.

        * Makefile:

2015-11-10  David Kilzer  <ddkilzer@apple.com>

        [check-webkit-style] False positive (readability/enum_casing) on CF-styled enum members
        <http://webkit.org/b/104417>

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.process_clean_line): Allow 'k' to start enums.
        (check_enum_casing): Update error message to discuss 'k'.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing): Update error
        messages, and add new tests for enums that start with lowercase
        letters.

2015-11-10  Geoffrey Garen  <ggaren@apple.com>

        run-jsc-benchmarks doesn't work with internal benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=151047

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-benchmarks: Use Pathname so we get a "/" inserted when
        we concatenate.

2015-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use CROSS_PLATFORM_CONTEXT_MENUS
        https://bugs.webkit.org/show_bug.cgi?id=150642

        Reviewed by Martin Robinson.

        Remove test for input methods submenu.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:

2015-11-09  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed, add myself to the committers list.

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

2015-11-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Crash while opening child webview with EWK_PROCESS_MODEL_MULTIPLE_SECONDARY
        https://bugs.webkit.org/show_bug.cgi?id=145924

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_window_create):
        (window_create):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2015-11-09  Anders Carlsson  <andersca@apple.com>

        Add reply blocks to _WKRemoteObjectInterface similar to NSXPCConnection
        https://bugs.webkit.org/show_bug.cgi?id=151056
        rdar://problem/23222609

        Reviewed by Tim Horton.

        Update test.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn sayHello:completionHandler:]):

2015-11-09  Tim Horton  <timothy_horton@apple.com>

        Add drawsBackground SPI to WKWebView, and get rid of drawsTransparentBackground from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=151054
        <rdar://problem/22907994>

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):
        Use drawsBackground instead, and make sure to set the window background color,
        otherwise it might end up being gray anyway!

        WebKit1 still doesn't work unless you turn off toolbar blurring, but at least
        WebKit2 is working now!

2015-11-09  Isaac Devine  <isaac@devinesystems.co.nz>

        Fresh checkout fails to build on windows, DumpRenderTree can't find cairo_win.h
        https://bugs.webkit.org/show_bug.cgi?id=151013

        Use the variable defined in the CMake scripts to determine the cairo include location, rather
        than relying on a environment variable to be set correctly. Otherwise the DumpRenderTreeLib.vcxproj will
        contain "\include\cairo" rather than the fully qualified path to the cairo include location.

        Reviewed by Darin Adler.

        * DumpRenderTree/PlatformWin.cmake:

2015-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix the gst-plugins-bad jhbuild module build on Ubuntu 15.10
        https://bugs.webkit.org/show_bug.cgi?id=150928

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-11-07  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows EWS bot after r192087
        (https://bugs.webkit.org/show_bug.cgi?id=150859)

        Following r192087 Port._build_path() stores the computed root directory path in option
        _cached_root instead of overwriting option root. We need to teach the Windows-specific
        logic to make use of option _cached_root instead of option root when computing its adjusted
        path and to cache its adjusted in _cached_root instead of root.

        * Scripts/webkitpy/port/win.py:
        (WinPort._build_path):

2015-11-06  Daniel Bates  <dabates@apple.com>

        Do not build LayoutTestRelay when --root is specified to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=150989

        Reviewed by Alexey Proskuryakov.

        The script run-webkit-tests should only check if LayoutTestRelay exists when invoked with
        --root and exit with an error if it does not exist. That is, we should not build LayoutTestRelay
        when it does not exist and an explicit directory of built executables was specified via --root.
        This will make the criterion for building LayoutTestRelay match the criterion for building
        DumpRenderTree/WebKitTestRunner.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._check_port_build): Moved logic from IOSSimulatorPort.{_check_build_relay, check_build} to here.
        (IOSSimulatorPort._check_build_relay): Deleted.
        (IOSSimulatorPort.check_build): Deleted.

2015-11-06  Tim Horton  <timothy_horton@apple.com>

        Add preliminary (SPI) support for NSTextFinder on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150907
        <rdar://problem/19171624>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm: Added.
        (-[FindInPageNavigationDelegate webView:didFinishNavigation:]):
        (TEST):
        Add an API test.

        * WebEditingTester/WK1WebDocumentController.m:
        * WebEditingTester/WK2WebDocumentController.m:
        (-[WK2WebDocumentController awakeFromNib]):
        (-[WK2WebDocumentController contentView]):
        Use incremental find, and show the overlay/indicator.

2015-11-06  Alexey Proskuryakov  <ap@apple.com>

        iOS test results are not visible on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=150884

        Reviewed by Darin Adler.

        One more change was needed for the minimal fix.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2015-11-06  Daniel Bates  <dabates@apple.com>

        Teach Makefile to build LayoutTestRelay when building for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=150849

        Reviewed by Alexey Proskuryakov.

        Override the user-specified arguments SDKROOT and ARCHS to use the default SDK
        and default ARCHS since LayoutTestRelay is a Mac command line tool.

        * LayoutTestRelay/Makefile: Define OVERRIDE_SDKROOT and OVERRIDE_ARCHS.

2015-11-05  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        Add runtime and compile time flags for enabling Web Animations API and model.
        https://bugs.webkit.org/show_bug.cgi?id=150914

        Reviewed by Benjamin Poulain.

        Add ENABLE_WEB_ANIMATIONS compile time flag, runtime flag webAnimationsEnabled and Expose WK2 preference for runtime flag.

        * Scripts/webkitperl/FeatureList.pm:

2015-11-05  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Separate beforeunload confirm callback from confirm callback
        https://bugs.webkit.org/show_bug.cgi?id=150964

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_javascript_before_unload_confirm):
        (window_create):

2015-11-05  Jason Marcell  <jmarcell@apple.com>

        run-webkit-test should look in --root directory for LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=150859

        Reviewed by Daniel Bates.

        For iOS run-webkit-tests, use LayoutTestRelay specified by --root; otherwise find
        LayoutTestRelay in the Mac build directory when --root is unspecified.

        * Scripts/webkitpy/port/base.py:
        (Port._build_path): Use '_cached_root' instead of 'root' so that we don't overwrite the
        argument that was passed in via the --root argument.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.relay_path):

2015-11-05  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI crashed in TestWebKitAPI: TestWebKitAPI::SharedBufferTest_copyBufferCreatedWithContentsOfExistingFile_Test::TestBody
        <http://webkit.org/b/150931>
        <rdar://problem/23409384>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F(SharedBufferTest, copyBufferCreatedWithContentsOfExistingFile)):
        - Switch from strnstr() to memcmp() since strings are
          not guaranteed to be NULL-terminated.
        - Add another expectation that the size is greater than
          zero since memcmp() returns 0 (matching) if the length
          argument is zero.
        (TestWebKitAPI::TEST_F(SharedBufferTest, appendBufferCreatedWithContentsOfExistingFile)):
        - Same change to keep tests consistent, although the
          second string is NULL-terminated in this case.

2015-11-05  Commit Queue  <commit-queue@webkit.org>

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

        "Broke the internal iOS build; will investigate offline"
        (Requested by dydz on #webkit).

        Reverted changeset:

        "Teach Makefile to build LayoutTestRelay when building for iOS
        Simulator"
        https://bugs.webkit.org/show_bug.cgi?id=150849
        http://trac.webkit.org/changeset/192073

2015-11-05  Daniel Bates  <dabates@apple.com>

        Teach Makefile to build LayoutTestRelay when building for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=150849

        Reviewed by Alexey Proskuryakov.

        * LayoutTestRelay/Makefile: Temporarily override SDKROOT when it is iphonesimulator so
        that we build with the default SDK. We assume that the default SDK is the OS X SDK.
        * Makefile: Append LayoutTestRelay to the list of modules to build when building with
        SDK iphonesimulator.

2015-11-05  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add try_close API to handle beforeunload event
        https://bugs.webkit.org/show_bug.cgi?id=150705

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_window_deletion):
        Call ewk_view_try_close instead of removing object directly.
        (window_create): Fixed that passes wrong data.

2015-11-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix crashing and flaky UIScriptController-based tests in fast/events/ios
        https://bugs.webkit.org/show_bug.cgi?id=150901
        <rdar://problem/23261499>

        Reviewed by Simon Fraser.

        Clear out zooming and keyboard-related callbacks after uiScriptComplete has been invoked. This prevents
        later tests from calling into code which previous tests attached to these callbacks and causing
        WebKitTestRunner to crash due to accessing a deallocated UIScriptController.

        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::platformClearAllCallbacks):
        (WTR::UIScriptController::uiScriptComplete):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformClearAllCallbacks):

2015-11-04  Jer Noble  <jer.noble@apple.com>

        [iOS] <video> elements without audio tracks should not interrupt music
        https://bugs.webkit.org/show_bug.cgi?id=149888

        Reviewed by Eric Carlson.

        Add tests to ensure that the AVAudioSession category is correctly set when playing
        back media both with and without audio tracks.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm: Added.
        (-[AudioSessionCategoryUIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html: Added.
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.mp4: Added.
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html: Added.
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.mp4: Added.

2015-11-04  Alexey Proskuryakov  <ap@apple.com>

        iOS test results are not visible on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=150884

        Reviewed by Darin Adler.

        Re-generated builders.jsonp using generate_builders_json.py.

        I think that this is all that's needed for basic support. There is more work needed
        to display test expectations, but that's already mostly broken even for Mac.

        * TestResultServer/static-dashboards/builders.jsonp:

2015-11-03  Commit Queue  <commit-queue@webkit.org>

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

        Broke iOS tests (Requested by ap on #webkit).

        Reverted changeset:

        "run-webkit-test should look in --root directory for
        LayoutTestRelay"
        https://bugs.webkit.org/show_bug.cgi?id=150859
        http://trac.webkit.org/changeset/191995

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

        Add graphics benchmark to performance bot
        https://bugs.webkit.org/show_bug.cgi?id=150450

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Added.
        Add a patch and a plan to set the defaults of the benchmark, run it,
        collect the result and report it to the benchmark runner.

2015-11-03  Jason Marcell  <jmarcell@apple.com>

        run-webkit-test should look in --root directory for LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=150859

        Reviewed by Daniel Bates.

        For iOS run-webkit-tests, use LayoutTestRelay specified by --root; otherwise find
        LayoutTestRelay in the Mac build directory when --root is unspecified.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.relay_path):

2015-11-03  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard should use ISO dates in Trac URLs
        https://bugs.webkit.org/show_bug.cgi?id=150855

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._xmlTimelineURL):

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

        Unreviewed, add myself to the SVG watchlist.
        
        * Scripts/webkitpy/common/config/watchlist:

2015-11-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix touch event sending crash in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=150848
        <rdar://problem/23360841>

        Reviewed by Simon Fraser.

        Fixes a redundant force event generated by HIDEventGenerator. See the Radar diagnosis for more details.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventType:]): Deleted.

2015-11-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r191958.

        * MiniBrowser/win/MiniBrowser.h: Add missing include.
        * MiniBrowser/win/MiniBrowserWebHost.h: Ditto.

2015-11-02  Jiewen Tan  <jiewen_tan@apple.com>

        Add Jiewen Tan (jiewen_tan@apple.com) to committer list.

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

2015-11-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, add unittest after r191827.

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

2015-11-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
        https://bugs.webkit.org/show_bug.cgi?id=150819

        Reviewed by Dan Bernstein.

        This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.

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

2015-11-02  Anders Carlsson  <andersca@apple.com>

        Begin work on supporting reply blocks in _WKRemoteObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=150739

        Reviewed by Tim Horton.

        Add a test. We only test the encoding right now.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn sayHello:completionHandler:]):

2015-11-02  Tim Horton  <timothy_horton@apple.com>

        Get rid of WKWebView's inner WKView (WKView being inside WKWebView leads to weird API issues)
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        Revert some parts of r188828 which no longer apply.

2015-10-30  Dana Burkart  <dburkart@apple.com>

        svn-apply should handle unified diffs
        https://bugs.webkit.org/show_bug.cgi?id=150650

        Reviewed by Darin Adler.

        * Scripts/VCSUtils.pm:
        (parseUnifiedDiffHeader):
        This method parses a unified diff header, and returns a information in the
        style of parseGitDiffHeader and parseSvnDiffHeader.

        (parseDiffHeader):
        Teach parseDiffHeader to recognize unified diff headers.

        (parseDiff):
        Teach parseDiff to recognize unified diffs.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseUnifiedDiffHeader.pl: Added.

2015-11-02  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the FTL JIT build with system LLVM on Linux
        https://bugs.webkit.org/show_bug.cgi?id=150795

        Reviewed by Filip Pizlo.

        * efl/install-dependencies:
        * gtk/install-dependencies:

2015-11-02  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump harfbuzz versions to 0.9.35
        https://bugs.webkit.org/show_bug.cgi?id=150448

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-11-02  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] gnutls-3.3.0 jhbuild module build fails on Ubuntu 15.10
        https://bugs.webkit.org/show_bug.cgi?id=150622

        Reviewed by Gyuyoung Kim.

        * efl/install-dependencies:
        * efl/jhbuild.modules:

2015-11-02  Csaba Osztrogonác  <ossy@webkit.org>

        Fix EFL jhbuild module build on Ubuntu 15.10
        https://bugs.webkit.org/show_bug.cgi?id=150621

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/efl-remove-XPrint.patch: Added.

2015-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Remove delete on destroy GMainLoopSources
        https://bugs.webkit.org/show_bug.cgi?id=150771

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WTF/glib/GMainLoopSource.cpp:
        (TestWebKitAPI::TEST): Remove DeleteOnDestroy unit tests.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::wait): Use g_timeout_add instead of GMainLoopSource.

2015-11-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Support Generator Syntax
        https://bugs.webkit.org/show_bug.cgi?id=150769

        Reviewed by Geoffrey Garen.

        Added ENABLE_ES6_GENERATORS flag.

        * Scripts/webkitperl/FeatureList.pm:

2015-11-01  Alexey Proskuryakov  <ap@apple.com>

        Sort EWS bots in popovers
        https://bugs.webkit.org/show_bug.cgi?id=150782

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueView.js:
        (BubbleQueueView.prototype._popoverContentForBubbleQueue):

2015-10-31  Filip Pizlo  <fpizlo@apple.com>

        B3::reduceStrength's DCE should be more agro and less wrong
        https://bugs.webkit.org/show_bug.cgi?id=150748

        Reviewed by Geoffrey Garen.

        Add an LLVM version of testb3's "testComplex".

        * ReducedFTL/ComplexTest.cpp: Added.

2015-11-01  Commit Queue  <commit-queue@webkit.org>

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

        The new test fails (Requested by ap on #webkit).

        Reverted changeset:

        "Begin work on supporting reply blocks in
        _WKRemoteObjectRegistry"
        https://bugs.webkit.org/show_bug.cgi?id=150739
        http://trac.webkit.org/changeset/191831

2015-10-31  Andreas Kling  <akling@apple.com>

        Add a debug overlay with information about web process resource usage.
        <https://webkit.org/b/150599>

        Reviewed by Darin Adler.

        Add a menu item to the MiniBrowser so we can toggle the resource usage overlay on/off.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleShowResourceUsageOverlay:]):
        (-[SettingsController resourceUsageOverlayVisible]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2015-10-31  Lucas Forschler  <lforschler@apple.com>

        Teach the CompileWebKit step to look for additional arguments.
        
        Unreviewed config change.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2015-10-30  Anders Carlsson  <andersca@apple.com>

        Begin work on supporting reply blocks in _WKRemoteObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=150739

        Reviewed by Tim Horton.

        Add a test. We only test the encoding right now.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn sayHello:completionHandler:]):

2015-10-30  Lucas Forschler  <lforschler@apple.com>

        Add CMAke builder to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=150738
        
        Reviewed by Alex Christensen.

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

2015-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] build-jsc and run-javascriptcore-tests do not work
        https://bugs.webkit.org/show_bug.cgi?id=150700

        Reviewed by Mark Lam.
        
        Correct our build system so that it expects Windows to be using CMake,
        and to build the correct sub-projects for our JSC helper scripts.

        * Scripts/build-jsc: Make sure to build the testapi harness when
          building for Windows.
        * Scripts/build-webkit:
          (1) Use the existing 'cmakeBasedPortName()'
          (2) Use File::Spec rather than hard-coding path delimeters.
          (3) Refer to Visual Studio 14.0, rather than the unsupported 12.0.
        method rather than hard-coding the name based on conditional.
        * Scripts/copy-webkitlibraries-to-product-directory: Don't try to grab
          LLVM libraries on Apple Windows build.
        * Scripts/run-javascriptcore-tests:
        (testapiPath): Use File::Spec rather than hard-coding path delimeters.
        * Scripts/run-jsc: Ditto.
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortName): Update to return the right value for the Apple
        Windows port and the WinCairo port.
        (isCMakeBuild): Expect CMake build for all Windows ports.

2015-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [JHBuild] Do not try to update the dependencies if jhbuild configuration hasn't changed
        https://bugs.webkit.org/show_bug.cgi?id=150665

        Reviewed by Csaba Osztrogonác.

        We check it only to wipe the directory or not, but we are still
        tryihng to update every module even when the configuration hasn't
        changed. This is problematic because it makes the whole build fail
        when any repository fails to checkout an already checked out
        revision, because the server is down for example. This is even
        more problematic for the bots that skip perfectly valid revisions.
        It's still possible to force an update passing --force command
        line argument.

        * Scripts/update-webkit-libs-jhbuild:
        (deleteJhbuildMd5): Delete the md5sum files if exist.
        (runJhbuild): Return early if the md5sum files haven't
        changed. Only write them after a successful build and delete them
        if the build fails to ensure we don't skip next run.

2015-10-30  Philippe Normand  <pnormand@igalia.com>

        [GTK] Fix MacCLang build errors in Tools
        https://bugs.webkit.org/show_bug.cgi?id=150031

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformWebView.h: Fix PlatformWindow typedef on OSX flavor of the GTK port.
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp: Include WKView.h for WKViewCreate().
        * WebKitTestRunner/PlatformWebView.h: Fix PlatformWindow typedef on OSX flavor of the GTK port.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp: Include WKView.h for WKViewCreate().

2015-10-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] MiniBrowser didn't work after r191749.
        https://bugs.webkit.org/show_bug.cgi?id=150706

        Reviewed by Alex Christensen.

        Renamed jhbuildWrapperPrefixIfNeeded to wrapperPrefixIfNeeded in r191749.

        * Scripts/run-minibrowser:

2015-10-29  Commit Queue  <commit-queue@webkit.org>

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

        Problem with Cygwin build (Requested by bfulgham_ on #webkit).

        Reverted changeset:

        "[Win] build-jsc and run-javascriptcore-tests do not work"
        https://bugs.webkit.org/show_bug.cgi?id=150700
        http://trac.webkit.org/changeset/191766

2015-10-29  Brent Fulgham  <bfulgham@apple.com>

        [Win] build-jsc and run-javascriptcore-tests do not work
        https://bugs.webkit.org/show_bug.cgi?id=150700

        Reviewed by Mark Lam.
        
        Correct our build system so that it expects Windows to be using CMake,
        and to build the correct sub-projects for our JSC helper scripts.

        * Scripts/build-jsc: Make sure to build the testapi harness when
          building for Windows.
        * Scripts/build-webkit:
          (1) Use the existing 'cmakeBasedPortName()'
          (2) Use File::Spec rather than hard-coding path delimeters.
          (3) Refer to Visual Studio 14.0, rather than the unsupported 12.0.
        method rather than hard-coding the name based on conditional.
        * Scripts/run-javascriptcore-tests:
        (testapiPath): Use File::Spec rather than hard-coding path delimeters.
        * Scripts/run-jsc: Ditto.
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortName): Update to return the right value for the Apple
        Windows port and the WinCairo port.
        (isCMakeBuild): Expect CMake build for all Windows ports.

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        Fix build-jsc on Mac after r191749.

        * Scripts/build-jsc:
        Use isCMakeBuild to determine if we are building with CMake instead of cmakeBasedPortName.

2015-10-29  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Filip Pizlo.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (isCachedArgumentfileOutOfDate):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeGeneratedProject):
        (cmakeBasedPortName):
        (determineIsCMakeBuild):
        (isCMakeBuild):
        (promptUser):
        (jhbuildWrapperPrefixIfNeeded): Deleted.

2015-10-29  Lucas Forschler  <lforschler@apple.com>

        Teach JSC bots to build 32bit instead of x86_64
        
        Reviewed by Mark Lam.

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

2015-10-29  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Fall back to AppleWin results in layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=150672

        Reviewed by Alex Christensen.

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

2015-10-28  Keith Rollin  <krollin@apple.com>

        Do not sanitize user input for input[type=url]
        https://bugs.webkit.org/show_bug.cgi?id=150346
        <rdar://problem/23243240>

        Reviewed by Brent Fulgham.

        The Windows version of DumpRenderTree's eventSender.keyDown handler
        simulates user-entry by decomposing the given character into a virtual
        key code and a set of modifier keys. The code that determines if the
        shift key should be simulated only worked if the character was an
        upper case character. Extend this support to also include symbols that
        (on the U.S. keyboard) require holding down the shift key.

        This change allows fast/forms/input-user-input-sanitization.html
        to succeed, which requires us to simulate the entering of '@' and ':'.

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2015-10-28  Alex Christensen  <achristensen@webkit.org>

        Compile and link with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150632

        Reviewed by Tim Horton.

        * TestWebKitAPI/PlatformMac.cmake:

2015-10-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist: Removed dead files from Streams API watchlist.

2015-10-28  Per Arne Vollan  <peavo@outlook.com>

        Add WinCairo to list of ports in run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=150625

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (WinPort.run_webkit_tests_command):
        (WinCairoPort):
        (GtkWK2Port):
        * Scripts/webkitpy/port/factory.py:
        (PortFactory):
        * Scripts/webkitpy/port/win.py:
        (WinPort.find_system_pid):
        (WinCairoPort):

2015-10-27  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner leaks in generateWhitelist()
        https://bugs.webkit.org/show_bug.cgi?id=150563

        Reviewed by Andreas Kling.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateWhitelist):

2015-10-27  Anders Carlsson  <andersca@apple.com>

        Add an API test for _WKRemoteObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=150597

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm: Added.
        (-[RemoteObjectRegistryPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RemoteObjectRegistryPlugIn sayHello:]):

2015-10-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Add myself to the reviewers list
        https://bugs.webkit.org/show_bug.cgi?id=150581

        Unreviewed.

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

2015-10-26  Ryan Haddad  <ryanhaddad@apple.com>

        Adding myself to contributors.json

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

2015-10-26  Tim Horton  <timothy_horton@apple.com>

        Don't expose the whitelist/blacklist in _WKUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=150566

        Reviewed by Anders Carlsson.

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

2015-10-26  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r191576.

        broke

        Reverted changeset:

        "[GStreamer] Bump internal jhbuild versions to 1.6.0"
        https://bugs.webkit.org/show_bug.cgi?id=149594
        http://trac.webkit.org/changeset/191576

2015-10-26  ChangSeok Oh  <changseok.oh@collabora.com>

        [GStreamer] Bump internal jhbuild versions to 1.6.0
        https://bugs.webkit.org/show_bug.cgi?id=149594

        Reviewed by Philippe Normand.

        Bump up whole gstreamer libraries to 1.6.0. Relevant patches are no more
        useful so they are removed accordingly.

        * gtk/jhbuild.modules:
        * 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.

2015-10-25  Alexey Proskuryakov  <ap@apple.com>

        API tests fail on El Capitan after r191543
        https://bugs.webkit.org/show_bug.cgi?id=150547

        Reviewed by Dan Bernstein.

        * Scripts/run-api-tests: (listAllTests): Add appropriate arch arguments in one more place.

2015-10-24  Tim Horton  <timothy_horton@apple.com>

        Add a way to add user style sheets to WKUserContentController
        https://bugs.webkit.org/show_bug.cgi?id=150531
        <rdar://problem/23191691>

        Reviewed by Darin Adler.

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

2015-10-24  Tim Horton  <timothy_horton@apple.com>

        Expose more information about the exception in WKErrorJavaScriptExceptionOccurred errors
        https://bugs.webkit.org/show_bug.cgi?id=150525

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        Test the various new keys.

2015-10-24  Frederic Wang  <fred.wang@free.fr>

        check-webkit-style complains about missing operator whitespace inside character literal
        https://bugs.webkit.org/show_bug.cgi?id=150396

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py: Improve matching of C++ character literal.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_spacing): Add a test to verify that the spacing for the character literal 'OS/2' is not tested.

2015-10-23  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r179357-r179359): WebContent Crash using AOL Mail @ com.apple.JavascriptCore JSC::linkPolymorphicCall(JSC::ExecState*, JSC::CallLinkInfo&, JSC::CallVariant, JSC::RegisterPreservationMode) + 1584
        https://bugs.webkit.org/show_bug.cgi?id=150513

        Reviewed by Saam Barati.

        Added a new test function, failNextNewCodeBlock() to simplify the writing of a regression test.

        * DumpRenderTree/TestRunner.cpp:
        (simulateWebNotificationClickCallback):
        (failNextCodeBlock):
        (numberOfDFGCompiles):
        (TestRunner::staticFunctions):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setBlockAllPlugins):
        (WTR::TestRunner::failNextCodeBlock):
        (WTR::TestRunner::numberOfDFGCompiles):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2015-10-23  Anders Carlsson  <andersca@apple.com>

        Simplify the WebKitLegacy menu conversion code
        https://bugs.webkit.org/show_bug.cgi?id=150509

        Reviewed by Andreas Kling.

        Implement the context menu delegate method so we'll test that code path.

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

2015-10-23  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Improve test results for fast layouttests.
        https://bugs.webkit.org/show_bug.cgi?id=150464

        Reviewed by Alex Christensen.

        Set custom device scale factor to 1.0.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):

2015-10-23  Mark Salisbury  <mark.salisbury@hp.com>

        [GTK] update-webkitgtk-libs should use mesa tarball

        https://bugs.webkit.org/show_bug.cgi?id=150470

        update-webkitgtk-libs downloads all build dependencies; in fixing
        bug 148941 mesa was switched from ftp to git access.  Now an http
        tarball is available, which is preferred over accessing via git.

        Reviewed by Philippe Normand

        * gtk/jhbuild.modules:
        Mesa access changed to http tarball.

2015-10-22  Sam Weinig  <sam@webkit.org>

        Navigations on the same host (but with different schemes and ports) should not trigger universal links
        <rdar://problem/22811325>
        https://bugs.webkit.org/show_bug.cgi?id=150481

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        Update test to test that navigations on the same host but with different schemes does not
        trigger universal links, but that changes in the host do.

2015-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r181972): Scroll position changes to top of youtube page when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=150428

        Reviewed by Antti Koivisto.

        Added a regression test using WebKit API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/FirstResponderScrollingPosition.mm: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):

2015-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r191423.

        Add WebKitDOMHTMLBaseFontElement to the list of deleted classes.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator):

2015-10-22  Aakash Jain  <aakash_jain@apple.com>

        [Win][EFL][GTK] webkitpy test failed after r191374.
        https://bugs.webkit.org/show_bug.cgi?id=150433

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_all_log_darwin): Check platform before running test.
        (CrashLogsTest.test_find_log_darwin): Same.

2015-10-21  Brian Burg  <bburg@apple.com>

        Unreviewed, update watchlist for JS builtins.

        Add a category for JS builtins code generator, similar to other generators.

        Add a nag message to rebaseline builtins generator tests when touching
        code generator files in Source/JavaScriptCore/Scripts/builtins/.

        * Scripts/webkitpy/common/config/watchlist:

2015-10-21  Brian Burg  <bburg@apple.com>

        Restructure generate-js-bindings script to be modular and testable
        https://bugs.webkit.org/show_bug.cgi?id=149929

        Reviewed by Alex Christensen.

        Add a stub shell script and basic webkitpy support for running builtins
        generator tests.

        * Scripts/run-builtins-generator-tests: Added.
        (main):
        * Scripts/webkitpy/codegen/__init__.py: Added.
        * Scripts/webkitpy/codegen/main.py: Added.

            The only interesting difference here from the inspector protocol
            generator equivalent is that this implementation decodes the target
            framework and output mode (combined or separate) from the test's file name.

        (BuiltinsGeneratorTests):
        (BuiltinsGeneratorTests.__init__):
        (BuiltinsGeneratorTests.generate_from_js_builtins):
        (BuiltinsGeneratorTests.write_error_file):
        (BuiltinsGeneratorTests.detect_changes):
        (BuiltinsGeneratorTests.run_tests):
        (BuiltinsGeneratorTests.main):

2015-10-21  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests does not copy all crash logs for layout test failures on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150407
        <rdar://problem/22239750>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/mac.py:
        (MacPort._merge_crash_logs): Merge unique crash logs from two dictionaries.
        (MacPort._look_for_all_crash_logs_in_log_dir): Get the crash logs from
        the log directory.
        (MacPort.look_for_new_crash_logs): Uses above method to get crash logs
        from log directory and merge them with the list of already crashed tests.

2015-10-21  Filip Pizlo  <fpizlo@apple.com>

        Failures in PutStackSinkingPhase should be less severe
        https://bugs.webkit.org/show_bug.cgi?id=150400

        Reviewed by Geoffrey Garen.

        Add a test mode for no PutStackSinkingPhase.

        * Scripts/run-jsc-stress-tests:

2015-10-21  Nan Wang  <n_wang@apple.com>

        AX: Expose table size and cell indexes on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150366

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        (AccessibilityUIElement::indexInTable):
        (AccessibilityUIElement::numberAttributeValue):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):

2015-10-21  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should not import reference files as regular tests
        https://bugs.webkit.org/show_bug.cgi?id=150331

        Reviewed by Darin Adler.

        Updated test_parser to return information that a file can be a referencefile or a manual test.
        Updated test importer to skip those files.
        Updated/Added test parser unit tests accordingly.

        Updated test importer to import all not-test files, as they are usually used by tests and lead to test failing or timing out.
        Updated test importer to log these 'resource' files that are not in a resources folder, and suggest to import script user
        to mark these files as Skip, since they are not direct tests. 

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        (test_analyze_non_html_file):
        (test_reference_test):

2015-10-20  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests does not copy all crash logs for layout test failures on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150056
        <rdar://problem/9280656>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_all_logs): Generic method to find all crash logs.
        (CrashLogs._find_all_logs_darwin): Darwin based method to find all crash logs.
        It iterates through log directory and returns all the logs based on timestamp.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.create_crash_logs_darwin): Creates sample crash logs and verify them.
        (CrashLogsTest.test_find_all_log_darwin): Testcase for above find_all_logs method
        (CrashLogsTest.test_find_log_darwin): Restructured to share code with other methods.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Modified start_time to start counting before simulator launch
        so that we can capture crashes during simualator launch.
        (Manager._look_for_new_crash_logs): Browse through list of crashes and append
        any test which is not already marked as CRASH to the run_results.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationsModel.get_expectations_string): return PASS in case there
        are no expectations defined for this test.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Add other_crashes in a separte category in full_results.json.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._merge_crash_logs): Merge unique crash logs from two dictionaries.
        (IOSSimulatorPort._look_for_all_crash_logs_in_log_dir): Get the crash logs
        from the log directory.
        (IOSSimulatorPort.look_for_new_crash_logs): Uses above method to get crash
        logs from log directory and merge them with the list of already crashed tests.

2015-10-20  Dana Burkart  <dburkart@apple.com>

        Fix the build

        Unreviewed.

        My previous patch was missing a necessary space character.

        * Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl:

2015-10-20  Dana Burkart  <dburkart@apple.com>

        svn-apply fails to apply binary diffs in some cases
        https://bugs.webkit.org/show_bug.cgi?id=64647

        Reviewed by Daniel Bates.

        * Scripts/VCSUtils.pm:
        (decodeGitBinaryPatchDeltaSize): Modified.
        We need to handle the case where the binary diff is the last in the patch; so we match on "-- \n" or "\Z".
        * Tools/Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl: Added.

2015-10-20  Alexey Proskuryakov  <ap@apple.com>

        Mac Debug EWS never finishes when there are failures
        https://bugs.webkit.org/show_bug.cgi?id=150334

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2015-10-20  Philippe Normand  <pnormand@igalia.com>

        [GTK] Enable OpenWebRTC test video/audio sources in tests

        This is needed because we can't expect the buildbots to have
        webcam/mic devices plugged in.

        Rubber-stamped by Carlos Garcia Campos.

        * Scripts/run-gtk-tests:
        (TestRunner._setup_testing_environment):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):

2015-10-20  Yoav Weiss  <yoav@yoav.ws>

        Rename the PICTURE_SIZES flag to CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=150275

        Reviewed by Dean Jackson.

        * Scripts/webkitperl/FeatureList.pm:

2015-10-19  Hunseop Jeong  <hs85.jeong@samsung.com>

        Unreviewed, add myself to the committers list.

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

2015-10-19  Alexey Proskuryakov  <ap@apple.com>

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

        Reviewed by Darin Adler.

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

2015-10-19  ChangSeok Oh  <changseok.oh@collabora.com>

        REGRESSION(r190262): User media unit test failures after r190262
        https://bugs.webkit.org/show_bug.cgi?id=149580

        Reviewed by Carlos Garcia Campos.

        The test failures on usermedia-permission-requests and WebKit2.UserMediaBasic have gone.
        So we do not need to skip them anymore.

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

2015-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Add historical addresses to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=150227

        Reviewed by Darin Adler.

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

2015-10-18  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Win] Change the DLL name in MiniBrowserLib.vcxproj to match webkit.org/b/150124.
        https://bugs.webkit.org/show_bug.cgi?id=150307

        Reviewed by Brent Fulgham.

        The DLL build rules have been changed to generate "{Name}Lib.DLL",
        but these changes have not yet been applied to the Visual Studio builds.

        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj:

2015-10-16  Andreas Kling  <akling@apple.com>

        [EFL, AppleWin] WTF.ConcatenateCharacterArrayAndEmptyString API test failed
        <https://webkit.org/b/150153>

        Unreviewed.

        Just use simple arrays of LChar and UChar for this test instead of creating String
        objects and then getting the characters8()/characters16() from them, since that
        doesn't guarantee null-termination (the bug.)

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::build): Deleted.

2015-10-16  Tim Horton  <timothy_horton@apple.com>

        WebKit2.AutoLayoutIntegration API test is failing on some of the bots
        https://bugs.webkit.org/show_bug.cgi?id=150255

        Reviewed by Simon Fraser.

        * Scripts/run-api-tests:
        (runTest):
        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (-[AutoLayoutWKWebView load:withWidth:expectingContentSize:]):
        (-[AutoLayoutWKWebView layoutAtMinimumWidth:andExpectContentSizeChange:]):
        (-[AutoLayoutWKWebView load:expectingContentSize:]): Deleted.
        (-[AutoLayoutWKWebView expectContentSizeChange:]): Deleted.
        Don't set the layout size until after the load finishes and we're waiting
        for the reply, so that there is no race between the new size coming in
        and us waiting for it.

2015-10-16  Anders Carlsson  <andersca@apple.com>

        WebEditingDelegate should be a formal protocol
        https://bugs.webkit.org/show_bug.cgi?id=150254
        <rdar://problem/23149847>

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/EditingDelegate.h:
        Conform to the WebEditingDelegate protocol.

2015-10-16  Tim Horton  <timothy_horton@apple.com>

        Hook up autolayout intrinsic sizing for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150219
        <rdar://problem/20016905>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm: Added.
        (-[AutoLayoutNavigationDelegate webView:didFinishNavigation:]):
        (-[AutoLayoutWKWebView load:expectingContentSize:]):
        (-[AutoLayoutWKWebView expectContentSizeChange:]):
        (-[AutoLayoutWKWebView invalidateIntrinsicContentSize]):
        (TEST):
        Add a variety of tests, including one which catches the bug that
        the WebCore part of this patch fixes.

2015-10-15  Csaba Osztrogonác  <ossy@webkit.org>

        Update the help message of --system-malloc
        https://bugs.webkit.org/show_bug.cgi?id=150169

        Reviewed by Geoffrey Garen.

        * Scripts/webkitperl/FeatureList.pm:

2015-10-15  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Update ImportExpectations according currently imported wpt tests
        https://bugs.webkit.org/show_bug.cgi?id=150158

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.copy_tests): ensuring that directories marked as [ Skip ] are not copied.

2015-10-15  Eunmi Lee  <eunmi15.lee@samsung.com>

        Unreviewed, Update my email address.

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

2015-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test WebKit2.RestoreSessionStateContainingFormData fails
        https://bugs.webkit.org/show_bug.cgi?id=84960

        Reviewed by Žan Doberšek.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip tests using SessionState.
        * TestWebKitAPI/PlatformGTK.cmake: Add
        WKPageCopySessionStateWithFiltering test.

2015-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Missing return value on TestWebExtensions.cpp:193
        https://bugs.webkit.org/show_bug.cgi?id=149755

        Unreviewed. Add missing return value.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (permissionRequestCallback):

2015-10-14  Andy Estes  <aestes@apple.com>

        [iOS] build-dumprendertree does not build ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=150152

        Reviewed by Tim Horton.

        run-webkit-tests attempts to build the tools it requires by calling build-dumprendertree and build-webkittestrunner.
        On iOS, build-dumprendertree builds the DumpRenderTree.app target, which does not contain the ImageDiff target
        as a dependent. If you haven't built ImageDiff by other means (say, because you built the 'All Source' scheme in
        WebKit.xcworkspace), tests that rely on image diffing won't work properly.

        There's actually no reason to build the DumpRenderTree.app target on iOS; the default aggregate target works
        fine on that platform, and results in ImageDiff being built.

        * Scripts/build-dumprendertree:

2015-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Enforce launcher/library naming scheme
        https://bugs.webkit.org/show_bug.cgi?id=150124

        Reviewed by Alex Christensen.

        * DumpRenderTree/PlatformWin.cmake: Use 'Lib' suffix for DLLs.
        * MiniBrowser/win/CMakeLists.txt: Ditto.
        * TestWebKitAPI/PlatformWin.cmake: Ditto.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain): Look for a DLL named {name}Lib.dll, rather than the
        original {name}.dll.

2015-10-14  Andreas Kling  <akling@apple.com>

        REGRESSION(r190882): Concatenating a character array and an empty string is broken.
        <https://webkit.org/b/150135>

        Reviewed by Geoffrey Garen.

        Add a new WTF API test that covers this issue.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::build):
        (TestWebKitAPI::TEST):

2015-10-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI for reloading without content blockers
        https://bugs.webkit.org/show_bug.cgi?id=150058
        rdar://problem/22742222

        Reviewed by Sam Weinig.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):

2015-10-14  Mark Lam  <mark.lam@apple.com>

        Rename some JSC option names to be more uniform.
        https://bugs.webkit.org/show_bug.cgi?id=150127

        Reviewed by Geoffrey Garen.

        * Scripts/jsc-stress-test-helpers/js-executable-allocation-fuzz:
        * Scripts/run-jsc-stress-tests:

2015-10-14  Anders Carlsson  <andersca@apple.com>

        Change the bundle app cache APIs to take a page
        https://bugs.webkit.org/show_bug.cgi?id=150123

        Reviewed by Sam Weinig.

        Update APIs.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReachApplicationCacheOriginQuota):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearAllApplicationCaches):
        (WTR::TestRunner::clearApplicationCacheForOrigin):
        (WTR::TestRunner::setAppCacheMaximumSize):
        (WTR::TestRunner::applicationCacheDiskUsageForOrigin):
        (WTR::TestRunner::originsWithApplicationCache):

2015-10-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Update web-platform-tests tools to the latest revision
        https://bugs.webkit.org/show_bug.cgi?id=149645

        Reviewed by Darin Adler.

        Disabling git submodules information conversion to json install file for web-platform-tests.
        Disabling related python unit tests.
        The tools submodules contain submodules and the conversion tool does not support that yet.

        Updating wpt launcher script to aling it with web-platform-test main script.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (main):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_corrupted_subserver_files): Deleted.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_submodules_generation):

2015-10-13  Alexey Proskuryakov  <ap@apple.com>

        More debug queue build fixing.

        Preserve the build style in one more place. Changed mock build_style from "both"
        to "release", as we don't support testing both debug and release.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.archive_last_test_results):
        (MockCommitQueue):
        (MockCommitQueue.build_style):
        (MockCommitQueue.did_pass_testing_ews):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._test):
        (PatchAnalysisTask._build_and_test_without_patch):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest._default_expected_logs):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2015-10-13  Alexey Proskuryakov  <ap@apple.com>

        More debug queue build fixing.

        Add build_style argument to derived classes as well.

        * Scripts/webkitpy/common/config/ports.py:
        (MacPort):
        (MacPort.run_webkit_tests_command):
        (WinPort.run_bindings_tests_command):
        (WinPort):
        (WinPort.run_webkit_tests_command):
        (GtkWK2Port.build_webkit_command):
        (GtkWK2Port):
        (GtkWK2Port.run_webkit_tests_command):

2015-10-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Build fix

        Unreviewed.

        Mach-O section names are limited to 16 characters.

        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFontsIOS):

2015-10-13  Alexey Proskuryakov  <ap@apple.com>

        Build fix for mac-debug EWS queue.

        Unreviewed.

        Pass --debug to run-webkit-tests.

        While at it, removed unsupported run_webkit_unit_tests_command. All the test steps
        will need to be substantially modified to work in EWS, so the dummy implementation
        was not helpful.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):
        (DeprecatedPort):
        (DeprecatedPort.run_webkit_tests_command):
        (DeprecatedPort.run_python_unittests_command):
        (DeprecatedPort.run_webkit_unit_tests_command): Deleted.
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_javascriptcore_tests_command):
        (MockPort):
        (MockPort.run_webkit_tests_command):
        (MockPort.run_bindings_tests_command):
        (MockPort.run_webkit_unit_tests_command): Deleted.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):

2015-10-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Generate Crash Traces
        https://bugs.webkit.org/show_bug.cgi?id=150103

        Reviewed by Daniel Bates.

        We were using an exception filter to try to emit "#CRASHED" to stderr
        when a test program crashed. However, the modern Python implementation
        seems capable of recognizing crashes on its own. Furthermore, registering
        the exception handler was preventing the JIT debugger (NTSD) from
        automatically attaching to the crashing program, so we were not getting
        crash traces.
        
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): Don't register an exception filter.
        (exceptionFilter): Deleted.
        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs): Add another regular expression to handle a second crash trace
        syntax I encountered during testing.
        (CrashLogs._find_newest_log_win): If the old regular expression doesn't match,
        try the new one. The PID found by the new expression is in hexadecimal, so
        convert it to an integer before returning it.
        * Scripts/webkitpy/port/driver.py:
        (Driver._check_for_driver_crash_or_unresponsiveness): Windows was not recognizing
        the "#CRASHED" state because it was appending '\r\n', rather than just '\r'. Instead,
        check for "#CRASHED" after stripping off the EOL characters.
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_crash_log_saving): Put back the '-e %ld' flag in the debugger
        invocation. This is apparently used to signal an event when the debugger is finished.

2015-10-13  Alexey Proskuryakov  <ap@apple.com>

        Mac Debug and 32-bit queues should be separate
        https://bugs.webkit.org/show_bug.cgi?id=150092

        Reviewed by Lucas Forschler.

        * QueueStatusServer/config/queues.py:
        * QueueStatusServer/model/queues.py:
        (Queue._capitalize_after_dash):
        (Queue._caplitalize_after_dash): Deleted.
        * Scripts/webkitpy/common/config/ews.json:

2015-10-13  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Fix build for ENABLE_TOUCH_EVENTS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=150085

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:

2015-10-13  Sebastian Dröge  <sebastian@centricular.com>

        Unreviewed, add myself to the committers list.

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

2015-10-12  Alexey Proskuryakov  <ap@apple.com>

        Update bot watcher's dashboard to reflect that EWS is on iOS 9 now
        https://bugs.webkit.org/show_bug.cgi?id=149983

        Reviewed by Dan Bates.

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

2015-10-12  Alexey Proskuryakov  <ap@apple.com>

        Fix webkitpy tests after r190922.

        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2015-10-12  Alexey Proskuryakov  <ap@apple.com>

        Add a Mac debug EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=150069

        Reviewed by Geoffrey Garen.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.archive_last_test_results):
        (AbstractEarlyWarningSystem.build_style):
        (AbstractEarlyWarningSystem.refetch_patch):
        (AbstractEarlyWarningSystem.load_ews_classes):

2015-10-12  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] Update jhbuild's version of harfbuzz
        https://bugs.webkit.org/show_bug.cgi?id=149749

        Reviewed by Martin Robinson.

        Update harfbuzz to 0.9.35, following the lead of Debian Stable.

        * gtk/jhbuild.modules: Updated details for harfbuzz.

2015-10-12  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] Media tests crashing with gst-plugins-bad 1.4.4 and cpp 5.2
        https://bugs.webkit.org/show_bug.cgi?id=150026

        Reviewed by Philippe Normand.

        Backport upstream patch from gst-plugins-bad so that the right version
        of FAAD2 can be found with newer versions of cpp, so that gst-plugins-bad
        gets compiled properly, avoiding crashes on runtime while running tests.

        * gtk/patches/gst-plugins-bad-fix-faad2-version-check.patch: Added.
        * gtk/jhbuild.modules: Referenced the newly added patch for gst-plugins-bad.

2015-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Test font-variant-* and font-feature-settings with mocked preinstalled fonts
        https://bugs.webkit.org/show_bug.cgi?id=149777

        Reviewed by Simon Fraser.

        Include FontWithFeatures in DumpRenderTree and WebKitTestRunner. Add it
        to the list of tests to preinstall at startup time.

        Also, update the generation of the 'name' table in the FontWithFeatures font.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (activateTestingFonts):
        (activateFontsIOS):
        * FontWithFeatures/FontWithFeatures/FontCreator.cpp:
        (Generator::generate):
        (Generator::appendCFFTable):
        (Generator::appendNameSubtable):
        (Generator::appendNAMETable):
        * FontWithFeatures/FontWithFeatures/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet):
        (WTR::activateFonts):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2015-10-11  Jinyoung Hur  <hur.ims@navercorp.com>

        Unreviewed. Add Jinyoung Hur as a committer. 

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

2015-10-10  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove unnecessary iOS version checks
        https://bugs.webkit.org/show_bug.cgi?id=150002

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventType:]):
        (-[HIDEventGenerator _sendHIDEvent:]):
        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):
        * WebKitTestRunner/ios/UIKitSPI.h:

2015-10-09  Myles C. Maxfield  <mmaxfield@apple.com>

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

        Fixed in other repository.

        Reverted changesets:

        "Unreviewed, rolling out r190572, r190593, r190594, and r190639."
        https://bugs.webkit.org/show_bug.cgi?id=149897

2015-10-09  Brian Burg  <bburg@apple.com>

        Teach webkitperl how to figure out IOS versions from the SDK
        https://bugs.webkit.org/show_bug.cgi?id=149963

        Reviewed by Daniel Bates.

        It should be easier to check the major and minor version of IOS SDKs.

        * Scripts/copy-webkitlibraries-to-product-directory: use iosVersion().
        * Scripts/webkitdirs.pm:
        (splitVersionString): Added.
        (determineOSXVersion): Use splitVersionString.
        (determineIOSVersion): Added. Look at the SDK version and make a tuple.
        (iosVersion): Added.

2015-10-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix some leaks in TestRunnerWKWebView and UIScriptContext
        https://bugs.webkit.org/show_bug.cgi?id=149960

        Reviewed by Tim Horton.
        
        Use adoptWK(), and null out some members (file is not using ARC).

        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::uiScriptComplete):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):

2015-10-09  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE_SUID_SANDBOX_LINUX cruft
        https://bugs.webkit.org/show_bug.cgi?id=149954

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2015-10-09  Daniel Bates  <dabates@apple.com>

        Make iOS builders generate debug information in a separate dSYM file
        https://bugs.webkit.org/show_bug.cgi?id=149696

        Reviewed by Darin Adler.

        Similar to the Mac builders, the iOS builders should write debug information
        into a separate dSYM file instead of including such information in the binary
        itself (default Xcode behavior)

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2015-10-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix webkitpy tests after r190779
        https://bugs.webkit.org/show_bug.cgi?id=149949

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults.format):
        (BenchmarkResults._format_values):

2015-10-08  Dewei Zhu  <dewei_zhu@apple.com>

        Extend run-benchmark script to support human-readable results conversion.
        https://bugs.webkit.org/show_bug.cgi?id=149944

        Reviewed by Ryosuke Niwa.

        Add '--read-results-json' and '--no-adjust-unit' options.
        '--read-results-json' option converts result file to human readable format.
        '--no-adjust-unit' option skips scientific notation convertion.
        '--platform' defaults to 'osx' and '--browser' defaults to 'safari'.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults.format):
        (BenchmarkResults._format_tests):
        (BenchmarkResults._format_values):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner._run_benchmark):
        (BenchmarkRunner._dump):
        (BenchmarkRunner.show_results):
        (BenchmarkRunner._show_results): Deleted.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args):
        (start):

2015-10-08  Daniel Bates  <dabates@apple.com>

        Add iOS 9 device builder to WebKit Bot Watcher's Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=149945

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-9 img.logo):

2015-10-08  Daniel Bates  <dabates@apple.com>

        Teach build-webkit to install LLVM binaries for iOS when building for device with the public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=149943

        Reviewed by Dan Bernstein.

        Following the addition of the LLVM binaries for iOS in changeset r190759 (bug #149913) we should
        teach build-webkit to install them when building for iOS device using the public iOS SDK. 

        * Scripts/build-webkit:

2015-10-08  Daniel Bates  <dabates@apple.com>

        Add LLVM binaries for iOS 9 device
        https://bugs.webkit.org/show_bug.cgi?id=149913

        Reviewed by Filip Pizlo.

        Implement support for building LLVM for ARM64-based iOS devices.

        * Scripts/build-jsc: Enable the FTL when building for Mac or iOS device.
        * Scripts/copy-webkitlibraries-to-product-directory: Move logic to clean
        an existing build earlier in the file such that remove previously built
        libraries before building/copying new ones (if applicable).
        (fileContains): Moved function outside of if-block.
        (isContentOfFileEqualToString): Renamed; formerly named fileContentsEquals().
        (buildLLVM): Added. Extracted machinery to build LLVM into this function and
        added logic to build LLVM for ARM64-based iOS devices.
        (symlinkLLVMLibrariesIfNeeded): Added. Extracted machinery to symlink the built
        LLVM into the WebKitBuild directory.

2015-10-08  Alexey Proskuryakov  <ap@apple.com>

        Crash-only queues on bot watcher's dashboard should not have non-crashing tests in popovers
        https://bugs.webkit.org/show_bug.cgi?id=149848

        Reviewed by Darin Adler.

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

2015-10-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support 64-bit Build and Testing
        https://bugs.webkit.org/show_bug.cgi?id=149904

        Reviewed by Daniel Bates.

        Extend our existing scripts to support 64-bit build and test operations on
        Windows.

        * Scripts/build-dumprendertree: We don't need to build DRT on its own;
        Windows always builds the whole stack.
        * Scripts/webkit-build-directory: Add an option to return the location of
        the executable files produced by a specific configuration. This change is
        actually useful for Gtk and EFL, too.
        * Scripts/webkitdirs.pm:
        (executableProductDir): Added. This function appends the proper binary
        path to the productDir. This is useful for Windows, Gtk, and EFL ports.
        (jscProductDir): Use the new 'executableProductDir' method.
        (setPathForRunningWebKitApp): Ditto.
        (runSafari): Ditto.
        (runMiniBrowser): Ditto.
        * Scripts/webkitpy/port/factory.py:
        (configuration_options): Add a 64-bit option, used on Windows to specify
        which binary target should be used for testing.
        * Scripts/webkitpy/port/win.py:
        (WinPort._port_flag_for_scripts): Added. Supply the 64-bit flag to child
        processes when needed.
        (WinPort._build_path): Add the correct binary target path to _build_path.
        (WinPort._ntsd_location): Check 32-bit paths when running 32-bit tests,
        64-bit paths for 64-bit tests.
        (WinPort.setup_crash_log_saving): Remove '-e %ld' argument, since the
        NTSD debugger does not understand this argument.

2015-10-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Test font-variant-* and font-feature-settings with TrueType fonts
        https://bugs.webkit.org/show_bug.cgi?id=149776

        Reviewed by Simon Fraser.

        This test extends our existing FontWithFeatures project to be able to generate a
        TrueType font. This font is conceptually similar as the existing OpenType font,
        except the feature -> character mapping is different.

        The font itself only supports the following characters:
        ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
        However, the shape of these letters are either an X or a check mark.
        The letter "A" always is a check mark.
        The letter "B" always is an X.
        Each font feature has an letter associated with it. When the font feature is enabled,
        that letter is shown as a check mark. For example, when
        "kLowerCaseType / kLowerCaseSmallCapsSelector" is enabled, "S" is shown as a check
        mark.

        Here are the mappings of font features to letters:
        kLigaturesType / kCommonLigaturesOnSelector: C
        kLigaturesType / kContextualLigaturesOnSelector: D
        kLigaturesType / kRareLigaturesOnSelector: G
        kLigaturesType / kHistoricalLigaturesOnSelector: I
        kContextualAlternatesType / kContextualAlternatesOnSelector: L
        kVerticalPositionType / kInferiorsSelector: O
        kVerticalPositionType / kSuperiorsSelector: P
        kLowerCaseType / kLowerCaseSmallCapsSelector: S
        kUpperCaseType / kUpperCaseSmallCapsSelector: V
        kLowerCaseType / kLowerCasePetiteCapsSelector: T
        kUpperCaseType / kUpperCasePetiteCapsSelector: W
        kLetterCaseType / 14: Y
        kStyleOptionsType / kTitlingCapsSelector: a
        kNumberCaseType / kUpperCaseNumbersSelector: c
        kNumberCaseType / kLowerCaseNumbersSelector: d
        kNumberSpacingType / kProportionalNumbersSelector: f
        kNumberSpacingType / kMonospacedNumbersSelector: g
        kFractionsType / kDiagonalFractionsSelector: i
        kFractionsType / kVerticalFractionsSelector: j
        kVerticalPositionType / kOrdinalsSelector: Q
        kTypographicExtrasType / kSlashedZeroOnSelector: k
        kLigaturesType / kHistoricalLigaturesOnSelector: K
        kCharacterShapeType / kJIS1978CharactersSelector: m
        kCharacterShapeType / kJIS1983CharactersSelector: n
        kCharacterShapeType / kJIS1990CharactersSelector: o
        kCharacterShapeType / kJIS2004CharactersSelector: p
        kCharacterShapeType / kSimplifiedCharactersSelector: q
        kCharacterShapeType / kTraditionalCharactersSelector: r
        kTextSpacingType / kMonospacedTextSelector: t
        kTextSpacingType / kProportionalTextSelector: u
        kRubyKanaType / kRubyKanaOnSelector: v

        * FontWithFeatures/FontWithFeatures.xcodeproj/project.pbxproj:
        * FontWithFeatures/FontWithFeatures/FontCreator.cpp:
        (CFFBuilder::moveTo):
        (CFFBuilder::lineTo):
        (GLYFBuilder::GLYFBuilder):
        (GLYFBuilder::takeResult):
        (GLYFBuilder::moveTo):
        (GLYFBuilder::lineTo):
        (GLYFBuilder::closePath):
        (GLYFBuilder::writePoint):
        (GLYFBuilder::append16):
        (generateBoxCharString):
        (generateCheckCharString):
        (generateXCharString):
        (itemForGlyph):
        (Generator::generate):
        (Generator::insertSelector):
        (Generator::insertFeature):
        (Generator::generateFeatureDescription):
        (Generator::appendCFFTable):
        (Generator::appendGLYFTable):
        (Generator::appendLOCATable):
        (Generator::appendFEATTable):
        (Generator::appendMetamorphosisChain):
        (Generator::appendMORXTable):
        (Generator::appendHEADTable):
        (Generator::appendHMTXTable):
        (Generator::appendNameSubtable):
        (Generator::append2ByteASCIIString):
        (Generator::appendNAMETable):
        (generateFont):
        (CFFBuilder::curveToCubic): Deleted.
        (charStringForGlyph): Deleted.
        * FontWithFeatures/FontWithFeatures/FontCreator.h:
        * FontWithFeatures/FontWithFeatures/main.cpp:
        (constructFontWithTrueTypeFeature):
        (constructFontWithOpenTypeFeature):
        (drawText):
        (main):
        (drawTextWithFeature): Deleted.

2015-10-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190572, r190593, r190594, and
        r190639.
        https://bugs.webkit.org/show_bug.cgi?id=149897

        Breaks Mavericks build (Requested by litherum on #webkit).

        Reverted changesets:

        "Allow WKRetainPtrs to be used as keys in hashing data
        structures"
        https://bugs.webkit.org/show_bug.cgi?id=149762
        http://trac.webkit.org/changeset/190572

        "REGRESSION(189668?): http/tests/notifications/events.html
        flakily asserts or times out"
        https://bugs.webkit.org/show_bug.cgi?id=149218
        http://trac.webkit.org/changeset/190593

        "Prospective Mavericks build fix."
        http://trac.webkit.org/changeset/190594

        "Post-review cleanup after r190572."
        http://trac.webkit.org/changeset/190639

2015-10-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add autocleanups
        https://bugs.webkit.org/show_bug.cgi?id=149588

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Gtk/AutocleanupsTest.cpp: Added.
        (AutocleanupsTest::create):
        (AutocleanupsTest::testWebProcessAutocleanups):
        (registerTests):
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutocleanups.cpp: Added.
        (testUIProcessAutocleanups):
        (testWebProcessAutocleanups):
        (beforeAll):
        (afterAll):

2015-10-06  Brian Burg  <bburg@apple.com>

        Unreviewed, try to fix the iOS 8 build after r190368.

        On older versions, IOHIDEventCreateForceEvent is not available.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventType:]): Add another guard for force events.

2015-10-06  Keith Miller  <keith_miller@apple.com>

        Add gmalloc option to run-javascriptcore-tests.
        https://bugs.webkit.org/show_bug.cgi?id=149858

        Reviewed by Geoffrey Garen.

        run-javascriptcore-tests takes a new option --gmalloc with an optional string argument, the path to the gmalloc dylib.
        If no argument is provided then /usr/lib/libgmalloc.dylib is used by default.

        * Scripts/run-javascriptcore-tests:

2015-10-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Post-review cleanup after r190572.

        Unreviewed.

        * TestWebKitAPI/Tests/WebKit2/WKRetainPtr.cpp:

2015-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build correction.

        * TestWebKitAPI/PlatformWin.cmake: We don't need to link to all of these libraries. Most
        are soft-linked at runtime.

2015-10-06  Keith Miller  <keith_miller@apple.com>

        Fix run-javascriptcore-tests/run-jsc-stress-tests to work with rootless, add a --quick option and deprecate the Mozilla driver.
        https://bugs.webkit.org/show_bug.cgi?id=149815

        Reviewed by Filip Pizlo.

        Rootless has an issue where it will strip any environment variables that start with DYLD starting a perl/ruby/python script.
        Now, run-jsc-stress-tests takes an new argument, --env-vars, that will set the specified environment variables before
        running tests. Additionally, I added a quick option that only runs default and the NoCJITValidate versions of each test.
        Finally, I removed the calls to the mozilla jsDriver.pl since the run-jsc-stress-tests runner runs the same test suite
        so should just use one test runner.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        (runMozillaTests): Deleted.
        (defaultJsDriverArgsForMozillaTests): Deleted.
        * Scripts/run-jsc-stress-tests:

2015-10-06  Mark Salisbury  <mark.salisbury@hp.com>

        [GTK] Make update-webkitgtk-libs work behind firewall

        update-webkitgtk-libs can work behind a firewall with changes to
        a few packages.  Where outbound git and active FTP connections
        fail, using http protocol succeeds.  Most packages are
        already accessed using http.

        https://bugs.webkit.org/show_bug.cgi?id=148941

        Reviewed by Martin Robinson.

        Tools
        * gtk/jhbuild.modules:
            Replace git URLs with http.  Remove no longer used ftp repositories.
            Update argument for libxml2's autogen.sh script (--without-python
            is ignored; --with-python=no is correct).
        * jhbuild/jhbuild-wrapper:
            Instead of connecting to git://git.gnome.org/jhbuild, connect to
            http://git.gnome.org/browse/jhbuild.

2015-10-06  Daniel Bates  <dbates@webkit.org>

        Enable XSLT when building WebKit for iOS using the public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=149827

        Reviewed by Alexey Proskuryakov.

        Teach script configure-xcode-for-ios-development to copy the OS X XSLT headers to the iPhoneOS
        and iPhoneSimulator SDKs so as to support building WebKit for iOS with XSLT. A person must
        run this script before building WebKit for iOS or the build will fail because one or more XSLT
        headers cannot be found.

        * Scripts/configure-xcode-for-ios-development:
        (copyMissingXSLTHeadersToSDKIfNeeded): Added.

2015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(189668?): http/tests/notifications/events.html flakily asserts or times out
        https://bugs.webkit.org/show_bug.cgi?id=149218

        Reviewed by Alexey Proskuryakov.

        Because of r189668, WebKitTestRunner now tears down and recreates its WKNotificationManagerRef
        when the TestOptions change. Previously, WebNotificationProvider only could handle a single
        WKNotificationManagerRef. Because the ower of the WKNotificationManagerRef is reference counted,
        and AppKit internally retains some objects which end up retaining the WKNotificationManagerRef,
        the old WKNotificationManager may not be destroyed before the new one is created. Therefore,
        WebNotificationProvider must be updated to appropriately handle multiple
        WKNotificationManagerRefs in flight at the same time.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::~WebNotificationProvider):
        (WTR::WebNotificationProvider::showWebNotification):
        (WTR::WebNotificationProvider::closeWebNotification):
        (WTR::WebNotificationProvider::addNotificationManager):
        (WTR::WebNotificationProvider::removeNotificationManager):
        (WTR::WebNotificationProvider::simulateWebNotificationClick):
        (WTR::WebNotificationProvider::reset):
        * WebKitTestRunner/WebNotificationProvider.h:

2015-10-05  Daniel Bates  <dabates@apple.com>

        Disable Bitcode when building for iOS device
        https://bugs.webkit.org/show_bug.cgi?id=149818

        Reviewed by Alexey Proskuryakov.

        Xcode 7 generates bitcode for iOS device apps by default. Do not generate bitcode
        when building for iOS device.

        * Scripts/webkitdirs.pm:
        (XcodeOptions):

2015-10-05  Daniel Bates  <dabates@apple.com>

        [iOS] Make it possible to build WebKit using iphoneos SDK without a developer certificate installed
        https://bugs.webkit.org/show_bug.cgi?id=140828
        <rdar://problem/19520599>

        Reviewed by Alexey Proskuryakov.

        Support building WebKit for iOS device without an iOS Developer certificate installed. Otherwise,
        we will pass CODE_SIGN_IDENTITY="iPhone Developer: " to Xcode to find a iOS Developer certificate
        to use. To use a specific installed iOS Developer certificate, explicitly pass CODE_SIGN_IDENTITY
        to build-webkit.

        * Scripts/webkitdirs.pm:
        (XcodeOptions): Cleaned up code. When building for iOS device, pass to Xcode CODE_SIGN_IDENTITY="iPhone Developer: "
        to code sign using the installed iOS development certificate (if it exists - we assume there is only one such certificate).
        Otherwise, pass CODE_SIGN_IDENTITY="" and CODE_SIGNING_REQUIRED=NO to Xcode to disable code signing.
        (hasIOSDevelopmentCertificate): Added.

2015-10-05  Daniel Bates  <dabates@apple.com>

        DumpRenderTree built with public iOS SDK crashes under -[WebPreferences(WebPrivate) _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]
        https://bugs.webkit.org/show_bug.cgi?id=149766

        Reviewed by Alexey Proskuryakov.

        Create network storage testing session on iOS.

        Currently we do not create a network storage testing session on iOS. A network storage testing session always
        has an associated cookie store. When WebKit is built without USE(CFNETWORK), NetworkStorageSession::defaultStorageSession().cookieStorage()
        returns nullptr because the caller is expected to interact with NSHTTPCookieStorage instead of querying
        NetworkStorageSession for the cookie store. When WebKit is built with USE(CFNETWORK) accessing
        NetworkStorageSession::defaultStorageSession().cookieStorage() returns a valid cookie store (creating one if
        it does not exist). Instead we should make use of NetworkStorageSession::switchToNewTestingSession() to
        create a network storage testing session when building DumpRenderTree for iOS so as to ensure a consistent
        testing environment regardless of whether we built with USE(CFNETWORK). This will also make the behavior of
        DumpRenderTree on iOS more consistent with the behavior of DumpRenderTree on Mac.

        As a side effect of this change DumpRenderTree no longer crashes in -[WebPreferences(WebPrivate) _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]
        when WebKit is built without USE(CFNETWORK) because NetworkStorageSession::defaultStorageSession().cookieStorage()
        returns a non-null pointer to a cookie store.

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

2015-10-05  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS 8 build again, where -[UIApplication _enqueueHIDEvent:] is not
        available.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):

2015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow WKRetainPtrs to be used as keys in hashing data structures
        https://bugs.webkit.org/show_bug.cgi?id=149762

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKRetainPtr.cpp: Added.
        (TestWebKitAPI::TEST):

2015-10-05  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS 8 build, where -[UIApplication _enqueueHIDEvent:] is not
        available, and tidy up the #ifdefs in the UIKitSPI header.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _sendHIDEvent:]):
        * WebKitTestRunner/ios/UIKitSPI.h:

2015-10-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove duplicate entries in WebKitTestRunner_SOURCES
        https://bugs.webkit.org/show_bug.cgi?id=149792

        Reviewed by Martin Robinson.

        * WebKitTestRunner/PlatformGTK.cmake: Don't list build targets
        for WebKitTestRunner multiple times.

2015-10-04  Daniel Bates  <dabates@apple.com>

        Fix the Apple Internal iOS build after <http://trac.webkit.org/changeset/190515>
        (https://bugs.webkit.org/show_bug.cgi?id=149753)

        For now, support calling build-layouttestrelay without --ios-simulator so long
        as we are building on a Mac.

        * Scripts/build-layouttestrelay:

2015-10-04  Alexey Proskuryakov  <ap@apple.com>

        Support Trac 1.0.x XML timeline link format
        https://bugs.webkit.org/show_bug.cgi?id=149786

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._convertCommitInfoElementToObject):

2015-10-04  Alexey Proskuryakov  <ap@apple.com>

        Fix some errors on bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=149789

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus): We may not get to layout
        tests step, in which case layoutTestResults.tooManyFailures would raise an exception.

2015-10-04  Alexey Proskuryakov  <ap@apple.com>

        Bot watcher's dashboard builders should turn yellow when svn fails
        https://bugs.webkit.org/show_bug.cgi?id=149791

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.appendBuilderQueueStatus):
        (BuildbotBuilderQueueView.prototype.update):

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

        Add iOS 9 Simulator builders and testers to WebKit Bot Watcher's Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=149769

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-9 img.logo):

2015-10-02  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r190370): Speedometer spits out an extra console message
        https://bugs.webkit.org/show_bug.cgi?id=149720

        Unreviewed. Temporarily ignore the console error message.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._filter_output):

2015-10-02  Brent Fulgham  <bfulgham@apple.com>

        Provide "--no-ninja" option to avoid using Ninja
        https://bugs.webkit.org/show_bug.cgi?id=149757

        Reviewed by Alex Christensen.

        Add a new command line argument understood by webkitdirs.pm so
        that we can conditionally avoid using Ninja. This is an
        'opt-out' argument, so no existing Ninja users should be affected.
        
        * Scripts/webkitdirs.pm:
        (canUseNinja): Check for option and block ninja if present.

2015-10-02  Aakash Jain  <aakash_jain@apple.com>

        Flakiness dashboard should support OS X El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=149648

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/flakiness_dashboard.js: Fix the broken dashboard for ElCapitan.

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

        Fix run-webkit-tests --ios-simulator after <http://trac.webkit.org/changeset/190515>
        (https://bugs.webkit.org/show_bug.cgi?id=149753)

        For now, pass --ios-simulator.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._build_relay):

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

        Remove a "nullable" that breaks the iOS 8 build.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView scrollViewWillBeginZooming:withView:]):

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

        LayoutTestRelay is not built and archived when building for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=149753

        Reviewed by Alexey Proskuryakov and Andy Estes.

        Towards running layout tests on the iOS Simulator test bots, we need to teach scripts build-webkit
        and built-product-archive to build the Mac tool LayoutTestRelay and include this tool in the built
        product archive when building for iOS Simulator, respectively.

        * BuildSlaveSupport/built-product-archive:
        (main): Pass the full platform name (options.platform) to archiveBuiltProduct() so that it can
        differentiate between iOS device and iOS Simulator platforms.
        (webkitBuildDirectoryForConfigurationAndPlatform): Extracted logic to run the script webkit-build-directory
        from determineWebKitBuildDirectories() into this function so that it can be used by both
        determineWebKitBuildDirectories() and archiveBuiltProduct().
        (determineWebKitBuildDirectories): Moved logic to execute the script webkit-build-directory from here to
        webkitBuildDirectoryForConfigurationAndPlatform().
        (createZip): Added parameter embedParentDirectoryNameOnDarwin (defaults to False) to specify whether
        we should call ditto(1) with --keepParent to embed the parent directory name in the zip archive. This
        argument is only applicable when building on Darwin. We only pass embedParentDirectoryNameOnDarwin=True
        when making an archive for a Mac or iOS device build. For iOS Simulator builds we archive two directories
        and we do not want to keep the parent directory because it is a placeholder directory used as a workaround
        for the limitation that ditto(1) can only accept a single directory to archive on its command line.
        (archiveBuiltProduct): Modified to take the full platform name as an argument. Added logic for iOS.
        For iOS device builds we use the same logic as for a Mac build and archive the configuration-specific
        build directory. For iOS Simulator builds we archive the configuration-specific iOS build directory,
        LayoutTestRelay and LayoutTestRelay.dSYM (if it exists) from the configuration-specific Mac build.
        * Scripts/build-layouttestrelay:
            - Remove unnecessary include of Perl module POSIX.
            - Only build LayoutTestRelay when building for iOS Simulator (i.e. --ios-simulator is passed).
        * Scripts/build-webkit:
            - Invoke script build-layouttestrelay when building for iOS Simulator.

2015-10-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix.

        You cannot run 'run-webkit-tests' from the command line because it does not know
        to append the binary subdirectory (bin32/bin64). We don't see this on our builders
        because they explicitly set use the 'root' argument to provide the full path to
        the test binaries.

        * Scripts/webkitpy/port/win.py:
        (WinPort._build_path): Added.

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

        Reloading without content blockers doesn't apply to resource loads after the main frame finishes
        https://bugs.webkit.org/show_bug.cgi?id=149430
        rdar://problem/22742222

        Reviewed by Geoffrey Garen.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):
        Test what happens when you disable content blockers from the SPI.

2015-10-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix for run-api-tests

        * Scripts/run-api-tests:
        (testToolPaths): Windows run needs to specify the binary path.

2015-10-01  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows builders after <https://trac.webkit.org/changeset/190387>
        (https://bugs.webkit.org/show_bug.cgi?id=149695)

        Following r190424 we can now rely on webkit-build-directory to return the path to
        the correct configuration-specific build directory on Windows.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2015-10-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * Scripts/webkitdirs.pm:
        (setupAppleWinEnv): Use 64-bit build tools if available

2015-10-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix TestWebKitAPI build under CMake.

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake: Add missing link command
        for Psapi.lib.

2015-10-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix behavior of webkit-build-directory script
        https://bugs.webkit.org/show_bug.cgi?id=149718

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineConfigurationProductDir): Do not include the binary
        sub-directory in the configuration product directory output.
        (jscProductDir): Append correct binary path for Windows build.
        (setPathForRunningWebKitApp): Include properly binary subdirectories.
        (runSafari): Update for revised productDir behavior.
        (runMiniBrowser): Ditto.

2015-10-01  Alexey Proskuryakov  <ap@apple.com>

        Stop building LayoutTestRelay for now. It's a Mac project, but build-webkit tries to
        use iOS SDK, like with all the others.

        * Scripts/build-webkit:

2015-10-01  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS 9 Simulator testers

        Add dependency DumpRenderTree.app to target All of project DumpRenderTree so that we
        build DumpRenderTree.app, if applicable. Also, teach build-webkit to build project
        LayoutTestRelay when building for iOS Simulator.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/build-webkit:

2015-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Websites with invalid auth header keep loading forever
        https://bugs.webkit.org/show_bug.cgi?id=149710

        Reviewed by Martin Robinson.

        Add test case to check that we can authenticate sites with an
        empty realm.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
        (testWebViewAuthenticationEmptyRealm):
        (serverCallback):
        (beforeAll):

2015-10-01  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Make run-api-tests work with System Integrity Protection
        https://bugs.webkit.org/show_bug.cgi?id=149711
        rdar://problem/22928202

        Reviewed by Dan Bernstein.

        * Scripts/run-api-tests:
        (runTest):
        (archCommandLineArgumentsForRestrictedEnvironmentVariables):

2015-10-01  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build after <https://trac.webkit.org/changeset/190387>
        (https://bugs.webkit.org/show_bug.cgi?id=149695)

        For some reason built-product-archive hardcodes the assumption that we build for 32-bit Windows.
        For now, use the path to the top-level WebKit build directory instead of using the configuration-
        specific build directory.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2015-10-01  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix the openwebrtc and gst-plugins-openwebrtc build with clang
        https://bugs.webkit.org/show_bug.cgi?id=145837

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules:
        * efl/patches/openwebrtc-clang-warning-fix.patch: Added.
        * efl/patches/openwebrtc-gst-plugins-clang-warning-fix.patch: Added.

2015-10-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed. Fix the iOS build after r190407.

        * WebKitTestRunner/ios/IOKitSPI.h:

2015-10-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement keyboard event sending for iOS in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=149676

        Reviewed by Simon Fraser.

        Adds support for generating and sending key events in WebKitTestRunner. This is accomplished in a similar
        way as touch events, using IOHIDEvent machinery. Also adds callbacks to the UIScriptController JS API that
        allows us to run code when the keyboard is shown or hidden.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl: Adds the typeCharacter JS interface.
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowKeyboardCallback):
        (WTR::UIScriptController::didShowKeyboardCallback):
        (WTR::UIScriptController::setDidHideKeyboardCallback):
        (WTR::UIScriptController::didHideKeyboardCallback):
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::platformSetDidShowKeyboardCallback):
        (WTR::UIScriptController::platformSetDidHideKeyboardCallback):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]): Registers the TestRunnerWKWebView to listen to
                the notifications that the keyboard has been raised or lowered.
        (-[TestRunnerWKWebView _keyboardDidShow:]):
        (-[TestRunnerWKWebView _keyboardDidHide:]):
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.m:
        (-[HIDEventGenerator _sendIOHIDKeyboardEvent:usage:isKeyDown:]): Helper to send a HID keyboard event.
        (shouldWrapWithShiftKeyEventForCharacter): Helper used to generate key events.
        (hidUsageCodeForCharacter): Ditto.
        (-[HIDEventGenerator keyDown:completionBlock:]): Synthesizes and sends HIDKeyboardEvents, triggering
                a keyDown event in WebKit.
        * WebKitTestRunner/ios/IOKitSPI.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:

2015-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r190399.

        Tests are still failing even after r190362

        Reverted changeset:

        "Unreviewed. Unskip GTK+ user media unit tests after r190362."
        http://trac.webkit.org/changeset/190399

2015-10-01  Csaba Osztrogonác  <ossy@webkit.org>

        [jhbuild] switch to new upstream usrsctp library
        https://bugs.webkit.org/show_bug.cgi?id=149494

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2015-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Unskip GTK+ user media unit tests after r190362.

        They should pass now.

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

2015-09-30  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the build after <https://trac.webkit.org/changeset/190387>
        (https://bugs.webkit.org/show_bug.cgi?id=149695)

        * BuildSlaveSupport/built-product-archive:
        (determineWebKitBuildDirectories): Substitute _configurationBuildDirectory for _buildDirectory.
        (extractBuiltProduct): Substitute _topLevelBuildDirectory for _buildDirectory.

2015-09-30  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after <https://trac.webkit.org/changeset/190387>
        (https://bugs.webkit.org/show_bug.cgi?id=149695)

        Actually, we need to pass --configuration to script webkit-build-directory to have
        it return the path to the configuration-specific build directory.

        * BuildSlaveSupport/built-product-archive:
        (determineWebKitBuildDirectories):

2015-09-30  Daniel Bates  <dabates@apple.com>

        built-product-archive archives incorrect build directory for iOS port
        https://bugs.webkit.org/show_bug.cgi?id=149695

        Reviewed by Darin Adler.

        Fixes an issue where the script built-product-archive archives a non-existent
        build directory for the iOS port. Without loss of generality, the script assumes
        the path to the Release configuration build for iOS is in directory WebKitBuild/Release.
        But the built products for this configuration are in directory WebKitBuild/Release-iphonesimulator.

        Currently the script built-product-archive calls `webkit-build-directory --top-level ...`
        to determine the top-level build directory and computes the configuration-specific
        build directory to be the concatenation of the the top-level build directory and
        the configuration (e.g. Release). This is incorrect. Instead we should call
        webkit-build-directory omitting the flag --top-level to compute the path to the
        configuration-specific build directory.

        * BuildSlaveSupport/built-product-archive: Fix up the style such that we use single quoted literals.
        (main): Renamed global variable _buildDirectory to _topLevelBuildDirectory to better describe
        its purpose and added global variable _configurationBuildDirectory to store the path
        to the configuration-specific build directory. Ensure that we have a non-empty string
        for both the top-level and configuration-specific build directories.
        (determineWebKitBuildDirectories): Formerly named determineWebKitBuildDirectory.
        Compute the configuration-specific build directory and store it in the global variable
        _configurationBuildDirectory.
        (archiveBuiltProduct): Modified to use _configurationBuildDirectory.
        (extractBuiltProduct): Modified to use _configurationBuildDirectory and _topLevelBuildDirectory
        as needed.
        (determineWebKitBuildDirectory): Deleted.

2015-09-30  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] css3/device-adapt/* tests failed after r190335.
        https://bugs.webkit.org/show_bug.cgi?id=149655

        Reviewed by Simon Fraser.

        device-adapt/* tests need the fixedLayout option but useFixedLayout option is
        overwritten by updatePlatformSpecificViewOptionsForTest after r190335.

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::shouldUseFixedLayout):

2015-09-30  Dewei Zhu  <dewei_zhu@apple.com>

        Extend JetStream timeout for slow devices.

        Reviewed by Chris Dumez.

        Extend JetStream timeout to 20 minutes.

        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan:

2015-09-30  Daniel Bates  <dabates@apple.com>

        Rename iOS builders/testers to include version
        https://bugs.webkit.org/show_bug.cgi?id=149685

        Reviewed by Simon Fraser.

        Substitute "Apple iOS 9" for "Apple iOS" in the names of iOS builders/testers so as
        make it clear to a reader the version of iOS these builders/testers are using.

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

2015-09-30  Daniel Bates  <dabates@apple.com>

        Add iOS criterion for triggering a build
        https://bugs.webkit.org/show_bug.cgi?id=149679

        Rubber-stamped by Alexey Proskuryakov.

        First pass at defining criterion for triggering an iOS build.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2015-09-29  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Allow tests to generate user gestures for UI testing
        https://bugs.webkit.org/show_bug.cgi?id=149653

        Reviewed by Tim Horton.

        Expose functionality in UIScriptController to allow for testing single- and double-tap,
        and to listen for completion of scrolling and zooming in the WKWebView.
        
        Tap generation is done using synthetic IOHIDEvents, via a new HIDEventGenerator class
        which hides the complexity of creating these events. Event dispatch is asynchronous.
        We detect when the last event has been handled by dispatching a vendor-specific event,
        which is detected via -_handleHIDEvent: in our UIApplication subclass.
        
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: Link with IOKit.
        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl: Two new properties
        for 'will begin zooming' and 'did end zooming' callbacks, and functions to dispatch
        single and double taps.
        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::registerCallback): Used to store the callbacks for zooming.
        Unlike the "task" callbacks, these are persistent, but we store them in the same hash map.
        (UIScriptContext::unregisterCallback):
        (UIScriptContext::callbackWithID):
        (UIScriptContext::fireCallback):
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillBeginZoomingCallback): Cross-platform code.
        (WTR::UIScriptController::willBeginZoomingCallback): Ditto.
        (WTR::UIScriptController::setDidEndZoomingCallback):
        (WTR::UIScriptController::didEndZoomingCallback):
        (WTR::UIScriptController::singleTapAtPoint): Non-iOS stub.
        (WTR::UIScriptController::doubleTapAtPoint): Ditto.
        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h: Properties for the zooming callbacks.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView zoomToScale:animated:completionHandler:]): Dispatch the zooming callback.
        (-[TestRunnerWKWebView scrollViewWillBeginZooming:withView:]): Ditto.
        (-[TestRunnerWKWebView scrollViewDidEndZooming:withView:atScale:]): Ditto.
        (-[TestRunnerWKWebView onDidEndZooming:]): Deleted.
        * WebKitTestRunner/ios/HIDEventGenerator.h: Copied from Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h.
        * WebKitTestRunner/ios/HIDEventGenerator.m: Added.
        (simpleDragCurve):
        (calculateNextLocation):
        (delayBetweenMove):
        (+[HIDEventGenerator sharedHIDEventGenerator]):
        (+[HIDEventGenerator nextEventCallbackID]):
        (-[HIDEventGenerator init]):
        (-[HIDEventGenerator _createIOHIDEventType:]):
        (-[HIDEventGenerator _sendHIDEvent:]):
        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):
        (-[HIDEventGenerator _updateTouchPoints:count:]):
        (-[HIDEventGenerator touchDownAtPoints:touchCount:]):
        (-[HIDEventGenerator touchDown:touchCount:]):
        (-[HIDEventGenerator touchDown:]):
        (-[HIDEventGenerator liftUpAtPoints:touchCount:]):
        (-[HIDEventGenerator liftUp:touchCount:]):
        (-[HIDEventGenerator liftUp:]):
        (-[HIDEventGenerator moveToPoints:touchCount:duration:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
        (-[HIDEventGenerator tap:completionBlock:]):
        (-[HIDEventGenerator doubleTap:completionBlock:]):
        (-[HIDEventGenerator twoFingerTap:completionBlock:]):
        (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
        (-[HIDEventGenerator pinchCloseWithStartPoint:endPoint:duration:completionBlock:]):
        (-[HIDEventGenerator pinchOpenWithStartPoint:endPoint:duration:completionBlock:]):
        (-[HIDEventGenerator markerEventReceived:]):
        * WebKitTestRunner/ios/IOKitSPI.h: Added.
        * WebKitTestRunner/ios/UIKitSPI.h: Copied from Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::globalToContentCoordinates):
        (WTR::UIScriptController::singleTapAtPoint):
        (WTR::UIScriptController::doubleTapAtPoint):
        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp _handleHIDEvent:]):

2015-09-30  Dana Burkart  <dburkart@apple.com>

        git-add-reviewer should trim trailing spaces/newlines
        https://bugs.webkit.org/show_bug.cgi?id=149513

        Reviewed by Darin Adler.

        * Scripts/git-add-reviewer:
        (nonInteractive):

2015-09-30  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r190262): User media unit test failures after r190262
        https://bugs.webkit.org/show_bug.cgi?id=149580

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Fix parameter
          order to WKUserMediaPermissionRequestAllow.

2015-09-30  Daniel Bates  <dabates@apple.com>

        Add iOS builders and testers
        https://bugs.webkit.org/show_bug.cgi?id=149549

        Reviewed by Alexey Proskuryakov.

        Adds definitions for 64-bit iOS Simulator release builders and testers and a iOS device
        builder that builds universal release binaries for armv7, armv7s and arm64 architectures.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add definitions for builders and testers.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Update unit tests.

2015-09-30  Timothy Hatcher  <timothy@apple.com>

        Give WebKitLauncher the get-task-allow entitlement to allow it to work on El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=149674

        Reviewed by Lucas Forschler.

        * WebKitLauncher/WebKitLauncher.entitlements: Added.
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2015-09-30  Jason Marcell  <jmarcell@apple.com>

        BuildbotQueueView.prototype._appendPendingRevisionCount should skip repositories that don't
        have an associated trac instance.
        https://bugs.webkit.org/show_bug.cgi?id=149673

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Skip repositories that don't
        have an associated trac instance.

2015-09-30  Daniel Bates  <dabates@apple.com>

        Prioritize testing latest build request on iOS test bots
        https://bugs.webkit.org/show_bug.cgi?id=149669

        Reviewed by Darin Adler.

        We should prioritize testing of the latest build request on the iOS test bots
        as we do for Mac and Windows test bots.

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

2015-09-30  Daniel Bates  <dabates@apple.com>

        Add buildbot category for iOS builders and testers
        https://bugs.webkit.org/show_bug.cgi?id=149667

        Reviewed by Darin Adler.

        Group iOS builders and testers under category iOS and add dashboard and console hyperlinks
        for iOS to the build.webkit.org home page.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2015-09-30  Daniel Bates  <dabates@apple.com>

        Actually fix the Mac builders build after <http://trac.webkit.org/changeset/190219>
        (https://bugs.webkit.org/show_bug.cgi?id=149539)

        I inadvertently didn't remove the ONLY_ACTIVE_ARCH=NO flag when building on a Mac
        in <http://trac.webkit.org/changeset/190351>.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2015-09-30  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mac builders build after <http://trac.webkit.org/changeset/190219>
        (https://bugs.webkit.org/show_bug.cgi?id=149539)

        {32, 64}-bit Mac builders should not try to build project {Plugin.64, Plugin.32},
        respectively; only pass ONLY_ACTIVE_ARCH=NO when building for iOS.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2015-09-30  Lucas Forschler  <lforschler@apple.com>

        bot210 was configured for a queue instead of bot126.
        
        Unreviewed config.json fix.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2015-09-30  Lucas Forschler  <lforschler@apple.com>

        Bring El Capitan buildbot infrastructure online.
        https://bugs.webkit.org/show_bug.cgi?id=149605
        
        Reviewed by Darin Adler.

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

2015-09-30  Tomas Popela  <tpopela@redhat.com>

        [GTK] Deprecation warnings in DOMNodeTest
        https://bugs.webkit.org/show_bug.cgi?id=149663

        After the webkit_dom_document_get_elements_by_tag_name deprecation we
        need to update the tests to use webkit_dom_document_query_selector_all
        to avoid compilation warnings.

        Also add a new test for webkit_dom_document_get_elements_by_tag_name_as_html_collection
        (the suggested replacement for the deprecated function).

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testTagNamesNodeList):
        (WebKitDOMNodeTest::testTagNamesHTMLCollection):
        (registerTests):
        (WebKitDOMNodeTest::testTagNames): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp:
        (prepareDOMForTagNamesTests):
        (testWebKitDOMNodeTagNamesNodeList):
        (testWebKitDOMNodeTagNamesHTMLCollection):
        (beforeAll):
        (testWebKitDOMNodeTagNames): Deleted.

2015-09-29  Simon Fraser  <simon.fraser@apple.com>

        WebKitTestRunner fails to apply "useFlexibleViewport" when it's specified in a file comment
        https://bugs.webkit.org/show_bug.cgi?id=149650

        Reviewed by Tim Horton.
        
        TestInvocation::invoke() consulted shouldMakeViewportFlexible(), but that only
        looks at the file path, and not the custom options that come from file comments.
        
        Fix by computing TestOptions before making the TestInvocation, and setting them
        as const TestInvocation data. This meant changing various call sites to take
        the std::string pathOrURL, rather than the TestInvocation itself.
        
        Also initialize TestInvocation with a WKURLRef, rather than a std::string.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::testPath):
        (WTR::createTestURL):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::testOptionsForTest):
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::createWKURL): Deleted.
        (WTR::TestInvocation::shouldMakeViewportFlexible): Deleted.
        (WTR::TestInvocation::shouldUseFixedLayout): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::options):
        * WebKitTestRunner/TestOptions.cpp: Copied from Tools/WebKitTestRunner/TestOptions.h.
        (WTR::pathContains):
        (WTR::shouldMakeViewportFlexible):
        (WTR::shouldUseFixedLayout):
        (WTR::isSVGTestPath):
        (WTR::isHiDPITestPath):
        (WTR::TestOptions::TestOptions):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::pathContains):
        (WTR::shouldUseFixedLayout):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest):

2015-09-29  Aakash Jain  <aakash_jain@apple.com>

        Flakiness dashboard should support OS X El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=149648

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/app.yaml: We do not need to maintain SVN revision here because of 
        difference between new appscale and old Google App Engine implementation.
        * TestResultServer/app.yaml: Same.
        * TestResultServer/static-dashboards/builders.jsonp: Added OSX El Capitan support.

2015-09-29  Daniel Bates  <dabates@apple.com>

        configure-xcode-for-ios-development does not work with Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=149640

        Reviewed by Alexey Proskuryakov.

        When Xcode 7 is installed, running configure-xcode-for-ios-development dies with an error
        because it cannot find the Xcode specification files for iOS simulator and device. These
        files have moved to a new location in Xcode 7 distribution. Moreover we must add the
        relevant definitions to the Xcode 7 specification files directly as opposed to creating
        new specification files with the added definitions (as we did in older versions of Xcode)
        in order for Xcode 7 to honor these definitions.

        * Scripts/configure-xcode-for-ios-development: Sorted forward declarations.
        (updateXcodeSpecificationFilesForSDKIfNeeded): Added.
        (updateXcode7SpecificationFile): Added.
        (createLegacyXcodeSpecificationFilesForSDKIfNeeded): Formerly named createXcodeSpecificationFilesForSDKIfNeeded.
        (writeXcodeSpecification): Moved congratulations line to caller so as to write out the
        appropriate success message.
        (mergeXcodeSpecificationWithSpecificationAndId): Formerly named createXcodeSpecificationFromSpecificationAndId.
        (createXcodeSpecificationFilesForSDKIfNeeded): Deleted.
        (createXcodeSpecificationFromSpecificationAndId): Deleted.

2015-09-29  Brent Fulgham  <bfulgham@apple.com>

        [Win] Allow 'prepare-ChangeLog' to be used without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=149639

        Reviewed by Alex Christensen.

        * Scripts/VCSUtils.pm:
        (exitStatus): Use 'isWindows()' method.
        (isSVNVersion16OrNewer): 'eval' is not needed here, and just causes
        an error. This method could probably just go away.
        (normalizePath): Leave Windows (or Unix) paths as platform paths, rather than
        always changing to Unix style. 
        (unixPath): Added. Needed so Windows can always show a Unix path in the
        ChangeLog file.
        (changeLogName): Work around the fact that 'getpwuid' is not available on
        a pure Windows build of Perl.
        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Normalize path received from 'svn' in case it's a Unix
        path on Windows.
        (svnUpdateCommand): Added helper function. Needed because Windows Perl does not
        support using arrays for 'open' arguments.
        (resolveChangeLogsPath): Ditto.
        (resolveConflictedChangeLogs): Use new helper functions.
        (generateNewChangeLogs): Force Windows to use Unix paths in ChangeLog output.
        (diffCommand): Use double-quotes for paths, since Windows doesn't understand single
        quotes. Unix systems are happy either way.
        (statusCommand): Ditto.
        * Scripts/webkitdirs.pm:
        (launcherName): Drive-by fix. WinLauncher was renamed to MiniBrowser some time ago.

2015-09-29  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed 64-bit build fix after switch to CMake.

        * Scripts/webkitdirs.pm:
        (determineIsWin64FromArchitecture): Added.

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        WebKitTestRunner always takes the snapshots from the UI process
        (expect for IOS), so in the case of printing, the layout in the
        web view is not the expected one. When printing, we need to take
        the snapshot in the web process and ensure it's rendered with a
        PrintContext.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): When dumping pixels, pass
        kWKSnapshotOptionsPrinting option to
        WKBundlePageCreateSnapshotWithOptions() when printing.

2015-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WTR] Pixel tests generate the snapshots twice in Web and UI processes
        https://bugs.webkit.org/show_bug.cgi?id=149595

        Reviewed by Tim Horton.

        All ports except IOS implement
        PlatformWebView::windowSnapshotImage() to generate the snapshot
        for the pixel tests in the UI process. But we are still generating
        a snapshot for pixel tests in the Web process too, that is passed
        to the UI process but ignored.
        Whether a pixel result is needed or not, is only known by the web
        process depending on whether the test called dumpAsText with
        dumpPixels == true or not. Since the pixels are now dump in the UI
        process, we need to pass that information to the UI process when
        the test is done. For that we set a PixelResultIsPending bool
        parameter to the Done message, and we only add the PixelResult
        when UI process doesn't need to generate the pixels dump.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): Set
        m_pixelResultIsPending to false on reset.
        (WTR::InjectedBundle::done): Add PixelResultIsPending parameter to the
        Done message, and set the PixelResult if m_pixelResultIsPending is false.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::setPixelResult): Set m_pixelResultIsPending to false.
        (WTR::InjectedBundle::setNeedsPixelResult): Set m_pixelResultIsPending.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Only create a snapshot for IOS
        port.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults): Use either the pixel result
        from the web process or generate a pixel result from the web view
        if need it.
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h: Add SnapshotResultType enum
        parameter to dumpPixelsAndCompareWithExpected, since the snapshot
        is created by the caller now, but the CG implementation needs to
        know if it's a Web or UI process snapshot.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Create a
        cairo surface for the given image.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Create a
        CGContext for the given image.

2015-09-28  Dean Johnson  <dean_johnson@apple.com>

        Fix JS errors on dashboard metrics page
        https://bugs.webkit.org/show_bug.cgi?id=149608

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js: Updated to use Settings.
        (initPlatformsByFamily): 
        (updateHiddenPlatforms):
        (parsePlatformFamily): Deleted.
        (updateToggleButtons): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsMain.js:
        (updateHiddenPlatforms): Added to remove errors.
        (initPlatformsByFamily): Added to remove errors.
        (unhiddenQueues): Updated to use Settings.
        (documentReady): Added logic to add toggle buttons to the settings menu.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js:
        (Settings.prototype.parsePlatformFamily): Moved duplicate logic from Main.js and
        MetricsMain.js to Settings.
        (Settings.prototype.updateToggleButtons): Moved duplicate logic from Main.js and
        MetricsMain.js to Settings.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js:
        (QueueView.prototype._updateHiddenState): Updated to use Settings.

2015-09-28  Aakash Jain  <aakash_jain@apple.com>

        Appscale query fails because of missing index
        https://bugs.webkit.org/show_bug.cgi?id=149609

        Reviewed by Darin Adler.

        * QueueStatusServer/index.yaml: Added the required index.

2015-09-28  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix the 64-bit build after switch to cmake.

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Use correct arguments for cmake to
        run a 64-bit build.

2015-09-28  Brent Fulgham  <bfulgham@apple.com>

        [Win] Allow Windows to run test-webkitpy without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=149602

        Reviewed by Alex Christensen.

        These changes mostly shift from hard-coded paths using UNIX-style
        separators to Python's "os.path.join" syntax that uses the correct
        path separator for each platform.
        
        * Scripts/webkitpy/common/system/path.py:
        (cygpath): Don't pass paths through Cygpath on native Windows.
        * Scripts/webkitpy/port/win.py:
        (WinPort._path_to_apache): Use os.path.join.
        (WinPort._ntsd_location): Support 64-bit environment (ProgramW6432 doesn't exist
        in 64-bit environments).
        * Scripts/webkitpy/style/checker.py: Use os.path.join.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier.assertNoCheck): Use os.path.join.
        (GlobalVariablesTest.test_path_rules_specifier): Ditto.
        (GlobalVariablesTest): Ditto.
        (GlobalVariablesTest.test_max_reports_per_category): Ditto.
        (CheckerDispatcherSkipTest.test_should_skip_with_warning): Ditto.
        (CheckerDispatcherDispatchTest.test_js_paths): Ditto.
        (CheckerDispatcherDispatchTest.test_json_paths): Ditto.
        (CheckerDispatcherDispatchTest.test_python_paths): Ditto.
        (CheckerDispatcherDispatchTest.test_text_paths): Ditto.
        (CheckerDispatcherDispatchTest.test_xml_paths): Ditto.
        (StyleProcessor_CodeCoverageTest._create_carriage_checker_class): Ditto.
        (StyleProcessor_CodeCoverageTest): Ditto.
        (StyleProcessor_CodeCoverageTest.test_should_process__skip_without_warning): Ditto.
        (StyleProcessor_CodeCoverageTest.test_should_process__skip_with_warning): Ditto.
        (StyleProcessor_CodeCoverageTest.test_should_process__true_result): Ditto.
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Uses os.path.join rather than
        manual string concatenation of paths.

2015-09-28  Csaba Osztrogonác  <ossy@webkit.org>

        Add bugzilla addresses of committers to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=149520

        Reviewed by Darin Adler.

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

2015-09-28  Csaba Osztrogonác  <ossy@webkit.org>

        validate-committer-lists -b shouldn't need edituser privileges
        https://bugs.webkit.org/show_bug.cgi?id=149519

        Reviewed by Darin Adler.

        * Scripts/validate-committer-lists:
        (CommitterListBugzillaChecker._has_invalid_bugzilla_email):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries.is_invalid_bugzilla_email):
        (BugzillaQueries): Deleted.
        (BugzillaQueries.fetch_logins_matching_substring): Deleted.

2015-09-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Gardening: skip media stream tests failing after r190262.

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

2015-09-25  Alexey Proskuryakov  <ap@apple.com>

        [Mac] USE_INTERNAL_SDK is used undefined in tools projects
        https://bugs.webkit.org/show_bug.cgi?id=149571

        Reviewed by Dan Bernstein.

        Use the same pattern as in Source directory configurations (so, also get rid of AspenFamily.xcconfig). 

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/Base.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:
        * WebKitTestRunner/iOS.xcconfig: Removed.

2015-09-25  Eric Carlson  <eric.carlson@apple.com>

        Clean up user media request internal API
        https://bugs.webkit.org/show_bug.cgi?id=149527

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack): Update for API changes.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Ditto.

2015-09-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Add viewport tests and fix runUIScript() timing issues
        https://bugs.webkit.org/show_bug.cgi?id=149577

        Reviewed by Tim Horton.
        
        When calling testRunner.runUIScript() from a page load event, the script could run
        in the UI process before the current remote layer tree transaction had been handled
        there. This meant that runUIScript() could query state which was about to change.
        
        Fix by delaying the execution of the UI script until a layer tree transaction has
        been handled by the UI process, leveraging the existing DrawingAreaProxy::dispatchAfterEnsuringDrawing().

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::runUISideScriptAfterUpdateCallback):
        * WebKitTestRunner/TestInvocation.h:

2015-09-25  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Media tests start to time out after a few days of bot uptime
        https://bugs.webkit.org/show_bug.cgi?id=149468

        Reviewed by Darin Adler.

        Delete cache directory in addition to the temporary one. Don't delete /private/tmp/MediaCache,
        as it's not longer used by tests. Set TMPDIR and DIRHELPER_USER_DIR_SUFFIX to make
        all temporary and cache files go to a custom location.

        * Scripts/webkitpy/port/base.py:
        * Scripts/webkitpy/port/driver.py:
        * Scripts/webkitpy/port/mac.py:
        * Scripts/webkitpy/port/win.py:
        (WinPort._driver_tempdir_for_environment): Deleted unused function.

2015-09-25  Dan Bernstein  <mitz@apple.com>

        Removed MiniBrowser.entitlements.

        Rubber-stamped by Anders Carlsson.

        The entitlements weren’t used anyway.

        * MiniBrowser/MiniBrowser.entitlements: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:

2015-09-24  Daniel Bates  <dabates@apple.com>

        Add WebKitSystemInterface for iOS 9.0
        https://bugs.webkit.org/show_bug.cgi?id=149550

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-09-24  Daniel Bates  <dabates@apple.com>

        Support building for arbitrary architectures
        https://bugs.webkit.org/show_bug.cgi?id=149539

        Reviewed by Alexey Proskuryakov.

        Teach buildbot to pass the architectures associated with the builder to build-webkit
        when building on OS X and iOS. As a side effect of this change we now support building
        universal binaries when multiples architectures are specified.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileWebKit.start):

2015-09-24  Daniel Bates  <dabates@apple.com>

        Fix the build after <http://trac.webkit.org/changeset/190212>
        (http://trac.webkit.org/changeset/190212)

        I inadvertently did not remove the fullPlatform argument from one of the callers of archiveBuiltProduct().

        * BuildSlaveSupport/built-product-archive:
        (main):

2015-09-24  Daniel Bates  <dabates@apple.com>

        Support running unit tests on iOS Simulator test bot
        https://bugs.webkit.org/show_bug.cgi?id=149536

        Reviewed by Alexey Proskuryakov.

        Implements support for running unit tests on a iOS test bot. At the time of writing,
        the script run-api-tests supports running unit tests on Mac, Windows and iOS Simulator.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunUnitTests.start): Append appropriate command line flag when invoking script run-api-tests.
        (TestFactory.__init__): Add step RunUnitTests when the test bot is for the iOS Simulator platform.

2015-09-24  Daniel Bates  <dabates@apple.com>

        Add support infrastructure for OpenSource iOS builders and testers
        https://bugs.webkit.org/show_bug.cgi?id=149534

        Reviewed by Darin Adler.

        Towards setting up OpenSource iOS build bots, teach buildbot and its support
        scripts about iOS.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (appendCustomBuildFlags): Require the caller to pass parameter fullPlatform and append
        --ios-simulator or --device for a builder/tester whose full platform name begins with
        "ios-simulator" or "ios", respectively.
        (RunJavaScriptCoreTests.start): Pass the full platform name to appendCustomBuildFlags().
        * BuildSlaveSupport/built-product-archive:
        (main): Pass the full platform name to determineWebKitBuildDirectory().
        (determineWebKitBuildDirectory): Call script webkit-build-directory with the appropriate
        command line flag when building for iOS.
        (archiveBuiltProduct): Use the same logic for iOS as we do for Mac. Also, remove unused
        parameter fullPlatform. This parameter was originally added in r125066 to support the
        Chromium Android port, which has since been removed from the OpenSource WebKit Project.
        (extractBuiltProduct): Use the same logic for iOS as we do for Mac.
        * BuildSlaveSupport/clean-build:
        (main): Call script webkit-build-directory with the appropriate command line flag when
        building for iOS.
        * BuildSlaveSupport/delete-stale-build-files:
        (main): Use the same logic for iOS as we do for Mac.
        (webkitBuildDirectory): Call script webkit-build-directory with the appropriate command line
        flag when building for iOS.
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults): Use the same logic for iOS as we do for Mac.

2015-09-24  Daniel Bates  <dabates@apple.com>

        Remove Chromium-specific changes to script built-product-archive
        https://bugs.webkit.org/show_bug.cgi?id=149530

        Rubber-stamped by Csaba Osztrogonác.

        Reverts changes made in r113074 and r113067 to support Chromium testers. The
        Chromium code has long since been removed from the OpenSource WebKit Project.

        * BuildSlaveSupport/built-product-archive:
        (createZipManually):
        (createZip):
        (archiveBuiltProduct):

2015-09-24  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

2015-09-24  Mark Lam  <mark.lam@apple.com>

        Unreviewed. Make Lucas Forschler a WebKit reviewer.

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

2015-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM API breaks after r190120.

        Bring back code removed in r169931 to handle documentation of
        deleted classes.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator):
        (WebKitDOMDocGenerator.write_deleted_classes):
        (WebKitDOMDocGenerator.generate):
        (write_deleted_classes):
        (WebKitDOMDocGeneratorSections._deleted_class):
        (WebKitDOMDocGeneratorSections._deleted_class.in):
        (WebKitDOMDocGeneratorSections.write_deleted_classes):
        (WebKitDOMDocGeneratorSections.write_deleted_classes.with):

2015-09-23  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] [Font Features] Implement font-variant-*
        https://bugs.webkit.org/show_bug.cgi?id=148413

        Reviewed by Darin Adler.

        Update test font to use "lnum" feature.

        * FontWithFeatures/FontWithFeatures/FontCreator.cpp:
        (Generator::appendGSUBTable):

2015-09-22  Andy Estes  <aestes@apple.com>

        ContentFiltering.AllowDownloadAfterAddData is very flaky
        https://bugs.webkit.org/show_bug.cgi?id=148885
        <rdar://problem/22729563>

        Reviewed by Alexey Proskuryakov.

        The AllowDownload* tests were relying on -_downloadDidStart: being called before -webView:didFinishNavigation:,
        but there is no guarantee of this. For tests that should allow a download, spin the runloop until
        -_downloadDidStart: is called. The test will now timeout on failure, but will no longer produce false failures.

        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        (downloadTest):

2015-09-22  Alexey Proskuryakov  <ap@apple.com>

        Mavericks: Media tests start to time out after a few days of bot uptime
        https://bugs.webkit.org/show_bug.cgi?id=149468

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/port/base.py:
        * Scripts/webkitpy/port/driver.py:
        * Scripts/webkitpy/port/mac.py:

2015-09-22  Nan Wang  <n_wang@apple.com>

        Unreviewed, add myself to the committers list.

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

2015-09-21  Simon Fraser  <simon.fraser@apple.com>

        Remove 'nullable' to fix older iOS builds.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView scrollViewDidEndZooming:withView:atScale:]):

2015-09-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Show tiled drawing debug overlay on Windows
        https://bugs.webkit.org/show_bug.cgi?id=149426

        Reviewed by Dean Jackson.

        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc: Add new menu option.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h: Ditto.
        * MiniBrowser/win/Common.cpp:
        (::ToggleMenuItem): Recognize new menu item and toggle the 'showTiledScrollingIndicator'
        flag if needed.
        * MiniBrowser/win/MiniBrowser.h: Update to use new IWebPreferencesPrivate3 class.

2015-09-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use command-line argument to launch in regular or High DPI mode.
        https://bugs.webkit.org/show_bug.cgi?id=149417

        Reviewed by Dean Jackson.

        * MiniBrowser/win/Common.cpp:
        (parseCommandLine): Ignore the '--highDPI' argument. It's used at the
        very start of execution, before the MiniBrowser.dll is loaded.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (shouldUseHighDPI): Check for '--highDPI', and use this mode if
        present. On WinCairo, always use High DPI.

2015-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        32-bit Mac build fix attempt after r190065.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:

2015-09-21  Alexey Proskuryakov  <ap@apple.com>

        [OS X] Update for Xcode 7.0 on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=149389

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.h:
        Removed unneeded declarations - conforming to a protocol is sufficient.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.mm:
        Changed the definitions to be compiled whenever the SDK requires it (so we will have
        dead code compiled in when building for 10.10 with 10.11 SDK, somewhat unfortunately).

2015-09-21  Simon Fraser  <simon.fraser@apple.com>

        Add the ability for tests to run script in the UI process in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=149356

        Reviewed by Tim Horton.

        This change adds testRunner.runUIScript(script, callback), which allows a test
        to execute script in a JSContext which runs in the UI process. That context
        has bindings exposed through the UIScriptController interface; currently one test
        function, and some iOS-specific functions are included. UIScriptController can be
        async with a callback, and runUIScript() itself is asynchronous. When the UI 
        script is complete, it calls uiController.uiScriptComplete(result), where 'result'
        is a string passed back to the web process, and given to the runUIScript()
        callback function.
        
        Thanks to Gyuyoung Kim for help with the Gtk/Efl build.

        * WebKitTestRunner/DerivedSources.make: Build UIScriptController.idl.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Add runUIScript().
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): When the UI-side script is
        complete, call back into TestRunner.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::nextUIScriptCallbackID):
        (WTR::TestRunner::runUIScript): Post a message to the injected bundle to run the UI script.
        (WTR::TestRunner::runUIScriptCallback): When the UI script is done, execute its callback function.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::testOptionsForTest): Support "useFlexibleViewport" as a test argument.
        (WTR::shouldUseFixedLayout): Deleted. Moved to a TestInvocation function.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::shouldUseFixedLayout):
        (WTR::TestInvocation::shouldUseThreadedScrolling):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::runUISideScript): Run the UI-side script!
        (WTR::TestInvocation::uiScriptDidComplete): Send a message back to the injected bundle.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h: Copied from Tools/WebKitTestRunner/TestOptions.h.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm: Added.
        (-[TestRunnerWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        (-[TestRunnerWKWebView zoomToScale:animated:completionHandler:]):
        (-[TestRunnerWKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[TestRunnerWKWebView onDidEndZooming:]): Allow a test to hook into the end of zooming.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView): Make a TestRunnerWKWebView on iOS.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm: Added.
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::zoomScale):
        (WTR::UIScriptController::minimumZoomScale):
        (WTR::UIScriptController::maximumZoomScale):
        (WTR::UIScriptController::contentVisibleRect):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]): Deleted.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest):
        (WTR::shouldUseThreadedScrolling): Deleted. Moved to TestInvocation.
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.h:
        * WebKitTestRunner/uiscriptcontext/UIScriptContext.cpp: Added. Owns the JS context in the UI process.
        (UIScriptContext::UIScriptContext):
        (UIScriptContext::~UIScriptContext):
        (UIScriptContext::runUIScript): Entrypoint to running the UI script. If the script didn't do anything
        asynchronous, call the callback.
        (UIScriptContext::nextTaskCallbackID):
        (UIScriptContext::prepareForAsyncTask): Do setup for one async task (i.e. a UIScriptController function
        that has a callback). Has to store the callbackID of the script, so code called from the completion
        callback knows which UI script invoked it.
        (UIScriptContext::asyncTaskComplete): Called when one task is finished.
        (UIScriptContext::uiScriptComplete):
        (UIScriptContext::objectFromRect): Make a JS object from a rect.
        * WebKitTestRunner/uiscriptcontext/UIScriptContext.h: Copied from Tools/WebKitTestRunner/TestOptions.h.
        (WTR::UIScriptContext::hasOutstandingAsyncTasks):
        * WebKitTestRunner/uiscriptcontext/UIScriptController.cpp: Copied from Tools/WebKitTestRunner/TestOptions.h.
        (WTR::UIScriptController::UIScriptController):
        (WTR::UIScriptController::makeWindowObject):
        (WTR::UIScriptController::wrapperClass):
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::zoomScale):
        (WTR::UIScriptController::minimumZoomScale):
        (WTR::UIScriptController::maximumZoomScale):
        (WTR::UIScriptController::contentVisibleRect):
        (WTR::UIScriptController::uiScriptComplete):
        * WebKitTestRunner/uiscriptcontext/UIScriptController.h: Copied from Tools/WebKitTestRunner/TestOptions.h.
        (WTR::UIScriptController::create):
        * WebKitTestRunner/uiscriptcontext/bindings/UIScriptController.idl: Copied from Tools/WebKitTestRunner/TestOptions.h.

2015-09-21  Tim Horton  <timothy_horton@apple.com>

        Turn on threaded scrolling by default in the tests
        https://bugs.webkit.org/show_bug.cgi?id=149377

        Reviewed by Simon Fraser.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest):
        (WTR::shouldUseThreadedScrolling): Deleted.
        Turn on threaded scrolling by default.

2015-09-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests doesn't provide feedback about crashing google tests
        https://bugs.webkit.org/show_bug.cgi?id=149252

        Reviewed by Darin Adler.

        In case of glib tests the test runner notifies about tests
        crashing, but for google tests we don't get any feedback, which
        means that in case of a test crashing we get a list of **PASS**
        messages and at the summary we are notified that the test suite
        has failed, but it's impossible to know which test cases have failed.

        * Scripts/run-gtk-tests:
        (TestRunner._run_google_test): Add a **CRASH** message if test
        case crashed.

2015-09-20  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner can leak user content script results between tests
        https://bugs.webkit.org/show_bug.cgi?id=149391

        Reviewed by Sam Weinig.

        Move WKBundlePageRemoveAllUserContent call so that it's executed before loading
        about:blank, and thus about:blank doesn't have unintended side effects.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::resetAfterTest):

2015-09-20  Alexey Proskuryakov  <ap@apple.com>

        [Mac, iOS] AccessibilityController doesn't uninstall global notification handler
        https://bugs.webkit.org/show_bug.cgi?id=149384

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::addNotificationListener): Fixed a leak, and cleaned up the code.
        (AccessibilityController::platformResetToConsistentState): Actually remove the handler,
        regardless of whether someone else holds a reference (we also call -stopListening in
        -dealloc).

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::platformResetToConsistentState):
        (AccessibilityController::addNotificationListener):
        Ditto.

2015-09-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove XHR_TIMEOUT compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=149260

        Reviewed by Benjamin Poulain.

        * Scripts/webkitperl/FeatureList.pm:

2015-09-19  Dan Bernstein  <mitz@apple.com>

        Attempted build fix.

        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

2015-09-18  Commit Queue  <commit-queue@webkit.org>

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

        Broke run-webkit-tests --pixel (Requested by ap on #webkit).

        Reverted changeset:

        "printing does not use minimum page zoom factor"
        https://bugs.webkit.org/show_bug.cgi?id=108507
        http://trac.webkit.org/changeset/189908

2015-09-18  Andy Estes  <aestes@apple.com>

        [iOS] did{Start,Finish}LoadForQuickLookDocumentInMainFrame is never called on WKNavigationDelegate
        https://bugs.webkit.org/show_bug.cgi?id=149360

        Reviewed by Tim Horton.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm: Added.
        (-[QuickLookNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[QuickLookNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookNavigationDelegate webView:didFinishNavigation:]):
        (TEST):
        * TestWebKitAPI/ios/pages.pages: Added.

2015-09-18  Nan Wang  <n_wang@apple.com>

        AX: Implement ARIA 1.1 @aria-current on iOS
        https://bugs.webkit.org/show_bug.cgi?id=149297

        Reviewed by Chris Fleizach.

        Added support to test aria-current on iOS.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::stringAttributeValue):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):

2015-09-18  Alexey Proskuryakov  <ap@apple.com>

        iOS WebKitTestRunner frequently crashes in WKContextGetIconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=149352

        Reviewed by Simon Fraser.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::~TestController):
        m_context can be null. This may indicate a bug in webkitpy too, but
        WebKitTestRunner should handle this situation nicely, there is nothing intrinsically
        wrong with opening and immediately closing it.

2015-09-18  Daniel Bates  <dabates@apple.com>

        isGitSVNDirectory() returns true when Git is not installed
        https://bugs.webkit.org/show_bug.cgi?id=149351

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where VCSUtils::isGitSVNDirectory() returns true for any arbitrary directory if
        Git is not installed on the machine.

        * Scripts/VCSUtils.pm:
        (isGitSVNDirectory): Ensure that `git config --get svn-remote.svn.fetch 2>& 1` exits with
        status code 0 (success).

2015-09-18  Alex Christensen  <achristensen@webkit.org>

        Prevent build-webkit from building four times on Windows 
        https://bugs.webkit.org/show_bug.cgi?id=149336

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:
        Move the Windows code out of the for loop iterating over each subdirectory to be build.
        They're built all at once.
        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject):
        (cmakeGeneratedBuildfile):
        Don't generate the Visual Studio solution if it already exists.
        It will run CMake again if necessary.

2015-09-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] WTR fails to set the key window in the UIKit sense
        https://bugs.webkit.org/show_bug.cgi?id=149325

        Reviewed by Tim Horton.

        -[WebKitTestRunnerWindow isKeyWindow] just returned _platformWebView->windowIsKey().
        This causes UIKit to bypass code that actually sets the key window, resulting in
        [UIAppliation sharedApplication].keyWindow always being nil.

        Fix by PlatformWebView::setWindowIsKey() actually call -makeKeyWindow, and having
        -[WebKitTestRunnerWindow isKeyWindow] call super.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::setWindowIsKey): Deleted.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::setWindowIsKey):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setWindowIsKey):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[WebKitTestRunnerWindow isKeyWindow]):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::setWindowIsKey):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setWindowIsKey):

2015-09-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When loading viewport tests, use the normal web page viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=149321

        Reviewed by Tim Horton.
        
        InjectedBundlePage::platformDidStartProvisionalLoadForFrame() unconditionally 
        enabled the "testing" viewport configuration, which disables page scaling.
        
        If we're running viewport tests, we want the normal web page configuration.
        Do that by passing a flag in the dictionary sent to InjectedBundle::beginTesting(),
        based on whether the test is in a "viewport" directory.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::shouldLogFrameLoadDelegates):
        (WTR::TestInvocation::shouldLogHistoryClientCallbacks):
        (WTR::TestInvocation::shouldMakeViewportFlexible):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::shouldMakeViewportFlexible): Deleted.

2015-09-17  Simon Fraser  <simon.fraser@apple.com>

        Give iOS WebKitTestRunner a launch storyboard
        https://bugs.webkit.org/show_bug.cgi?id=149314

        Reviewed by Dan Bates.
        
        Add a launch storyboard to iOS WebKitTestRunner so that Springboard recognizes
        that it's been built for specific device configurations, and puts the window
        at the top of the screen. This simplifies coordinate conversions in a future patch.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerApp/WebKitTestRunnerApp-Info.plist:
        * WebKitTestRunner/ios/Launch.storyboard: Added.

2015-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Update licence in r189890
        https://bugs.webkit.org/show_bug.cgi?id=149306

        Reviewed by Dean Jackson.

        * FontWithFeatures/FontWithFeatures/FontCreator.cpp:
        * FontWithFeatures/FontWithFeatures/FontCreator.h:
        * FontWithFeatures/FontWithFeatures/main.cpp:

2015-09-17  Mark Lam  <mark.lam@apple.com>

        Add the ability to skip JIT stress tests in run-javascriptcore-tests.
        https://bugs.webkit.org/show_bug.cgi?id=149285

        Reviewed by Saam Barati.

        Just need to add an option to pass --no-jit to run-jsc-stress-test.

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

2015-09-17  Alex Christensen  <achristensen@webkit.org>

        Switch AppleWin build to use CMake
        https://bugs.webkit.org/show_bug.cgi?id=149163

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:
        * Scripts/run-api-tests:
        (runTest):
        (listAllTests):
        (prepareEnvironmentForRunningTestTool):
        (testToolPaths):
        (testToolPath): Deleted.
        Run the API tests as separate executables on Windows.
        It used to be TestWebKitAPI.exe, and it is now TestWTF.exe, TestWebCore.exe, and TestWebKit.exe.
        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig):
        (jhbuildWrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        Fix configuration quirks.

2015-09-17  Dean Johnson  <dean_johnson@apple.com>

        Added toggle options for hiding and showing certain platform families on the dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=148403

        Reviewed by David Kilzer.

        This patch removes "hiddenPlatforms" from use in the code and local storage. We also removed
        individual hide/show buttons for platforms because we've added toggle options to hide/show entire
        families. Examples of these are "mac", "ios", and "linux". "Show All Platforms" was also removed
        in lieu of an "all" button in the toggle menu.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (parsePlatformFamily): Helper function to parse out a platform family.
        (initPlatformsByFamily): Initializes platformsByFamily, which organizes platforms on the
        page by platformsByFamily[<family>] = <list of platforms belonging to that family>.
        (updateToggleButtons): Updates the status of the toggle buttons.
        (updateHiddenPlatforms): Changed to work with the new implementation of hiding/showing platforms.
        (documentReady): Added creation of toggle buttons.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsMain.js:
        (unhiddenQueues): Updated to search by platform family instead of the individual platform name.
        (documentReady): Changed hiddenPlatforms => hiddenPlatformFamilies.
        (updateHiddenPlatforms): Deleted. After removing the individual hide button code, 
        this did the exact same thing as the updateHiddenPlatforms in Scripts/Main.js so it was removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js:
        (QueueView): Updated to use hiddenPlatformFamilies.
        (QueueView.prototype._updateHiddenState): Updated to use hiddenPlatformFamilies.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js:
        (Settings.prototype.toggleHiddenPlatformFamily): Renamed function and some variables.
        (Settings.prototype.clearHiddenPlatformFamilies): Now uses hiddenPlatformFamilies for events.
        (Settings.prototype.toggleHiddenPlatform): Deleted.
        (Settings.prototype.clearHiddenPlatforms): Deleted.
        (Settings.prototype.toggleShowPlatformFamily): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (div.cellButton, div.accessibilityButton, div.platformFamilyToggleButton):
        (div.cellButton.unhide, div.accessibilityButton.unhide, div.platformFamilyToggleButton.unhide):
        (.settings-visible div.settingsWrapper.hide, .settings-visible div.settingsWrapper):
        (table.queue-grid tr.headers th):
        (div.settingsWrapper.hide):
        (div.settingsWrapper):
        (div.familyToggleWrapper):
        (div.platformFamilyToggleButton):
        (div.platformFamilyShowToggleButton:not(:last-child)):
        (div.familyShown):
        (div.accessibilityButton):
        (div.cellButton, div.accessibilityButton): Added platformFamilyToggleButton class.
        (div.cellButton.unhide, div.accessibilityButton.unhide): Added platformFamilyToggleButton class.
        (.settings-visible div.accessibilityButton.hide, .settings-visible div.accessibilityButton.unhide): Added
        platformFamilyToggleButton and settingsWrapper class.
        (.accessibilityButton): Deleted.

2015-09-17  Tim Horton  <timothy_horton@apple.com>

        Add a test ensuring that scrolling in the middle of a page can't start a swipe gesture
        https://bugs.webkit.org/show_bug.cgi?id=148904

        Reviewed by Myles Maxfield.

        * WebKitTestRunner/TestController.cpp:
        (WTR::parseBooleanTestHeaderValue):
        (WTR::updateViewOptionsFromTestHeader):
        Check for the key "useThreadedScrolling".
        Add some code to check for "true" and "false" for boolean options.

        (WTR::TestController::viewOptionsForTest):
        Apply the test's overrides last, even after the platform's.

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        WebKitTestRunner always takes the snapshots from the UI process
        (expect for IOS), so in the case of printing, the layout in the
        web view is not the expected one. When printing, we need to take
        the snapshot in the web process and ensure it's rendered with a
        PrintContext.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): When dumping pixels, pass
        kWKSnapshotOptionsPrinting option to
        WKBundlePageCreateSnapshotWithOptions() when printing. When not
        printing, don't even create the snapshot, since it will be ignored
        by the UI process that always creates its own from the WebView (expect for IOS platform)
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults): Use always the snapshot image
        received from the web process if any when comparing pixel
        results. Now we only receive a snapshot from the web process in
        case of printing, or when platform is IOS. Otherwhise, generate
        the snapshot from the WebView as usual.
        * WebKitTestRunner/TestInvocation.h: Add SnapshotResultType enum
        parameter to dumpPixelsAndCompareWithExpected, since the snapshot
        is created by the caller now, but the CG implementation needs to
        know if it's a Web or UI process snapshot.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Create a
        cairo surface for the given image.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Create a
        CGContext for the given image.

2015-09-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Create a font which can be used for testing font features
        https://bugs.webkit.org/show_bug.cgi?id=149237

        Reviewed by Simon Fraser.

        This patch adds a new project in the Tools/ directory which generates a font which can
        be used for testing font features. This is a standalone project consisting of two files:
        1. A file which actually generates the byte vector representing the font. This file has
        a single public function: std::vector<uint8_t> generateFont(). This file is not platform
        specific, and only relies on the C++ STL.
        2. A file with a main() which calls generateFont() and writes out the font, as well as
        uses the font to render some demonstration text into a .png file. This file is platform
        specific.

        The font itself only supports the following characters:
        ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
        However, the shape of these letters are either an X or a check mark.

        The letter "A" always is a check mark.
        The letter "B" always is an X.
        Without any font features turned on, the rest of the letters are shown as X.

        Each font feature has an letter associated with it. When the font feature is enabled,
        that letter is shown as a check mark. For example, when "smcp" is enabled, "J" is shown
        as a check mark.

        Here are the mappings of font features to letters:
        liga: C
        clig: D
        dlig: E
        hlig: F
        calt: G
        subs: H
        sups: I
        smcp: J
        c2sc: K
        pcap: L
        c2pc: M
        unic: N
        titl: O
        onum: P
        pnum: Q
        tnum: R
        frac: S
        afrc: T
        ordn: U
        zero: V
        hist: W
        jp78: X
        jp83: Y
        jp90: Z
        jp04: a
        smpl: b
        trad: c
        fwid: d
        pwid: e
        ruby: f

        * FontWithFeatures/FontWithFeatures.xcodeproj/project.pbxproj: Added.
        * FontWithFeatures/FontWithFeatures/FontCreator.cpp: Added.
        (integralLog2):
        (roundDownToPowerOfTwo):
        (isFourByteAligned):
        (clampTo):
        (append32):
        (writeCFFEncodedNumber):
        (CFFBuilder::CFFBuilder):
        (CFFBuilder::takeResult):
        (CFFBuilder::moveTo):
        (CFFBuilder::lineTo):
        (CFFBuilder::curveToCubic):
        (CFFBuilder::closePath):
        (CFFBuilder::writePoint):
        (generateBoxCharString):
        (generateCheckCharString):
        (generateXCharString):
        (charStringForGlyph):
        (Generator::generate):
        (Generator::Placeholder::Placeholder):
        (Generator::Placeholder::populate):
        (Generator::Placeholder::~Placeholder):
        (Generator::placeholder):
        (Generator::append16):
        (Generator::append32):
        (Generator::append32BitCode):
        (Generator::overwrite16):
        (Generator::overwrite32):
        (Generator::appendCFFTable):
        (Generator::appendSubstitutionSubtable):
        (Generator::appendScriptSubtable):
        (Generator::appendGSUBTable):
        (Generator::appendOS2Table):
        (Generator::appendFormat12CMAPTable):
        (Generator::appendFormat4CMAPTable):
        (Generator::appendCMAPTable):
        (Generator::appendHEADTable):
        (Generator::appendHHEATable):
        (Generator::appendHMTXTable):
        (Generator::appendMAXPTable):
        (Generator::appendNAMETable):
        (Generator::appendPOSTTable):
        (Generator::calculateChecksum):
        (Generator::appendTable):
        (generateFont):
        * FontWithFeatures/FontWithFeatures/FontCreator.h: Added.
        * FontWithFeatures/FontWithFeatures/main.cpp: Added.
        (drawTextWithFeature):
        (main):

2015-09-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189875 and r189878.
        https://bugs.webkit.org/show_bug.cgi?id=149235

        cygwin cmake build not ready yet (Requested by alexchristensen
        on #webkit).

        Reverted changesets:

        "Switch AppleWin build to use CMake"
        https://bugs.webkit.org/show_bug.cgi?id=149163
        http://trac.webkit.org/changeset/189875

        "Cygwin build fix after r189875"
        http://trac.webkit.org/changeset/189878

2015-09-16  Alex Christensen  <achristensen@webkit.org>

        Cygwin build fix after r189875

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (jhbuildWrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        Make things work with cygwin and cmake.

2015-09-16  Alex Christensen  <achristensen@webkit.org>

        Switch AppleWin build to use CMake
        https://bugs.webkit.org/show_bug.cgi?id=149163

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:
        Build with CMake.
        * Scripts/run-api-tests:
        (runTest):
        (listAllTests):
        (prepareEnvironmentForRunningTestTool):
        (testToolPaths):
        (testToolPath): Deleted.
        Run the API tests as separate executables on Windows.
        It used to be TestWebKitAPI.exe, and it is now TestWTF.exe, TestWebCore.exe, and TestWebKit.exe.

2015-09-16  Alexey Proskuryakov  <ap@apple.com>

        Add newer build.webkit.org pages to robots.txt
        https://bugs.webkit.org/show_bug.cgi?id=149219

        Reviewed by Darin Adler.

        Indexing bot watcher's dashboard can't be good.

        * BuildSlaveSupport/build.webkit.org-config/public_html/robots.txt:

2015-09-16  Alex Christensen  <achristensen@webkit.org>

        Rollout r189851 and 189853 because they didn’t actually fix the permissions issue

        * BuildSlaveSupport/built-product-archive:
        (unzipArchive):

2015-09-16  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix the help message of separated web process option of MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=149212

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:

2015-09-16  Alex Christensen  <achristensen@webkit.org>

        Fix python syntax after r189851.

        * BuildSlaveSupport/built-product-archive:
        (unzipArchive):
        For loops need a colon.

2015-09-15  Alex Christensen  <achristensen@webkit.org>

        Fix Windows test bots after changing to non-cygwin build
        https://bugs.webkit.org/show_bug.cgi?id=149196

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/built-product-archive:
        (unzipArchive):
        Using different versions of python makes what I think is https://bugs.python.org/issue15795
        prevent us from executing files from the archive on the test bots.

2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add ShadowRoot interface and Element.prototype.attachShadow
        https://bugs.webkit.org/show_bug.cgi?id=149187

        Reviewed by Antti Koivisto.

        * Scripts/webkitperl/FeatureList.pm:

2015-09-15  Aakash Jain  <aakash_jain@apple.com>

        Appscale queue status json output lacks bots
        https://bugs.webkit.org/show_bug.cgi?id=149194
        <rdar://problem/22171089>

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/handlers/queuestatusjson.py:
        (QueueStatusJSON._bots): Order the results by date so as to get latest events, this was default in AppEngine.
        * QueueStatusServer/index.yaml: Index according to appscale requirements.

2015-09-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Provide a means for viewing the layer tree
        https://bugs.webkit.org/show_bug.cgi?id=149165

        Reviewed by Simon Fraser.

        Update MiniBrowser with a new Debug menu option that will
        dump the current layer tree to the debug console.
        
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc:
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h:
        * MiniBrowser/win/Common.cpp:
        (WndProc): Add handler for 'Print Layer Tree' menu option.
        * MiniBrowser/win/MiniBrowser.cpp:
        (MiniBrowser::printLayerTree): Added Handler.
        * MiniBrowser/win/MiniBrowser.h:

2015-09-14  Myles C. Maxfield  <mmaxfield@apple.com>

        WebKitTestRunner declarative language setting is broken for iOS
        https://bugs.webkit.org/show_bug.cgi?id=149119

        Unreviewed.

        In all of the patches on webkit.org/b/189669, my patch to get this working on iOS was
        lost in the final version which got committed. This simply implements the existing
        OS X behavior on iOS.

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):

2015-09-14  Dewei Zhu  <dewei_zhu@apple.com>

        Unreviewed, add myself to committers list.

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

2015-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Allow testing with the system language
        https://bugs.webkit.org/show_bug.cgi?id=148671

        Reviewed by Anders Carlsson and Alexey Proskuryakov.

        React to tests marked with language=lang1,lang2,etc in their header.
        Once this information is parsed, pass it to
        WKContextConfigurationSetOverrideLanguages().

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Don't clobber the language
        list.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Call
        WKContextConfigurationSetOverrideLanguages().
        (WTR::updateTestOptionsFromTestHeader): Inspect the language option.
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions): Cause a differing language
        option to restart the web process.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions): Ditto.

2015-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [WKTR] Allow changing the WKContextConfiguration between successive tests
        https://bugs.webkit.org/show_bug.cgi?id=148833

        Reviewed by Tim Horton.

        Previously, we were creating a single WKContext and it lived for the life of the entire test runner.
        However, there are certain tests which require specifying options in this object. This patch makes
        our existing code for recreating the test runner web view also recreate the WKContext.

        As such, our options to the view are now options to the WKContextConfiguration. This patch renames the
        class.

        * WebKitTestRunner/ContextConfigurationOptions.h: Renamed from Tools/WebKitTestRunner/ViewOptions.h.
        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::options):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::generateContextConfiguration):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::updateContextConfigurationOptionsFromTestHeader):
        (WTR::TestController::contextConfigurationOptionsForTest):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::updateViewOptionsFromTestHeader): Deleted.
        (WTR::TestController::viewOptionsForTest): Deleted.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::injectedBundlePath):
        (WTR::TestController::testPluginDirectory):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.

2015-09-11  Michael Saboff  <msaboff@apple.com>

        LayoutTestHelper crashes if a color profile isn't set for a 3rd party monitor
        https://bugs.webkit.org/show_bug.cgi?id=149083

        Reviewed by Alexey Proskuryakov.

        Check to make sure that we have a valid factoryProfile CFDictionaryRef before using it.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (colorProfileURLForDisplay):

2015-09-11  Saam barati  <sbarati@apple.com>

        There should be a defaultSpotCheck-like mode that doesn't run the MaximalFlushInsertionPhase in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=149058

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

2015-09-10  Commit Queue  <commit-queue@webkit.org>

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

        The tests still fail (Requested by ap on #webkit).

        Reverted changeset:

        "Spurious output on Windows tests: AQMEIOManager::FindIOUnit:
        error -1"
        https://bugs.webkit.org/show_bug.cgi?id=142929
        http://trac.webkit.org/changeset/189595

2015-09-10  Alexey Proskuryakov  <ap@apple.com>

        Spurious output on Windows tests: AQMEIOManager::FindIOUnit: error -1
        https://bugs.webkit.org/show_bug.cgi?id=142929

        Reviewed by Brent Fulgham.

        Silence the logging. We'll track fixing the root cause in Radar.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.stderr_patterns_to_strip): Added a FIXME.

        * Scripts/webkitpy/port/win.py:
        (WinPort.logging_patterns_to_strip): Added.

2015-09-09  Andy Estes  <aestes@apple.com>

        [iOS] Teach run-webkit-tests how to parse simulator runtimes when version numbers contain a revision
        https://bugs.webkit.org/show_bug.cgi?id=149022

        Reviewed by Daniel Bates.

        Simulator runtime versions can contain a revision number (e.g. 8.4.1), but the regex for matching runtimes
        did not account for this.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Optionally matched a revision at the end of a runtime version number.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Added a test.

2015-09-09  Andy Estes  <aestes@apple.com>

        [iOS] Teach run-webkit-tests how to parse `simctl list` when a tvOS SDK is installed
        https://bugs.webkit.org/show_bug.cgi?id=149029
        <rdar://problem/22432624>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Taught to parse tvOS runtimes.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Added tests.

2015-09-09  Alexey Proskuryakov  <ap@apple.com>

        Fix bit rot on bot watcher's dashboard page
        https://bugs.webkit.org/show_bug.cgi?id=149012

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        The code path used by the metrics page was trying to add properties to an undefined.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        Silence an expection that would occur when the step has no logs. This should never
        happen, but it did (perhaps buildbot was misconfigured for a while).

2015-09-09  Alexey Proskuryakov  <ap@apple.com>

        Update LayoutTestRelay xcconfig file.

        Rubber-stamped by Dan Bernstein.

        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:

2015-09-09  Saam barati  <sbarati@apple.com>

        DFG should have a debugging option that runs a phase that flushes all locals
        https://bugs.webkit.org/show_bug.cgi?id=148916

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2015-09-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189530 and r189534.
        https://bugs.webkit.org/show_bug.cgi?id=148996

        Caused assertion failures on Yosemite (Requested by litherum
        on #webkit).

        Reverted changesets:

        "[WKTR] Allow changing the WKContextConfiguration between
        successive tests"
        https://bugs.webkit.org/show_bug.cgi?id=148833
        http://trac.webkit.org/changeset/189530

        "[Cocoa] Fix the tests after r189530"
        http://trac.webkit.org/changeset/189534

2015-09-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Fix the tests after r189530

        Unreviewed.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2015-09-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [WKTR] Allow changing the WKContextConfiguration between successive tests
        https://bugs.webkit.org/show_bug.cgi?id=148833

        Reviewed by Tim Horton.

        Previously, we were creating a single WKContext and it lived for the life of the entire test runner.
        However, there are certain tests which require specifying options in this object. This patch makes
        our existing code for recreating the test runner web view also recreate the WKContext.

        As such, our options to the view are now options to the WKContextConfiguration. This patch renames the
        class.

        * WebKitTestRunner/ContextConfigurationOptions.h: Renamed from Tools/WebKitTestRunner/ViewOptions.h.
        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::options):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::generateContextConfiguration):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::updateContextConfigurationOptionsFromTestHeader):
        (WTR::TestController::contextConfigurationOptionsForTest):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::updateViewOptionsFromTestHeader): Deleted.
        (WTR::TestController::viewOptionsForTest): Deleted.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::injectedBundlePath):
        (WTR::TestController::testPluginDirectory):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::updatePlatformSpecificContextConfigurationOptionsForTest):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest): Deleted.

2015-09-08  Daniel Bates  <dabates@apple.com>

        [Mac] Expose Enable/Disable Accelerated Drawing in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=148980

        Reviewed by Alexey Proskuryakov.

        Add setting to enable/disable accelerated drawing so as to support testing
        this feature in MiniBrowser on Mac.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]): Add menu item.
        (-[SettingsController validateMenuItem:]): Update setting when menu item is toggled.
        (-[SettingsController toggleAcceleratedDrawingEnabled:]): Added.
        (-[SettingsController acceleratedDrawingEnabled]): Added.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]): Apply setting in WebKit1.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]): Apply setting in WebKit2.

2015-09-08  Jason Marcell  <jmarcell@apple.com>

        Unreviewed. Added myself as a commiter in contributors.json.

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

2015-09-08  Keith Miller  <keith_miller@apple.com>

        Unreviewed, added myself to the list of contributors.

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

2015-09-08  Daniel Bates  <dabates@apple.com>

        Dashboard: Remove use of z-index for ring overlay; use DOM ordering
        https://bugs.webkit.org/show_bug.cgi?id=148921

        Reviewed by Alexey Proskuryakov.

        The ring image is positioned above the platform icon in markup and we specify the CSS
        property z-index for the ring image so that it is painted on top of the platform icon
        instead of below it (by DOM ordering). Instead we can take advantage of the transparency
        of the ring image, switch the order of these DOM elements and remove the use of the CSS
        property z-index to achieve a similar effect.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady): Create the platform icon image element before the ring image such that
        the ring image is painted on top of the platform icon.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid td.logo img.ring): Removed property z-index.

2015-09-08  Daniel Bates  <dabates@apple.com>

        Dashboard: Remove duplicate gear icon data URLs
        https://bugs.webkit.org/show_bug.cgi?id=148920

        Reviewed by Alexey Proskuryakov.

        Currently we duplicate the SVG data URL for the gear icon up to its fill color in the CSS property
        background-image associated with each of the three gear icon states: collapsed (.settings), hover
        (.settings:hover), and expanded (.settings-visible .settings). Instead we should use the gear icon
        as a mask and make use of the CSS background-color to define the fill color for each of these three
        states.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (.settings): Use gear icon as mask and define CSS background-color for collapsed state. 
        (.settings:hover): Override CSS background-color for hover state.
        (.settings-visible .settings): Override CSS background-color for expanded state.

2015-09-07  Andy Estes  <aestes@apple.com>

        [Mac] DebugRelease builds should link against libWebKitSystemInterfaceElCapitan.a on 10.11
        https://bugs.webkit.org/show_bug.cgi?id=148946
        <rdar://problem/22603981>

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2015-09-07  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Many of the css3/device-adapt/* tests failed after r188548.
        https://bugs.webkit.org/show_bug.cgi?id=148927

        Reviewed by Csaba Osztrogonác.

        device-adapt/* tests need the fixedLayout option but useFixedLayout option is
        overwritten by updatePlatformSpecificViewOptionsForTest after r188548.

        * WebKitTestRunner/TestController.cpp:
        (WTR::shouldUseFixedLayout): Removed the unnecessary indentations.
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::shouldUseFixedLayout): Return true if the test is related with 'device-adapt'.

2015-09-07  Andy Estes  <aestes@apple.com>

        Fix the Production build after r189455.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Somehow I added the All target using the
        In-App Purchase template instead of the Aggregate template. Whoops.

2015-09-06  Andy Estes  <aestes@apple.com>

        WebKit.xcworkspace should be be able to build iOS platforms
        https://bugs.webkit.org/show_bug.cgi?id=148881

        Reviewed by Daniel Bates.

        Since we don't want to create platform-specific schemes, all projects in the workspace's schemes need to build
        for all supported platforms.

        * MiniBrowser/Configurations/Base.xcconfig: Included iphoneos and iphonesimulator in SUPPORTED_PLATFORMS.
        * MiniBrowser/Configurations/MiniBrowser.xcconfig: Excluded all source files on iOS, and linked Cocoa and WebKit on Mac.
        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig: Ditto.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Stopped linking frameworks in Link Binaries With Libraries.

2015-09-06  Andy Estes  <aestes@apple.com>

        WebKitTestRunner should build for iOS using the default target
        https://bugs.webkit.org/show_bug.cgi?id=148918

        Reviewed by Daniel Bates.

        When WebKitTestRunner was ported to iOS, a separate target (WebKitTestRunnerApp) was created for building the
        iOS variant. This is annoying because (1) all tools that invoke xcodebuild need to be taught to build this
        non-default target, and (2) a single Xcode scheme cannot be used to build both Mac and iOS variants.

        This change adds a new default target (All) and makes it work for both Mac and iOS. Files that were built for
        both WebKitTestRunner and WebKitTestRunnerApp are now built in a static library target (WebKitTestRunner (Library)),
        and both apps now link this library. Files that are specific to Mac or iOS are excluded on the other platform.
        WebKitTestRunnerApp.app (which should be renamed to WebKitTestRunner.app) is skipped when installing on Mac, and
        WebKitTestRunner is skipped when installing on iOS.

        The target dependency graph now looks like this:

            All
                WebKitTestRunnerApp
                    WebKitTestRunner (Library)
                        WebKitTestRunnerInjectedBundle
                            Derived Sources
                WebKitTestRunner
                    WebKitTestRunner (Library)
                        WebKitTestRunnerInjectedBundle
                            Derived Sources

        * Scripts/build-webkit: Stopped building the WebKitTestRunnerApp target on iOS.
        * Scripts/build-webkittestrunner: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Set SUPPORTED_PLATFORMS to macosx, iphoneos, and iphonesimulator.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Set INSTALL_PATH here since it is the same for all targets.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Stopped setting INSTALL_PATH.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Moved frameworks from the build phase to here,
        excluded iOS-only files, and skipped installing on iOS.
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: Moved frameworks from the build phase to here,
        excluded Mac-only files, and skipped installing on Mac.
        * WebKitTestRunner/Configurations/WebKitTestRunnerLibrary.xcconfig: Skipped installing always.
        * WebKitTestRunner/Makefile: Stopped building the WebKitTestRunnerApp target on iOS.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added new targets, removed frameworks from
        Link Binary With Libraries builds phases, moved common files to the WebKitTestRunner (Library) target, and added
        new configuration files.

2015-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve prepare-ChangeLog for multiple cases
        https://bugs.webkit.org/show_bug.cgi?id=148875

        Reviewed by Timothy Hatcher.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_javascript):
        - We were ignoring everything inside of an anonymous function expression,
          such as (function(){ ... }), which made InjectedScriptSource produce nothing.
          Better handle this by inserting a few tweaks.
        - Allow method syntax outside of classes as long as they are at the global level.
        - Avoid treating "get" and "set" as getter/setter functions in bad contexts.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests.js:
        (Foo.prototype.method1):
        (Foo.prototype.method2):
        (Foo.prototype.method3.innerFunction):
        (Foo.prototype.method3):
        (insideGlobalAnonymousFunctionExpression):
        (foo.insideGlobalFunctionExpression):
        (IssueWithMapGetAndSet.prototype.method1.nestedFunctionInsideMethod1):
        (IssueWithMapGetAndSet.prototype.method1):
        (IssueWithMapGetAndSet.prototype.method2):
        (IssueWithMapGetAndSet.prototype.method3):
        (IssueWithMapGetAndSet):

2015-09-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Enable ES6 Module in JSC shell by default
        https://bugs.webkit.org/show_bug.cgi?id=148689

        Reviewed by Geoffrey Garen.

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

2015-09-04  Basile Clement  <basile_clement@apple.com>

        Unreviewed, change my email address.

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

2015-09-04  Beth Dakin  <bdakin@apple.com>

        Should have a test to make sure links don't navigate after a cancelled force 
        click
        https://bugs.webkit.org/show_bug.cgi?id=148846

        Reviewed by Tim Horton.

        New EventSender function for a started then cancelled force click.
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseForceClick):
        (WTR::EventSendingController::startAndCancelMouseForceClick):
        (WTR::EventSendingController::mouseForceDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseForceClick):
        (WTR::EventSenderProxy::startAndCancelMouseForceClick):
        (WTR::EventSenderProxy::mouseForceDown):
        (WTR::EventSenderProxy::mouseMoveTo):

2015-09-04  Tim Horton  <timothy_horton@apple.com>

        Add a test for r179736 (programmatic navigation during swipe causing a crash)
        https://bugs.webkit.org/show_bug.cgi?id=148830

        Reviewed by Beth Dakin.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        Make sure that TestRunner callbacks don't leak between tests!

2015-09-04  Anders Carlsson  <andersca@apple.com>

        It should be possible to pass relative HTTP test paths to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=148825
        <rdar://problem/22583866>

        Reviewed by Tim Horton.

        Convert the path to an absolute path if needed.

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

2015-09-04  Jason Marcell  <jmarcell@apple.com>

        Fix Swift unit tests for prepare-ChangeLog.
        https://bugs.webkit.org/show_bug.cgi?id=148817

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/swift_unittests-expected.txt: Fixed
        Swift unit tests for prepare-ChangeLog.

2015-09-04  Lucas Forschler  <lforschler@apple.com>

        Modifications to the webkit-nightly logic.
        
        * WebKitLauncher/WebKitNightlyEnablerSparkle.m:
        (updateAlertPanel):
        * WebKitLauncher/main.m:
        (displayErrorAndQuit):

2015-09-04  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * WebKitTestRunner/mac/EventSenderProxy.mm:

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        InspectorClients must explicitly disconnect their frontend channel(s) from the
        inspected page's InspectorController.

        To make this possible, DumpRenderTree should not destroy non-primary views until
        it has tried to close any abandoned Web Inspector instances. Performing teardown
        in the reverse order prevents disconnection of the frontend channel because that
        prematurely destroys the inspector frontend client.

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

2015-09-04  Beth Dakin  <bdakin@apple.com>

        Need to be able to test default behaviors on force click
        https://bugs.webkit.org/show_bug.cgi?id=148758

        Reviewed by Tim Horton.

        This patch adds a new eventSender method to do a full, completed force click, 
        and it re-works all of the existing force methods to dispatch their events in 
        such a way that they will trigger the NSImmediateAction gesture recognizer. 
        To do this, first we need to send the events to the app rather than straight 
        to the view, and also needed to tweak some state and send the events in a 
        delayed fashion.

        New public function mouseForceClick() and private helper functions to make 
        NSEvents.
        * WebKitTestRunner/EventSenderProxy.h:

        New public function mouseForceClick().
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::mouseForceClick):
        (WTR::EventSendingController::mouseForceDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):

        initPressureEventAtLocation needs to take a stageTransition and a window.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        (-[EventSenderSyntheticEvent stageTransition]):
        (-[EventSenderSyntheticEvent timestamp]):
        (-[EventSenderSyntheticEvent _cgsEventRecord]):
        (-[EventSenderSyntheticEvent window]):

        In order to enter the gesture recognizer, we need to start with a mouse down 
        that has a NSEventMaskPressure modifier.
        (WTR::EventSenderProxy::sendMouseDownToStartPressureEvents):

        This ensures that the events queue properly for the force monitor in AppKit.
        (WTR::spinRunLoopForForce):

         We need to start the pressure change events with a began.
        (WTR::EventSenderProxy::beginPressureEvent):

        These functions can be used to create the NSEvent for a pressure change every 
        time we need one.
        (WTR::EventSenderProxy::pressureChangeEvent):

        Send the right series of events to emulate a full, completed force click.
        (WTR::EventSenderProxy::mouseForceClick):

        Use all of the new things for these existing functions.
        (WTR::EventSenderProxy::mouseForceDown):
        (WTR::EventSenderProxy::mouseForceUp):
        (WTR::EventSenderProxy::mouseForceChanged):

        Set NSFakeForceTouchDevice to YES.
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

2015-09-04  Jason Marcell  <jmarcell@apple.com>

        prepare-ChangeLog needs to know how to parse Swift files.
        https://bugs.webkit.org/show_bug.cgi?id=148784
        <rdar://problem/22510062>

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Added entry for get_function_line_ranges_for_swift.
        (get_function_line_ranges_for_swift): Added function that knows how to parse Swift code.
        (parseSwiftFunctionArgs): Added function that knows how to parse Swift function arguments.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/swift_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/swift_unittests.swift: Ditto.
        (freeFunction): Ditto.
        (MyClass.function): Ditto.
        (MyClass.functionWithArgument(_:)): Ditto.
        (MyClass.functionWithMoreArguments(_:arg2:)): Ditto.
        (MyClass.functionWithNamedFirstArgument(argument:)): Ditto.
        (MyClass.functionWithNamedFirstAndSecondArgument(first:second:)): Ditto.
        (MyClass.classFunction): Ditto.
        (MyClass.readWriteComputedVariable): Ditto.
        (MyClass.readOnlyComputedVariable): Ditto.

2015-09-04  Ryosuke Niwa  <rniwa@webkit.org>

        Import css/css-color-3
        https://bugs.webkit.org/show_bug.cgi?id=148803

        Reviewed by Chris Dumez.

        Fixed a bug that the imported reference files used the same extention as tests.
        This would result in parsing errors if the tests were XML and references were HTML and vice versa.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests):

2015-09-03  Commit Queue  <commit-queue@webkit.org>

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

        Caused tons of crashes (Requested by cdumez on #webkit).

        Reverted changeset:

        "Web Inspector: InspectorController should support multiple
        frontend channels"
        https://bugs.webkit.org/show_bug.cgi?id=148538
        http://trac.webkit.org/changeset/189338

2015-09-03  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        InspectorClients must explicitly disconnect their frontend channel(s) from the
        inspected page's InspectorController.

        To make this possible, DumpRenderTree should not destroy non-primary views until
        it has tried to close any abandoned Web Inspector instances. Performing teardown
        in the reverse order prevents disconnection of the frontend channel because that
        prematurely destroys the inspector frontend client.

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

2015-09-03  Timothy Hatcher  <timothy@apple.com>

        Update WebKit nightly icon to be more like Safari
        https://bugs.webkit.org/show_bug.cgi?id=148768

        Reviewed by Joseph Pecoraro.

        * WebKitLauncher/webkit.icns:

2015-09-03  Geoffrey Garen  <ggaren@apple.com>

        JavaScriptCore should have some ES6 conformance tests
        https://bugs.webkit.org/show_bug.cgi?id=148771

        Reviewed by Chris Dumez.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Added es6 as a test suite.

        * Scripts/run-jsc-stress-tests: Added es6 as a test suite.

        Some of these tests currently fail, so I also added a way to expect
        failure for now. We'll migrate failing tests to expected passes as we
        fix them.

2015-09-03  Tim Horton  <timothy_horton@apple.com>

        Add a test for swipe-start hysteresis
        https://bugs.webkit.org/show_bug.cgi?id=148756

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback):
        (WTR::TestRunner::clearTestRunnerCallbacks):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        Make sure that we log if a client tries to install a callback twice
        (since we use .add, the second call would not work).

        Also, add clearTestRunnerCallbacks so tests can swap out installed
        callbacks.

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

        DumpRenderTree should automatically compute HTTP URLs for HTTP tests
        https://bugs.webkit.org/show_bug.cgi?id=148746
        rdar://problem/22568073

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (computeTestURL):
        Compute the test URL from the passed in path or URL. Special-case paths that contain /LayoutTests/http/tests. 

        (runTest):
        Call computeTestURL.

        (testPathFromURL):
        Get rid of this; computeTestURL does this for us now.

        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input):
        Don't convert HTTP test paths to URLS before passing them to DumpRenderTree on Mac. That's handled by DRT itself now.

2015-09-03  Tim Horton  <timothy_horton@apple.com>

        Swipe tests fail on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=148752

        Reviewed by Beth Dakin.

        * WebKitTestRunner/mac/EventSenderProxy.mm:

2015-09-03  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setNavigationGesturesEnabled):

2015-09-03  Tim Horton  <timothy_horton@apple.com>

        Remove some logging that wasn't meant to be in the tree

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::swipeGestureWithWheelAndMomentumPhases):

2015-09-03  Tim Horton  <timothy_horton@apple.com>

        [Mac] Add support for testing swipes
        https://bugs.webkit.org/show_bug.cgi?id=148700

        Reviewed by Beth Dakin.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::cgEventPhaseFromString):
        (WTR::cgEventMomentumPhaseFromString):
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSendingController::swipeGestureWithWheelAndMomentumPhases):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installDidBeginSwipeCallback):
        (WTR::TestRunner::installWillEndSwipeCallback):
        (WTR::TestRunner::installDidEndSwipeCallback):
        (WTR::TestRunner::installDidRemoveSwipeSnapshotCallback):
        (WTR::TestRunner::callDidBeginSwipeCallback):
        (WTR::TestRunner::callWillEndSwipeCallback):
        (WTR::TestRunner::callDidEndSwipeCallback):
        (WTR::TestRunner::callDidRemoveSwipeSnapshotCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didBeginNavigationGesture):
        (WTR::TestController::willEndNavigationGesture):
        (WTR::TestController::didEndNavigationGesture):
        (WTR::TestController::didRemoveNavigationGestureSnapshot):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didBeginSwipe):
        (WTR::TestInvocation::willEndSwipe):
        (WTR::TestInvocation::didEndSwipe):
        (WTR::TestInvocation::didRemoveSwipeSnapshot):
        * WebKitTestRunner/TestInvocation.h:
        Add callbacks when navigation gestures didBegin/willEnd/didEnd, and
        when the snapshot is removed.

        Add swipeGestureWithWheelAndMomentumPhases, just like the equivalent
        mouseScrollBy function.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:phase:time:eventNumber:]):
        (-[EventSenderSyntheticEvent type]):
        (-[EventSenderSyntheticEvent subtype]):
        (-[EventSenderSyntheticEvent locationInWindow]):
        (-[EventSenderSyntheticEvent location]):
        (-[EventSenderSyntheticEvent momentumPhase]):
        (-[EventSenderSyntheticEvent _isTouchesEnded]):
        (-[EventSenderSyntheticEvent _cgsEventRecord]):
        Rename EventSenderPressureEvent to EventSenderSyntheticEvent and add some
        more adjustable values.

        (WTR::EventSenderProxy::mouseForceDown):
        (WTR::EventSenderProxy::mouseForceUp):
        (WTR::EventSenderProxy::mouseForceChanged):
        Adopt EventSenderSyntheticEvent.

        (WTR::nsEventPhaseFromCGEventPhase):
        (WTR::EventSenderProxy::swipeGestureWithWheelAndMomentumPhases):
        Make use of EventSenderSyntheticEvent to synthesize swipe gesture events.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Enable swipe.

2015-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        [WK2] Allow tagging tests with metadata which needs to be known at web process creation time
        https://bugs.webkit.org/show_bug.cgi?id=148723

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath):
        (WTR::updateViewOptionsFromTestHeader):
        (WTR::TestController::viewOptionsForTest):

2015-09-03  Lucas Forschler  <lforschler@apple.com>

        Test commit.

2015-09-02  Tim Horton  <timothy_horton@apple.com>

        Add a modern API way to know that the navigation gesture snapshot was removed, for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=148693

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2015-09-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r188548): Some tests crash after r188548 because injected bundle messages are received after the test finishes
        https://bugs.webkit.org/show_bug.cgi?id=148529

        Reviewed by Darin Adler.

        When there are pending EventSender messages after a test finishes,
        they could be processed in the main loop started by the
        resetStateToConsistentValues(), but the old EventSender has been
        replaced by a new one at that point. The new Eventsender can crash
        when processing messages that were sent to the old one. To avoid
        this, we return early when receiving an EventSender message and
        the TestController state is not RunningTest.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveKeyDownMessageFromInjectedBundle):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):

2015-09-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r188548): TestController state is Resseting while tests are running after r188548
        https://bugs.webkit.org/show_bug.cgi?id=148528

        Reviewed by Darin Adler.

        Before r188548 resetStateToConsistentValues() was called in
        TestController::run(), before tests are run, but now it's called
        for every test in TestInvocation::invoke(), after m_status has
        changed to RunningTest.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Use
        TemporaryChange to reset m_state ot its previous value after reset
        is done.

2015-08-31  Jason Marcell  <jmarcell@apple.com>

        Modify prepare-Changelog to be aware of files that are marked as tests as well as files
        that are marked as requiring corresponding tests.
        https://bugs.webkit.org/show_bug.cgi?id=148498
        <rdar://problem/21555314>

        Reviewed by Dan Bernstein and David Kilzer.

        * Scripts/prepare-ChangeLog: Added "attributeCache" to cache Subversion properties in order to
        simulate Git's attribute behevaior.
        (main): Added "requiresTests" array to contain files that require tests.
        (generateNewChangeLogs): Checks "requiresTests" array to determine whether to inject "tests"
        section in ChangeLog.
        (attributeCommand): Queries a given file for a given Git attribute value. If using Subversion,
        however, we check if the file or any containing folder has the given property set to "1" and
        return 1 if so; return 0 otherwise.
        (generateFileList): Adds files to "requiresTests" array if Git attribute is set to "1". Also
        adds files to "addedRegressionTests" array if "test" attribute is set to "1".

2015-08-26  Andy Estes  <aestes@apple.com>

        [Content Filtering] Determine navigation and content policy before continuing to filter a load
        https://bugs.webkit.org/show_bug.cgi?id=148506

        Reviewed by Brady Eidson.

        Added download API tests covering every decision and decision point.
        Removed _WKDownload.AsynchronousDownloadPolicy in favor of these new tests.

        * TestWebKitAPI/Configurations/Base.xcconfig: Added $(BUILT_PRODUCTS_DIR)/WebCoreTestSupport to the header search path.
        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Removed it from here.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParametersPlugIn.mm:
        (-[BundleParametersPlugIn observeValueForKeyPath:ofObject:change:context:]): Called -valueForKeyPath:, which
        returns an id, instead of -valueForKey:, which always returns an NSString even if the object is of another type.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm: Added a class that can send a MockContentFilter
        decision and decision point as a bundle parameter.
        (+[MockContentFilterEnabler supportsSecureCoding]):
        (-[MockContentFilterEnabler copyWithZone:]):
        (-[MockContentFilterEnabler initWithCoder:]):
        (-[MockContentFilterEnabler initWithDecision:decisionPoint:]):
        (-[MockContentFilterEnabler encodeWithCoder:]):
        (configurationWithContentFilterSettings): Added a helper function to create a WKWebViewConfiguration with MockConentFilter settings.
        (TEST): Renamed ContentFiltering.ServerRedirect to ContentFiltering.URLAfterServerRedirect.
        (-[BecomeDownloadDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Decided _WKNavigationResponsePolicyBecomeDownload.
        (-[BecomeDownloadDelegate webView:didFailProvisionalNavigation:withError:]): Set isDone to true.
        (-[BecomeDownloadDelegate webView:didFinishNavigation:]): Ditto.
        (-[ContentFilteringDownloadDelegate _downloadDidStart:]): Set downloadDidStart to true.
        (downloadTest): Added a helper function to test downloads with a given decision and decision point.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm: Added a corresponding bundle class that decodes
        the MockContentFilter decision and decision point, and sets these values in the MockContentFilterSettings
        singleton. This class is duplicated in the bundle to prevent TestWebKitAPI from having to link to WebCoreTestSupport.
        (+[MockContentFilterEnabler supportsSecureCoding]):
        (-[MockContentFilterEnabler copyWithZone:]):
        (-[MockContentFilterEnabler initWithCoder:]):
        (-[MockContentFilterEnabler dealloc]):
        (-[MockContentFilterEnabler encodeWithCoder:]):
        (-[ContentFilteringPlugIn webProcessPlugIn:initializeWithObject:]): Start observing changes to the MockContentFilterEnabler key path.
        (-[ContentFilteringPlugIn dealloc]): Stop observing.
        (-[ContentFilteringPlugIn observeValueForKeyPath:ofObject:change:context:]): Store a MockContentFilterEnabler in _contentFilterEnabler.
        (+[ServerRedirectPlugIn initialize]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[AsynchronousDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[AsynchronousDownloadDelegate _downloadDidStart:]): Deleted.
        (TEST): Deleted.

2015-08-31  Filip Pizlo  <fpizlo@apple.com>

        Skip slow lock tests on Windows/debug
        https://bugs.webkit.org/show_bug.cgi?id=148643

        Reviewed by Alexey Proskuryakov.

        The lock tests simulate a critical section by doing some floating point math, and then either
        make those critical sections very long or invoke them many times. This appears to be
        particularly slow on Windows in debug mode, maybe because Visual Studio's debug build makes
        that kind of computation slow.

        These tests are almost as useful in release as they are in debug, so it's probably better to
        just skip the in debug on platforms where this causes timeouts.

        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest):
        (TestWebKitAPI::skipSlow):
        (TestWebKitAPI::TEST):

2015-08-29  Chris Fleizach  <cfleizach@apple.com>

        AX: When navigating the elements of a scrollable element with VoiceOver, the scrollTop() position of the element does not permanently change
        https://bugs.webkit.org/show_bug.cgi?id=125720

        Reviewed by Daniel Bates.

        Add support for scrollToMakeVisibleWithSubFocus and scrollToGlobalPoint.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (pressCallback):
        (scrollToMakeVisibleWithSubFocusCallback):
        (scrollToGlobalPointCallback):
        (scrollToMakeVisibleCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        (AccessibilityUIElement::selectedTextRange):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::mathPrescriptsDescription):
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::supportedActions):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::selectedTextRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::selectedTextRange):

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        Add a mysteriously nonproblematic missing comma.

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

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        Remove an old temporary script that has served its purpose

        * Scripts/convert-test-expectations: Removed.

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Add WebKit/WebKit2 settings to control automatic data loading
        https://bugs.webkit.org/show_bug.cgi?id=148579

        Reviewed by Anders Carlsson.

        In DumpRenderTree, set the new mediaDataLoadsAutomatically preference to YES.

        In WebKitTestRunner, do the same for the new _mediaDataLoadsAutomatically configuration property,
        and also set the existing requiresUserActionForMediaPlayback configuration property to NO.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (resetWebViewToConsistentStateBeforeTesting): 
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2015-08-28  Alexey Proskuryakov  <ap@apple.com>

        Fix run-webkit-tests --additional-env-var="DYLD_INSERT_LIBRARIES=..."
        https://bugs.webkit.org/show_bug.cgi?id=148592

        Reviewed by Tim Horton.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server):
        (Port.to):
        (Port.to._append_value_colon_separated):
        (Port.to.show_results_html_file):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server):

2015-08-28  Filip Pizlo  <fpizlo@apple.com>

        LICM should be sound even if the CFG has changed
        https://bugs.webkit.org/show_bug.cgi?id=148259

        Reviewed by Benjamin Poulain.

        Add a utility for creating tests that set some uncommon option.

        * Scripts/run-jsc-stress-tests:

2015-08-28  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed EWS correction.

        * EWSTools/start-queue-win.sh: Update settings to point to VS2015.

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Make the AllowsInlineMediaPlayback preference work in WebKit / WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=147512

        Reviewed by Anders Carlsson.

        Set the value of WebKitAllowsInlineMediaPlayback / WKPreferencesSetMediaPlaybackAllowsInline()
        to a consistent (true) value.

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

2015-08-28  Tim Horton  <timothy_horton@apple.com>

        Add navigation gesture callbacks to WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=148568
        <rdar://problem/22371346>

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        Add some zeroes.

2015-08-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] kill-old-processes should kill more processes
        https://bugs.webkit.org/show_bug.cgi?id=148577

        Reviewed by Tim Horton.

        * BuildSlaveSupport/kill-old-processes:

2015-08-28  Jason Marcell  <jmarcell@apple.com>

        The status message for combined builder queues should say "all builds succeeded" if everything
        built correctly.
        https://bugs.webkit.org/show_bug.cgi?id=148535

        Reviewed by David Kilzer and Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Make status message for combined builder queues
        say "all builds succeeded" if everything built correctly.

2015-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify the internal API to create a WebView
        https://bugs.webkit.org/show_bug.cgi?id=148570

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/PlatformWebView.h: Add initialize method for GTK+ too.
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Implement all
        PlatformWebView constructors that end up calling initialize with a PageConfiguration.
        (TestWebKitAPI::PlatformWebView::initialize): Create the WebView
        passing the received PageConfiguration.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView): Create the WebView
        passing the received PageConfiguration.

2015-08-27  Aakash Jain  <aakash_jain@apple.com>

        iOS Simulator API tests fails as Simulator is not running
        https://bugs.webkit.org/show_bug.cgi?id=148501
        rdar://problem/22447525

        Reviewed by Daniel Bates.

        This change is a workaround for <rdar://problem/22388812>.

         * Scripts/run-api-tests: Launch the iOS Simulator before starting the API Tests
         and quit it on program termination when running tests on the iOS port.
         * Scripts/webkitdirs.pm: Store string "For WebKit Development" in constant
         SIMULATOR_DEVICE_SUFFIX_FOR_WEBKIT_DEVELOPMENT to make it consistently reusable.

2015-08-27  Alex Christensen  <achristensen@webkit.org>

        Make DLLLauncherMain executables dependent on dll
        https://bugs.webkit.org/show_bug.cgi?id=148548

        Reviewed by Brent Fulgham.

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

2015-08-27  Lucas Forschler  <lforschler@apple.com>

        Remove Mac slaves 188/189 after being replaced with 400/401.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2015-08-27  Lucas Forschler  <lforschler@apple.com>

        Add two bots to the Mac Yosemite queue.
        This is to eventually replace bots188/189, which will be removed after 400/401 are vetted.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2015-08-27  Alex Christensen  <achristensen@webkit.org>

        [Win CMake] Fix incremental build after r188673
        https://bugs.webkit.org/show_bug.cgi?id=148539

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/PlatformWin.cmake:
        Copy forwarding headers from WebCore before building in case that was not yet done.
        It used to be done when running CMake, but now it's a build step.

2015-08-27  Nan Wang  <n_wang@apple.com>

        AX: Fix accessibility/select-element-at-index.html test
        https://bugs.webkit.org/show_bug.cgi?id=148516

        Reviewed by Chris Fleizach.

        Implemented setSelectedChildAtIndex and removeSelectionAtIndex for mac.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedChildCallback):
        (setSelectedChildAtIndexCallback):
        (removeSelectionAtIndexCallback):
        (elementAtPointCallback):
        (sentenceAtOffsetCallback):
        (stringForSelectionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setSelectedChild):
        (AccessibilityUIElement::setSelectedChildAtIndex):
        (AccessibilityUIElement::removeSelectionAtIndex):
        (AccessibilityUIElement::accessibilityValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::isExpanded):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex):
        (WTR::AccessibilityUIElement::accessibilityValue):

2015-08-27  Alex Christensen  <achristensen@webkit.org>

        Build fix after r188982

        * MiniBrowser/win/CMakeLists.txt:
        The directory structure changed in the move.

2015-08-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed, install-dependencies should install geoclue2 on Fedora

        geoclue-devel is for obsolete geoclue. Install geoclue2-devel instead.

        * gtk/install-dependencies:

2015-08-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Mark WTF_WordLock.ContendedShortSection as slow too.

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

2015-08-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Fix GTK+ WTR crashes in initializeMainRunLoop()

        Rubber-stamped by Žan Doberšek.

        Initialize threading and main thread before
        RunLoop::initializeMainRunLoop(), since the GLib implementation of
        the RunLoop uses isMainThread() to decide whether to create a new
        GMainContext or use the default one. Also use RunLoop::run() and
        ::stop() instead of gtk_main/quit.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):

2015-08-27  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, further shorten a test that times out because it's very long
        running.

        I've locally run these tests on repeat for 24 hours and found no genuine
        failures, like deadlocks. So, the timeouts are probably because the test
        machine is slow and debug is slow. We should just run this test for fewer
        iterations.

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

2015-08-26  Ryuan Choi  <ryuan.choi@navercorp.com>

        Unreviewed build fix attempt on EFL

        * WebKitTestRunner/PlatformEfl.cmake:

2015-08-26  Alex Christensen  <achristensen@webkit.org>

        Build fix after r188982

        * MiniBrowser/win/CMakeLists.txt:
        Find .rc files in correct directory.

2015-08-26  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Bump cairo version to 1.14.2
        https://bugs.webkit.org/show_bug.cgi?id=148474

        Reviewed by Csaba Osztrogonác.

        * efl/jhbuild.modules:

2015-08-26  Andy Estes  <aestes@apple.com>

        Crash when following a Google search link to Twitter with Limit Adult Content enabled
        https://bugs.webkit.org/show_bug.cgi?id=147651

        Rubber-stamped by Brady Eidson.

        Taught TestRunner how to decide the navigation policy after a delay.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldDecideNavigationPolicyAfterDelay):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::shouldDecideNavigationPolicyAfterDelay):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldDecideNavigationPolicyAfterDelay):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2015-08-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Rename 'WinLauncher' to 'MiniBrowser'
        https://bugs.webkit.org/show_bug.cgi?id=148485

        Reviewed by Alex Christensen

        Move the WinLauncher project and source files to a subdirectory
        of MiniBrowser. Globally change WinLauncher -> MiniBrowser in the
        source code and project files.
        
        * MiniBrowser/MiniBrowser.vcxproj: Copied from WinLauncher/WinLauncher.vcxproj.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.ico: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncher.ico.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.rc: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncher.rc.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.vcxproj: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.vcxproj.filters: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCF.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherCF.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCFLite.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherCFLite.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCommon.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherCommon.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserDebug.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj.filters: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibCommon.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibDebug.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibPostBuild.cmd: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibPostBuild.cmd.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibPreBuild.cmd: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibPreBuild.cmd.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibProduction.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibRelease.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserPostBuild.cmd: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherPostBuild.cmd.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserPreBuild.cmd: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherPreBuild.cmd.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserProduction.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserRelease.props: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserResource.h: Copied from WinLauncher/WinLauncher.vcxproj/WinLauncherResource.h.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncher.ico: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncher.rc: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncher.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncher.vcxproj.filters: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherCF.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherCFLite.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherCommon.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherDebug.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLib.rc: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLib.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLib.vcxproj.filters: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibCommon.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibDebug.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibPreBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibProduction.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibRelease.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherLibResource.h: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherPreBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherProduction.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherRelease.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/WinLauncherResource.h: Removed.
        * MiniBrowser/win: Copied from WinLauncher.
        * MiniBrowser/win/Common.cpp:
        * MiniBrowser/win/MiniBrowser.cpp: Copied from WinLauncher/WinLauncher.cpp.
        * MiniBrowser/win/MiniBrowser.h: Copied from WinLauncher/WinLauncher.h.
        * MiniBrowser/win/MiniBrowserReplace.h: Copied from WinLauncher/WinLauncherReplace.h.
        * MiniBrowser/win/MiniBrowserWebHost.cpp: Copied from WinLauncher/WinLauncherWebHost.cpp.
        * MiniBrowser/win/MiniBrowserWebHost.h: Copied from WinLauncher/WinLauncherWebHost.h.
        * MiniBrowser/win/PageLoadTestClient.cpp:
        * MiniBrowser/win/PageLoadTestClient.h:
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        * MiniBrowser/win/ResourceLoadDelegate.h:
        * MiniBrowser/win/WinLauncher.cpp: Removed.
        * MiniBrowser/win/WinLauncher.h: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncher.ico: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncher.rc: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncher.vcxproj: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherCF.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherCFLite.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherCommon.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherDebug.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLib.rc: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibCommon.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibDebug.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibPostBuild.cmd: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibPreBuild.cmd: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibProduction.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibRelease.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherLibResource.h: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherPostBuild.cmd: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherPreBuild.cmd: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherProduction.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherRelease.props: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/WinLauncherResource.h: Removed.
        * MiniBrowser/win/WinLauncher.vcxproj/small.ico: Removed.
        * MiniBrowser/win/WinLauncherReplace.h: Removed.
        * MiniBrowser/win/WinLauncherWebHost.cpp: Removed.
        * MiniBrowser/win/WinLauncherWebHost.h: Removed.
        * MiniBrowser/win/WinMain.cpp:
        * WinLauncher: Removed.
        * WinLauncher/AccessibilityDelegate.cpp: Removed.
        * WinLauncher/AccessibilityDelegate.h: Removed.
        * WinLauncher/CMakeLists.txt: Removed.
        * WinLauncher/Common.cpp: Removed.
        * WinLauncher/DOMDefaultImpl.cpp: Removed.
        * WinLauncher/DOMDefaultImpl.h: Removed.
        * WinLauncher/PageLoadTestClient.cpp: Removed.
        * WinLauncher/PageLoadTestClient.h: Removed.
        * WinLauncher/PrintWebUIDelegate.cpp: Removed.
        * WinLauncher/PrintWebUIDelegate.h: Removed.
        * WinLauncher/ResourceLoadDelegate.cpp: Removed.
        * WinLauncher/ResourceLoadDelegate.h: Removed.
        * WinLauncher/WebDownloadDelegate.cpp: Removed.
        * WinLauncher/WebDownloadDelegate.h: Removed.
        * WinLauncher/WinLauncher.cpp: Removed.
        * WinLauncher/WinLauncher.h: Removed.
        * WinLauncher/WinLauncher.vcxproj: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.ico: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.rc: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCF.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCFLite.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCommon.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibPostBuild.cmd: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibPreBuild.cmd: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherPostBuild.cmd: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherPreBuild.cmd: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherResource.h: Removed.
        * WinLauncher/WinLauncher.vcxproj/small.ico: Removed.
        * WinLauncher/WinLauncherReplace.h: Removed.
        * WinLauncher/WinLauncherWebHost.cpp: Removed.
        * WinLauncher/WinLauncherWebHost.h: Removed.
        * WinLauncher/WinMain.cpp: Removed.
        * WinLauncher/resource.h: Removed.
        * WinLauncher/stdafx.cpp: Removed.
        * WinLauncher/stdafx.h: Removed.
        * win/AssembleBuildLogs/AssembleLogs.cmd:

2015-08-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Simplify menu handling code in WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=148461

        Reviewed by Zalan Bujtas.

        Revise 'ToggleMenuItem' to return a boolean value indicating if
        it handled the message. Revise WndProc to use this to decide if it
        should pass the message on to the default handler, rather than
        duplicating the logic in both places.
        
        * WinLauncher/Common.cpp:
        (ToggleMenuItem): Return true if the menu item message was handled.
        (WndProc): If 'ToggleMenuItem' did not handle the message, pass
        the message tothe default handler.

2015-08-26  Csaba Osztrogonác  <ossy@webkit.org>

        Remove unused code after r188948
        https://bugs.webkit.org/show_bug.cgi?id=148467

        Reviewed by Gyuyoung Kim.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformPreferences): Deleted.

2015-08-26  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK] REGRESSION(r188828): All performance tests and almost all layout tests crash
        https://bugs.webkit.org/show_bug.cgi?id=148377

        Reviewed by Carlos Garcia Campos.

        EFL and GTK don't support TestController::platformPreferences() yet which was introduced by r188828.
        It caused all crashes of layout test and performance test on EFL and GTK. So this patch implements
        TestController::platformPreferences() using WKPageGroupGetPreferences() which was previous thing for
        EFL and GTK at the moment.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformWillRunTest):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformPreferences):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformPreferences):

2015-08-25  Nan Wang  <n_wang@apple.com>

        AX: Enable accessibility/aria-controls.html test for mac
        https://bugs.webkit.org/show_bug.cgi?id=148458

        Reviewed by Chris Fleizach.

        Implemented ariaControlsElementAtIndex(unsigned index).

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):

2015-08-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove python tests for PassRefPtr 
        https://bugs.webkit.org/show_bug.cgi?id=148463

        Reviewed by Andy Estes.

        As we're removing uses of PassRefPtr, we need to remove all python tests for PassRefPtr as well.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (PassPtrTest): Deleted.
        (PassPtrTest.assert_pass_ptr_check): Deleted.
        (PassPtrTest.test_pass_ref_ptr_in_function): Deleted.
        (PassPtrTest.test_pass_other_type_ptr_in_function): Deleted.
        (PassPtrTest.test_pass_ref_ptr_return_value): Deleted.
        (PassPtrTest.test_ref_ptr_parameter_value): Deleted.
        (PassPtrTest.test_ref_ptr_member_variable): Deleted.
        (PassPtrTest.test_ref_ptr_member_variable.Foo): Deleted.

2015-08-25  Andy Estes  <aestes@apple.com>

        [iOS] run-webkit-tests fails if watchOS SDK is installed
        https://bugs.webkit.org/show_bug.cgi?id=148453

        Reviewed by David Kilzer.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Taught Simulator how to parse watchOS runtimes and devices.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Added tests.

2015-08-25  Aakash Jain  <aakash_jain@apple.com>

        iOS Simulator layout-tests fail to start while cleaning a directory structure if simulator is already running
        https://bugs.webkit.org/show_bug.cgi?id=148197
        rdar://problem/22334382

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/kill-old-processes: Add Simulator to the list of processes to kill (for iOS builders).
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort): Converted bundle id com.apple.iphonesimulator to a variable SIMULATOR_BUNDLE_ID.
        (IOSSimulatorPort._quitIOSSimulator): Common function to quit iOS Simulator.
        (IOSSimulatorPort.clean_up_test_run): Quit the simulator during the cleanup.
        (IOSSimulatorPort.check_sys_deps): No need to quit the simulator here as its now being quit in reset_preferences().
        (IOSSimulatorPort.reset_preferences): Quit the simulator before trying to delete associated data directory.

2015-08-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove PassRefPtr style check rule
        https://bugs.webkit.org/show_bug.cgi?id=148432

        Reviewed by Andreas Kling.

        PassRefPtr is being removed. Thus style rule needs to be removed as well.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_check_parameter_name_against_text): Deleted.
        (check_function_definition_and_pass_ptr): Deleted.
        (check_function_definition): Deleted.
        (check_pass_ptr_usage): Deleted.
        (process_line): Deleted.
        (CppChecker): Deleted.

2015-08-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Expose "Inverted Colors" option in WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=148451

        Reviewed by Tim Horton.

        Add the ability to toggle the "Inverted Colors" preference
        in WinLauncher.
        
        * WinLauncher/Common.cpp:
        (ToggleMenuItem): Toggle the feature when the menu item
        is selected.
        (WndProc): Recognize the new menu option.
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::setToDefaultPreferences): Launch with "Invert
        Colors" turned off.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Add menu
        entry for "Invert Colors".
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h:

2015-08-25  Nan Wang  <n_wang@apple.com>

        [Mac] accessibility/document-attributes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116636

        Reviewed by Chris Fleizach.

        Implemented documentURI() and documentEncoding().

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::documentEncoding):
        (AccessibilityUIElement::documentURI):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):

2015-08-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test gardening.

        Fix another case where the logging string is constructed using the variable 'frame',
        but the method argument is not given a name. This causes the global 'frame' value to
        be used, producing incorrect output.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didReceiveServerRedirectForProvisionalLoadForFrame): Use 'frame'
        argument.

2015-08-24  Tim Horton  <timothy_horton@apple.com>

        (Finally...) get rid of WKViewIOS
        https://bugs.webkit.org/show_bug.cgi?id=148404

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.mm:
        Mark tests that use WKBrowsingContextController as Mac-only.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::addNotificationListener):
        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp applicationDidEnterBackground:]):
        Import UIKit instead of depending on WKView.h to do so.

2015-08-24  Jason Marcell  <jmarcell@apple.com>

        Add support to dashboard for displaying Git SHA's as revisions.
        https://bugs.webkit.org/show_bug.cgi?id=148387

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (parseRevisionProperty): Added support to dashboard for displaying Git SHA's as revisions.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Added
        "isSVN" property to Dashboard.Repository.(OpenSource|Internal).

2015-08-24  Andy Estes  <aestes@apple.com>

        REGRESSION (r188851): WebKit2.BundleParameters fails on iOS

        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Specify LD_RUNPATH_SEARCH_PATHS correctly for iOS.

2015-08-23  Andy Estes  <aestes@apple.com>

        Addressed a missed piece of review feedback from r188851.

        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:

2015-08-23  Andy Estes  <aestes@apple.com>

        [Content Filtering] REGRESSION (r182356): Provisional URL is incorrect in didReceiveServerRedirectForProvisionalLoadForFrame when Content Filtering is enabled
        https://bugs.webkit.org/show_bug.cgi?id=147872
        rdar://problem/22044000

        Reviewed by Dan Bernstein.
        
        Added an API test.

        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Linked libWebCoreTestSupport in order to use MockContentFilter.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm: Added.
        (-[ServerRedirectNavigationDelegate webView:didStartProvisionalNavigation:]): Expect the initial request URL.
        (-[ServerRedirectNavigationDelegate webView:didReceiveServerRedirectForProvisionalNavigation:]): Expect the redirect URL.
        (-[ServerRedirectNavigationDelegate webView:didCommitNavigation:]):
        (TEST): Tested that -[WKWebView URL] is updated after a redirect when content filtering is enabled.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm: Added.
        (+[ServerRedirectPlugIn initialize]): Enable MockContentFilter.
        * TestWebKitAPI/cocoa/TestProtocol.h: Renamed from Tools/TestWebKitAPI/mac/TestProtocol.h.
        * TestWebKitAPI/cocoa/TestProtocol.mm: Renamed from Tools/TestWebKitAPI/mac/TestProtocol.mm.

2015-08-23  Andy Estes  <aestes@apple.com>

        Fixed the 32-bit Mac build after r188844.

        * TestWebKitAPI/WKWebViewConfigurationExtras.h:
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm:

2015-08-22  Andy Estes  <aestes@apple.com>

        [Cocoa] API tests using the Modern WebKit API should be able to create web process plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=148317

        Reviewed by Dan Bernstein.

        Added the ability for Modern WebKit API tests to create WKWebProcessPlugIns. A test can create a plug-in by
        creating a class that conforms to WKWebProcessPlugIn, adding it to the WebProcessPlugIn target, and using the
        WKWebViewConfiguration returned by +[WKWebViewConfiguration testwebkitapi_configurationWithTestPlugInClassName:]
        when creating WKWebViews.

        Since TestWebKitAPI relies on a bundle parameter to know which test class to instantiate in the plug-in, I also
        added a new API test for bundle parameters.

        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Added. Named the bundle TestWebKitAPI.wkbundle and
        named its executable TestWebKitAPI.bundle.
        * TestWebKitAPI/PlatformUtilities.h: Declared TestPlugInClassNameParameter.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added the WebProcessPlugIn target.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParameters.mm: Added.
        (TEST): Tested bundle parameters by verifying that parameter changes in the UI process are observed in the bundle.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParametersPlugIn.mm: Added.
        (-[BundleParametersPlugIn webProcessPlugIn:didCreateBrowserContextController:]): Started observing changes to a
        bundle parameter and asked for an initial notification.
        (-[BundleParametersPlugIn dealloc]): Stopped observing changes to a bundle parameter.
        (-[BundleParametersPlugIn observeValueForKeyPath:ofObject:change:context:]): When a bundle parameter changes,
        mirror its value in the main frame's JSContext.
        * TestWebKitAPI/WKWebViewConfigurationExtras.h: Added.
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm: Added.
        (+[WKWebViewConfiguration testwebkitapi_configurationWithTestPlugInClassName:]): Created a configuration with
        TestWebKitAPI's bundle URL and set a bundle parameter indicating the test plug-in's class name.
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm: Defined TestPlugInClassNameParameter.
        * TestWebKitAPI/cocoa/WebProcessPlugIn/Info.plist: Added. Set the principal class to WebProcessPlugIn.
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm: Added.
        (-[WebProcessPlugIn webProcessPlugIn:initializeWithObject:]): Forwarded to a newly-created test class instance.
        (-[WebProcessPlugIn respondsToSelector:]): Returned YES if the test class instance response.
        (-[WebProcessPlugIn forwardingTargetForSelector:]): Forwarded unimplemented methods to the test class instance.

2015-08-23  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r188828.

        * WebKitTestRunner/PlatformWebView.h:

2015-08-23  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Combined queues don't turn orange on internal failure
        https://bugs.webkit.org/show_bug.cgi?id=148356

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update):

2015-08-23  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Respect step's hidden flag
        https://bugs.webkit.org/show_bug.cgi?id=148357

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData):

2015-08-23  Nan Wang  <n_wang@apple.com>

        AX: Fix accessibility/deleting-iframe-destroys-axcache.html test
        https://bugs.webkit.org/show_bug.cgi?id=148328

        Reviewed by Darin Adler.

        We should only expose stringValue() when value attribute is set.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::stringValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::stringValue):

2015-08-23  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove style checking rule regarding OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=148360

        Reviewed by Darin Adler.

        OwnPtr and PassOwnPtr were totally removed though, style rule is still alive.
        Removed it.

        * Scripts/do-webcore-rename:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (PassPtrTest.test_pass_own_ptr_in_function): Deleted.
        (PassPtrTest.test_pass_ref_ptr_return_value): Deleted.
        (PassPtrTest.test_own_ptr_parameter_value): Deleted.
        (WebKitStyleTest.test_names): Deleted.

2015-08-22  Timothy Horton  <timothy_horton@apple.com>

        WebKitTestRunner should use WKWebView on OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=143743
        <rdar://problem/16947123>

        Reviewed by Anders Carlsson.
        Patch by Enrica Casucci and myself.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::windowSnapshotEnabled): Deleted.
        Add a PlatformWebView constructor that takes a WKWebViewConfiguration
        instead of WKContext and WKPageGroup.

        Remove the unused, always-true windowSnapshotEnabled().
        While technically some platforms don't have window snapshotting,
        they just return null instead of implementing windowSnapshotEnabled().

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):
        Delegate to the various platforms for creating PlatformWebView instances,
        for creating WKContexts, and for accessing WKPreferences,
        so that they can do special things (like, use WKWebView instead!).

        (WTR::TestController::resetPreferencesToConsistentValues):
        Make explicit WebKitTestRunner's desired default for two preferences
        which have differing defaults between the antique and modern API,
        for consistency's sake.

        (WTR::TestController::resetStateToConsistentValues):
        Add platformResetStateToConsistentValues.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        Adjust to the aforementioned removal of windowSnapshotEnabled().

        * WebKitTestRunner/ios/TestControllerCocoa.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformPreferences):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::TestController::platformInitializeConfiguration):
        Implement the new platform functions for the Modern WebKit2 API,
        in a new TestControllerCocoa file that is shared between iOS and Mac.
        
        For platformMaybeCreateContext, use the trick that we know we can cast
        the WKProcessPool to a WKContextRef to retrieve a WKContextRef from
        WKWebView's configuration.

        Ditto for WKPreferencesRef and WKPreferences.

        Remove user content filters on the WKWebView's userContentController.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        Move code into TestControllerCocoa.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::addUserScript):
        (WTR::TestRunner::addUserStyleSheet):
        Adopt WKBundlePage API for user scripts/sheets.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        Make and keep a WKWebView instead of a WKView.
        
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        Reach inside the WKWebView to the WKView when dispatching events.
        This is fairly ugly and we should come up with a better solution.
        Also, fix some flipping and style errors.

2015-08-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, attempt to fix GTK build after r188718

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2015-08-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188807, r188813, and r188815.
        https://bugs.webkit.org/show_bug.cgi?id=148349

        lots of 32-bit build problems, better to resolve separately
        and try again (Requested by thorton on #webkit).

        Reverted changesets:

        "WebKitTestRunner should use WKWebView on OS X and iOS"
        https://bugs.webkit.org/show_bug.cgi?id=143743
        http://trac.webkit.org/changeset/188807

        "Stop building WebKitTestRunner for 32-bit platforms"
        https://bugs.webkit.org/show_bug.cgi?id=143743
        http://trac.webkit.org/changeset/188813

        "Stop building WebKitTestRunner for 32-bit platforms"
        https://bugs.webkit.org/show_bug.cgi?id=143743
        http://trac.webkit.org/changeset/188815

2015-08-21  Tim Horton  <timothy_horton@apple.com>

        Stop building WebKitTestRunner for 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=143743
        <rdar://problem/16947123>

        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        This is a restriction on the valid set, not the desired set.

2015-08-21  Jason Marcell  <jmarcell@apple.com>

        Make Dashboard.Branches be objects of the form (repository, "branch name") and update existing code
        to work with these new objects.
        https://bugs.webkit.org/show_bug.cgi?id=148188

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype._normalizeQueueInfo): Renamed BuildbotQueue.branch to BuildbotQueue.branches.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView): Changed to work with new branch objects which represent a
        (repository, "branch name")-pair.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue): Renamed BuildbotQueue.branch to BuildbotQueue.branches.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Changed to work with new branch
        objects which represent a (repository, "branch name")-pair.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Ditto.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Ditto.
        (BuildbotQueueView.prototype._addDividerToPopover): Ditto.
        (BuildbotQueueView.prototype.revisionContentForIteration): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js: Renamed
        BuildbotQueue.branch to BuildbotQueue.branches.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.get defaultBranches): Changed to new (repository, "branch name") format.

2015-08-21  Tim Horton  <timothy_horton@apple.com>

        Stop building WebKitTestRunner for 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=143743
        <rdar://problem/16947123>

        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        WKWebView is not available on 32-bit OS X.

2015-08-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test correction after r188709.

        I removed a function argument that happened to be mirrored by a global
        value with the same name. This prevented a compile error, but testing
        showed that the wrong value was being used in the function.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::willPerformClientRedirectToURL): Put function argument
        back

2015-08-21  Timothy Horton  <timothy_horton@apple.com>

        WebKitTestRunner should use WKWebView on OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=143743
        <rdar://problem/16947123>

        Reviewed by Anders Carlsson.
        Patch by Enrica Casucci and myself.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::windowSnapshotEnabled): Deleted.
        Add a PlatformWebView constructor that takes a WKWebViewConfiguration
        instead of WKContext and WKPageGroup.

        Remove the unused, always-true windowSnapshotEnabled().
        While technically some platforms don't have window snapshotting,
        they just return null instead of implementing windowSnapshotEnabled().

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):
        Delegate to the various platforms for creating PlatformWebView instances,
        for creating WKContexts, and for accessing WKPreferences,
        so that they can do special things (like, use WKWebView instead!).

        (WTR::TestController::resetPreferencesToConsistentValues):
        Make explicit WebKitTestRunner's desired default for two preferences
        which have differing defaults between the antique and modern API,
        for consistency's sake.

        (WTR::TestController::resetStateToConsistentValues):
        Add platformResetStateToConsistentValues.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        Adjust to the aforementioned removal of windowSnapshotEnabled().

        * WebKitTestRunner/ios/TestControllerCocoa.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformPreferences):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::TestController::platformInitializeConfiguration):
        Implement the new platform functions for the Modern WebKit2 API,
        in a new TestControllerCocoa file that is shared between iOS and Mac.
        
        For platformMaybeCreateContext, use the trick that we know we can cast
        the WKProcessPool to a WKContextRef to retrieve a WKContextRef from
        WKWebView's configuration.

        Ditto for WKPreferencesRef and WKPreferences.

        Remove user content filters on the WKWebView's userContentController.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        Move code into TestControllerCocoa.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::addUserScript):
        (WTR::TestRunner::addUserStyleSheet):
        Adopt WKBundlePage API for user scripts/sheets.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        Make and keep a WKWebView instead of a WKView.
        
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        Reach inside the WKWebView to the WKView when dispatching events.
        This is fairly ugly and we should come up with a better solution.
        Also, fix some flipping and style errors.

2015-08-21  Alexey Proskuryakov  <ap@apple.com>

        Improve how UI events are dispatched by WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=148326

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        Removed asyncScrolling from mouseScrollByWithWheelAndMomentumPhases, it's now always
        asynchronous (and really, it has always been for the most part).

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseDown): Updated for WKBundlePagePostSynchronousMessage renaming.
        (WTR::EventSendingController::mouseUp): Ditto.
        (WTR::EventSendingController::mouseMoveTo): Ditto.
        (WTR::EventSendingController::mouseForceDown): Ditto.
        (WTR::EventSendingController::mouseForceUp): Ditto.
        (WTR::EventSendingController::mouseForceChanged): Ditto.
        (WTR::EventSendingController::leapForward): Ditto.
        (WTR::EventSendingController::scheduleAsynchronousClick): Ditto.
        (WTR::EventSendingController::keyDown): Ditto.
        (WTR::EventSendingController::scheduleAsynchronousKeyDown): Ditto.
        (WTR::EventSendingController::mouseScrollBy): Force a scrolling tree commit. It used
        to be done in custom WebKit2 code for test wheel event handling.
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases): Got rid of sync version.
        (WTR::EventSendingController::continuousMouseScrollBy): Added a FIXME. This one is weird.
        (WTR::EventSendingController::contextClick): Updated for WKBundlePagePostSynchronousMessage renaming.
        (WTR::EventSendingController::addTouchPoint): Ditto.
        (WTR::EventSendingController::updateTouchPoint): Ditto.
        (WTR::EventSendingController::setTouchModifier): Ditto.
        (WTR::EventSendingController::setTouchPointRadius): Ditto.
        (WTR::EventSendingController::touchStart): Ditto.
        (WTR::EventSendingController::touchMove): Ditto.
        (WTR::EventSendingController::touchEnd): Ditto.
        (WTR::EventSendingController::touchCancel): Ditto.
        (WTR::EventSendingController::clearTouchPoints): Ditto.
        (WTR::EventSendingController::releaseTouchPoint): Ditto.
        (WTR::EventSendingController::cancelTouchPoint): Ditto.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetWindowIsKey):
        (WTR::InjectedBundle::postSimulateWebNotificationClick):
        (WTR::InjectedBundle::isGeolocationProviderActive):
        (WTR::InjectedBundle::shouldProcessWorkQueue):
        Updated for WKBundlePagePostSynchronousMessage renaming.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::secureEventInputIsEnabled): Ditto.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Allow handling the new test style messages.
        (WTR::TestController::didReceiveKeyDownMessageFromInjectedBundle): Removed calls
        to WKPageSetShouldSendEventsSynchronously, which we no longer need.
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): Moved
        "MouseScrollBy" to async section, and got rid of WKPageSetShouldSendEventsSynchronously.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo): Got rid of WKPageSetShouldSendEventsSynchronously.
        (WTR::EventSenderProxy::keyDown): Ditto.
        (WTR::EventSenderProxy::mouseScrollBy): Ditto.
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Ditto.

2015-08-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Skip no-llint tests that fail due to running out of executable memory after r188969
        https://bugs.webkit.org/show_bug.cgi?id=148273

        Reviewed by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2015-08-21  Nan Wang  <n_wang@apple.com>

        [Mac] accessibility/selection-states.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116637

        Reviewed by Chris Fleizach.

        Implemented isSelectable() and isMultiSelectable().

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isSelectable):
        (AccessibilityUIElement::isMultiSelectable):
        (AccessibilityUIElement::isSelectedOptionActive):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::isVisible):

2015-08-21  Jason Marcell  <jmarcell@apple.com>

        Fix iteration over repositories on bot watcher's dashboard.

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Don't reuse the same index variable.

2015-08-20  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Revise PlatformWebView ctor according to r188718
        https://bugs.webkit.org/show_bug.cgi?id=148282

        This patch change PlatformWebView ctor's argument to use WKPageConfigurationRef
        instead of WKContextRef and WKPageGroupRef respectively.

        Reviewed by Gyuyoung Kim.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2015-08-20  Devin Rousso  <dcrousso+webkit@gmail.com>

        Unreviewed, changed Devin Rousso's email.

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

2015-08-20  Anders Carlsson  <andersca@apple.com>

        Use WKPageConfigurationRef in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=147996

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView initWithFrame:configurationRef:useThreadedScrolling:]):
        (WTR::PlatformWebView::PlatformWebView):
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:relatedToPage:useThreadedScrolling:]): Deleted.

2015-08-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update Windows tools for revised MIDL interfaces
        https://bugs.webkit.org/show_bug.cgi?id=148249

        Reviewed by Dean Jackson.

        This is a follow-up to Bug 148001.

        Revise the testing software to use compatible signatures and
        implementations to match the requirements of the IDL generated
        with the SAL annotations.

        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.cpp:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        * DumpRenderTree/win/HistoryDelegate.h:
        * DumpRenderTree/win/PolicyDelegate.cpp:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * WinLauncher/AccessibilityDelegate.cpp:
        * WinLauncher/AccessibilityDelegate.h:
        * WinLauncher/Common.cpp:
        * WinLauncher/DOMDefaultImpl.cpp:
        * WinLauncher/DOMDefaultImpl.h:
        * WinLauncher/PageLoadTestClient.cpp:
        * WinLauncher/PageLoadTestClient.h:
        * WinLauncher/PrintWebUIDelegate.cpp:
        * WinLauncher/PrintWebUIDelegate.h:
        * WinLauncher/ResourceLoadDelegate.cpp:
        * WinLauncher/ResourceLoadDelegate.h:
        * WinLauncher/WebDownloadDelegate.cpp:
        * WinLauncher/WebDownloadDelegate.h:
        * WinLauncher/WinLauncherWebHost.cpp:
        * WinLauncher/WinLauncherWebHost.h:
        * WinLauncher/WinMain.cpp:
        * win/DLLLauncher/DLLLauncherMain.cpp:

2015-08-20  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, shorten a test that runs too long and times out.

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

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        Clean up CMake build after r188673
        https://bugs.webkit.org/show_bug.cgi?id=148234

        Reviewed by Tim Horton.

        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        Define WIN_CAIRO so WinCairo executables can find the correct dlls in WebKitLibraries.
        gtest needs to be a static library on Windows to not crash.

2015-08-19  Alex Christensen  <achristensen@webkit.org>

        CMake Windows build should not include files directly from other Source directories
        https://bugs.webkit.org/show_bug.cgi?id=148198

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        Include cmakeconfig.h to properly define all enabled features.
        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/PlatformWin.cmake:

2015-08-19  Alex Christensen  <achristensen@webkit.org>

        Build TestWTF on Mac with CMake.
        https://bugs.webkit.org/show_bug.cgi?id=147972

        Reviewed by Tim Horton.

        TestWTF only depends on gtest and WTF instead of TestWebKitAPi depending on all of WebKit.
        Now I can run the WTF API tests after a few seconds of building instead of waiting for all of WebKit to build.

        * TestWebKitAPI/CMakeLists.txt:
        Added WTF as a dependency for platforms that do not have ForwardingHeadersForTestWebKitAPI_NAME.
        WTF was already a library that was linked, but having at least one item makes the syntax of add_dependencies work.
        * TestWebKitAPI/PlatformMac.cmake: Added.
        * TestWebKitAPI/config.h:
        Postpone some build fixes until WebKit builds completely on Mac with CMake.

2015-08-19  Brian Burg  <bburg@apple.com>

        Unreviewed, add Aleksandr Skachkov to the list of contributors.

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

2015-08-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r188548): [GTK] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=148154

        Reviewed by Martin Robinson.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest):
        Even if we don't need to add/override any settings in ViewOptions,
        we need to define this as an empty function to make it build.

2015-08-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Fix conversion-null warning in conversion.cpp of TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=148073

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WTF/Condition.cpp: Use EXPECT_FALSE instead of EXPECT_EQ.
        (TestWebKitAPI::TEST):

2015-08-18  Anders Carlsson  <andersca@apple.com>

        Fix test failure fallout from r188602 by using a V5 page ui client struct.

        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::setUpClients):

2015-08-18  Brian Burg  <bburg@apple.com>

        Web Inspector: load ProtocolTestStub from the WebInspectorUI bundle
        https://bugs.webkit.org/show_bug.cgi?id=147955

        Reviewed by Timothy Hatcher.

        To enable sharing of common test code between protocol and model tests,
        start loading the protocol TestStub.js through the WebInspectorUI bundle.

        This patch adds the read-only getter TestRunner.inspectorTestStubURL, which
        protocol-test.js uses to load the inspector frontend stub into its iframe
        from an arbitrary local file URL.

        * DumpRenderTree/TestRunner.cpp:
        (getInspectorTestStubURLCallback):
        (TestRunner::staticValues):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (SOFT_LINK_STAGED_FRAMEWORK):
        (TestRunner::inspectorTestStubURL):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/Configurations/Base.xcconfig:
        Since WebKitTestRunner now includes WebCore private headers, also search
        for the WebCore framework inside the WebKit umbrella framework.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2015-08-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix GTK build.

        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        (TestWebKitAPI::TEST):

2015-08-17  Filip Pizlo  <fpizlo@apple.com>

        Replace all remaining uses of WTF::Mutex with WTF::Lock
        https://bugs.webkit.org/show_bug.cgi?id=148089

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreadsMutex):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * TestWebKitAPI/Tests/WTF/Condition.cpp: Fixed a bug in the test that I found from turning the test into a benchmark.
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        (TestWebKitAPI::TEST):

2015-08-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188539, r188544, r188552, and
        r188564.
        https://bugs.webkit.org/show_bug.cgi?id=148122

        Broke tests and some build styles (Requested by ap on
        #webkit).

        Reverted changesets:

        "Web Inspector: load ProtocolTestStub from the WebInspectorUI
        bundle"
        https://bugs.webkit.org/show_bug.cgi?id=147955
        http://trac.webkit.org/changeset/188539

        "Web Inspector: split TestStub.js into multiple files and
        modernize it"
        https://bugs.webkit.org/show_bug.cgi?id=148077
        http://trac.webkit.org/changeset/188544

        "Web Inspector: InspectorTest should be a subclass of
        TestHarness"
        https://bugs.webkit.org/show_bug.cgi?id=148079
        http://trac.webkit.org/changeset/188552

        "Unreviewed internal build fix attempt after r188539."
        http://trac.webkit.org/changeset/188564

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Remove support for composite fonts
        https://bugs.webkit.org/show_bug.cgi?id=147920

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/fonts/SampleFont.sfont: Removed.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet): Deleted.
        (activateTestingFonts): Deleted.
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet): Deleted.
        (WTR::activateFonts): Deleted.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/SampleFont.sfont: Removed.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet): Deleted.

2015-08-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Unreviewed internal build fix attempt after r188539.

        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build

        Unreviewed.

        * TestWebKitAPI/Tests/WTF/StringHasher.cpp:

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        Build Debug Suffix on Windows with CMake
        https://bugs.webkit.org/show_bug.cgi?id=148083

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        Add DEBUG_SUFFIX

2015-08-17  Anders Carlsson  <andersca@apple.com>

        Simplify how PlatformWebViews are created when view options change
        https://bugs.webkit.org/show_bug.cgi?id=148093

        Reviewed by Sam Weinig.

        Instead of letting each port dictate when the PlatformWebView should be recreated we now do the following:

        TestController::ensureViewSupportsOptionsForTest gets the view options for a test by calling
        TestController::viewOptionsForTest, which returns a filled in ViewOptions struct for a given test. It also allows
        ports to add/override settings by calling TestController::updatePlatformSpecificViewOptionsForTest.

        If the current PlatformWebView doesn't support the given view options, delete the web view and create a new one.

        Also, get rid of the first call to TestController::createWebViewWithOptions in TestController::initialize and
        always rely on TestController::ensureViewSupportsOptionsForTest creating a PlatformWebView for us.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::shouldUseFixedLayout):
        (WTR::TestController::viewOptionsForTest):
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        (WTR::TestController::configureViewForTest):
        (WTR::TestController::initialize): Deleted.
        (WTR::TestController::ensureViewSupportsOptions): Deleted.
        (WTR::TestController::updateLayoutTypeForTest): Deleted.
        (WTR::TestController::platformConfigureViewForTest): Deleted.
        (WTR::TestController::platformResetPreferencesToConsistentValues): Deleted.
        (WTR::TestController::run): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::shouldUseFixedLayout):
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest):
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::updatePlatformSpecificViewOptionsForTest):
        (WTR::TestController::platformConfigureViewForTest):

2015-08-17  Sam Weinig  <sam@webkit.org>

        API::PageConfiguration's sessionID needs to be set whenever the API::WebsiteDataStore is set
        https://bugs.webkit.org/show_bug.cgi?id=148097

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp:
        Add tests for WebsiteDataStores in the WKPageConfiguration.

2015-08-17  Brian Burg  <bburg@apple.com>

        Web Inspector: load ProtocolTestStub from the WebInspectorUI bundle
        https://bugs.webkit.org/show_bug.cgi?id=147955

        Reviewed by Timothy Hatcher.

        To enable sharing of common test code between protocol and model tests,
        start loading the protocol TestStub.js through the WebInspectorUI bundle.

        This patch adds the read-only getter TestRunner.inspectorTestStubURL, which
        protocol-test.js uses to load the inspector frontend stub into its iframe
        from an arbitrary local file URL.

        * DumpRenderTree/TestRunner.cpp:
        (getInspectorTestStubURLCallback):
        (TestRunner::staticValues):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (SOFT_LINK_STAGED_FRAMEWORK):
        (TestRunner::inspectorTestStubURL):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2015-08-17  Saam barati  <sbarati@apple.com>

        Change email address from saambarati1@gmail.com to sbarati@apple.com

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

2015-08-17  Jason Marcell  <jmarcell@apple.com>

        Refactor BuildbotQueueView._presentPopoverForPendingCommits to work more generically with
        repositories other than "openSource" and "internal".
        https://bugs.webkit.org/show_bug.cgi?id=147961

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Refactored to work more
        generically with repositories other than "openSource" and "internal".

2015-08-17  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard shows yellow when crash-only queues have too many failures
        https://bugs.webkit.org/show_bug.cgi?id=148081

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2015-08-11  Andy Estes  <aestes@apple.com>

        [Cocoa] Add redirect support to CustomProtocolManager
        https://bugs.webkit.org/show_bug.cgi?id=147871

        Reviewed by Dan Bernstein.

        Updated WebKit2CustomProtocolsTest.MainResource to generate a redirect response.

        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST): Unregesitered TestProtocol.
        * TestWebKitAPI/Tests/WebKit2/custom-protocol-sync-xhr.html: Changed scheme to http.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (-[CustomProtocolsLoadDelegate browsingContextControllerDidStartProvisionalLoad:]): Expected a certain provisional URL.
        (-[CustomProtocolsLoadDelegate browsingContextControllerDidReceiveServerRedirectForProvisionalLoad:]): Ditto.
        (-[CustomProtocolsLoadDelegate browsingContextControllerDidCommitLoad:]): Expected a certain committed URL.
        (-[CustomProtocolsLoadDelegate browsingContextControllerDidFinishLoad:]): Expected isLoading to be false.
        (TestWebKitAPI::TEST): Used the new load delegate and unregistered TestProtocol.
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        (TestWebKitAPI::TEST): Unregistered TestProtocol.
        * TestWebKitAPI/mac/TestProtocol.mm: Changed scheme to http.
        (+[TestProtocol canInitWithRequest:]): Changed to use property syntax.
        (-[TestProtocol startLoading]): Taught to handle redirect responses.

2015-08-13  Andy Estes  <aestes@apple.com>

        [Cocoa] Downloads do not start if policy decision is made asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=147985

        Reviewed by Brady Eidson.

        Added a new API test.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[AsynchronousDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[AsynchronousDownloadDelegate _downloadDidStart:]):
        (TEST):

2015-08-14  Commit Queue  <commit-queue@webkit.org>

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

        webkit-patch generates incorrect patches that cannot be
        applied (Requested by dydz on #webkit).

        Reverted changeset:

        "Call fixChangeLogPatch when generating patches from webkit-
        patch"
        https://bugs.webkit.org/show_bug.cgi?id=147248
        http://trac.webkit.org/changeset/187357

2015-08-14  Jason Marcell  <jmarcell@apple.com>

        Refactor BuildbotQueueView._appendPendingRevisionCount to work more generically with repositories
        other than "openSource" and "internal".
        https://bugs.webkit.org/show_bug.cgi?id=147938

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Refactored to work more generically with
        repositories other than "openSource" and "internal".

2015-08-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, shorten another test that is timing out.

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

2015-08-13  Aakash Jain  <aakash_jain@apple.com>

        AppScale: Assertion hit when hovering a webkit-queue bubble
        https://bugs.webkit.org/show_bug.cgi?id=147997

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueue.js:
        (BubbleQueue.prototype.loadDetailedStatus): Strip off http(s) before asserting.

2015-08-13  Lucas Forschler  <lforschler@apple.com>

        Teach Scripts/copy-webkitlibraries-to-product-directory to copy the El Capitan Library.
        
        Unreviewed.
        
        * Scripts/copy-webkitlibraries-to-product-directory:

2015-08-13  Dewei Zhu  <dewei_zhu@apple.com>

        Run benchmark customized Dromaeo should not assume there is an internet connection.
        https://bugs.webkit.org/show_bug.cgi?id=147995

        Reviewed by Ryosuke Niwa.

        Add several dependency js libs to local.

        * Scripts/webkitpy/benchmark_runner/data/patches/Dromaeo.patch:

2015-08-13  Filip Pizlo  <fpizlo@apple.com>

        WTF should have a compact Condition object to use with Lock
        https://bugs.webkit.org/show_bug.cgi?id=147986

        Reviewed by Geoffrey Garen.

        Add a test for WTF::Condition.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Condition.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest): Change the name of the thread.

2015-08-13  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, shorten another test. It's timing out in debug on some bot.

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

2015-08-12  Filip Pizlo  <fpizlo@apple.com>

        WTF::Lock should not suffer from the thundering herd
        https://bugs.webkit.org/show_bug.cgi?id=147947

        Reviewed by Geoffrey Garen.

        Add testing that checks that locks return to a pristine state after contention is over.

        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::LockInspector::isFullyReset):
        (TestWebKitAPI::runLockTest):
        (TestWebKitAPI::TEST):

2015-08-12  Dewei Zhu  <dewei_zhu@apple.com>

        Benchmarks supported by run_benchmark script should not assume we have internet access.
        https://bugs.webkit.org/show_bug.cgi?id=147959

        Reviewed by Ryosuke Niwa.

        For JSBench we should not request jquery.min.js from google through the internet.

        * Scripts/webkitpy/benchmark_runner/data/patches/JSBench.patch:

2015-08-12  Jason Marcell  <jmarcell@apple.com>

        Refactor BuildbotQueueView.revisionContentForIteration to work more generically with repositories
        other than "openSource" and "internal".
        https://bugs.webkit.org/show_bug.cgi?id=147796

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): The "repository" parameter
        is now a repository object instead of the repository name, thus we don't have to pass the "trac"
        object in separately. Also added an assertion to see if the given repository is in iteration.revision,
        and another assertion that, if the previousIteration is non-null, the given repository is in
        previousIteration.revision.
        (BuildbotQueueView.prototype.revisionContentForIteration): Refactored to work more generically
        with repositories other than "openSource" and "internal". Also added an assertion that the returned
        fragment has at least one child node.

2015-08-12  Simon Fraser  <simon.fraser@apple.com>

        Add a tool that dumps class and struct member layout, showing padding
        https://bugs.webkit.org/show_bug.cgi?id=147898

        Reviewed by Zalan Bujtas.
        
        This 'dump-class-layout' script uses the lldb Python bindings to collect data
        about data member layout, and displays it.
        
        Sample output:

              +0 { 72} WTF::ListHashSet<WebCore::URL, WebCore::URLHash>::Node
              +0 < 56>     WebCore::URL m_value;
              +0 <  8>         WTF::String m_string;
              +0 <  8>             WTF::RefPtr<WTF::StringImpl> m_impl;
              +0 <  8>                 WTF::StringImpl * m_ptr;
              +8 <  1>         bool:1 m_isValid;
              +8 <  1>         bool:1 m_protocolIsInHTTPFamily;
              +9 <  3>         <PADDING>
             +12 <  4>         int m_schemeEnd;
             +16 <  4>         int m_userStart;
             +20 <  4>         int m_userEnd;
             +24 <  4>         int m_passwordEnd;
             +28 <  4>         int m_hostEnd;
             +32 <  4>         int m_portEnd;
             +36 <  4>         int m_pathAfterLastSlash;
             +40 <  4>         int m_pathEnd;
             +44 <  4>         int m_queryEnd;
             +48 <  4>         int m_fragmentEnd;
             +52 <  4>         <PADDING>
             +52 <  4>     <PADDING>
             +56 <  8>     WTF::ListHashSetNode<WebCore::URL> * m_prev;
             +64 <  8>     WTF::ListHashSetNode<WebCore::URL> * m_next;
            Total byte size: 72
            Total pad bytes: 11
            Padding percentage: 15.28 %

        * Scripts/dump-class-layout: Added.
        (webkit_build_dir):
        (developer_dir):
        (import_lldb):
        (find_build_directory):
        (verify_type):
        (verify_type_recursive):
        (dump_class):
        (main):
        (main.or):

2015-08-12  Alex Christensen  <achristensen@webkit.org>

        Fix Debug CMake builds on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147940

        Reviewed by Chris Dumez.

        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        The BitmapImage test is not enabled on the AppleWin port.
        * WinLauncher/CMakeLists.txt:
        Debug builds need /NODEFAULTLIB:MSVCRTD, too.

2015-08-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. run-gtk-tests: Use a longer timeout for slow tests.

        In r188125 I added a way to mark tests as slow to use a longer
        timeout. But it seems it was not enough for
        WTF_Lock.ContendedShortSection, so let's try again with a longer
        timeout now.

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

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

        Allow --debug option in run-jsc
        https://bugs.webkit.org/show_bug.cgi?id=147923

        Reviewed by Csaba Osztrogonác.

        When `--debug` option is specified in run-jsc, it runs the JSC shell built in the debug mode.

        * Scripts/run-jsc:

2015-08-11  Alex Christensen  <achristensen@webkit.org>

        Fix test after build fix in r188286.
        https://bugs.webkit.org/show_bug.cgi?id=147907

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        sleep_for can now be used, but we need to include <thread>

2015-08-11  Filip Pizlo  <fpizlo@apple.com>

        Always use a byte-sized lock implementation
        https://bugs.webkit.org/show_bug.cgi?id=147908

        Reviewed by Geoffrey Garen.

        All previous tests of Lock are now tests of WordLock. All previous tests of ByteLock are
        now tests of Lock.

        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest):
        (TestWebKitAPI::TEST):

2015-08-11  Alexey Proskuryakov  <ap@apple.com>

        Make ASan build not depend on asan.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=147840
        rdar://problem/21093702

        Reviewed by Daniel Bates.

        * asan/asan.xcconfig:
        * asan/webkit-asan-ignore.txt: Removed. It's no longer needed, as unsafe functions
        are now marked in source code.

2015-08-11  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, shorten another test since it timed out.

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

2015-08-11  Mark Lam  <mark.lam@apple.com>

        Fix names of Lock tests: should be "Contended", not "Contented".
        https://bugs.webkit.org/show_bug.cgi?id=147905

        Reviewed by Saam Barati.

        We're testing the behavior of lock contention (i.e. when threads contend), not
        whether the locks are happy (contented).

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner.__init__): Deleted.
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest):
        (TestWebKitAPI::TEST):

2015-08-11  Alex Christensen  <achristensen@webkit.org>

        Update WinCairoRequirements to VS2015.

        * Scripts/update-webkit-wincairo-libs:
        Update WinCairoRequirements location.

2015-08-11  Jason Marcell  <jmarcell@apple.com>

        Substituted Dashboard.Repository.OpenSource.trac for webkitTrac and Dashboard.Repository.Internal.trac
        for internalTrac.
        https://bugs.webkit.org/show_bug.cgi?id=147805

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Substituted Dashboard.Repository.OpenSource.trac for webkitTrac and
        Dashboard.Repository.Internal.trac for internalTrac.
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Added local variables webkitTrac
        and internalTrac for Dashboard.Repository.OpenSource.trac and Dashboard.Repository.Internal.trac,
        respectively.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Ditto.
        (BuildbotQueueView.prototype.revisionContentForIteration): Substituted
        Dashboard.Repository.OpenSource.trac for webkitTrac and Dashboard.Repository.Internal.trac for
        internalTrac.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer): Ditto.
        (Analyzer.prototype.analyze): Ditto.

2015-08-11  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, gardening these tests to run faster so that they don't timeout on slower OSes.

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

2015-08-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch Windows build to Visual Studio 2015
        https://bugs.webkit.org/show_bug.cgi?id=147887
        <rdar://problem/22235098>

        Reviewed by Alex Christensen.

        Update Visual Studio project file settings to use the current Visual
        Studio and compiler. Continue targeting binaries to run on our minimum
        supported configuration of Windows 7.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * Scripts/webkitdirs.pm: Modify our Visual Studio search routines to
        prefer the newer MSBuild included in Visual Studio 2015.
        (visualStudioInstallDir):
        (msBuildInstallDir):
        (visualStudioVersion):
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/record-memory/record-memory.vcxproj:

2015-08-11  Alex Christensen  <achristensen@webkit.org>

        Another speculative build fix after r188280.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        std::this_thread is too modern c++ for VS2013 and supported GCC versions, 
        so let's go back to usleep and I made something close to usleep, but with much lower resolution.

2015-08-11  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r188280.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        Include DataLog.h, and usleep is not available on Windows, so I used what I think is the c++11 equivalent.

2015-08-10  Filip Pizlo  <fpizlo@apple.com>

        WTF should have a ParkingLot for parking sleeping threads, so that locks can fit in 1.6 bits
        https://bugs.webkit.org/show_bug.cgi?id=147665

        Reviewed by Mark Lam.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp: Added.
        (TestWebKitAPI::TEST):

2015-08-11  Brian Burg  <bburg@apple.com>

        webkit-patch should not explode when $EDITOR is set incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=147884

        Reviewed by Darin Adler.

        If $EDITOR doesn't exist, log a warning and continue.

        * Scripts/webkitpy/common/system/user.py: 
        (User.edit):
        (User.edit_changelog):

2015-08-11  Dan Bernstein  <mitz@apple.com>

        Reverted r188255, because it turned out that delegates do nonot need this information.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/PrintFrame.mm: Removed.

2015-08-11  Dan Bernstein  <mitz@apple.com>

        [Cocoa] The UI delegate can't tell if printing was user-initiated
        https://bugs.webkit.org/show_bug.cgi?id=147869

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/PrintFrame.mm: Added.
        (-[PrintFrameController webView:didFinishNavigation:]):
        (-[PrintFrameController _webView:printFrame:userInitiated:]):
        (TEST):

2015-08-10  Alex Christensen  <achristensen@webkit.org>

        Another build fix after r188239.

        * TestWebKitAPI/PlatformWin.cmake:
        Link with more libraries.
        * WinLauncher/CMakeLists.txt:
        /NODEFAULTLIB:MSVCRT is not just needed for AppleWin.

2015-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r188237.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder.__enter__):

2015-08-10  Dewei Zhu  <dewei_zhu@apple.com>

        Update ReadMe and correct the way to use abstract abstract class.
        https://bugs.webkit.org/show_bug.cgi?id=147860

        Reviewed by Ryosuke Niwa.

        Update ReadMe according to recent changes. And set ABCMeta to be the __metaclass__ of BrowserDriver and HTTPServerDriver,
        so that all methods annotated by 'abstractmethod' will check whether they are implememnt by subclasses.

        * Scripts/webkitpy/benchmark_runner/README.md:
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.restore_env):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver):
        (HTTPServerDriver.set_device_id):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.get_return_code):
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver.set_device_id):

2015-08-10  Alex Christensen  <achristensen@webkit.org>

        Build TestWebKitAPI with CMake on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147851

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        Removed TestJavaScriptCore because JavaScriptCore's API tests are elsewhere and this was just making an empty binary.
        Surrounded WebKit2-specific features with ENABLE_WEBKIT2 checks.
        Include directories after the Platform*.cmake is included because HostWindow.h needs to be found in Tools/TestWebKitAPI/win 
        before we look in Source/WebCore/platform, where another file named HostWindow.h exists.
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        Windows needs all the binaries to be in the same directory to find gtest.dll and the other dlls.
        I did this without changing the directory structure of the existing EFL and GTK builds.
        * TestWebKitAPI/PlatformWin.cmake: Added.
        * TestWebKitAPI/win/main.cpp:
        (main):
        (dllLauncherEntryPoint):
        Added so we can launch TestWebKitAPI executables after finding the AAS directory.
        * WinLauncher/CMakeLists.txt:
        AppleWin port needs /NODEFAULTLIB:MSVCRT.

2015-08-10  Dewei Zhu  <dewei_zhu@apple.com>

        Make cleanup more robust and minor code cleaning in run benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=147800

        Reviewed by Ryosuke Niwa.

        Use 'finnaly' block to make sure cleanup code is always executed.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (built_benchmark):
        (built_benchmark.__init__):
        (built_benchmark.__enter__):
        (built_benchmark.__exit__):
        (test_environment):
        (test_environment.__init__):
        (test_environment.__enter__):
        (test_environment.__exit__):
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute):
        (BenchmarkRunner._dump):
        (BenchmarkRunner._wrap):
        (BenchmarkRunner): Deleted.
        (BenchmarkRunner._cleanup): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.close_browsers):
        (BrowserDriver):
        (BrowserDriver.restore_env):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.__init__): We do not actually need to know external ip address for now.

2015-08-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Compile warning (-Wsign-compare) on 32-bits at WebCore/platform/FileSystem.cpp
        https://bugs.webkit.org/show_bug.cgi?id=146414

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::TEST): Improving testing of WTF::isInBounds.

2015-08-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test  /webkit2/WebKitWebView/submit-form is flaky
        https://bugs.webkit.org/show_bug.cgi?id=147727

        Reviewed by Sergio Villar Senin.

        I think it was not this test in particular, but
        /webkit2/WebKitWebView/custom-charset that is affecting the
        others. This is because changing the encoding reloads the page,
        but we don't wait for the page to be reloaded, so when the test
        finishes and other test starts the web process is still reloading
        the page.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip /webkit2/WebKitWebView/submit-form.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewCustomCharset): Wait until page is reloaded after
        changing the charset.

2015-08-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip GTK+ test /webkit2/WebKitWebView/install-missing-plugins-permission-request.

        It's timing out in the bots. My guess is that there's no installer
        installed in the bots and gst_install_plugins_supported() returns
        false, so we don't even get a permission request because no
        installer will be launched.

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

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        [GTK] Another build fix after r188157.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::viewSupportsOptions):
        Name all the things correctly!

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        [EFL, GTK] Build fix after r188176.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        I moved forwarding headers out of a unix subdirectory because I am using them on Windows now.

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        [GTK] Speculative build fix after r188157.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        Update parameter list.

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        Build more testing binaries with CMake on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147799

        Reviewed by Brent Fulgham.

        * DumpRenderTree/CMakeLists.txt:
        Build TestNetscapePlugin.
        * DumpRenderTree/PlatformWin.cmake:
        Build ImageDiff and add files necessary for TestNetscapePlugin on Windows.
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders: Added.
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit: Added.
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Copied from DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npapi.h.
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Copied from DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npfunctions.h.
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Copied from DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npruntime.h.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npapi.h: Removed.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npfunctions.h: Removed.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npruntime.h: Removed.

2015-08-07  Jason Marcell  <jmarcell@apple.com>

        Refactor BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions to be more generic
        https://bugs.webkit.org/show_bug.cgi?id=147667

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.compareIterations): Refactored to work more generically with repositories
        other than "openSource" and "internal".
        (BuildbotQueue.prototype.compareIterationsByRevisions): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        (Dashboard.get sortedPlatforms): Added. Returns a sorted array of platforms.
        (Dashboard.get sortedRepositories): Added. Returns a sorted array of repositories.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady): Using Dashboard.sortedPlatforms instead of sortedPlatforms.
        (sortedPlatforms): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsMain.js:
        (buildQueuesTable): Using Dashboard.sortedPlatforms instead of sortedPlatforms.
        (sortedPlatforms): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (sortDictionariesByOrder): Added. Takes an array of dictionaries that have an "order" property
        and sorts them by this property returning the new sorted array.

2015-08-07  Filip Pizlo  <fpizlo@apple.com>

        Lightweight locks should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=147545

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Lock.cpp: Added.
        (TestWebKitAPI::runLockTest):
        (TestWebKitAPI::TEST):

2015-08-07  Anders Carlsson  <andersca@apple.com>

        Fix a tyop.

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

2015-08-07  Alexey Proskuryakov  <ap@apple.com>

        Update AppEngine app version numbers to the latest commit.

        * QueueStatusServer/app.yaml:
        * TestResultServer/app.yaml:

2015-08-07  Anders Carlsson  <andersca@apple.com>

        Simplify WKTR's view options
        https://bugs.webkit.org/show_bug.cgi?id=147791

        Reviewed by Sam Weinig.

        Instead of using a WKDictionaryRef, just use a struct for the options.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::options):
        (WTR::PlatformWebView::viewSupportsOptions): Deleted.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptions):
        (WTR::TestController::updateLayoutTypeForTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/ViewOptions.h: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):

2015-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Running tests for a long time results in some tests running very slowly (throttling)
        https://bugs.webkit.org/show_bug.cgi?id=147718

        Reviewed by Chris Dumez.

        Follow-up, make DumpRenderTree consistent with WebKitTestRunner.
        Although COCOA ports default this setting to be disabled in WebKit1,
        we should make both test harnesses disable the setting for consistency.

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

2015-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Use a specific version of Speedometer in run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=147769

        Reviewed by Chris Dumez.

        Use the current latest revision as we work towards the bug 147768 (Update frameworks in Speedometer).

        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan:

2015-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        twisted_http_server.py should support --port
        https://bugs.webkit.org/show_bug.cgi?id=147771

        Reviewed by Chris Dumez.

        Added the option. This makes the script more useful on its own.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WTF unit tests are timing out in the bots
        https://bugs.webkit.org/show_bug.cgi?id=147777

        Reviewed by Filip Pizlo.

        Add a way to mark google unit tests as slow and add
        WTF_Lock.ContentedShortSection to the list. In case of slow test
        we use the double of the given timeout for that particular test.

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

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests should not stop when a google test case fails
        https://bugs.webkit.org/show_bug.cgi?id=147778

        Reviewed by Philippe Normand.

        For glib based tests we run the test runner with the -k option,
        but for google tests we are aborting as soon as we find a failure.

        * Scripts/run-gtk-tests:
        (TestRunner._run_google_test_suite): Use a global return code that
        is set to 1 when any test has failed.

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Do not automatically show PackageKit codec installation notifications
        https://bugs.webkit.org/show_bug.cgi?id=135973

        Reviewed by Philippe Normand.

        Handle the missing media plugins installation permission request
        in MiniBrowser and add a test case for the new API.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePermissionRequest):
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (permissionRequestCallback):
        (testInstallMissingPluginsPermissionRequest):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (methodCallCallback):

2015-08-06  Joseph Pecoraro  <pecoraro@apple.com>

        Running tests for a long time results in some tests running very slowly (throttling)
        https://bugs.webkit.org/show_bug.cgi?id=147718

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Ensure throttling settings are disabled for tests for all ports, as
        COCOA ports default to having these setting enabled. Note, there is
        still other timer throttling not covered by these setting.

2015-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        http_server_driver and benchmark_builder should not be in run-benchmark's plan files
        https://bugs.webkit.org/show_bug.cgi?id=147752

        Reviewed by Chris Dumez.

        Removed BenchmarkBuilderFactory since we have exactly one subclass of BenchmarkBuilder.

        Also made HTTPServerDriverFactory instantiate the appropriate HTTP server based on the platform name instead of HTTP server name.
        This allows us to remove --http-server-driver option from run-benchmark, which was added to support the HTTP server for iOS.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder: Removed.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py: Moved from benchmark_runner/benchmark_builder/generic_benchmark_builder.py.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py: Removed.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py: Removed.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: Moved to benchmark_runner/benchmark_builder.py.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__): No longer takes http_server_driver_override as an argument since this is not handled by
        HTTPServerDriverFactory taking the platform name as an argument.
        (BenchmarkRunner.execute): Directly instantiate BenchmarkBuilder.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan: Removed http_server_driver and benchmark_builder.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/octane.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py:
        (http_server_driver_loader): Register http server drivers via supported platform names instead of http server names.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver): Replaced name by platforms.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver): Ditto.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args): Removed --http-server-driver option.
        (start): Ditto.

2015-08-06  Chris Dumez  <cdumez@apple.com>

        Toggle GPS state based on page visibility to save battery
        https://bugs.webkit.org/show_bug.cgi?id=147685

        Reviewed by Benjamin Poulain.

        Add testRunner.isGeolocationProviderActive() test support function.

        * DumpRenderTree/TestRunner.cpp:
        (isGeolocationProviderActiveCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/MockGeolocationProvider.h:
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider isActive]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::isGeolocationProviderActive):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::isGeolocationProviderActive):
        * WebKitTestRunner/GeolocationProviderMock.h:
        (WTR::GeolocationProviderMock::isActive):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::isGeolocationProviderActive):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isGeolocationProviderActive):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isGeolocationProviderActive):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2015-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        Automate JSBench with run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=147716

        Reviewed by Chris Dumez.

        Added JSBench plan to run-benchmark.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:
        (GenericBenchmarkBuilder.prepare): Pass in the archive type to _fetch_remote_archive.
        (GenericBenchmarkBuilder._fetch_remote_archive): Added the support for extracting files from tar.gz in addition to zip.
        * Scripts/webkitpy/benchmark_runner/data/patches/Dromaeo.patch: Fixed the coding style.
        * Scripts/webkitpy/benchmark_runner/data/patches/JSBench.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Fixed the coding style.
        * Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan: Specified the archive type.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan: Specified the archive type.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan: Ditto.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Fixed the coding style.
        * Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan: Specified the archive type.
        * Scripts/webkitpy/benchmark_runner/data/plans/octane.plan: Ditto.

2015-08-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Pass-through the undefined options in run-jsc
        https://bugs.webkit.org/show_bug.cgi?id=147717

        Undefined options in run-jsc is just passed to the actual jsc shell.
        We can execute `Tools/Scripts/run-jsc -d`.

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc:

2015-08-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip GTK+ test /webkit2/WebKitWebView/submit-form.

        It's flaky.

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

2015-08-06  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.15.0
        https://bugs.webkit.org/show_bug.cgi?id=147450

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-08-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Unksip TestContextMenu GTK+ API test.

        This has been skipped for a long time, and it's very
        unconvenient. It has never failed for me locally, so let's try
        again to see if it works in the bots. I'll skip it again if it
        keeps failing.

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

2015-08-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/187972.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreadsMutex):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        (TestWebKitAPI::TEST):

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

        Build DumpRenderTree with CMake.
        https://bugs.webkit.org/show_bug.cgi?id=147519

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Build the DumpRenderTree directory now that it builds successfully.
        * DumpRenderTree/CMakeLists.txt:
        Added missing source file and don't link with WebCore.lib.
        * DumpRenderTree/PlatformWin.cmake:
        Added sources to DumpRenderTreeLib and made DumpRenderTree only build DLLLauncherMain.cpp. 
        * WinLauncher/CMakeLists.txt:
        We need libcmt now that we are not linking with WebCore.lib.

2015-08-05  Alexey Proskuryakov  <ap@apple.com>

        AppScale: Use https URLs for subresources and links
        https://bugs.webkit.org/show_bug.cgi?id=147686

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/filters/webkit_extras.py:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/treemap.js:
        * TestResultServer/static-dashboards/ui.js:

2015-08-04  Filip Pizlo  <fpizlo@apple.com>

        Rename Mutex to DeprecatedMutex
        https://bugs.webkit.org/show_bug.cgi?id=147675

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreadsMutex):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        (TestWebKitAPI::TEST):

2015-08-05  Timothy Hatcher  <timothy@apple.com>

        Update the WebKit nightly icon
        https://bugs.webkit.org/show_bug.cgi?id=147684

        Reviewed by Sam Weinig.

        * WebKitLauncher/webkit.icns: Replaced.

2015-08-05  Daniel Bates  <dabates@apple.com>

        REGRESSION (r185111): Clicking phone numbers doesn't prompt to call sometimes
        https://bugs.webkit.org/show_bug.cgi?id=147678
        <rdar://problem/21827815>

        Reviewed by Brady Eidson.

        Add a test to ensure that we restore the "should open external URLs" policy on
        page reload after the web content process crashes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/should-open-external-schemes.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        (TEST):

2015-08-04  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Editing tests have been broken since r186694
        https://bugs.webkit.org/show_bug.cgi?id=146888

        Reviewed by Brent Fulgham.

        Restored some codes for the context click on GTK+ and EFL port.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick): Seperated the codes using the PLATFORM guard.

2015-08-04  Dewei Zhu  <dewei_zhu@apple.com>

        Install twisted package for http server when necessary.
        https://bugs.webkit.org/show_bug.cgi?id=147082

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_twisted):

2015-08-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update Apple Windows build for VS2015
        https://bugs.webkit.org/show_bug.cgi?id=147653

        Reviewed by Dean Jackson.

        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/PluginTest.h: If building with
        something older than VS2015, define snprintf as _snprintf.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props:
        Remove unneeded macro definition for snprintf.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_win_version): Recognize Windows 10.
        * Scripts/webkitpy/port/win.py:
        (WinPort): Ditto.
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_baseline_search_path): Include Windows 10 in tests.
        (WinPortTest._assert_version): Ditto.

2015-08-04  Brian Burg  <bburg@apple.com>

        Unreviewed, update email addresses in contributors.json and watchlist.

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

2015-08-04  Alexey Proskuryakov  <ap@apple.com>

        Implement NPAPI redirect handling
        https://bugs.webkit.org/show_bug.cgi?id=138675
        rdar://problem/15779101

        Patch by Jeffrey Pfau, updated and tweaked by me.

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_URLNotify):
        (PluginTest::NPP_URLRedirectNotify):
        (PluginTest::NPP_GetValue):
        (PluginTest::NPN_GetURLNotify):
        (PluginTest::NPN_PostURLNotify):
        (PluginTest::NPN_GetValue):
        (PluginTest::NPN_ReleaseVariantValue):
        (PluginTest::NPN_URLRedirectResponse):
        (PluginTest::NPN_ConvertPoint):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/URLRedirect.cpp: Added.
        (URLRedirect::URLRedirect):
        (URLRedirect::ScriptableObject::hasMethod):
        (URLRedirect::ScriptableObject::get):
        (URLRedirect::ScriptableObject::serviceAsync):
        (URLRedirect::ScriptableObject::invoke):
        (URLRedirect::NPP_GetValue):
        (URLRedirect::NPP_URLNotify):
        (URLRedirect::NPP_URLRedirectNotify):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetEntryPoints):
        (NPP_URLNotify):
        (NPP_URLRedirectNotify):
        (NPP_GetValue):

2015-08-04  Tim Horton  <timothy_horton@apple.com>

        Move Matt Daiter to committers.

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

2015-08-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] build-webkit and MSBuild fight over BuildOutput.htm, causing build failures.
        https://bugs.webkit.org/show_bug.cgi?id=147636

        Reviewed by Alex Christensen.
        
        We no longer need build-webkit to manually troll the log data and pipe it to stdout; MSBuild is already doing this properly.
        Stop the build-webkit script from interacting with BuildOutput.htm, thereby preventing a potential build failure (especially
        on EWS machines)

        * Scripts/build-webkit:

2015-08-04  Jason Marcell  <jmarcell@apple.com>

        Refactor to convert openSourceRevision and internalRevision properties on BuildbotIteration into a more generic collection of revisions.
        https://bugs.webkit.org/show_bug.cgi?id=147280

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration): Removed opensourceRevision, internalRevision. Added revision.
        Refactored _parseData to handle repositories more generically.
        (parseRevisionProperty): Moved a comment up to parseRevisionProperty where it seems more relevant.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.compareIterations): Using "revision" property instead of
        "opensourceRevision" and "internalRevision".
        (BuildbotQueue.prototype.compareIterationsByRevisions): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Ditto.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Ditto.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Changing "internal" boolean
        parameter to more generic "repository" string parameter. Added "trac" parameter in order to
        specify the trac instance to use. Using "revision" property instead of "opensourceRevision"
        and "internalRevision".
        (BuildbotQueueView.prototype.revisionContentForIteration): Passing the repository name and trac
        instance to _revisionContentWithPopoverForIteration(). Using "revision" property instead of
        "opensourceRevision" and "internalRevision".
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Adding
        constants for internal and opensource repositories.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._findIndexOfLargestIterationAtOrBeforeStart): Using "revision" property
        instead of "opensourceRevision" and "internalRevision".
        (Analyzer.prototype._countPercentageOfGreen): Ditto.
        (Analyzer.prototype.webkitTrac.recordedCommits.forEach): Ditto.
        (Analyzer.prototype._countTimes): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.layoutTestResultsDirectoryURLForIteration): Ditto.

2015-08-04  Mark Lam  <mark.lam@apple.com>

        Removed a local debugging line I accidentally left in from a previous commit.

        Not Reviewed.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:

2015-08-04  Mark Lam  <mark.lam@apple.com>

        Unreviewed. Make Saam Barati a WebKit reviewer.

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

2015-08-04  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed, updated Streams API watchlist.

        * Scripts/webkitpy/common/config/watchlist: Matched .*Readable.*Stream.* and .*QueuingStrategy.* in bindings/js.

2015-08-03  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] Add an option to build AllInOne files
        https://bugs.webkit.org/show_bug.cgi?id=102647

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm:

2015-08-03  Alexey Proskuryakov  <ap@apple.com>

        AppScale: Add required indices
        https://bugs.webkit.org/show_bug.cgi?id=147593

        Reviewed by Tim Horton.

        * QueueStatusServer/index.yaml:

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

        Check in LLVM 3.6.2 binary drops for El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=147582

        Reviewed by Alexey Proskuryakov.
        
        Recognize 10.11 and use the right drops.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-08-03  Alex Christensen  <achristensen@webkit.org>

        [Win] Build fix after r187733.

        * WinLauncher/PageLoadTestClient.cpp:
        (PageLoadTestClient::dumpRunStatistics):
        wtf/MathExtras.h is now included in HashTable.h, which #defines pow to wtf_pow.

2015-08-02  Benjamin Poulain  <bpoulain@apple.com>

        Investigate HashTable::HashTable(const HashTable&) and HashTable::operator=(const HashTable&) performance for hash-based static analyses
        https://bugs.webkit.org/show_bug.cgi?id=118455

        Reviewed by Filip Pizlo.

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

2015-07-31  Alex Christensen  <achristensen@webkit.org>

        Prepare for VS2015
        https://bugs.webkit.org/show_bug.cgi?id=146579

        Reviewed by Jon Honeycutt.

        * WinLauncher/stdafx.h:
        Define __STDC_LIMIT_MACROS to have access to INTMAX_MAX.

2015-07-31  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix pixman build on ARM with GCC 4.9.3
        https://bugs.webkit.org/show_bug.cgi?id=147224

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Disable ARM IWMMXT fast paths as workarounding a GCC bug.

2015-07-30  Anders Carlsson  <andersca@apple.com>

        Add support for window.open to WK1BrowserWindowController
        https://bugs.webkit.org/show_bug.cgi?id=147474

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        Set javaScriptCanOpenWindowsAutomatically to YES. 
        If this becomes a nuisance, we can always add a menu item to toggle this.

        (-[WK1BrowserWindowController webView:createWebViewWithRequest:]):
        Implement this UI delegate method.

2015-07-30  Anders Carlsson  <andersca@apple.com>

        Undo stray commit.

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

2015-07-29  Dean Jackson  <dino@apple.com>

        Don't use (Details) when exposing SPI
        https://bugs.webkit.org/show_bug.cgi?id=147426
        <rdar://problem/22062407>

        Reviewed by Dan Bernstein.

        If we are declaring the interface without any implementation,
        we should use class extensions.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2015-07-30  Aakash Jain  <aakash_jain@apple.com>

        Replace Google App Engine with AppScale
        https://bugs.webkit.org/show_bug.cgi?id=147178

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitTestHistory.js:
        (TestHistory):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:
        * QueueStatusServer/app.yaml: We must explicitly define threadsafe property when using the Python 2.7 runtime. We set threadsafe to be false because the status server code was written to be run in AppEngine's CGI environment and AppEngine's CGI programming model handles requests serially per section "Concurrent Requests and WSGI" of <https://cloud.google.com/appengine/docs/python/python25/migrate27>.
        * TestResultServer/app.yaml: Ditto
        * Scripts/webkitpy/common/config/urls.py:
        * TestResultServer/main.py:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/loader.js:

2015-07-30  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Enable IndexedDB based on DatabaseProcess
        https://bugs.webkit.org/show_bug.cgi?id=147221

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm:

2015-07-30  Alex Christensen  <achristensen@webkit.org>

        Build AppleWin port with CMake
        https://bugs.webkit.org/show_bug.cgi?id=147385

        Reviewed by Martin Robinson.

        * WinLauncher/CMakeLists.txt:
        Link to CoreFoundation.lib and added /NODEFAULTLIB:LIBCMT to get it to link successfully.

2015-07-29  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement basic types for ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=146926

        Reviewed by Benjamin Poulain.

        Enable flag now that the basic objects are in place.

        * Scripts/webkitperl/FeatureList.pm: Enabled INTL

2015-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set the maximum number of web processes per WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=147108

        Reviewed by Gustavo Noronha Silva.

        Add test case to check the web process limit.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        (testWebProcessLimit):
        (beforeAll):

2015-07-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Missing casts in BrowserWindow.c
        https://bugs.webkit.org/show_bug.cgi?id=147395

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowSetupEditorToolbar):

2015-07-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Add ENABLE_ES6_MODULES compile time flag with the default value "false"
        https://bugs.webkit.org/show_bug.cgi?id=147350

        Reviewed by Sam Weinig.

        * Scripts/webkitperl/FeatureList.pm:

2015-07-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Freetype] Always allow font matching for strong aliases
        https://bugs.webkit.org/show_bug.cgi?id=147057

        Reviewed by Martin Robinson.

        Create family aliases needed for the new layout tests.

        * WebKitTestRunner/gtk/fonts/fonts.conf:

2015-07-28  Alexey Proskuryakov  <ap@apple.com>

        webkitbot and WKR unnecessarily rely on webkit-queues.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=147359

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.begin_work_queue):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot.begin_work_queue):

2015-07-27  Alex Christensen  <achristensen@webkit.org>

        Use Ninja on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=147228

        Reviewed by Martin Robinson.

        * WinLauncher/CMakeLists.txt:
        WinLauncherLib must make WinLauncher.dll, not WinLauncherLib.dll.
        * Scripts/build-webkit:
        Use Ninja to build WinCairo by default, but fall back to Visual Studio if Ninja is not on the system.

2015-07-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Test for bug #147164 "[iOS] Keyboard bold/italic/underline keys don't
        highlight after being tapped to style a selection"
        https://bugs.webkit.org/show_bug.cgi?id=147278

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/mac/WordBoundaryTypingAttributes.mm: Added.
        (-[WordBoundaryTypingAttributesController webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):
        Load a page with the string "Hello, world!", then select "world" and
        underline it. Test that the typing attributes for the current selection
        include the underline attribute.

2015-07-24  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Unreviewed, updated my nick name in contributors.json

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

2015-07-24  Chris Fleizach  <cfleizach@apple.com>

        AX: scrollable elements do not allow 3-finger swipe
        https://bugs.webkit.org/show_bug.cgi?id=141893

        Reviewed by Mario Sanchez Prada.

        Support global notification listeners for iOS code.
        Fix an issue in DRT where the dictionary of data was not being passed back to the layout test for the notication callback.
        Implement scrollUp/Down/Left/Right.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (increaseTextSelectionCallback):
        (scrollPageUpCallback):
        (scrollPageDownCallback):
        (scrollPageLeftCallback):
        (scrollPageRightCallback):
        (decreaseTextSelectionCallback):
        (getElementTextLengthCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::platformResetToConsistentState):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::scrollPageUp):
        (AccessibilityUIElement::scrollPageDown):
        (AccessibilityUIElement::scrollPageLeft):
        (AccessibilityUIElement::scrollPageRight):
        (AccessibilityUIElement::roleDescription):
        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::linkedElement):
        (WTR::AccessibilityUIElement::headerElementAtIndex):
        (WTR::AccessibilityUIElement::assistiveTechnologySimulatedFocus):
        (WTR::AccessibilityUIElement::scrollPageUp):
        (WTR::AccessibilityUIElement::scrollPageDown):
        (WTR::AccessibilityUIElement::scrollPageLeft):
        (WTR::AccessibilityUIElement::scrollPageRight):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::assistiveTechnologySimulatedFocus):
        (WTR::AccessibilityUIElement::scrollPageUp):
        (WTR::AccessibilityUIElement::scrollPageDown):
        (WTR::AccessibilityUIElement::scrollPageLeft):
        (WTR::AccessibilityUIElement::scrollPageRight):
        (WTR::AccessibilityUIElement::increaseTextSelection):

2015-07-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Activate CSP_NEXT and Connect UserScript and UserStyleSheet through WebView.
        https://bugs.webkit.org/show_bug.cgi?id=147279
        <rdar://problem/21990767>

        Reviewed by Dean Jackson.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        (TestRunner::setDeveloperExtrasEnabled):

2015-07-24  Basile Clement  <basile_clement@apple.com>

        Call fixChangeLogPatch when generating patches from webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=147248

        Reviewed by Geoffrey Garen.

        When two consecutive patches are from the same author, diff tools
        create wrong-looking diffs for ChangeLog files where the apparent added
        author is actually the previous patch's author line, making it awkward
        to read - and things only get worse when committing a patch and a
        followup fix for the same bug shortly after.

        We have a perl function in VCSUtils.pm, fixChangeLogPatch, to corrects
        this, which we use in perl scripts (svn-create-patch et al). But it is
        not used by webkit-patch, which is a python script, and thus creates
        "bad" diffs.

        In the long term, we should probably port fixChangeLogPatch to python -
        but in the short term, let's make webkit-patch call perl to run
        fixChangeLogPatch. We are already making various external calls there
        anyway.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.create_patch):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.fix_changelog_patch):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.create_patch):

2015-07-24  Dean Johnson  <dean_johnson@apple.com>

        commit-queue flags in webkit-patch are confusing
        https://bugs.webkit.org/show_bug.cgi?id=88694

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/steps/options.py:
        (Options): Updated help string to be more descriptive.

2015-07-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement proper High DPI support features
        https://bugs.webkit.org/show_bug.cgi?id=146335
        <rdar://problem/21558269>

        Reviewed by Alex Christensen.

        Update WinLauncher to take device scaling factor into account.

        * WinLauncher/Common.cpp:
        (resizeSubViews): Make sure toolbars and URL bar are properly sized and using
        a valid font.
        (computeFullDesktopFrame): Handle high DPI desktops.
        (WndProc): Make comments more precise.
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::init): Determine device scale factor at launch.
        (WinLauncher::updateDeviceScaleFactor): Added.
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncherWebHost.h: Use C++11 initialization.
        * WinLauncher/WinMain.cpp: Size interface based on scaling factor.
        (wWinMain): Ditto.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain): Tell Windows we understand high DPI.

2015-07-23  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r187169.

        * Scripts/build-webkit:
        Correctly find WebKit.sln.

2015-07-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to allow executing editing commands that require an argument
        https://bugs.webkit.org/show_bug.cgi?id=146781

        Reviewed by Gustavo Noronha Silva.

        Add buttons to insert image/link to the MiniBrowser edit toolbar,
        and test cases for insert image/link commands too.

        * MiniBrowser/gtk/BrowserWindow.c:
        (insertImageCommandCallback):
        (insertLinkCommandCallback):
        (browserWindowSetupEditorToolbar):
        (browserWindowConstructed):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:
        (testWebViewEditorInsertImage):
        (testWebViewEditorCreateLink):
        (beforeAll):

2015-07-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unregistering and re-registering a user message handler does not work
        https://bugs.webkit.org/show_bug.cgi?id=138142

        Reviewed by Martin Robinson.

        This has probably been fixed in r184846, enable the test case
        blocked on it.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (testUserContentManagerScriptMessageReceived):

2015-07-22  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Add ENABLE_WEBASSEMBLY feature flag for WebAssembly
        https://bugs.webkit.org/show_bug.cgi?id=147212

        Reviewed by Filip Pizlo.

        * Scripts/webkitperl/FeatureList.pm:

2015-07-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Add --ios-simulator to run-api-tests --help.

        Rubber-stamped by Dan Bates.

        * Scripts/run-api-tests:

2015-07-22  Jason Marcell  <jmarcell@apple.com>

        Remove hardcoded "internal" from Buildbot.prototype._normalizeQueueInfo.
        https://bugs.webkit.org/show_bug.cgi?id=147043

        Reviewed by Daniel Bates and Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype._normalizeQueueInfo):
        The _normalizeQueueInfo method now calls the defaultBranches getter instead of using hardcoded values
        in cases where the queue.branch property is not set and the queue is not a combined queue.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView):
        Ensuring uniformity of repository branches within a combined queue.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.get defaultBranches):
        Added; provides a WebKit-specific implementation that sets the queue.branches dictionary to have a
        single entry for "openSource" as the default set of branches. Note that we intentionally omitted a
        base class implementation of the defaultBranches getter so as to cause a JavaScript TypeError when a
        sub-queue of a combined queue does not specify property branch and the derived Buildbot class does not
        implement defaultBranches so that a person can either update the definition of the sub-queue or
        implement defaultBranches in the derived Buildbot class they are using.

2015-07-22  Alex Christensen  <achristensen@webkit.org>

        Switch WinCairo build to use CMake.
        https://bugs.webkit.org/show_bug.cgi?id=147169

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (determineConfiguration):
        (determineArchitecture):
        (determinePassedConfiguration):
        (passedConfiguration):
        (jhbuildWrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        It's CMake time!  We now use the CMake files to generate a solution in WebKitBuild/Release/WebKit.sln and build that.

2015-07-22  Alex Christensen  <achristensen@webkit.org>

        Fix quirks in CMake build on Mac and Windows
        https://bugs.webkit.org/show_bug.cgi?id=147174

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        Don't build DumpRenderTree with CMake for now (until we get that working).
        * WinLauncher/CMakeLists.txt:
        Renamed WinLauncherLauncher to WinLauncher and WinLauncher to WinLauncherLib to match the Visual Studio build.

2015-07-22  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [check-webkit-style] .lut.h files shouldn't raise a sorting issue
        https://bugs.webkit.org/show_bug.cgi?id=147146

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_include_line): Avoid checking previous lines if it it is a lut.h include.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_alphabetical_include_order): Added test.

2015-07-21  Filip Pizlo  <fpizlo@apple.com>

        Fixed VM pool allocation should have a reserve for allocations that cannot fail
        https://bugs.webkit.org/show_bug.cgi?id=147154
        rdar://problem/21847618

        Reviewed by Geoffrey Garen.
        
        Add a new test mode where we artificially limit JIT memory to 50KB. If our JIT OOM
        mitigations work, these should all pass. Prior to this patch there were >20 failures.

        * Scripts/run-jsc-stress-tests:

2015-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to be notified about editor state changes
        https://bugs.webkit.org/show_bug.cgi?id=145875

        Reviewed by Gustavo Noronha Silva.

        Update the typing attributes toggle buttons state according to the
        editor state in MiniBrowser, and add a test case to the
        WebViewEditor unit tests.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowEditingCommandToggleButtonSetActive):
        (typingAttributesChanged):
        (browserWindowSetupEditorToolbar):
        (browserWindowConstructed):
        (browser_window_init):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:
        (testWebViewEditorEditorStateTypingAttributes):
        (beforeAll):

2015-07-20  Tomas Popela  <tpopela@redhat.com>

        [GTK] Add selection-changed signal to the WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=137116

        Reviewed by Carlos Garcia Campos.

        Add a new WebProcess test TestEditor that is testing the WebKitWebEditor
        (namely the selection-changed signal).

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/EditorTest.cpp: Added.
        (WebKitWebEditorTest::create):
        (WebKitWebEditorTest::selectionChangedCallback):
        (WebKitWebEditorTest::testSelectionSelectAll):
        (WebKitWebEditorTest::testSelectionCollapse):
        (WebKitWebEditorTest::testSelectionModifyMove):
        (WebKitWebEditorTest::testSelectionModifyExtend):
        (WebKitWebEditorTest::testSelectionUnselect):
        (registerTests):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestEditor.cpp: Added.
        (testWebKitWebEditorSelectionChanged):
        (beforeAll):
        (afterAll):

2015-07-20  Alex Christensen  <achristensen@webkit.org>

        Resurrect CMake build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=147083

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake: Added.
        * WinLauncher/CMakeLists.txt:

2015-07-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Enable seccomp filter API tests
        https://bugs.webkit.org/show_bug.cgi?id=140071

        Reviewed by Žan Doberšek.

        These tests will now be run by the run-gtk-tests script.

        * TestWebKitAPI/PlatformGTK.cmake:

2015-07-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add seccomp filters support
        https://bugs.webkit.org/show_bug.cgi?id=110014

        Reviewed by Žan Doberšek.

        Add libseccomp to jhbuild modulesets.

        * gtk/jhbuild.modules:

2015-07-18  Simon Fraser  <simon.fraser@apple.com>

        MiniBrowser window title is just "Window" when page has no <title>
        https://bugs.webkit.org/show_bug.cgi?id=147076

        Reviewed by Tim Horton.
        
        Make MiniBrowser windows show the filename from the URL if we never get a title changed
        notification.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController updateTitle:]):
        (-[WK1BrowserWindowController webView:didCommitLoadForFrame:]):
        (-[WK1BrowserWindowController webView:didReceiveTitle:forFrame:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController updateTitle:]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
        (-[WK2BrowserWindowController webView:didCommitNavigation:]):

2015-07-17  Andy Estes  <aestes@apple.com>

        [iOS] Further tighten the sandbox around pages fetched with Content-Disposition: attachment
        https://bugs.webkit.org/show_bug.cgi?id=147044
        rdar://problem/21567820

        Reviewed by Brady Eidson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForResponse): Only log the message about attachments if the custom policy delegate is enabled.
        This matches the behavior of DumpRenderTree.

2015-07-17  Benjamin Poulain  <bpoulain@apple.com>

        [Content Extensions] Term::isUniversalTransition() incorrectly expects the end-of-line assertion in character sets
        https://bugs.webkit.org/show_bug.cgi?id=147032

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        Test that the useless terms are eliminated by counting
        the number of NFA nodes generated.

2015-07-17  Dan Bernstein  <mitz@apple.com>

        Tests for <rdar://problem/21803781> The external URL policy is not reported correctly in navigation actions that create new windows
        https://bugs.webkit.org/show_bug.cgi?id=147040

        Reviewed by Dean Jackson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm: Added.
        (-[ShouldOpenExternalURLsInNewWindowActionsController webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[ShouldOpenExternalURLsInNewWindowActionsController webView:didFinishNavigation:]):
        (-[ShouldOpenExternalURLsInNewWindowActionsController webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2015-07-16  Dean Johnson  <dean_johnson@apple.com>

        webkit-patch uses incorrect credentials from keychain to login until account lockout
        https://bugs.webkit.org/show_bug.cgi?id=146923

        Reviewed by Daniel Bates.

        When `webkit-patch upload` asks for login credentials for bugs.webkit.org, if you
        provide incorrect credentials then ask for them to be saved to the keychain
        webkit-patch will then use those incorrect credentials until 5 total attempts
        have been made to log in. This will lock the user out of Bugzilla for a
        half hour.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.authenticate): Added argument to read_credentials() that
        passes in whether or not to use stored credentials.
        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials.read_credentials): Added optional argument 'use_stored_credentials'
        that specifies whether or not to use credentials stored on the system. If it
        does, we do not auto-fill credentials since either the credentials caused
        the failure, or they weren't used in the first place so there is no reason
        to try and use them again if a failure happened.
        * Scripts/webkitpy/common/net/credentials_unittest.py: Added unit test for newly added
        use_stored_credentials argument.
        (test_do_not_use_stored_credentials): Added unit test to make sure functions that
        retrieve username/password information from the local system (environment, Git, keychain,
        keyring) are never called. It also tests that we get back our mocked username and password.
        (test_do_not_use_stored_credentials.MockKeyring): Mock keyring
        (test_do_not_use_stored_credentials.MockKeyring.get_password): Assert this is never called.
        (test_do_not_use_stored_credentials.FakeCredentials): Mock credentials
        (test_do_not_use_stored_credentials.FakeCredentials._credentials_from_keychain): Assert this
        is never called.
        (test_do_not_use_stored_credentials.FakeCredentials._credentials_from_environment): Ditto
        (test_do_not_use_stored_credentials.FakeCredentials._offer_to_store_credentials_in_keyring): Ditto
        (test_do_not_use_stored_credentials.FakeUser): Mock the User class
        (test_do_not_use_stored_credentials.FakeUser.prompt): Returns a username to assert against.
        (test_do_not_use_stored_credentials.FakeUser.prompt_password): Returns a password to assert
        against.

2015-07-16  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed, remove my redundant email information.

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

2015-07-16  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Unreviewed. Add Hyungwook Lee as a committer.

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

2015-07-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Added myself to the list of contributors.

        Reviewed by Brent Fulgham.

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

2015-07-16  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Cache domain actions
        https://bugs.webkit.org/show_bug.cgi?id=146817

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Test if-domain and unless-domain with multiple load types.

2015-07-16  Benjamin Poulain  <bpoulain@apple.com>

        [Content extensions] Combine suffixes when generating NFAs
        https://bugs.webkit.org/show_bug.cgi?id=146961

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::compareContents):
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:

2015-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Input method filter is always enabled when the view is focused
        https://bugs.webkit.org/show_bug.cgi?id=146965

        Reviewed by Martin Robinson.

        Use setEnabled() instead of notifyFocusedIn() to enable input methods.

        * TestWebKitAPI/Tests/WebKit2/gtk/InputMethodFilter.cpp:
        (TestWebKitAPI::TestInputMethodFilter::TestInputMethodFilter):

2015-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [EFL] Bump libseccomp version to 2.2.3
        https://bugs.webkit.org/show_bug.cgi?id=146980

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-07-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Maintain consistent COM Interfaces
        https://bugs.webkit.org/show_bug.cgi?id=146983
        <rdar://problem/21822278>

        Reviewed by Dean Jackson.

        Update DumpRenderTree and WinLauncher to use the properly
        versioned COM interface objects.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::rootElement):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::QueryInterface):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        (scalePageByCallback):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didCommitLoadForFrame):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::callShouldCloseOnWebView):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::setDefersLoading):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::setTabKeyCyclesThroughElements):
        (TestRunner::setValueForUser):
        (TestRunner::dispatchPendingLoadRequests):
        (TestRunner::setWindowIsKey):
        (TestRunner::execCommand):
        (TestRunner::addOriginAccessWhitelistEntry):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        (TestRunner::showWebInspector):
        (TestRunner::closeWebInspector):
        (TestRunner::evaluateInWebInspector):
        (TestRunner::setSerializeHTTPLoads):
        * DumpRenderTree/win/TextInputControllerWin.cpp:
        (TextInputController::setMarkedText):
        (TextInputController::hasMarkedText):
        (TextInputController::unmarkText):
        (TextInputController::markedRange):
        (TextInputController::insertText):
        (TextInputController::firstRectForCharacterRange):
        (TextInputController::selectedRange):
        * DumpRenderTree/win/UIDelegate.h:
        (UIDelegate::unused2):
        (UIDelegate::unused3):
        (UIDelegate::webViewScrolled):
        (UIDelegate::webViewShouldInterruptJavaScript):
        (UIDelegate::webViewReceivedFocus):
        (UIDelegate::unused4): Deleted.
        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp:
        (TestWebKitAPI::WebViewDestructionWithHostWindow::SetUp):
        * WinLauncher/PageLoadTestClient.cpp:
        (PageLoadTestClient::didStartProvisionalLoad):
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::init):
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncherWebHost.cpp:
        (WinLauncherWebHost::didFinishLoadForFrame):
        (WinLauncherWebHost::didFirstLayoutInFrame):
        * WinLauncher/WinLauncherWebHost.h:

2015-07-15  Dean Johnson  <dean_johnson@apple.com>

        Many test failures in scm_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=143967

        Reviewed by Daniel Bates. 

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system): Paths with symlinks are now resolved to
        absolute canonical file paths. Two mutually exclusive issues cause this
        to be a problem.
            1) Python's os.path.relpath() function does not return correct relative
            paths between two filepaths that point to the same file, if symlinks are
            involved.
                On Mac, /tmp points to /private/tmp
                ex. os.path.relpath('/tmp', '/private/tmp')
                    returns '../../tmp'
            What we want is actually just '.'
            2) Git does not allow file paths to trace outside of
            the Git repository. This means that if you have a repository in
            /tmp and you refer to that repository when invoking a git command as
            ../tmp, Git will produce errors about working outside of the repository.
        * Scripts/webkitpy/common/checkout/scm/git.py: Over time Git has changed
        its default behavior and such, needed to be updated.
        (Git.changed_files): '--' was added into the command so that patch_directories
        were taken as positional arguments.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Changed tests and setup 
        in the GitSVNTest class to more closely emulate the version of Git that the tests
        assumed a system had. Also fixed a small side-effect from the absolute canonical
        path fix in SCMDetector.detect_scm_system
        (SVNTestRepository.setup): A relative filepath was previously passed as the
        checkout root to SCMDetector.detect_scm_system, but is now cleaned to
        an absolute canonical path before being passed in. The failing test
        was a "sanity check" that the svn.checkout_root and scm.checkout_root
        were the same.
        (GitSVNTest._setup_git_checkout):
            1) Added "--prefix ''" option to `git clone` since Git changed its default
            behavior in version 2.0.
            2) The branch master was renamed to trunk to more closely emulate what
            tests expected when they were written. 
        (GitSVNTest.test_changed_files_local_plus_working_copy): Two of the three
        original tests failed because the tests expected the trunk branch
        to produce its parent's commit, whereas Git merely provides the HEAD commit
        for a given branch (trunk in this case). Based on other tests written
        in the same commit, it appears these tests were failing from the point they
        were written.

2015-07-14  Anders Carlsson  <andersca@apple.com>

        Assertions.h should include ExportMacros.h
        https://bugs.webkit.org/show_bug.cgi?id=146948

        Reviewed by Tim Horton.

        Remove now unneeded WTF_EXPORT_PRIVATE define.

        * DumpRenderTree/cg/ImageDiffCG.cpp:

2015-07-14  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] Build by default the X11 and Wayland targets.
        https://bugs.webkit.org/show_bug.cgi?id=146057

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies:

2015-07-10  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unable to dismiss context menu during test runs
        https://bugs.webkit.org/show_bug.cgi?id=146836

        Reviewed by Tim Horton.

        Since Context Menus are modal, the test system would block on the displayed context menu,
        causing tests to fail. Instead, we should do what WK1 was doing, which is to perform the
        mouse click and generate the menu contents, but not ask AppKit to display it.

        Drive-by fix: We did not handle 'escape' key presses. This is also fixed.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]): Handle the 'escape' character.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseMoveTo): Keep track of the current mouse position.
        (WTR::EventSendingController::contextClick): Don't emit an actual context menu invocation and then
        copy the menu items. Instead, use WKBundlePageCopyContentMenuAtPointInWindow to do all the same
        work without actually calling on AppKit to display the menu.
        ask WebCore to do all the work EXCEPT displaying the menu.
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown): Handle the 'escape' character.

2015-07-09  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to run the OSR exit fuzzer
        https://bugs.webkit.org/show_bug.cgi?id=146814

        Reviewed by Mark Lam.
        
        This runs a test command to detect how many static OSR exit sites it had, and then for
        each exit site, it triggers three exits (earliest opportunity, last opportunity, some
        middle opportunity), plus a mode where the check always exits. This is an exhaustive
        search, so in the future it'll be very appropriate for cases where we have a simple test
        and we want to see what happens when you eventually exit in this test.
        
        Right now this isn't hooked into any specific tests, but I've done some spot checks on it
        and it seems to do the right thing.

        * Scripts/jsc-stress-test-helpers/js-osr-exit-fuzz: Added.
        (fail):

2015-07-10  Alex Christensen  <achristensen@webkit.org>

        Add tests for r186649
        https://bugs.webkit.org/show_bug.cgi?id=146821

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::compareContents):
        (TestWebKitAPI::expectedIndex):
        Add some larger tests to test large jumps.

2015-07-09  Dewei Zhu  <dewei_zhu@apple.com>

        Quick fix for run_benchmark script that AppKit.NSRunningApplication does not work properly
        https://bugs.webkit.org/show_bug.cgi?id=146820

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver):
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._terminiate_processes):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver):
        (OSXChromeCanaryDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver):
        (OSXFirefoxNightlyDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver):

2015-07-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] pango should be included in the default jhbuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=146683

        Reviewed by Martin Robinson.

        Recent releases of pango 1.36 use functions that are only provided by fontconfig 2.12 when
        compiled against sufficiently-new versions of fontconfig. Since we depend on both pango and
        fontconfig, and pango depends on fontconfig, we must either add pango to our jhbuild
        moduleset or else upgrade fontconfig to a recent unstable release (knowing that we will have
        the same problem again the next time pango wants to use a new fontconfig feature), or remove
        fontconfig (which would make it hard to keep tests working). On the balance, adding pango is
        best.

        * gtk/jhbuild-optional.modules: Remove pango
        * gtk/jhbuild.modules: Add pango and update to latest 1.36.8

2015-07-09  Devin Rousso  <drousso@apple.com>

        Unreviewed.  Added myself as a committer.

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

2015-07-09  Timothy Horton  <timothy_horton@apple.com>

        Add a way to set the default URL from Minibrowser UI
        https://bugs.webkit.org/show_bug.cgi?id=146780

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate didChangeSettings]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController fetch:]):
        (-[BrowserWindowController reload:]):
        (-[BrowserWindowController forceRepaint:]):
        (-[BrowserWindowController goBack:]):
        (-[BrowserWindowController goForward:]):
        (-[BrowserWindowController showHideWebView:]):
        (-[BrowserWindowController removeReinsertWebView:]):
        (-[BrowserWindowController zoomIn:]):
        (-[BrowserWindowController zoomOut:]):
        (-[BrowserWindowController resetZoom:]):
        (-[BrowserWindowController canZoomIn]):
        (-[BrowserWindowController canZoomOut]):
        (-[BrowserWindowController canResetZoom]):
        (-[BrowserWindowController toggleZoomMode:]):
        (-[BrowserWindowController setScale:]):
        (-[BrowserWindowController toggleShrinkToFit:]):
        (-[BrowserWindowController dumpSourceToConsole:]):
        (-[BrowserWindowController find:]):
        (-[BrowserWindowController didChangeSettings]):
        (-[BrowserWindowController currentURL]):
        Get rid of the BrowserController protocol. It was a bad idea and confused
        Interface Builder more than I thought possible.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController setDefaultURLToCurrentURL:]):
        If we have a BrowserWindowController, grab its URL and set the relevant default.

        * MiniBrowser/mac/WK1BrowserWindowController.h:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController currentURL]):
        * MiniBrowser/mac/WK2BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController currentURL]):
        Retrieve the current URL from the WKView/WebView.

2015-07-09  Timothy Horton  <timothy_horton@apple.com>

        Increase MiniBrowser location bar maximum width
        https://bugs.webkit.org/show_bug.cgi?id=146779

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/BrowserWindow.xib:
        Have an enormous maximum width on the location bar, so that it doesn't
        stop expanding with the window at 800px.

2015-07-08  Brady Eidson  <beidson@apple.com>

        Crash calling [WebView close] in didFinishLoadForFrame callback.
        <rdar://problem/21690765> and https://bugs.webkit.org/show_bug.cgi?id=146773

        Reviewed by David Kilzer.

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

2015-07-08  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Fix ASSERTION FAILED: !m_pendingNavigationID in WebPage::reload().
        https://bugs.webkit.org/show_bug.cgi?id=146546

        Reviewed by Darin Adler.

        We did't reset pendingNavigationID value when request url is empty.
        Hence we need to ignore ASSERT check in this case.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):

2015-07-08  Benjamin Poulain  <bpoulain@apple.com>

        [Content Extensions] Fuse undistinguishable actions as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=146762

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        Test that combinations and flags still work as expected.

2015-07-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] Allow building and testing the Wayland target with the default JHBuild moduleset.
        https://bugs.webkit.org/show_bug.cgi?id=146056

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: libepoxy is now required for building GTK+.
        * gtk/jhbuild-wayland.modules: Removed. Not longer needed.
        * gtk/jhbuild.modules: Upgrade GTK+ (3.16.4) and required dependencies for building:
        Cairo (1.14.2), Gdk-Pixbuf (2.30.8) and GLib (2.44.1).
        * gtk/patches/cairo-1.12.8-add_disable-lto.patch: Removed. Not longer needed.
        Cairo removed support for LTO on (1.14). Upstream commit: c7ff9bb.
        * gtk/patches/gtk-3.6-do-not-shutdown-accessibility.patch: Removed. Not longer needed.
        GTK+ merged this patch on GTK+-3.10. Upstream commit: 8d83d98.

2015-07-06  Matt Rajca  <mrajca@apple.com>

        Media Session: propagate metadata changes to UI clients
        https://bugs.webkit.org/show_bug.cgi?id=146660

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp: Build fixes for updated PageUIClient.
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2015-07-07  Brady Eidson  <beidson@apple.com>

        HTTP Auth cached after disabling private browsing/reset.
        <rdar://problem/8293055> and https://bugs.webkit.org/show_bug.cgi?id=146654

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Clear in-memory credentials in between test runs.

2015-07-06  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Remove memory page reporting
        https://bugs.webkit.org/show_bug.cgi?id=146659

        Reviewed by Benjamin Poulain.

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

2015-07-06  Benjamin Poulain  <benjamin@webkit.org>

        [Content Extensions] Make the DFA transitions ranges instead of characters
        https://bugs.webkit.org/show_bug.cgi?id=146575

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:
        Since the minimizer is perfect, we get the minimal solution now,
        which is really cool!

2015-07-06  Brady Eidson  <beidson@apple.com>

        ShouldOpenExternalURLsPolicy should default to "Allow" for WK2 API loads.
        <rdar://problem/21640050> and https://bugs.webkit.org/show_bug.cgi?id=146563

        Reviewed by Geoff Garen.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): For testing purposes, all pages should start with the 
          ShouldOpenExternalURLsPolicy set to "ShouldNotAllow"

2015-07-06  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r170639.

        Broke using webkit-patch apply-attachment to apply an
        attachment from a security bug. The patch incorrectly assumed
        that Bugzilla returns a non-HTTP 200 status code in its HTTP
        response when authentication is required.

        Reverted changeset:

        "webkit-patch apply-from-bug / apply-attachment should not ask
        for credentials if none are required"
        https://bugs.webkit.org/show_bug.cgi?id=40095
        http://trac.webkit.org/changeset/170639

2015-07-04  Chris Dumez  <cdumez@apple.com>

        Drop RefPtr::clear() method
        https://bugs.webkit.org/show_bug.cgi?id=146556

        Reviewed by Brady Eidson.

        Drop RefPtr::clear() method in favor of "= nullptr;" pattern.

2015-07-03  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):

2015-07-03  Dan Bernstein  <mitz@apple.com>

        [Xcode] Update some build settings as recommended by Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=146597

        Reviewed by Sam Weinig.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Enabled GCC_NO_COMMON_BLOCKS,
        ENABLE_STRICT_OBJC_MSGSEND, CLANG_WARN_BOOL_CONVERSION, CLANG_WARN_CONSTANT_CONVERSION,
        CLANG_WARN_EMPTY_BODY, CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION,
        CLANG_WARN_UNREACHABLE_CODE, GCC_WARN_ABOUT_RETURN_TYPE,
        GCC_WARN_UNINITIALIZED_AUTOS, and GCC_WARN_UNDECLARED_SELECTOR.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController webScriptNameForSelector:]): Removed check for setDragMode:,
        which was removed in r19101.

        * DumpRenderTree/mac/TextInputController.m:
        (-[TextInputController interpretKeyEvents:withSender:]): Suppressed -Wundeclared-selector
        around used of a selector not that is not declared anywhere.

        * MiniBrowser/Configurations/Base.xcconfig: Enabled GCC_NO_COMMON_BLOCKS.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

        * TestWebKitAPI/Configurations/Base.xcconfig: Enabled GCC_NO_COMMON_BLOCKS,
        ENABLE_STRICT_OBJC_MSGSEND, CLANG_WARN_BOOL_CONVERSION, CLANG_WARN_CONSTANT_CONVERSION,
        CLANG_WARN_EMPTY_BODY, CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION,
        CLANG_WARN_UNREACHABLE_CODE, GCC_WARN_ABOUT_RETURN_TYPE,
        GCC_WARN_UNINITIALIZED_AUTOS, and GCC_WARN_UNDECLARED_SELECTOR.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

2015-07-02  Daniel Bates  <dabates@apple.com>

        [iOS] Add WebKitSystemInterface for iOS 8.4
        https://bugs.webkit.org/show_bug.cgi?id=146548

        Rubber-stamped by Zalan Bujtas.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebSQL doesn't work because openDatabase always fails with DOM Exception 18
        https://bugs.webkit.org/show_bug.cgi?id=146234

        Reviewed by Sergio Villar Senin.

        Enable the WebSQL directory test that was disabled because of this bug.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextConfiguration):

2015-07-01  Matthew Daiter  <mdaiter@apple.com>

        Enabled MEDIA_STREAM flag
        https://bugs.webkit.org/show_bug.cgi?id=145947
        <rdar://problem/21365829>
        
        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:

2015-06-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] REGRESSION(r183936): Test /webkit2/WebKitWebContext/spell-checker fails since r183936
        https://bugs.webkit.org/show_bug.cgi?id=144828

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/main.cpp:
        (main): Use the new WKTextChecker API to set the spell checking languages
        when the process is starting up.

2015-06-30  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=90906

        Reviewed by Benjamin Poulain.

        * Scripts/webkitperl/FeatureList.pm: add ENABLE_INTL flag

2015-06-30  Jonathan Davis  <jond@apple.com>

        Unreviewed. Added myself as a committer.

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

2015-06-30  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix.

        * Scripts/update-webkit-dependency: Try to build even if we cannot connect
        to developer.apple.com to get update libraries.

2015-06-29  Jake Nielsen  <jacob_nielsen@apple.com>

        Add timeout in run-webkit-tests for launching the simulator
        https://bugs.webkit.org/show_bug.cgi?id=146371

        Reviewed by Darin Adler.

        Adds a default 5-minute timeout using the timeout class in webkitpy.benchmark_runner.utils
        for the otherwise infinitely patient wait_until_device_is_in_state method.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.DeviceState):
        (Simulator):
        (Simulator.wait_until_device_is_in_state):
        (Simulator.device_state):

2015-06-29  Benjamin Poulain  <benjamin@webkit.org>

        Make the NFA transitions range-based
        https://bugs.webkit.org/show_bug.cgi?id=146338

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        Test some new interesting cases.

2015-06-28  Dan Bernstein  <mitz@apple.com>

        [Xcode] Use the same environment for command-line and IDE builds
        https://bugs.webkit.org/show_bug.cgi?id=146401

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (XcodeOptions): Set the UseSanitizedBuildSystemEnvironment user default to YES, which makes
        xcodebuild use the same environment Xcode uses.

2015-06-28  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r185915): Source-incompatible change in WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=146396

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::runJavaScriptAlert): Removed _deprecatedForUseWithV0 suffix from the name.
        (TestWebKitAPI::TEST): Updated for renames.
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (runJavaScriptAlert): Removed suffix.
        (TestWebKitAPI::FullscreenZoomInitialFrame::initializeView): Updated.
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (runJavaScriptAlert): Removed suffix.
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::initializeView): Updated.

2015-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][SOUP] Implement WebCore::PublicSuffix for soup and enable PUBLIC_SUFFIX_LIST for GTK+
        https://bugs.webkit.org/show_bug.cgi?id=146318

        Reviewed by Sergio Villar Senin.

        Copy mac PublicSuffix test to the common directory and add it to
        the GTK+ build.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp: Added.
        (TestWebKitAPI::TEST_F):

2015-06-26  Per Arne Vollan  <peavo@outlook.com>

        WinLauncher fails to download files.
        https://bugs.webkit.org/show_bug.cgi?id=146242

        Reviewed by Alex Christensen.

        Added WinLauncher download delegate.

        * WinLauncher/Common.cpp:
        * WinLauncher/WebDownloadDelegate.cpp: Added.
        (WebDownloadDelegate::WebDownloadDelegate):
        (WebDownloadDelegate::~WebDownloadDelegate):
        (WebDownloadDelegate::QueryInterface):
        (WebDownloadDelegate::AddRef):
        (WebDownloadDelegate::Release):
        (WebDownloadDelegate::decideDestinationWithSuggestedFilename):
        (WebDownloadDelegate::didCancelAuthenticationChallenge):
        (WebDownloadDelegate::didCreateDestination):
        (WebDownloadDelegate::didFailWithError):
        (WebDownloadDelegate::didReceiveAuthenticationChallenge):
        (WebDownloadDelegate::didReceiveDataOfLength):
        (WebDownloadDelegate::didReceiveResponse):
        (WebDownloadDelegate::shouldDecodeSourceDataOfMIMEType):
        (WebDownloadDelegate::willResumeWithResponse):
        (WebDownloadDelegate::willSendRequest):
        (WebDownloadDelegate::didBegin):
        (WebDownloadDelegate::didFinish):
        * WinLauncher/WebDownloadDelegate.h: Added.
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::setAccessibilityDelegate):
        (WinLauncher::setResourceLoadDelegate):
        (WinLauncher::setDownloadDelegate):
        (WinLauncher::mainFrame):
        * WinLauncher/WinLauncher.h:
        (WinLauncher::standardPreferences):
        (WinLauncher::privatePreferences):
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:
        * WinLauncher/WinMain.cpp:
        (wWinMain):

2015-06-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump libseccomp version to 2.2.1
        https://bugs.webkit.org/show_bug.cgi?id=146341

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/jhbuildrc: Enabled libseccomp build on AArch64.
        * efl/patches/libseccomp-pick-up-CC.patch: Removed, we don't need it anymore.

2015-06-25  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add a way to match a domain but not subdomains
        https://bugs.webkit.org/show_bug.cgi?id=146241
        rdar://problem/21557754

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Update subdomain test because of changed behavior and add test for new '*' functionality.

2015-06-25  Jaehun Lim  <ljaehun.lim@samsung.com>

        Cleanup ENABLE_CSS3_CONDITIONAL_RULES codes.
        https://bugs.webkit.org/show_bug.cgi?id=146308

        Reviewed by Csaba Osztrogonác.

        ENABLE_CSS3_CONDITIONAL_RULES guard was removed from r174536.

        * Scripts/webkitperl/FeatureList.pm:

2015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial WebKitWebsiteDataManager API for process configuration options
        https://bugs.webkit.org/show_bug.cgi?id=146149

        Reviewed by Sergio Villar Senin.

        Update unit tests to use WebKitWebsiteDataManager.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextConfiguration):
        (serverCallback):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::Test): Use WebKitWebsiteDataManager and set all possible
        values to ensure unit tests don't write outside the temporary directory.
        (Test::~Test): Explicitly reset the web context to ensure its
        objects are released before the leaks check.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::wait): Fix the GSource used, since we are receiving
        a double in seconds, but using g_timeout_add_seconds() that
        expects an unsigned in seconds. Use GMainLoopSource to correctly
        handle the value and simplify the code.

2015-06-24  Jason Marcell  <jmarcell@apple.com>

        Work towards: Add status of Safari projects on iOS Dashboard on build-safari
        https://bugs.webkit.org/show_bug.cgi?id=146126
        <rdar://problem/18226291>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady): Using combined queues to display iOS projects

2015-06-24  Doug Russell  <d_russell@apple.com>

        Bug 146177 - AX: AXObjectCache should try to use an unignored accessibilityObject 
        when posting a selection notification when on the border between two accessibilityObjects
        https://bugs.webkit.org/show_bug.cgi?id=146177

        Reviewed by Darin Adler.

        Add support for mapping WebCore Accessibility types into JSValueRef types
        so they can be used in tests.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (webAccessibilityObjectWrapperClass):
        (-[AccessibilityNotificationHandler startObserving]):
        (makeValueRefForValue):
        (makeArrayRefForArray):
        (makeObjectRefForDictionary):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (webAccessibilityObjectWrapperClass):
        (-[AccessibilityNotificationHandler startObserving]):
        (makeValueRefForValue):
        (makeArrayRefForArray):
        (makeObjectRefForDictionary):
        (-[AccessibilityNotificationHandler _notificationReceived:]):

2015-06-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: roundToDevicePixel() snaps to wrong value.
        https://bugs.webkit.org/show_bug.cgi?id=146273
        rdar://problem/18509840

        Reviewed by Simon Fraser.

        Due to the floating point approximate representation, we can't always produce
        the correct snap value. This patch addresses the issue by removing redundant kFixedPointDenominator multiplication
        and by changing the rounding in roundToDevicePixel() from float to double.

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

2015-06-24  Brady Eidson  <beidson@apple.com>

        Update JavaScript dialog delegates to include a WKSecurityOriginRef argument.
        <rdar://problem/21269187> and https://bugs.webkit.org/show_bug.cgi?id=146249

        Reviewed by Alex Christensen.

        - Update WKTR to the new client structure.
        - Update existing TestWebKitAPI tests to either use the new client structure or
          assign the old function signature to the updated variable name.
        - Include a new test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::runJavaScriptAlert):

        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKit2/ModalAlertsSPI.cpp:
        (TestWebKitAPI::analyzeDialogArguments):
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::runJavaScriptConfirm):
        (TestWebKitAPI::runJavaScriptPrompt):
        (TestWebKitAPI::createNewPage):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::initializeView):

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::initializeView):

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2015-06-23  Dewei Zhu  <dewei_zhu@apple.com>

        Refactoring benchmark runner script to follow pep8 code style.
        https://bugs.webkit.org/show_bug.cgi?id=146264

        Reviewed by Ryosuke Niwa.

        Refactor benchmark runner script to follow pep8 code style.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:
        (GenericBenchmarkBuilder.prepare):
        (GenericBenchmarkBuilder._run_create_script):
        (GenericBenchmarkBuilder._copy_benchmark_to_temp_dir):
        (GenericBenchmarkBuilder._fetch_remote_archive):
        (GenericBenchmarkBuilder):
        (GenericBenchmarkBuilder._checkout_with_subversion):
        (GenericBenchmarkBuilder._apply_patch):
        (GenericBenchmarkBuilder.clean):
        (GenericBenchmarkBuilder._runCreateScript): Deleted.
        (GenericBenchmarkBuilder._copyBenchmarkToTempDir): Deleted.
        (GenericBenchmarkBuilder._fetchRemoteArchive): Deleted.
        (GenericBenchmarkBuilder._checkoutWithSubverion): Deleted.
        (GenericBenchmarkBuilder._applyPatch): Deleted.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner._find_plan_file):
        (BenchmarkRunner.execute):
        (BenchmarkRunner._cleanup):
        (BenchmarkRunner._dump):
        (BenchmarkRunner._wrap):
        (BenchmarkRunner._merge):
        (BenchmarkRunner._show_results):
        (BenchmarkRunner._findPlanFile): Deleted.
        (BenchmarkRunner.cleanup): Deleted.
        (BenchmarkRunner.dump): Deleted.
        (BenchmarkRunner.wrap): Deleted.
        (BenchmarkRunner.merge): Deleted.
        (BenchmarkRunner.show_results): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.prepare_env):
        (BrowserDriver.launch_url):
        (BrowserDriver.close_browsers):
        (BrowserDriver.prepareEnv): Deleted.
        (BrowserDriver.launchUrl): Deleted.
        (BrowserDriver.closeBrowser): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver):
        (OSXBrowserDriver.prepare_env):
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._launch_process):
        (OSXBrowserDriver._terminiate_processes):
        (OSXBrowserDriver._launch_process_with_caffinate):
        (OSXBrowserDriver._screen_size):
        (OSXBrowserDriver.prepareEnv): Deleted.
        (OSXBrowserDriver.closeBrowsers): Deleted.
        (OSXBrowserDriver.launchProcess): Deleted.
        (OSXBrowserDriver.terminateProcesses): Deleted.
        (OSXBrowserDriver.launchProcessWithCaffinate): Deleted.
        (OSXBrowserDriver.screenSize): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver):
        (OSXChromeDriver.launch_url):
        (OSXChromeCanaryDriver):
        (OSXChromeCanaryDriver.launch_url):
        (OSXChromeDriver.launchUrl): Deleted.
        (OSXChromeCanaryDriver.launchUrl): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver):
        (OSXFirefoxDriver.launch_url):
        (OSXFirefoxNightlyDriver):
        (OSXFirefoxNightlyDriver.launch_url):
        (OSXFirefoxDriver.launchUrl): Deleted.
        (OSXFirefoxNightlyDriver.launchUrl): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver):
        (OSXSafariDriver.prepare_env):
        (OSXSafariDriver.launch_url):
        (OSXSafariDriver.close_browsers):
        (OSXSafariDriver._maximize_window):
        (OSXSafariDriver.prepareEnv): Deleted.
        (OSXSafariDriver.launchUrl): Deleted.
        (OSXSafariDriver.closeBrowsers): Deleted.
        (OSXSafariDriver.maximizeWindow): Deleted.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver.fetch_result):
        (HTTPServerDriver.kill_server):
        (HTTPServerDriver.get_return_code):
        (HTTPServerDriver.set_device_id):
        (HTTPServerDriver.fetchResult): Deleted.
        (HTTPServerDriver.killServer): Deleted.
        (HTTPServerDriver.getReturnCode): Deleted.
        (HTTPServerDriver.setDeviceID): Deleted.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver.base_url):
        (SimpleHTTPServerDriver.fetch_result):
        (SimpleHTTPServerDriver.kill_server):
        (SimpleHTTPServerDriver.get_return_code):
        (SimpleHTTPServerDriver): Deleted.
        (SimpleHTTPServerDriver.baseUrl): Deleted.
        (SimpleHTTPServerDriver.fetchResult): Deleted.
        (SimpleHTTPServerDriver.killServer): Deleted.
        (SimpleHTTPServerDriver.getReturnCode): Deleted.
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (get_path_from_project_root):
        (force_remove):
        (getPathFromProjectRoot): Deleted.
        (forceRemove): Deleted.

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Add operator! and copy/move constructors to WeakObjCPtr
        https://bugs.webkit.org/show_bug.cgi?id=146255

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WebKit2/cocoa/WeakObjCPtr.mm:
        (TEST):

2015-06-23  Simon Fraser  <simon.fraser@apple.com>

        Expose some more rendering progress events, and have MiniBrowser log for each of them
        https://bugs.webkit.org/show_bug.cgi?id=146227

        Reviewed by Darin Adler.

        Register for layout milestones/rendering progress events in the WK1 and WK2
        browser window controllers, and, if logging is turned on, log when they are
        reached.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        (-[WK1BrowserWindowController webView:didLayout:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController _webView:renderingProgressDidChange:]):

2015-06-23  Brady Eidson  <beidson@apple.com>

        WKFrameInfo should have an accessor for the Frame's current security origin.
        https://bugs.webkit.org/show_bug.cgi?id=146162

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/modal-alerts-in-new-about-blank-window.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ModalAlerts.mm: Added.
        (sawDialog):
        (-[ModalAlertsUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[ModalAlertsUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ModalAlertsUIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ModalAlertsUIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        (TEST):

2015-06-23  Tanay C  <tanay.c@samsung.com>

        Remove build warnings in Tools/DumpRenderTree/TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=146007

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp: Add attribute to functions.
        (pluginLogWithWindowObject):
        (pluginLogWithArguments):
        (pluginLog):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp: Add attribute to functions.
        (PluginTest::executeScript):
        (PluginTest::log):

2015-06-23  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Add libhyphen-dev as dependency after r185862
        https://bugs.webkit.org/show_bug.cgi?id=146230

        Reviewed by Gyuyoung Kim.

        * efl/install-dependencies:

2015-06-22  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Hyphenation is not supported
        https://bugs.webkit.org/show_bug.cgi?id=89830

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Added webkitgtk-test-dicts for layout test.

2015-06-22  Dewei Zhu  <dewei_zhu@apple.com>

        Get rid of factory json files in benchmark_runner
        https://bugs.webkit.org/show_bug.cgi?id=146175

        Reviewed by Ryosuke Niwa.

        Get rid of factory json files in benchmark_runner and refactoring the code.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py:
        (benchmark_builder_loader):
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py:
        (BenchmarkBuilderFactory):
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Removed.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:
        (GenericBenchmarkBuilder):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute):
        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py:
        (browser_driver_loader):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory):
        (BrowserDriverFactory.available_platforms):
        (BrowserDriverFactory.available_browsers):
        (BrowserDriverFactory.add_browser_driver):
        (BrowserDriverFactory.create):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_drivers.json: Removed.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver):
        (OSXBrowserDriver.prepareEnv):
        (OSXBrowserDriver.terminateProcesses):
        (OSXBrowserDriver.screenSize):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver):
        (OSXChromeCanaryDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver):
        (OSXFirefoxNightlyDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver):
        * Scripts/webkitpy/benchmark_runner/generic_factory.py:
        (GenericFactory.create):
        (GenericFactory.add):
        (GenericFactory.iterateGetItem): Deleted.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py:
        (http_server_driver_loader):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:
        (HTTPServerDriverFactory):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_drivers.json: Removed.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver):
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (is_subclass):
        (load_subclasses):
        (ModuleNotFoundError): Deleted.
        (loadModule): Deleted.
        (loadJSONFromFile): Deleted.

2015-06-22  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to enable incremental rendering suppression in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=146223
        
        Reviewed by Tim Horton.

        Add a menu item to enable incremental rendering suppression to MiniBrowser.
        
        For WK1, this just toggles a pref, and takes effect immediately.
        
        For WK2, this is a WKConfiguration property, so only affects new web views.
        
        Also remove a toolbar item connection to toggleUseMinimumViewSize: that caused
        logging on launch.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleIncrementalRenderingSuppressed:]):
        (-[SettingsController incrementalRenderingSuppressed]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        Run CDjs as part of JSC stress testing
        https://bugs.webkit.org/show_bug.cgi?id=146174

        Reviewed by Geoffrey Garen.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Make this aware of the cdjs-tests.yaml.
        * Scripts/run-jsc-stress-tests:
        - Teach this about tests that indicate error by returning an error code while also having lots of output even when they succeed.
        - Add the ability to have "tests" be a list of tests rather than just one test. This could also be a list of directories that have tests.
        - Fix a bug with bundle copying: whether the $collection should have the basename appended depends on whether we copy into bundleDir.dirname, not on whether absoluteCollection is a directory.

2015-06-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r172975): navigator.language unable to tell region for Traditional Chinese users
        https://bugs.webkit.org/show_bug.cgi?id=146121
        rdar://problem/21395180

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm: Added.
        (-[NavigatorLanguageDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::overrideAppleLanguages):
        (TestWebKitAPI::languageForSystemLanguage):
        (TestWebKitAPI::TEST):

2015-06-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Ignore warnings from system headers when compiling Tools
        https://bugs.webkit.org/show_bug.cgi?id=146185

        Reviewed by Martin Robinson.

        Use the SYSTEM argument to the include_directories() command to silence compiler warnings
        from system headers that we don't control.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * ImageDiff/CMakeLists.txt: Also, remove an EFL include directory from here...
        * ImageDiff/PlatformEfl.cmake: ...and put it here where it belongs.
        * ImageDiff/PlatformGTK.cmake:
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/gtk/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:

2015-06-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Define GDK_VERSION_MIN_REQUIRED when compiling MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=146186

        Reviewed by Martin Robinson.

        Define GDK_VERSION_MIN_REQUIRED when compiling MiniBrowser to silence several dozen
        deprecation warnings. (MiniBrowser is unique in that it does not include wtf/Platform.h.)

        * MiniBrowser/gtk/CMakeLists.txt:

2015-06-19  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r146125.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver):
        (OSXSafariDriver.prepareEnv):

2015-06-19  Brady Eidson  <beidson@apple.com>

        Rename WKSecurityOrigin.h/cpp to WKSecurityOriginRef.h/cpp.
        https://bugs.webkit.org/show_bug.cgi?id=146152

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/WebNotificationProvider.cpp:

2015-06-19  Mark Lam  <mark.lam@apple.com>

        CheckedArithmetic's operator bool() and operator==() is broken.
        https://bugs.webkit.org/show_bug.cgi?id=146129

        Reviewed by Geoffrey Garen and Oliver Hunt.

        Added API tests for operator ==, !=, <, <=, >, and >=, and tested for both normal
        and overflow scenarios in usage of the Checked arithmetic class.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::OverflowCrashLogger::overflowed):
        (TestWebKitAPI::OverflowCrashLogger::clearOverflow):
        (TestWebKitAPI::OverflowCrashLogger::crash):
        (TestWebKitAPI::OverflowCrashLogger::reset):
        (TestWebKitAPI::OverflowCrashLogger::hasOverflowed):
        (TestWebKitAPI::OverflowCrashLogger::overflowCount):
        (TestWebKitAPI::OverflowCrashLogger::didCrash):
        - crash logger for verifying that a crash occurs when expected. 

        (TestWebKitAPI::resetOverflow):
        - convenience function for resetting a test value to an initial overflowed state
          before a crash.  We will use this value in the overflow testing.

        (TestWebKitAPI::CheckedArithmeticTester::run):
        - Added new tests for all the comparison operators.

2015-06-19  Per Arne Vollan  <peavo@outlook.com>

        Fix the Windows build after r185721
        https://bugs.webkit.org/show_bug.cgi?id=146146

        Reviewed by Csaba Osztrogonác.

        Speculative buildfix.

        * DumpRenderTree/win/UIDelegate.h:
        (UIDelegate::unused4): Added.
        (UIDelegate::webViewShouldInterruptJavaScript): Deleted.

2015-06-19  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed. Add myself as a committer.

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

2015-06-19  Csaba Osztrogonác  <ossy@webkit.org>

        Remove unnecessary svn:executable flags
        https://bugs.webkit.org/show_bug.cgi?id=146107

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-green.png: Removed property svn:executable.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-red.png: Removed property svn:executable.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/daterangepicker.css: Removed property svn:executable.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/jquery.daterangepicker.js: Removed property svn:executable.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/moment.min.js: Removed property svn:executable.
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html: Removed property svn:executable.
        * CygwinDownloader/cygwin-downloader.zip: Removed property svn:executable.
        * DumpRenderTree/ForwardingHeaders/runtime/JSExportMacros.h: Removed property svn:executable.
        * DumpRenderTree/win/TextInputController.cpp: Removed property svn:executable.
        * DumpRenderTree/win/TextInputController.h: Removed property svn:executable.
        * DumpRenderTree/win/TextInputControllerWin.cpp: Removed property svn:executable.
        * Scripts/webkitpy/port/base_unittest.py: Removed property svn:executable.
        * Scripts/webkitpy/port/driver.py: Removed property svn:executable.
        * Scripts/webkitpy/w3c/test_parser.py: Removed property svn:executable.

2015-06-19  Csaba Osztrogonác  <ossy@webkit.org>

        Disable tests on the WinCairo buildbot
        https://bugs.webkit.org/show_bug.cgi?id=146106

        Reviewed by Alexey Proskuryakov.

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

2015-06-19  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Fix the minibrowser after r185725
        https://bugs.webkit.org/show_bug.cgi?id=146135

        Reviewed by Gyuyoung Kim.

        Removed the HAVE_ECORE_X guard in MiniBrowser because it is an unnecessary guard
        for the elm_config_accel_preference_set() to set the config of acceleration preference.

        * MiniBrowser/efl/main.c:
        (elm_main): Deleted the HAVE_ECORE_X guard.

2015-06-18  Dewei Zhu  <dewei_zhu@apple.com>

        Extend capability of run-benchmark script to support mobile device
        https://bugs.webkit.org/show_bug.cgi?id=146125

        Reviewed by Ryosuke Niwa.

        Extend capability of run-benchmark to support mobile device, and move majority of run-benchmark script code to
        benchmark_runner directory, and make run-benchmark a wrapping script. Also correct a typo.

        * Scripts/run-benchmark:
        (main): Deleted.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.prepareEnv):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepareEnv):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.prepareEnv):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver.getReturnCode):
        (HTTPServerDriver):
        (HTTPServerDriver.setDeviceID):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Copied from Tools/Scripts/run-benchmark.
        (parse_args):
        (start):
        (main):
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (getPathFromProjectRoot):

2015-06-18  Jon Lee  <jonlee@apple.com>

        Unreviewed. Add Matt Daiter as a contributor.

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

2015-06-18  Mark Lam  <mark.lam@apple.com>

        Refactor CheckedArithmeticOperations.cpp to use templates instead of macros.
        https://bugs.webkit.org/show_bug.cgi?id=146103

        Not reviewed.

        Follow up to fix some typos not caught before original patch was landed.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::CheckedArithmeticTester::run):
        (TestWebKitAPI::AllowMixedSignednessTest::run):
        (TestWebKitAPI::IgnoreMixedSignednessTest::run):

2015-06-18  Daniel Bates  <dabates@apple.com>

        Make webkitdirs::runGitUpdate() work when invoked in more than one Git checkout
        https://bugs.webkit.org/show_bug.cgi?id=146082

        Reviewed by Darin Adler.

        The function webkitdirs::runGitUpdate may not update the Git checkout in the current
        working directory after being invoked in a different Git checkout. In particular,
        calling runGitUpdate() inside a Git SVN checkout and subsequently calling it inside
        a pure Git checkout g will fail to update g.

        Currently webkitdirs::runGitUpdate() calls VCSUtils::isGitSVN() to determine whether
        the current working directory is a Git SVN checkout. And isGitSVN() caches its result
        to speed up subsequent queries. This prevents runGitUpdate() from being used to update
        an arbitrary Git checkout (since isGitSVN() may return a cached result for a directory
        different than the current working directory). Instead runGitUpdate() should check
        whether the current working directory is a Git SVN checkout on each invocation.

        * Scripts/VCSUtils.pm: Export function isGitSVNDirectory so that it can be used from webkitdirs::runGitUpdate().
        (isGitSVNDirectory): Extracted logic to determine whether a directory is a Git
        SVN directory from isGitSVN().
        (isGitSVN): Implemented in terms of isGitSVNDirectory().
        * Scripts/webkitdirs.pm:
        (runGitUpdate): Modified to use isGitSVNDirectory().

2015-06-18  Mark Lam  <mark.lam@apple.com>

        Refactor CheckedArithmeticOperations.cpp to use templates instead of macros.
        https://bugs.webkit.org/show_bug.cgi?id=146103

        Reviewed by Anders Carlsson.

        Presently, the tests in CheckedArithmeticOperations.cpp are all implemented as
        part of a large macro.  This makes them harder to:

        1. write: no editor help with indentations, have to add trailing '\'s,
           inconvenient to add line breaks and comments.

        2. read: no chroma coding / syntax highlighting.

        3. debug: compile time errors are reported as being on the single line where
           the macro is used.

        Refactoring the tests to use C++ templates solves all these issues.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::CheckedArithmeticTester::run):
        (TestWebKitAPI::AllowMixedSignednessTest::run):
        (TestWebKitAPI::IgnoreMixedSignednessTest::run):
        (TestWebKitAPI::CoerceLiteralToUnsigned::coerce):
        (TestWebKitAPI::CoerceLiteralNop::coerce):

2015-06-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Use Web Browser cache model in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=112273

        Reviewed by Laszlo Gombos.

        Set cache model to EWK_CACHE_MODEL_PRIMARY_WEBBROWSER in EFL's MiniBrowser
        instead of leaving the default value (EWK_CACHE_MODEL_DOCUMENT_VIEWER).
        This way we have a decent cache capacity and the page cache actually works.

        * MiniBrowser/efl/main.c:
        (elm_main):

2015-06-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove redundant Chromium bug keyword
        https://bugs.webkit.org/show_bug.cgi?id=146097

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_modifiers): Remove BUGCR for TestExpectations.
        (TestExpectationLine._format_line): Deleted.

2015-06-17  Daniel Bates  <dabates@apple.com>

        Client may receive began editing callback for already focused text field
        https://bugs.webkit.org/show_bug.cgi?id=146074
        <rdar://problem/21293562>

        Reviewed by Darin Adler.

        Add a unit test to ensure that a client receives exactly one began editing
        callback when a text field is newly focused. In particular, dispatching
        a DOM focus event at an already focused text field does not dispatch a
        began editing callback to the client.

        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing.cpp:
        (TestWebKitAPI::TEST_F):

2015-06-17  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [Win]Implement layoutTestController.dispatchPendingLoadRequests. 
        https://bugs.webkit.org/show_bug.cgi?id=26481

        Reviewed by Darin Adler.

        Implement WebView::dispatchPendingLoadRequests() private API for test runner.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::dispatchPendingLoadRequests):
        (TestRunner::overridePreference):

2015-06-17  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Fail to parse invalid arrays
        https://bugs.webkit.org/show_bug.cgi?id=146079
        rdar://problem/21422649

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Correct and add parsing tests with invalid arrays.

2015-06-17  Matt Rajca  <mrajca@apple.com>

        Unreviewed. Added myself as a committer.

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

2015-06-17  Daniel Bates  <dabates@apple.com>

        Export VCSUtils::gitTreeDirectory()
        <rdar://problem/21248901>

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/VCSUtils.pm:

2015-06-17  Tim Horton  <timothy_horton@apple.com>

        Safari tabs still have shrunken content after coming out of fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=146037
        <rdar://problem/21105960>

        Reviewed by Simon Fraser and Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShrinkToFit.mm: Added.
        (-[ShrinkToFitNavigationDelegate webView:didFinishNavigation:]):
        (TEST):
        Add a test that ensures that disabling scale-to-fit mode correctly updates
        the page's layout.

2015-06-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose UIDelegate::UIClient::close via WKUIDelegate
        https://bugs.webkit.org/show_bug.cgi?id=145957

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm:
        (-[OpenAndCloseWindowUIDelegate webViewDidClose:]): Renamed from -_webViewClose:.

2015-06-15  Chris Fleizach  <cfleizach@apple.com>

        AX:  iOS accessibility tests are not running because we need WKTR support
        https://bugs.webkit.org/show_bug.cgi?id=145991

        Reviewed by Daniel Bates.

        Add support for WKTR iOS accessibility.
        Utilize the notification handling mechanisms that Mac already uses.
        Rename iphone* DRT methods to either use existing methods that are similar, or rename to more generic names.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (stringForSelectionCallback):
        (getIdentifierCallback):
        (getTraitsCallback):
        (getElementTextPositionCallback):
        (getElementTextLengthCallback):
        (AccessibilityUIElement::getJSClass):
        (getIPhoneLabelCallback): Deleted.
        (getIPhoneHintCallback): Deleted.
        (getIPhoneValueCallback): Deleted.
        (getIPhoneIdentifierCallback): Deleted.
        (getIPhoneTraitsCallback): Deleted.
        (getIPhoneIsElementCallback): Deleted.
        (getIPhoneElementTextPositionCallback): Deleted.
        (getIPhoneElementTextLengthCallback): Deleted.
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::identifier):
        (AccessibilityUIElement::traits):
        (AccessibilityUIElement::elementTextPosition):
        (AccessibilityUIElement::elementTextLength):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::helpText):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::isSelected):
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::documentURI):
        (AccessibilityUIElement::addNotificationListener):
        (AccessibilityUIElement::removeNotificationListener):
        (AccessibilityUIElement::isFocusable):
        (AccessibilityUIElement::isIgnored):
        (AccessibilityUIElement::hasPopup):
        (AccessibilityUIElement::iphoneLabel): Deleted.
        (AccessibilityUIElement::iphoneHint): Deleted.
        (AccessibilityUIElement::iphoneValue): Deleted.
        (AccessibilityUIElement::iphoneIdentifier): Deleted.
        (AccessibilityUIElement::iphoneTraits): Deleted.
        (AccessibilityUIElement::iphoneIsElement): Deleted.
        (AccessibilityUIElement::iphoneElementTextPosition): Deleted.
        (AccessibilityUIElement::iphoneElementTextLength): Deleted.
        (_accessibilityNotificationCallback): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isValid):
        (WTR::AccessibilityUIElement::identifier):
        (WTR::AccessibilityUIElement::traits):
        (WTR::AccessibilityUIElement::elementTextPosition):
        (WTR::AccessibilityUIElement::elementTextLength):
        (WTR::AccessibilityUIElement::stringForSelection):
        (WTR::AccessibilityUIElement::elementsForRange):
        (WTR::AccessibilityUIElement::increaseTextSelection):
        (WTR::AccessibilityUIElement::decreaseTextSelection):
        (WTR::AccessibilityUIElement::linkedElement):
        (WTR::AccessibilityUIElement::headerElementAtIndex):
        (WTR::AccessibilityUIElement::assistiveTechnologySimulatedFocus):
        (WTR::AccessibilityUIElement::characterAtOffset):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::findAccessibleObjectById):
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (+[NSString stringWithJSStringRef:]):
        (-[NSString createJSStringRef]):
        (WTR::convertNSArrayToVector):
        (WTR::concatenateAttributeAndValue):
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::headerElementAtIndex):
        (WTR::AccessibilityUIElement::linkedElement):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::convertElementsToObjectArray):
        (WTR::AccessibilityUIElement::elementsForRange):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isSelectedOptionActive):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::traits):
        (WTR::AccessibilityUIElement::identifier):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::assistiveTechnologySimulatedFocus):
        (WTR::AccessibilityUIElement::increaseTextSelection):
        (WTR::AccessibilityUIElement::decreaseTextSelection):
        (WTR::AccessibilityUIElement::stringForSelection):
        (WTR::AccessibilityUIElement::elementTextPosition):
        (WTR::AccessibilityUIElement::elementTextLength):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isIgnored):
        (WTR::AccessibilityUIElement::hasPopup):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        (WTR::_CGPathEnumerationIteration):
        (WTR::AccessibilityUIElement::pathDescription):
        (WTR::AccessibilityUIElement::supportedActions):

2015-06-16  Mark Lam  <mark.lam@apple.com>

        Use NakedPtr<Exception>& to return exception results.
        https://bugs.webkit.org/show_bug.cgi?id=145870

        Reviewed by Anders Carlsson and Filip Pizlo.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::nakedPtrFoo):

2015-06-16  Tobias Reiss  <tobi+webkit@basecode.de>

        Unreviewed. Adding myself as a committer.

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

2015-06-15  Alexey Proskuryakov  <ap@apple.com>

        Add test expectations for El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=146005

        Rubber-stamped by Dan Bernstein.

        Add appropriate tools code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan@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:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        Added cases for El Capitan, and updated tests for new baseline search paths.

2015-06-15  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Make max NFA size and max rule count user defaults.
        https://bugs.webkit.org/show_bug.cgi?id=145663

        Reviewed by Benjamin Poulain.

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

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

        -[WKWebView evaluateJavaScript] provides a misleading error when the return cannot be serialized
        https://bugs.webkit.org/show_bug.cgi?id=145900

        Reviewed by Sam Weinig.

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

2015-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom URI schemes don't work for requests containing a fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=145969

        Reviewed by Sergio Villar Senin.

        Add a test case to the custom URI schemes unit test.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):

2015-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Fix deprecated-register warning in the generated WebKitMarshal.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145922

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:
        * gtk/patches/glib-warning-fix.patch: Added.

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

        Update springLoadingHighlight type
        https://bugs.webkit.org/show_bug.cgi?id=145939
        rdar://problem/20880213

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.h:
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.mm:

2015-06-12  Dewei Zhu  <dewei_zhu@apple.com>

        Move cursor to (10, 0) instead of (0, 0) and polish the mouse move code
        https://bugs.webkit.org/show_bug.cgi?id=145945

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepareEnv):
        (OSXBrowserDriver.moveCursor): Deleted.
        (OSXBrowserDriver): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.prepareEnv):

2015-06-12  Brent Fulgham  <bfulgham@apple.com>

        Revise update-webkit-dependency to use LWP::UserAgent instead of LWP::Simple for better handling of https
        https://bugs.webkit.org/show_bug.cgi?id=145938

        Reviewed by Alexey Proskuryakov.

        * Scripts/update-webkit-dependency: Switch from LWP::Simple to
        LWP::UserAgent to get access to more robust HTTPS support.

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Fix return type warning in WebViewTest.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145914

        Reviewed by Darin Adler.

        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::isEditable):

2015-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Move files under Source/WTF/wtf/gobject to Source/WTF/wtf/glib
        https://bugs.webkit.org/show_bug.cgi?id=145799

        Reviewed by Carlos Garcia Campos.

        Update header inclusions for headers that have been moved
        to Source/WTF/wtf/glib/.

        Also move the unit tests under TestWebKitAPI/Tests/WTF/gobject/
        to TestWebKitAPI/Tests/WTF/glib/ and update the build rules.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/glib/GMainLoopSource.cpp: Renamed from Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp.
        (TestWebKitAPI::GMainLoopSourceTest::GMainLoopSourceTest):
        (TestWebKitAPI::GMainLoopSourceTest::~GMainLoopSourceTest):
        (TestWebKitAPI::GMainLoopSourceTest::runLoop):
        (TestWebKitAPI::GMainLoopSourceTest::delayedFinish):
        (TestWebKitAPI::GMainLoopSourceTest::finish):
        (TestWebKitAPI::GMainLoopSourceTest::source):
        (TestWebKitAPI::basicRescheduling):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::reentrantRescheduling):
        (TestWebKitAPI::cancelRepeatingSourceDuringDispatch):
        (TestWebKitAPI::basicDestroyCallbacks):
        (TestWebKitAPI::destroyCallbacksAfterCancellingDuringDispatch):
        (TestWebKitAPI::destroyCallbacksAfterReschedulingDuringDispatch):
        * TestWebKitAPI/Tests/WTF/glib/GUniquePtr.cpp: Renamed from Tools/TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp.
        (log):
        (takeLogStr):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::returnOutChar):
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        * TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:
        (TestWebKitAPI::GMainLoopSourceTest::GMainLoopSourceTest): Deleted.
        (TestWebKitAPI::GMainLoopSourceTest::~GMainLoopSourceTest): Deleted.
        (TestWebKitAPI::GMainLoopSourceTest::runLoop): Deleted.
        (TestWebKitAPI::GMainLoopSourceTest::delayedFinish): Deleted.
        (TestWebKitAPI::GMainLoopSourceTest::finish): Deleted.
        (TestWebKitAPI::GMainLoopSourceTest::source): Deleted.
        (TestWebKitAPI::basicRescheduling): Deleted.
        (TestWebKitAPI::TEST): Deleted.
        (TestWebKitAPI::reentrantRescheduling): Deleted.
        (TestWebKitAPI::cancelRepeatingSourceDuringDispatch): Deleted.
        (TestWebKitAPI::basicDestroyCallbacks): Deleted.
        (TestWebKitAPI::destroyCallbacksAfterCancellingDuringDispatch): Deleted.
        (TestWebKitAPI::destroyCallbacksAfterReschedulingDuringDispatch): Deleted.
        * TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp:
        (log): Deleted.
        (takeLogStr): Deleted.
        (TestWebKitAPI::TEST): Deleted.
        (TestWebKitAPI::returnOutChar): Deleted.
        * TestWebKitAPI/Tests/WebKit2/gtk/InputMethodFilter.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMXPathNSResolverTest.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFindController.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h:
        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp:
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix deprecated declarations warnings related to WK2 versioned structs
        https://bugs.webkit.org/show_bug.cgi?id=145913

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::setupGeolocationProvider):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp:
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setPageLoaderClient):
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::GeolocationProviderMock):
        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::provider):

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the libusrsctp build with clang
        https://bugs.webkit.org/show_bug.cgi?id=145128

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2015-06-11  Mark Lam  <mark.lam@apple.com>

        WebCore::reportException() needs to be able to accept a raw thrown value in addition to Exception objects.
        https://bugs.webkit.org/show_bug.cgi?id=145872

        Reviewed by Michael Saboff.

        * TestWebKitAPI/Tests/mac/WebViewDidCreateJavaScriptContext.mm:
        (-[DidCreateJavaScriptContextFrameLoadDelegate webView:didCreateJavaScriptContext:forFrame:]):
        - Exercises the JSC ObjC API to call a function which throws an exception.  That
          exception will be returned as a JSValue instead of an Exception object.  We
          will use this JSValue to test WebCore::reportException() to confirm that it is
          able to handle an exception value which is not an Exception object.

2015-06-11  Dewei Zhu  <dewei_zhu@apple.com>

        Move cursor to corner and fix safari window size before running benchmark
        https://bugs.webkit.org/show_bug.cgi?id=145858

        Reviewed by Ryosuke Niwa

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepareEnv):
        (OSXBrowserDriver):
        (OSXBrowserDriver.moveCursor):
        (OSXBrowserDriver.getScreenSize):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launchUrl):
        (OSXChromeCanaryDriver.launchUrl):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launchUrl):
        (OSXFirefoxNightlyDriver.launchUrl):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.prepareEnv):
        (OSXSafariDriver):
        (OSXSafariDriver.maximizeWindow):

2015-06-11  Daniel Bates  <dabates@apple.com>

        [iOS] Cannot run run-webkit-tests with public SDK; LayoutTestRelay fails to build
        https://bugs.webkit.org/show_bug.cgi?id=145319

        Reviewed by David Kilzer.

        Add SPI wrapper header for CoreSimulator and update the source files to reference
        it instead of directly referencing the CoreSimulator header.

        * LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj:
        * LayoutTestRelay/LayoutTestRelay/CoreSimulatorSPI.h: Added.
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        * LayoutTestRelay/LayoutTestRelay/main.m:

2015-06-10  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] dimmed area for popup does not cover the fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=145133

        Reviewed by Gyuyoung Kim.

        By calling elm_win_resize_object_add(), popup was added as a resize object of elm_win.
        as a result, popup can cover the fullscreen area when it enters a fullscreen mode.

        * MiniBrowser/efl/main.c:
        (on_fullscreen_accept):
        (on_fullscreen_deny):
        (on_fullscreen_enter):

2015-06-10  Commit Queue  <commit-queue@webkit.org>

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

        seems to have broken WTF.StringOperators test (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "[Content Extensions] Limit number of rules."
        https://bugs.webkit.org/show_bug.cgi?id=145663
        http://trac.webkit.org/changeset/185442

2015-06-10  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Make max NFA size and max rule count user defaults.
        https://bugs.webkit.org/show_bug.cgi?id=145663
        rdar://problem/21242407

        Reviewed by Benjamin Poulain.

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

2015-06-10  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Execute Javascript method in mini browser address bar.
        https://bugs.webkit.org/show_bug.cgi?id=145725

        Reviewed by Gyuyoung Kim.

        Support 'javascript:' scheme in WebKit EFL Mini Browser.

        * MiniBrowser/efl/main.c:
        (url_from_user_input):
        (url_load_from_user_input):
        (on_url_bar_activated):
        (elm_main):

2015-06-09  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Implement dumpProgressFinishedCallback() for Win layoutTestController.
        https://bugs.webkit.org/show_bug.cgi?id=66773

        Reviewed by Darin Adler.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:

2015-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark should either checkout JetStream 1.0.1 or support running the latest version
        https://bugs.webkit.org/show_bug.cgi?id=145764

        Reviewed by Darin Adler.

        Added the support for checkout a subversion directory in run-benchmark and used in the plans for
        JetStream and SunSpider.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:
        (GenericBenchmarkBuilder):
        (GenericBenchmarkBuilder.prepare): Instead of taking each argument from benchmark plan, just accept
        the whole JSON as the input.
        (GenericBenchmarkBuilder._checkoutWithSubverion): Added.
        (GenericBenchmarkBuilder._applyPatch): Check the existence of benchmark_patch in prepare() instead.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.execute): Removed the check for having either 'local_copy' or 'remote_archive' in
        a benchmark plan now that it's checkedi in GenericBenchmarkBuilder.prepare.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan:

2015-06-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove ewstool scripts used by chromium port
        https://bugs.webkit.org/show_bug.cgi?id=145789

        Reviewed by Csaba Osztrogonác.

        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh: Removed.
        * EWSTools/GoogleComputeEngine/build-commit-queue.sh: Removed.
        * EWSTools/GoogleComputeEngine/build-cr-linux-debug-ews.sh: Removed.
        * EWSTools/GoogleComputeEngine/build-feeder-style-sheriffbot.sh: Removed.
        * EWSTools/GoogleComputeEngine/findzone.sh: Removed.

2015-06-09  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        Unreviewed, updated my list of email addresses.

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

2015-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Fix the style issues in cmake project files
        https://bugs.webkit.org/show_bug.cgi?id=145755

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:

2015-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a typo in r185345.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.closeBrowsers):

2015-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another unreviewed build fix :(

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver):
        (OSXSafariDriver.launchUrl):
        (OSXSafariDriver.closeBrowsers):

2015-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix. Initialize result in the case things blow up below.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.execute):

2015-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Partially revert and fix after r185243.

        * Scripts/benchmark_runner/benchmark_runner.py:
        * Scripts/run-benchmark:

2015-06-08  Daniel Bates  <dabates@apple.com>

        Many LayoutTests/http tests time out in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=145770
        <rdar://problem/19593910>

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/ios/Info.plist: Add ATS key.
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController _environmentVariables]): Copy environment variables LOCAL_RESOURCE_ROOT
        and DUMPRENDERTREE_TEMP to the simulator environment to avoid assertion failures in tests
        that make use of testRunner.pathToLocalResource().

2015-06-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Fix parentheses warning in TestWebKitWebView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145759

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewSave):

2015-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add editor mode to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=145595

        Reviewed by Sergio Villar Senin.

        It loads an empty editable web view with an edit toolbar. It makes
        easier to test the editor, editing commands and input methods.

        * MiniBrowser/gtk/BrowserWindow.c:
        (editingCommandCallback):
        (browserWindowSetupEditorToolbar):
        (browserWindowConstructed):
        * MiniBrowser/gtk/main.c:
        (createBrowserWindow):

2015-06-05  Zalan Bujtas  <zalan@apple.com>

        From r185273 on WTF::RefCounter exposes the actual refcount instead of a boolean value.

        Reviewed by Dan Bernstein.

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

2015-06-05  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] API test has been broken since r184357
        https://bugs.webkit.org/show_bug.cgi?id=145635

        Reviewed by Darin Adler.

        r184357 suppress cmake build warning using TARGET_FILE property. However
        many EFL API test cases have been broken after applying it.

        * TestWebKitAPI/CMakeLists.txt:

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Make the network cache directory part of WKContextConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=145711

        Reviewed by Antti Koivisto.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Make the application cache directory part of WKContextConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=145704

        Reviewed by Geoffrey Garen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2015-06-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        check-webkit-style should recommend using nullptr instead of recommending using 0 for the null pointer in C++ code.
        https://bugs.webkit.org/show_bug.cgi?id=145680

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_null):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_null_false_zero):

2015-06-05  Stephanie Lewis  <slewis@apple.com>

        Make the web server more robust to timing issues..

        Reviewed by Ryosuke Niwa.

        Cleaned up exception handling.
        Test server is actually serving pages before returning.
        Clean up some style issues.

        * 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:
        (SimpleHTTPServerDriver.__init__):
        (SimpleHTTPServerDriver.serve): check output, wait for pages to serve
        (SimpleHTTPServerDriver.baseUrl): 
        (SimpleHTTPServerDriver.fetchResult):
        (SimpleHTTPServerDriver.killServer):
        (SimpleHTTPServerDriver.getReturnCode):

2015-06-05  Stephanie Lewis  <slewis@apple.com>


        Add errors to run-benchmark exception handling.

        Reviewed by Ryosuke Niwa.

        * Scripts/run-benchmark:
        (main):
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:
        (GenericBenchmarkBuilder.prepare):
        (GenericBenchmarkBuilder._runCreateScript):
        (GenericBenchmarkBuilder._applyPatch):
        (GenericBenchmarkBuilder.clean):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute):
        (BenchmarkRunner):
        (BenchmarkRunner.cleanup):
        * Scripts/webkitpy/benchmark_runner/generic_factory.py:
        (GenericFactory.iterateGetItem):
        (GenericFactory.create):
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (loadModule):
        (loadJSONFromFile):
        (forceRemove):

2015-06-05  Stephanie Lewis  <slewis@apple.com>

        Streamline run-benchmark browser

        Reviewed by Ryosuke Niwa.

        Add Caffeinate so computer won't sleep while running.
        Remove calls to collect output since we were just dumping to stdout anyway.
        Add xpc dyld_path.
        Default to system safari.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.launchProcess):
        (OSXBrowserDriver.terminateProcesses):
        (OSXBrowserDriver):
        (OSXBrowserDriver.launchCaffeinateForProcess):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launchUrl):
        (OSXSafariDriver.closeBrowsers):

2015-06-04  Benjamin Poulain  <bpoulain@apple.com>

        Combine tiny DFAs into slightly larger ones
        https://bugs.webkit.org/show_bug.cgi?id=145572

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/DFACombiner.cpp: Added.
        (TestWebKitAPI::DFACombinerTest::SetUp):
        (TestWebKitAPI::combine):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: Copied from Source/WebCore/contentextensions/DFA.h.
        (TestWebKitAPI::countLiveNodes):
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::buildDFAFromPatterns):
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:
        (TestWebKitAPI::countLiveNodes): Deleted.
        (TestWebKitAPI::createNFAs): Deleted.
        (TestWebKitAPI::buildDFAFromPatterns): Deleted.

2015-06-04  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner leaks strings in generateWhitelist()
        https://bugs.webkit.org/show_bug.cgi?id=145665

        Reviewed by Myles C. Maxfield.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateWhitelist):

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

        Fix options in build-jsc for CMake builds
        https://bugs.webkit.org/show_bug.cgi?id=145636

        Reviewed by Gyuyoung Kim.

        CMake only accepts -DXXX=YYY style options.
        And ensured that ENABLE_JIT=OFF when specifying `--cloop`.

        * Scripts/build-jsc:

2015-06-03  Matthew Daiter  <mdaiter@apple.com>

        Added a patch so that the colors displayed on the page could be toggled
        in case people need accessibility colors displayed in their browser.
        https://bugs.webkit.org/show_bug.cgi?id=145570
        <rdar://problem/20994468>

        Added in CSS colors and toggle buttons for checkmarks in the page, so that
        the page could be rendered in a specific way for accessibility needs if needed.

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (updateHiddenPlatforms):
        (applyAccessibilityColorSetting): Initial loading of accessibility colors if necessary
        (toggleAccessibilityColors): Toggle colors on and off
        (documentReady): Needed to make changes to the initialization
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (a:hover):
        (div.cellButton, div.accessibilityButton): Added in similar properties for cellButton and accessibilityButton
        (div.cellButton.hide, div.accessibilityButton.hide):
        (div.cellButton.unhide, div.accessibilityButton.unhide):
        (.settings-visible div.accessibilityButton.hide, .settings-visible div.accessibilityButton.unhide):
        (.popover-tracking:hover):
        (.accessibilityButton):
        (div.cellButton): Deleted.
        (div.cellButton.hide): Deleted.
        (div.cellButton.unhide): Deleted.
        (.settings-visible div.cellButton.hide, .settings-visible div.cellButton.unhide): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.neutral .bubble):
        (.status-line.unauthorized .bubble):
        (.status-line.danger .bubble.pictogram):
        (.status-line.bad .bubble.pictogram):
        (.status-line.no-bubble .message):
        (.status-line.bad .bubble):
        (.status-line.good .bubble):
        (.status-line.good .message):
        (.status-line.bad .message):
        (body.accessibility-colors .status-line.good .bubble):
        (body.accessibility-colors .status-line.bad .bubble):
        (body.accessibility-colors .status-line.good .message):
        (body.accessibility-colors .status-line.bad .message):
        (.status-line.danger .message):
        (.status-line.unauthorized .message):

2015-06-03  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for Dromaeo.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults._aggregate_results_for_test):

2015-06-03  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * DumpRenderTree/mac/TestRunnerMac.mm:

2015-06-03  Daniel Bates  <dabates@apple.com>

        WebKit2.TextFieldDidBeginAndEndEditing is flaky on Mac
        https://bugs.webkit.org/show_bug.cgi?id=145616

        Skip the test on Mac for now to avoid having the bots turn red due to the flakiness
        of the test. Further investigation is needed.

        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing.cpp:
        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing_Bundle.cpp:

2015-06-03  Brady Eidson  <beidson@apple.com>

        REGRESSION (r183498): Certain types of frame loads in iframes with <base target="_blank"> can open urls in new window/tabs
        https://bugs.webkit.org/show_bug.cgi?id=145580

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didSameDocumentNavigationForFrame): Implement the dump for "didChangeLocationWithinPageForFrame"

2015-06-03  Alexey Proskuryakov  <ap@apple.com>

        Attempt to fix CSSPropertyParserTest.GridTrackLimits API test after http://trac.webkit.org/r185147

        * TestWebKitAPI/Tests/WebCore/CSSParser.cpp:
        (TestWebKitAPI::TEST): Update the syntax.

2015-06-02  Mark Lam  <mark.lam@apple.com>

        build-jsc's --cloop option is broken.
        https://bugs.webkit.org/show_bug.cgi?id=145516

        Reviewed by Darin Adler.

        * Scripts/build-jsc:
        - Make sure to disable the JIT when --cloop is specified.
          Did analogous fix for --ftljit.

2015-06-02  Daniel Bates  <dabates@apple.com>

        Update ATS keys used in MiniBrowser and WebKitTestRunnerApp

        Rubber-stamped by Alexey Proskuryakov.

        * MiniBrowser/mac/Info.plist:
        * WebKitTestRunner/WebKitTestRunnerApp/WebKitTestRunnerApp-Info.plist:

2015-06-01  Commit Queue  <commit-queue@webkit.org>

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

        it breaks the FTL JIT builds with a local checkout of llvm
        (Requested by pizlo on #webkit).

        Reverted changeset:

        "build-jsc's --cloop option is broken."
        https://bugs.webkit.org/show_bug.cgi?id=145516
        http://trac.webkit.org/changeset/185066

2015-06-01  Daniel Bates  <dabates@apple.com>

        Notify client that we began editing when text field is focused
        https://bugs.webkit.org/show_bug.cgi?id=145439
        <rdar://problem/21142108>

        Reviewed by Anders Carlsson.

        Add API test to ensure that we dispatch textFieldDid{Begin, End}Editing callbacks when
        a text field is focused and defocused.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing.cpp: Added.
        (TestWebKitAPI::WebKit2TextFieldBeginAndEditEditingTest::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::WebKit2TextFieldBeginAndEditEditingTest::didFinishLoadForFrame):
        (TestWebKitAPI::WebKit2TextFieldBeginAndEditEditingTest::setInjectedBundleClient):
        (TestWebKitAPI::WebKit2TextFieldBeginAndEditEditingTest::setPageLoaderClient):
        (TestWebKitAPI::WebKit2TextFieldBeginAndEditEditingTest::nullJavaScriptCallback):
        (TestWebKitAPI::WebKit2TextFieldBeginAndEditEditingTest::executeJavaScriptAndCheckDidReceiveMessage):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing_Bundle.cpp: Added.
        (TestWebKitAPI::textFieldDidBeginEditing):
        (TestWebKitAPI::textFieldDidEndEditing):
        (TestWebKitAPI::TextFieldDidBeginAndEndEditingEventsTest::TextFieldDidBeginAndEndEditingEventsTest):
        (TestWebKitAPI::TextFieldDidBeginAndEndEditingEventsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/input-focus-blur.html: Added.

2015-06-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] resource-type and load-type should be independent.
        https://bugs.webkit.org/show_bug.cgi?id=145528
        rdar://problem/21190765

        Reviewed by Benjamin Poulain.

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

2015-06-01  Daniel Bates  <dabates@apple.com>

        Add ATS keys to WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=145519

        Reviewed by Alexey Proskuryakov.

        Add ATS keys for WebKitTestRunnerApp as we did for MiniBrowser in bug #145141.

        * WebKitTestRunner/WebKitTestRunnerApp/WebKitTestRunnerApp-Info.plist:

2015-06-01  Brady Eidson  <beidson@apple.com>

        Add WKTR support for "should open external URLs".
        https://bugs.webkit.org/show_bug.cgi?id=145505

        Reviewed by Darin Adler.

        - Add a new option to "queueLoad" to allow javascript to queue a load that has the
          "should open external URLs" bit set.
        
        - Add a new "dumpPolicyDelegateCallbacks" call to dump the NavigationAction in
          the policy delegate, including whether or not the bit was set.
        
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::queueLoad):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpPolicyDelegateCallbacks):
        (WTR::TestRunner::shouldDumpPolicyCallbacks):
        
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::queueLoad):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

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

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::WorkQueueManager::queueLoad):
        * WebKitTestRunner/WorkQueueManager.h:

2015-06-01  Mark Lam  <mark.lam@apple.com>

        build-jsc's --cloop option is broken.
        https://bugs.webkit.org/show_bug.cgi?id=145516

        Reviewed by Darin Adler.

        * Scripts/build-jsc:
        - Make sure to disable the JIT when --cloop is specified.
          Did analogous fix for --ftljit.

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] check-webkit-style provides bogus explanation for alphabetical sorting error
        https://bugs.webkit.org/show_bug.cgi?id=144959

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cmake.py:
        (CMakeChecker.check): Use enumerate instead of xrange.
        (CMakeChecker._check_list_order): Use enumerate instead of incrementing line_number manually.
        * Scripts/webkitpy/style/checkers/cmake_unittest.py:
        (CMakeCheckerTest.test_check): Update the expected results.

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the webkitpy scm unittests after r174051
        https://bugs.webkit.org/show_bug.cgi?id=145511

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitTestWithMock.make_scm):

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        EWS provides misleading information for not applyable patches
        https://bugs.webkit.org/show_bug.cgi?id=145307

        Reviewed by Alexey Proskuryakov.

        * Scripts/svn-apply: Die if there is no applyable diff in the patch.

2015-06-01  Alexey Proskuryakov  <ap@apple.com>

        Further tweak results of WebKit1.StringTruncator after r184965.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm:

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Suppress unused parameter warnings in WebKit2 and TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=145264

        Reviewed by Carlos Garcia Campos.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt: Set extra compiler flags and suppress only unused parameter warnings.

2015-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix after r185014. Some tests only have subtests and not metrics.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults._lint_subtest_results):
        * Scripts/webkitpy/benchmark_runner/benchmark_results_unittest.py:
        (test_aggregate_nested_results):
        (test_lint_results):
        * WinLauncher/WinLauncher.vcxproj/WinLauncherResource.h:

2015-05-29  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark should print out the results
        https://bugs.webkit.org/show_bug.cgi?id=145398

        Reviewed by Antti Koivisto.

        Added BenchmarkResults to compute and format the aggregated values. It also does the syntax/semantic check
        of the output to catch early errors.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py: Added.
        (BenchmarkResults): Added.
        (BenchmarkResults.__init__): Added.
        (BenchmarkResults.format): Added.
        (BenchmarkResults._format_tests): Added. Used by BenchmarkResults.format.
        (BenchmarkResults._format_values): Formats a list of values measured for a given metric on a given test.
        Uses the sample standard deviation to compute the significant figures for the value.
        (BenchmarkResults._unit_from_metric): Added.
        (BenchmarkResults._aggregate_results): Added.
        (BenchmarkResults._aggregate_results_for_test): Added.
        (BenchmarkResults._flatten_list): Added.
        (BenchmarkResults._subtest_values_by_config_iteration): Added. Organizes values measured for subtests
        by the iteration number so that i-th array contains values for all subtests at i-th iteration.
        (BenchmarkResults._aggregate_values): Added.
        (BenchmarkResults._lint_results): Added.
        (BenchmarkResults._lint_subtest_results): Added.
        (BenchmarkResults._lint_aggregator_list): Added.
        (BenchmarkResults._lint_configuration): Added.
        (BenchmarkResults._lint_values): Added.
        (BenchmarkResults._is_numeric): Added.
        * Scripts/webkitpy/benchmark_runner/benchmark_results_unittest.py: Added.
        (BenchmarkResultsTest):
        (BenchmarkResultsTest.test_init):
        (BenchmarkResultsTest.test_format):
        (test_format_values_with_large_error):
        (test_format_values_with_small_error):
        (test_format_values_with_time):
        (test_format_values_with_no_error):
        (test_format_values_with_small_difference):
        (test_aggregate_results):
        (test_aggregate_results_with_gropus):
        (test_aggregate_nested_results):
        (test_lint_results):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.execute): Added a call to show_results
        (BenchmarkRunner.wrap): Only dump the merged JSON when debugging.
        (BenchmarkRunner.show_results): Added.

2015-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        run_benchmark should have an option to specify the number of runs
        https://bugs.webkit.org/show_bug.cgi?id=145091

        Reviewed by Antti Koivisto.

        Added --count option.

        * Scripts/run-benchmark:
        (main):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):

2015-05-28  Alexey Proskuryakov  <ap@apple.com>

        Update results of WebKit1.StringTruncator after r184965. I missed one letter.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm: (TestWebKitAPI::TEST):

2015-05-28  Alexey Proskuryakov  <ap@apple.com>

        Update results of WebKit1.StringTruncator after r184965.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm: (TestWebKitAPI::TEST):

2015-05-28  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed, updated my list of email addresses.

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

2015-05-27  Dean Jackson  <dino@apple.com>

        img.currentSrc problem in strict mode with old picturefill
        https://bugs.webkit.org/show_bug.cgi?id=144095
        <rdar://problem/21087013>

        Reviewed by Simon Fraser.

        Add a PICTURE_SIZES flag.

        * Scripts/webkitperl/FeatureList.pm:

2015-05-26  Dana Burkart  <dburkart@apple.com>

        Fixes compatibility issues with recent dashboard cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=144814

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotStaticAnalyzerQueueView.js:
        (BuildbotStaticAnalyzerQueueView):
        (BuildbotStaticAnalyzerQueueView.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady):

2015-05-26  Alexey Proskuryakov  <ap@apple.com>

        Botwatcher's dashboard doesn't show JSC test regressions on Apple bots
        https://bugs.webkit.org/show_bug.cgi?id=143091
        rdar://problem/19330328

        Reviewed by Darin Adler and Timothy Hatcher.

        We have many of these, which are hard to fit on the dashboard. Added a view that
        collapses to a single green bubble when everything is good, and expands when there
        are failures (or manually).

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html: Added BuildbotCombinedQueueView.js

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.set isAuthenticated):
        (Buildbot.prototype._normalizeQueueInfo):
        (Buildbot.prototype._normalizeQueuesInfo):
        (Buildbot.prototype.updateQueues):
        Moved queue info normalization here from BuildbitQueue. The latter is a model class
        that shouldn't have to know about presentation, and this lets us leep the knowledge
        about combined queues out if it. Later, we can refactor existing code, and move out
        all knowledge about headings and such.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        Added the new view. It's not quite universal, and doesn't have as helpful popovers
        as other views, but we can extend it when/if we use it for more than JSC.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue): Now that info is normalized before creating a queue, don't do that here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady): Added support for combined queues. These are currently always ending up
        in Other column, but it's easy to customize in the future if we need to.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Added JSC queus.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        (.combined-queue-popover):
        (.combined-queue-popover .revision):
        Added styles for the combined view.

2015-05-26  Dan Bernstein  <mitz@apple.com>

        Changed a file to use Unix line endings.

        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:

2015-05-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21104551> Update build settings

        Reviewed by Anders Carlsson.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * asan/asan.xcconfig:

2015-05-26  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseForceDown):
        (WTR::EventSenderProxy::mouseForceUp):
        (WTR::EventSenderProxy::mouseForceChanged):

2015-05-26  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Don't list test steps in BuildbotIteration twice
        https://bugs.webkit.org/show_bug.cgi?id=145342

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData):

2015-05-26  Milan Crha  <mcrha@redhat.com>

        [GTK] Expand wildcards inside generate-inspector-gresource-manifest.py
        https://bugs.webkit.org/show_bug.cgi?id=138134

        Reviewed by Žan Doberšek.

        * gtk/generate-inspector-gresource-manifest.py:
        (get_filenames): Command line with expanded resources exceeds 32KB, which
        is a limit on Windows. It's better to expand wildcards inside the python script.

2015-05-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add construct property to WebKitWebContext to set the IndexedDB database directory
        https://bugs.webkit.org/show_bug.cgi?id=140882

        Reviewed by Gustavo Noronha Silva.

        Make sure unit tests write IndexedDB databases to the temporary
        directory, and add a test case to check that the directory is
        correctly created at the expected path.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextConfiguration):
        (serverCallback):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::Test):

2015-05-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Enable IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=98932

        Reviewed by Žan Doberšek.

        * Scripts/webkitperl/FeatureList.pm: Enable IndexedDB for the GTK port.

2015-05-24  Sam Weinig  <sam@webkit.org>

        Crash when using a removed ScriptMessageHandler
        <rdar://problem/20888499>
        https://bugs.webkit.org/show_bug.cgi?id=145359

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        Add tests for removing script message handlers.

2015-05-23  Dan Bernstein  <mitz@apple.com>

        Remove unused definitions of WEBKIT_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=145345

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * LayoutTestRelay/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2015-05-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        Introduce UniquedStringImpl and SymbolImpl to separate symbolic strings from AtomicStringImpl
        https://bugs.webkit.org/show_bug.cgi?id=144848

        Reviewed by Darin Adler.

        Use UniquedStringImpl, SymbolImpl and AtomicStringImpl.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:

2015-05-22  Alexey Proskuryakov  <ap@apple.com>

        Fix one more merge error in static analyzer support.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotStaticAnalyzerQueueView.js:
        (BuildbotStaticAnalyzerQueueView):

2015-05-22  Dana Burkart  <dburkart@apple.com>

        Fix internal dashboard breakage from recent commit.
        https://bugs.webkit.org/show_bug.cgi?id=144814

        Unreviewed build fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotStaticAnalyzerQueueView.js:
        (BuildbotStaticAnalyzerQueueView.prototype.update.appendStaticAnalyzerQueueStatus):
        (BuildbotStaticAnalyzerQueueView.prototype.update):

2015-05-22  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (OS X 10.9.2): PageVisibilityStateWithWindowChanges.WebKit2 API test fails
        https://bugs.webkit.org/show_bug.cgi?id=130463
        rdar://problem/20461342

        Reviewed by Tim Horton.

        This was more of a timing related flakiness than an actual OS version specific bug,
        we weren't getting window visibility notifications.
        
        I will look into adding this function call to DumpRenderTree separately, layout tests
        might actually rely on the broken behavior.

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):

2015-05-22  Dana Burkart  <dburkart@apple.com>

        Add missing file from r184804 (mis-applied diff).
        https://bugs.webkit.org/show_bug.cgi?id=144814

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotStaticAnalyzerQueueView.js: Added.
        (BuildbotStaticAnalyzerQueueView):
        (BuildbotStaticAnalyzerQueueView.prototype.update.appendStaticAnalyzerQueueStatus):
        (BuildbotStaticAnalyzerQueueView.prototype.update):

2015-05-22  Dana Burkart  <dburkart@apple.com>

        Add support to the botwatchers dashboard for a static analyzer bot.
        https://bugs.webkit.org/show_bug.cgi?id=144814

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        scan-build should be considered a productive step.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue):
        Adds support for the staticAnalyzer property

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults.prototype._parseResults):
        Get bug count from the scan-build step output

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady):
        Rename the performance column 'Other', and merge the current 'Other' column with it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        Now that performance bots are part of the 'Other' column, give them better headings.

2015-05-22  Tim Horton  <timothy_horton@apple.com>

        Turn on autosaving of toolbar configuration in MiniBrowser

        Rubber-stamped by Dan Bernstein.

        * MiniBrowser/mac/BrowserWindow.xib:

2015-05-22  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Simplify BuildbotQueueView creation code
        https://bugs.webkit.org/show_bug.cgi?id=145297

        Reviewed by Tim Horton.

        This is a refactoring to simplify code, and to make it more logical.

        It is up to the view to decide how to present the queues, and whether to split
        them into debug and release, or in some different way.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.filterQueues):
        (BuildbotBuilderQueueView):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotLeaksQueueView.js:
        (BuildbotLeaksQueueView):
        (BuildbotLeaksQueueView.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:
        (BuildbotPerformanceQueueView):
        (BuildbotPerformanceQueueView.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView):
        (BuildbotQueueView.prototype._updateQueues):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady):

2015-05-22  Tim Horton  <timothy_horton@apple.com>

        Remove action menu support
        https://bugs.webkit.org/show_bug.cgi?id=145305
        <rdar://problem/21070771>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/action-menu-target.pdf: Removed.
        * TestWebKitAPI/Tests/WebKit2/action-menu-targets.html: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundleSPI.h: Removed.
        Remove the tests.

2015-05-22  Dan Bernstein  <mitz@apple.com>

        Removed the Use Shrink To Fit button from the toolbar’s default set.

        Rubber-stamped by Tim Horton.

        * MiniBrowser/mac/BrowserWindow.xib:

2015-05-21  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [GTK] Implement computedRoleString in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=128420

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::computedRoleString): Implemented.

2015-05-21  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump libsoup version to 2.50.0
        https://bugs.webkit.org/show_bug.cgi?id=145127

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/soup-clang-warning-fix1.patch: Removed.
        * efl/patches/soup-clang-warning-fix2.patch: Removed.

2015-05-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move MainThreadGtk, RunLoopGtk, WorkQueueGtk under Source/WTF/wtf/glib/
        https://bugs.webkit.org/show_bug.cgi?id=145117

        Reviewed by Csaba Osztrogonác.

        Rename the WorkQueueGtk.cpp file to WorkQueueGLib.cpp, and move it under
        Tools/TestWebKitAPI/Tests/WTF/glib/.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp: Renamed from Tools/TestWebKitAPI/Tests/WTF/gtk/WorkQueueGtk.cpp.
        (TestWebKitAPI::TEST):

2015-05-20  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] fix efreet error
        https://bugs.webkit.org/show_bug.cgi?id=143670

        Reviewed by Gyuyoung Kim.

        Fix efreet error by using external variable efreet_cache_update.
        As 0 value of efreet_cache_update prevents monitoring of icon and desktop cache,
        efreet error for efreet_cache does not occur.

        * MiniBrowser/efl/main.c:
        (elm_main):

2015-05-20  Michael Saboff  <msaboff@apple.com>

        Add option to run_jsc_stress_tests to disable JIT testing
        https://bugs.webkit.org/show_bug.cgi?id=145233

        Reviewed by Mark Lam.

        Added --no-jit option.

        * Scripts/run-jsc-stress-tests:

2015-05-20  Alex Christensen  <achristensen@webkit.org>

        Use correct String for StringView in WTF API tests
        https://bugs.webkit.org/show_bug.cgi?id=145226
        rdar://problem/20361786

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):
        Use patternHolder for pattern.

2015-05-20  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Relax restrictions on triggers that match everything.
        https://bugs.webkit.org/show_bug.cgi?id=145069

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Update and add tests for new possibilities with .*

2015-05-20  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][Minibrowser] Hide URL bar on fullscreen mode for HTML elements and browser window in WebKit EFL Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=144992

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (toggle_window_fullscreen): Method to toggle between fullscreen and normal mode.
        (on_key_down):
        (on_fullscreen_enter):
        (on_fullscreen_exit):
        (window_create):

2015-05-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Move AtomicStringImpl table related operations from AtomicString to AtomicStringImpl
        https://bugs.webkit.org/show_bug.cgi?id=145109

        Reviewed by Darin Adler.

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

2015-05-19  Anders Carlsson  <andersca@apple.com>

        Add alternate menu items for performing operations on the default data store
        https://bugs.webkit.org/show_bug.cgi?id=145184

        Reviewed by Sam Weinig.

        This makes it possible to test WKWebsiteDataStore code paths when there are no live web views
        associated with a data store.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate fetchDefaultStoreWebsiteData:]):
        (-[BrowserAppDelegate fetchAndClearDefaultStoreWebsiteData:]):
        (-[BrowserAppDelegate clearDefaultStoreWebsiteData:]):
        * MiniBrowser/mac/MainMenu.xib:

2015-05-19  Csaba Osztrogonác  <ossy@webkit.org>

        Fix tautological-compare warning in AtomicString.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145120

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WTF/AtomicString.cpp:
        (TestWebKitAPI::TEST): Removed always true assert.

2015-05-18  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix unsequenced warning in MiniBrowser's main.c
        https://bugs.webkit.org/show_bug.cgi?id=145123

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_key_down):

2015-05-18  Daniel Bates  <dabates@apple.com>

        prepare-ChangeLog reports function above deleted function as deleted; uninitialized value warning
        when staged non-empty file for commit
        https://bugs.webkit.org/show_bug.cgi?id=145082

        Reviewed by Darin Adler.

        Fixes two issues when running prepare-ChangeLog:
            1. The function above a deleted function is reported as changed.
            2. With a Git checkout of WebKit, a Perl uninitialized value warning is emitted when
            a new non-empty file is staged for commit (e.g. extractLineRangeBeforeAndAfterChange.pl,
            included in this patch).

        Simplify code by using unified diff parsing logic for both SVN and Git support. Currently
        prepare-ChangeLog has logic to parse normal diff- and unified diff- chunk range lines as
        generated by `svn diff` and `git diff`, respectively. The logic for parsing these formats
        has correctness issues. We should make use of the VCSUtil::parseChunkRange() to parse
        chunk range lines of a unified diff as opposed to having specialized logic in prepare-ChangeLog.
        VCSUtil::parseChunkRange() has existing test coverage.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Only add a line range to %line_ranges_before_changed, %line_ranges_after_changed
        when the beginning line number, ending line number >= 1. Modified for-loop condition to iterate over
        all the files represented by %line_ranges_before_changed and %line_ranges_after_changed so that we
        examine files that only have deletions. Currently this works as a side effect of the behavior of
        extractLineRangeAfterChange(), which always returns a well-formed (though nonsensical) line range for
        a change that represents a deletion (e.g. extractLineRangeAfterChange("@@ -166,6 +165,0 @@") => [165, 165]).
        (diffCommand): Generate a unified diff instead of a normal diff when using a SVN checkout of WebKit.
        (extractLineRangeAfterChange): Remove logic to parse a normal diff chunk range line and write
        the logic to parse a unified diff chunk range line in terms of VCSUtil::parseChunkRange().
        We return (-1, -1) when the change represents a deletion.
        (extractLineRangeBeforeChange): Remove logic to parse a normal diff chunk range line and write
        the logic to parse a unified diff chunk range line in terms of VCSUtil::parseChunkRange().
        We return (-1, -1) when the change represents an addition.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/extractLineRangeBeforeAndAfterChange.pl: Added;
        unit tests.

2015-05-18  Anders Carlsson  <andersca@apple.com>

        Add ATS keys to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=145141

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/Info.plist:

2015-05-17  David Kilzer  <ddkilzer@apple.com>

        bisect-builds: Add 'retry' option when prompting whether the bug reproduced
        <http://webkit.org/b/145100>

        Reviewed by Darin Adler.

        * Scripts/bisect-builds:
        - Add PROMPT_ANSWER_* constants for yes/no/retry/broken prompt.
        - Switch to using PROMPT_RESPONSE_* constants when testing the
          value of $didReproduceBug.
        - Add do { } while loops to implement 'retry' mode.
        (promptForTest):
        - Switch to returning PROMPT_RESPONSE_* constants.
        - Add support for 'retry' response.

2015-05-16  Tanay C  <tanay.c@samsung.com>

        [EFL][WK2] Minibrowser : Add search icon to search bar
        https://bugs.webkit.org/show_bug.cgi?id=139773

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: 
        (search_icon_show): Added.
        (search_box_show): Modified.

2015-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        run_benchmark should have an option to specify the number of runs
        https://bugs.webkit.org/show_bug.cgi?id=145091

        Reviewed by Stephanie Lewis.

        Added --count option.

        * Scripts/run-benchmark:
        (main):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):

2015-05-15  Timothy Horton  <timothy_horton@apple.com>

        Temporarily disable failing API test.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (TestWebKitAPI::TEST):

2015-05-15  Ravi Phaneendra Kasibhatla  <r.kasibhatla@samsung.com>

        User interruption while running of run-webkit-tests should also generate results.html
        https://bugs.webkit.org/show_bug.cgi?id=122154

        Reviewed by Csaba Osztrogonác.

        Generation of results.html on execution of run-webkit-tests happens only
        on completion of entire layout tests run. It should be created even when
        the execution has been interrupted - either by user (by pressing Ctrl+C)
        or because of other interruptions (like exit-after-n-failures option).

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_keyboard_interrupt):
        (MainTest.test_exception_handling):

2015-05-15  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Fix the URL of the performance bots
        https://bugs.webkit.org/show_bug.cgi?id=145043

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2015-05-14  Timothy Horton  <timothy_horton@apple.com>

        Add a layout mode that scales down the view to try to fit the document
        https://bugs.webkit.org/show_bug.cgi?id=145022
        <rdar://problem/19790341>

        Reviewed by Dean Jackson.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController toggleShrinkToFit:]):
        (-[WK2BrowserWindowController toggleUseMinimumViewSize:]): Deleted.
        Switch to _WKLayoutModeDynamicSizeComputedFromMinimumDocumentSize.

2015-05-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Don't read the LOCATION property of targets
        https://bugs.webkit.org/show_bug.cgi?id=145018

        Reviewed by Martin Robinson.

        Use the TARGET_FILE_DIR generator expression to determine the location of the test injected
        bundle, rather than assuming that the LOCATION property of TestWebKitAPIInjectedBundle will
        be the same at configure-time as it is at generate-time.

        * TestWebKitAPI/CMakeLists.txt:

2015-05-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Add String literal overloads to equalIgnoringASCIICase()
        https://bugs.webkit.org/show_bug.cgi?id=145008

        Reviewed by Benjamin Poulain.

        Test changes to WTF.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (WTF.StringImplEqualIgnoringASCIICaseBasic): Test const char*.
        (WTF.StringImplEqualIgnoringASCIICaseWithLatin1Characters): Ditto.
        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (WTF.StringViewEqualIgnoringASCIICaseBasic): Ditto.
        (WTF.StringViewEqualIgnoringASCIICaseWithLatin1Characters): Ditto.

2015-05-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        SharedBuffer::createWithContentsOfFile should use map file routines
        https://bugs.webkit.org/show_bug.cgi?id=144192

        Reviewed by Darin Adler.

        Adding SharedBuffer and FileSystem Unit tests to Mac and GTK, not yet for EFL.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FileSystem.cpp: Added.
        (TestWebKitAPI::FileSystemTest::tempFilePath):
        (TestWebKitAPI::FileSystemTest::tempEmptyFilePath):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp: Added.
        (TestWebKitAPI::SharedBufferTest::tempFilePath):
        (TestWebKitAPI::SharedBufferTest::tempEmptyFilePath):
        (TestWebKitAPI::TEST_F):

2015-05-13  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Test interactions between multiple extensions and multiple domains.
        https://bugs.webkit.org/show_bug.cgi?id=144967

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Xcode wanted to fix an alphabetization issue.
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Test interactions that worked but were not explicitly tested before.

2015-05-12  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix.

        Added the missing metric name and wrapped values in an array as done in SunSpider.patch.

        * Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch:

2015-05-12  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the previous commit, which made both bubbles green.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.good .bubble):
        (.status-line.bad .bubble):
        (.status-line.good .message):

2015-05-12  Ryosuke Niwa  <rniwa@webkit.org>

        People with Deuteranopia can't tell red and green apart on bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=144929

        Reviewed by Eric Carlson.

        Tweaked colors as I see fit.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.good .bubble):
        (.status-line.bad .bubble):

2015-05-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Share cookie storage between UI process and secondary processes
        https://bugs.webkit.org/show_bug.cgi?id=144820
        rdar://problem/20572830

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::initialize):
        Don't set cookie storage directory, as it's a no-op, we use an ephemeral session
        for testing.

2015-05-12  Jake Nielsen  <jacob_nielsen@apple.com>

        Fix internal build configuration issues
        https://bugs.webkit.org/show_bug.cgi?id=144762

        Reviewed by David Kilzer.

        Modifies DumpRenderTree's xcconfig files to use SDK selectors.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig:
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig:

2015-05-12  David Kilzer  <ddkilzer@apple.com>

        Switch to launching iOS Simulator using bundle ID
        <rdar://problem/20916096>

        This is required to fix the layout tests on internal bots.

        * Scripts/webkitdirs.pm:
        (relaunchIOSSimulator): Switch to use bundle ID to launch iOS
        Simulator.  Add FIXME.
        (quitIOSSimulator): Add FIXME.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run): Switch to use bundle ID to
        launch iOS Simulator.  Add FIXME.
        (IOSSimulatorPort.check_sys_deps): Add FIXME.

2015-05-12  Per Arne Vollan  <peavo@outlook.com>

        Fix run-javascriptcore-tests step on the WinCairo bot
        https://bugs.webkit.org/show_bug.cgi?id=144866

        Reviewed by Csaba Osztrogonác.

        Catch exception when failing to create soft link, so we can fall back to copy.

        * Scripts/run-jsc-stress-tests:

2015-05-12  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][WK2] rowAtIndex is not implemented in DRT/WKTR
        https://bugs.webkit.org/show_bug.cgi?id=116971

        Reviewed by Chris Fleizach.

        Implement rowAtIndex for ATK.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rowAtIndex):

2015-05-11  Dan Bernstein  <mitz@apple.com>

        Test for <rdar://problem/20878075> Trying to navigate to an invalid URL loads about:blank, but -[WKWebView URL] returns the invalid URL

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadAlternateHTMLString.mm: Fixed copyright header.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLChange.mm: Added.
        (-[ProvisionalURLChangeController webView:didFinishNavigation:]):

2015-05-11  Jake Nielsen  <jacob_nielsen@apple.com>

        Fix internal build configuration issues
        https://bugs.webkit.org/show_bug.cgi?id=144762

        Reviewed by Darin Adler.

        Modifies TestWebKitAPI and WebKitTestRunner's xcconfig files to use SDK selectors.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:

2015-05-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Move Windows build target to Windows 7 (or newer)
        https://bugs.webkit.org/show_bug.cgi?id=144890
        <rdar://problem/20707307>

        Reviewed by Anders Carlsson.

        Update linked SDK and minimal Windows level to be compatible with
        Windows 7 or newer.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/config.h:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/stdafx.h:

2015-05-11  Commit Queue  <commit-queue@webkit.org>

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

        broke JSC tests on Apple Windows bots (Requested by kling on
        #webkit).

        Reverted changeset:

        "Fix run-javascriptcore-tests step on the WinCairo bot"
        https://bugs.webkit.org/show_bug.cgi?id=144866
        http://trac.webkit.org/changeset/184119

2015-05-11  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark should support Dromaeo
        https://bugs.webkit.org/show_bug.cgi?id=144849

        Reviewed by Chris Dumez.

        Added the benchmark plans for Dromaeo DOM tests. We only run these tests once since
        they can take as much as 15 minutes to run each.

        * Scripts/webkitpy/benchmark_runner/data/patches/Dromaeo.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan: Added.

2015-05-11  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. jetstream has a local copy, not remote archive.

        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan:

2015-05-11  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark should support SunSpider, Kraken and Octane
        https://bugs.webkit.org/show_bug.cgi?id=144840

        Reviewed by Darin Adler.

        Added the support for SunSpider, Kraken, and Octane. Because of the licensing issues, we can't commit the
        Kraken source code into the WebKit repository as done for other benchmarks. Instead, we'll dynamically
        download it from the remote server using newly added RemoteZipBenchmarkBuilder. We do the same for Octane
        for simplicity. Use newly added --local-copy option to specify the location of a local copy if there is any.

        Renamed "original_benchmark in the plan file to "local_copy" and added a new optional "remote_archive" to
        specify the URL to a remote ZIP file. This optional field is used by Kraken and Octane benchmark plans.

        In addition, generalized the ability to run a "create script" in JetStreamBenchmarkBuilder since it's also
        needed for SunSpider and Kraken. This feature has now been folded into GenericBenchmarkBuilder.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Added
        RemoteZipBenchmarkBuilder for Kraken and removed JetStreamBenchmarkBuilder since GenericBenchmarkBuilder
        now has the ability to run an arbitrary "create script".

        * Scripts/run-benchmark:
        (main): Added an optional argument, --local-copy, to override the location of the benchmark's local copy.
        This also overrides the remote archive URL specified in the plan.

        * Scripts/webkitpy/benchmark_runner/README.md: Updated the description.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Deleted the entry for
        JetStreamBenchmarkBuilder.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: 
        (GenericBenchmarkBuilder.prepare): Call _fetchRemoteArchive if local_copy is not specified in the plan or
        by --local-copy option but remote_archive is specified. Also call self.clean() here instead of relying on
        _runCreateScript and _applyPatch to clean after themselves.
        (GenericBenchmarkBuilder._runCreateScript): Moved from JetStreamBenchmarkBuilder._runCreateScript since
        JetStream, SunSpider, Kraken all use this feature.
        (GenericBenchmarkBuilder._copyBenchmarkToTempDir): Use self.name as the destination location instead of
        the leaf directory name since the latter is not available when a remote ZIP file is used.
        (GenericBenchmarkBuilder._fetchRemoteArchive): Added.
        (GenericBenchmarkBuilder._applyPatch): Apply the patch inside destination directory to avoid hard coding
        the benchmark name in the patches.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py: Removed.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__): Set self.planName. Also override 'local_copy' when --local-copy option is used.
        (BenchmarkRunner.execute): Exit early if neither local_copy nor remote_archive is specified. Prefix the URL
        the browser opens by planName as the plan file no longer contains that.

        * Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Changed the path to be relative against
        the top directory of JetStream instead of its parent.
        * Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch: Changed the path to be relative against
        the top directory of JetStream instead of its parent.
        * Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Uses GenericBenchmarkBuilder and specifies
        the script to run. The entry point was changed to the relative path from the top directory of JetStream as
        done in JetStream.patch.
        * Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/octane.plan: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: The entry point was changed to the relative
        path from the top directory of JetStream as done in JetStream.patch.
        * Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan: Added.

2015-05-11  Csaba Osztrogonác  <ossy@webkit.org>

        Fix run-javascriptcore-tests step on the WinCairo bot
        https://bugs.webkit.org/show_bug.cgi?id=144866

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2015-05-11  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Support domain-specific rules and exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=144833

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter):
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::InMemoryCompiledContentExtension::InMemoryCompiledContentExtension):
        Moved CompiledContentExtensionData from ContentExtensionCompiler.h because it is only used for testing.
        (TestWebKitAPI::mainDocumentRequest):
        (TestWebKitAPI::subResourceRequest):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkCompilerError):
        Added tests for parsing and functionality of if-domain and unless-domain.

2015-05-11  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark should support Chrome Canary and Firefox Nightly
        https://bugs.webkit.org/show_bug.cgi?id=144850

        Reviewed by Darin Adler.

        Added the support for Chrome Canary, Firefox (release), and Firefox Nightly.

        This patch also extracts OSXBrowserDriver to launch and terminate processes on OS X.

        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_drivers.json:
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py: Added.
        (OSXBrowserDriver):
        (OSXBrowserDriver.prepareEnv): Extracted from ChromeBrowserDriver.prepareEnv.
        (OSXBrowserDriver.closeBrowsers): Ditto.
        (OSXBrowserDriver.launchProcess): Ditto.
        (OSXBrowserDriver.terminateProcesses): Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver): Removed the unused self.chromePreferences.
        (OSXChromeDriver.prepareEnv): Moved to OSXBrowserDriver.
        (OSXChromeDriver.closeBrowsers): Ditto.
        (OSXChromeDriver.launchUrl):
        (OSXChromeCanaryDriver): Added.
        (OSXChromeCanaryDriver.launchUrl):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: Added.
        (OSXFirefoxDriver): Added.
        (OSXFirefoxDriver.launchUrl):
        (OSXFirefoxNightlyDriver): Added.
        (OSXFirefoxNightlyDriver.launchUrl):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver):
        (OSXSafariDriver.closeBrowsers):

2015-05-11  Tim Horton  <timothy_horton@apple.com>

        Page overlay action context override should indicate the source of the request
        https://bugs.webkit.org/show_bug.cgi?id=144832
        <rdar://problem/20562594>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:
        (TestWebKitAPI::ActionMenuTest::actionContextForResultAtPoint):

2015-05-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] fast/events/page-visibility-transition-test.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=114789

        Reviewed by Darin Adler.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::setHidden): Map and unmap the WebView when the harness
        requests visibility changes.

2015-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix install-dependencies on Ubuntu 14.10/15.04
        https://bugs.webkit.org/show_bug.cgi?id=144798

        Reviewed by Darin Adler.

        * efl/install-dependencies:

2015-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        Make arguments of run-benchmark more user friendly
        https://bugs.webkit.org/show_bug.cgi?id=144835

        Reviewed by Darin Adler.

        Made --build-directory optional since I don't expect a typical WebKit developer to have a local build
        of Chrome and Firefox. Also made --plan accept just a filename so that we can just say "speedometer"
        instead of "Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan". Finally, removed
        default values from --platform and --browser as they are required arguments.

        * Scripts/run-benchmark:
        (main): Made --build-directory optional, and removed default values from --platform and --browser.
        Also added help text for --build-directory and --plan. In addition, the list of platforms and browsers
        are not dynamically obtained via BrowserDriverFactory.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__): Raise when we can't find the plan file or the plan file is not a valid JSON
        file instead of suppressing the error here and blowing up later mysteriously since we won't be able to
        run any benchmark in that case.
        (BenchmarkRunner._findPlanFile): Added. Look for the plan in webkitpy/benchmark_runner/data/plans if
        the specified file isn't a valid relative or an absolute path.
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory.available_platforms): Added. Used in main to provide the list of valid platforms
        and browsers.
        (BrowserDriverFactory.available_browsers): Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launchUrl): browserBuildPath is never optional since BenchmarkRunner.execute always
        calls launchUrl with this argument so removed the default value. Also added a fallback path for when
        browserBuildPath was None.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launchUrl): Ditto. We also fallback when the build directory doesn't contain Safari
        so that we can use locally built WebKit to launch Safari.

2015-05-09  Yoav Weiss  <yoav@yoav.ws>

        Remove the PICTURE_SIZES build flag
        https://bugs.webkit.org/show_bug.cgi?id=144679

        Reviewed by Benjamin Poulain.

        Removed the PICTURE_SIZES build time flag.

        * Scripts/webkitperl/FeatureList.pm:

2015-05-09  David Kilzer  <ddkilzer@apple.com>

        Layout tests broke due to unexpected simctl output

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator._parse_devices): Handle new Device Pairs header.
        * Scripts/webkitpy/xcode/simulator_unittest.py:
        (test_device_pairs): Add unit test for Device Pairs header.

2015-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove convenience constructors for TextRun
        https://bugs.webkit.org/show_bug.cgi?id=144752

        Reviewed by Anders Carlsson.

        Test the StringView which takes a StringImpl*.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (StringView8Bit): Testing is8Bit() on StringView

2015-05-07  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Add simple tester that takes an extension and compiles it
        https://bugs.webkit.org/show_bug.cgi?id=144781

        Reviewed by Dan Bates.

        * ContentExtensionTester: Added.
        * ContentExtensionTester/Configurations: Added.
        * ContentExtensionTester/Configurations/Base.xcconfig: Copied from Source/bmalloc/Configurations/Base.xcconfig.
        * ContentExtensionTester/Configurations/ContentExtensionTester.xcconfig: Copied from Source/bmalloc/Configurations/bmalloc.xcconfig.
        * ContentExtensionTester/Configurations/DebugRelease.xcconfig: Copied from Source/bmalloc/Configurations/DebugRelease.xcconfig.
        * ContentExtensionTester/ContentExtensionTester.xcodeproj: Added.
        * ContentExtensionTester/ContentExtensionTester.xcodeproj/project.pbxproj: Added.
        * ContentExtensionTester/Makefile: Copied from Tools/TestWebKitAPI/Makefile.
        * ContentExtensionTester/main.m: Added.
        * Scripts/run-content-extension-tester: Copied from Tools/Scripts/run-webkit-tests.

2015-05-08  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo springLoadingHighlight]):
        (-[DumpRenderTreeDraggingInfo resetSpringLoading]):
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.h:
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.mm:
        (-[WebKitTestRunnerDraggingInfo springLoadingHighlight]):
        (-[WebKitTestRunnerDraggingInfo resetSpringLoading]):

2015-05-08  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Some tests fail because they do not assume the popup menu captures click events
        https://bugs.webkit.org/show_bug.cgi?id=40601

        Reviewed by Carlos Garcia Campos.

        Popdown all attached menus when moving between tests and between each new
        event sent to the WebView. This prevents context and popup menus from eating
        events.

        * WebKitTestRunner/PlatformWebView.h: Added a helper method to do menu popdown.
        * WebKitTestRunner/TestController.cpp: Add a specialization of these methods for GTK+.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::dispatchEvent): Popdown all menus between dispatching events.
        (WTR::EventSenderProxy::replaySavedEvents): Pass the view when dispatching events.
        (WTR::EventSenderProxy::sendOrQueueEvent): Pass the view when dispatching events.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::hideAllPopupMenus): Added this helper.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformConfigureViewForTest): Added this stub, which is no
        longer in the platform-independent file.
        (WTR::TestController::platformResetPreferencesToConsistentValues): Popdown menus.

015-05-08  Michael Catanzaro  <mcatanzaro@igalia.com>, Martin Robinson <mrobinson@igalia.com>

        [GTK] Checks for DEVELOPMENT_BUILD are all wrong
        https://bugs.webkit.org/show_bug.cgi?id=144746

        Reviewed by Carlos Garcia Campos.

        Use ENABLE_DEVELOPER_MODE rather than DEVELOPMENT_BUILD.

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

2015-05-08  Commit Queue  <commit-queue@webkit.org>

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

        ASan detected use-after free (Requested by ap on #webkit).

        Reverted changeset:

        "Remove convenience constructors for TextRun"
        https://bugs.webkit.org/show_bug.cgi?id=144752
        http://trac.webkit.org/changeset/183996

2015-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove convenience constructors for TextRun
        https://bugs.webkit.org/show_bug.cgi?id=144752

        Reviewed by Anders Carlsson.

        Test the StringView which takes a StringImpl*.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (StringView8Bit): Testing is8Bit() on StringView

2015-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WTR doesn't correctly handle the Escape key
        https://bugs.webkit.org/show_bug.cgi?id=144788

        Reviewed by Martin Robinson.

        Correctly handle 0x001B character code in GTK+ event sender to be
        recognized as Escape key, because gdk_unicode_to_keyval() doesn't
        handle it. This fixes layout tests using keyDown(String.fromCharCode(0x001B), null);
        to dismiss popup menus.

        Fixes editing/selection/5354455-1.html.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef):

2015-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose allowFileAccessFromFileURLs setting to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=144748

        Reviewed by Sergio Villar Senin.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettings): Check the new setting is correctly
        initialized and updated.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextSecurityFileXHR): Check XHR to local files is
        allowed from file URLs after changing the setting.
        (beforeAll): Add new test.

2015-05-08  Commit Queue  <commit-queue@webkit.org>

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

        "It broke all the GTK+ tests" (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Checks for DEVELOPMENT_BUILD are all wrong"
        https://bugs.webkit.org/show_bug.cgi?id=144746
        http://trac.webkit.org/changeset/183945

2015-05-07  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * TestWebKitAPI/Tests/mac/HTMLCollectionNamedItem.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.mm:
        (TestWebKitAPI::TEST):
        Add casts.

2015-05-07  Filip Pizlo  <fpizlo@apple.com>

        GC has trouble with pathologically large array allocations
        https://bugs.webkit.org/show_bug.cgi?id=144609

        Reviewed by Geoffrey Garen.
        
        Add a --filter option that restricts the set of tests we run. I needed it to fix this bug
        and it's a frequently requested feature.
        
        Also add the ability to run a test pretending that your system has a particular RAM size.
        This is useful for GC tests, and the new GC test that I added uses this.

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

2015-05-07  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.14.0
        https://bugs.webkit.org/show_bug.cgi?id=144743

        Reviewed by Darin Adler.

        Bump EFL and elementary version to 1.14.0 and removed
        md5sum, because it isn't used at all if hash is present.

        * efl/jhbuild.modules:

2015-05-07  Saam Barati  <saambarati1@gmail.com>

        exceptionFuzz tests should explicitly initialize the exceptionFuzz boolean in JavaScript code through a function in jsc.cpp
        https://bugs.webkit.org/show_bug.cgi?id=144753

        Reviewed by Mark Lam.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:

2015-05-07  Beth Dakin  <bdakin@apple.com>

        New force-related DOM events should fire in WK1 views
        https://bugs.webkit.org/show_bug.cgi?id=144663
        -and corresponding-
        rdar://problem/20281886

        Reviewed by Sam Weinig.

        PlatformEventFactory::createPlatformMouseEvent() takes the last pressure event 
        now. Just send nil. 
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
        (TestWebKitAPI::buildAndPerformTest):

2015-05-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Checks for DEVELOPMENT_BUILD are all wrong
        https://bugs.webkit.org/show_bug.cgi?id=144746

        Reviewed by Martin Robinson.

        Use DEVELOPER_MODE rather than DEVELOPMENT_BUILD.

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

2015-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Revert "Introducing the Platform Abstraction Layer (PAL)"
        https://bugs.webkit.org/show_bug.cgi?id=144751

        Unreviewed.

        PAL should be a new target inside WebCore, rather than a top-level folder.

        * Scripts/build-webkit: Add it to build-webkit.

2015-05-07  Ada Chan  <adachan@apple.com>

        Add a test for WKPageCopySessionState() with filtering.
        https://bugs.webkit.org/show_bug.cgi?id=144666

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKPageCopySessionStateWithFiltering.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::filterFirstItemCallback):
        (TestWebKitAPI::filterAllItemsCallback):
        (TestWebKitAPI::createSessionStates):
        (TestWebKitAPI::TEST):

2015-05-06  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix attempt

        Link WebKitTestRunnerApp to WebKit, now that we don't have WebKit2.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2015-05-06  Matt Baker  <mattbaker@apple.com>

        Unreviewed, updated my list of email addresses.

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

2015-05-06  Alexey Proskuryakov  <ap@apple.com>

        Do not link tools to WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=144699

        Unreviewed build fix.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        These linked to WebKit2 in two ways, eliminating the other one.

2015-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Introducing the Platform Abstraction Layer (PAL)
        https://bugs.webkit.org/show_bug.cgi?id=143358

        Reviewed by Simon Fraser.

        * Scripts/build-webkit: Add it to build-webkit.

2015-05-06  Alex Christensen  <achristensen@webkit.org>

        Fix api tests after r183877.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Generate all DFAs before compiling them.

2015-05-06  Alexey Proskuryakov  <ap@apple.com>

        Do not link tools to WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=144699

        Reviewed by Tim Horton.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2015-05-06  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Test splitting NFAs by max NFA size.
        https://bugs.webkit.org/show_bug.cgi?id=144659

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:
        (TestWebKitAPI::createNFAs):

2015-05-05  daegyu lee  <daegyu.lee@navercorp.com>

        Remove the remaining vestiges of SVG feature define
        https://bugs.webkit.org/show_bug.cgi?id=144655

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitperl/FeatureList.pm:

2015-05-05  Timothy Horton  <timothy_horton@apple.com>

        Add a layout mode for computing fixed layout size from a minimum size
        https://bugs.webkit.org/show_bug.cgi?id=144610
        <rdar://problem/19790341>

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController toggleUseMinimumViewSize:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController toggleUseMinimumViewSize:]):
        Add a optional toolbar item to toggle a minimum view size of 1024x0.

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Release input NSString when finished copying it.
        https://bugs.webkit.org/show_bug.cgi?id=144642

        Reviewed by Brian Weinstein.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):
        Use alloc and initWithContentsOfURL to prevent over-releasing an autoreleased object.

2015-05-05  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r183798.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (convertToDRTLabel): Mimic behavior of Mac accessibility output
        so we can share results.

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Use less memory to store the json input.
        https://bugs.webkit.org/show_bug.cgi?id=144604

        Reviewed by Benjamin Poulain.

        * MiniBrowser/mac/ExtensionManagerWindowController.m:
        (-[ExtensionManagerWindowController add:]):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):

2015-05-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed. Make myself a WebKit reviewer.

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

2015-05-05  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] r183783 breaks build
        https://bugs.webkit.org/show_bug.cgi?id=144632

        Reviewed by Martin Robinson.

        Return false rather than nullptr for unimplemented AccessibilityUIElement::setSelectedVisibleTextRange

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Combine NFAs properly and free memory as we compile.
        https://bugs.webkit.org/show_bug.cgi?id=144485

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Added tests for correctly splitting up NFAs with unquantified terms after quantified terms.
        Added tests for deep NFAs.

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

        [Content Extensions] Use less memory when writing byte code to file
        https://bugs.webkit.org/show_bug.cgi?id=144602

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

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

        [GTK] Async operations running in the WorkQueue thread should schedule their sources to the WorkQueue main lopp
        https://bugs.webkit.org/show_bug.cgi?id=144541

        Reviewed by Žan Doberšek.

        Add a test case to WorkQueue unit test, to check that sources of
        asynchronous IO operations running in the WorkQueue thread are
        dispatched by the WorkQueue main loop.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/gtk/WorkQueueGtk.cpp: Added.
        (TestWebKitAPI::TEST):

2015-05-04  Brent Fulgham  <bfulgham@apple.com>

        Correct '--show-webview' option for Tiled Drawing tests
        https://bugs.webkit.org/show_bug.cgi?id=144621

        Reviewed by Simon Fraser.

        The scrolling thread/tiled drawing tests recreate the standard test runner web view. My earlier patch did not make
        sure that the state of the '--show-webview' option was propagated to this additional view creation routine.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest): Include the value of the 'shouldShowWebView' state in the
        WKMutableDictionary passed to the 'ensureViewSupportsOptions' method.

2015-05-04  Filip Pizlo  <fpizlo@apple.com>

        Large array shouldn't be slow
        https://bugs.webkit.org/show_bug.cgi?id=144617

        Reviewed by Geoffrey Garen.
        
        Add the hash-map benchmark to LongSpider. LongSpider was already not a perfect match of
        SunSpider. It's not an official benchmark. It contains benchmarks that are relatively
        long-running. So, hash-map sort of belongs here.

        * Scripts/run-jsc-benchmarks:

2015-05-04  Doug Russell  <d_russell@apple.com>

        AX: setting focus via accessibility object needs to set isSynchronizing in resulting selection intent
        https://bugs.webkit.org/show_bug.cgi?id=144489

        Reviewed by Chris Fleizach.

        Resolves infinite looping when navigating rapidly between controls with the search API and then focusing
        on the returned control.
        Remove isSynchronizing flag from AXTextStateChangeIntent and put it on AXObjectCache.
        Move AXTextStateChangeIntent logic in AccessibilityRenderObject into a helper method.
        Call new AXTextStateChangeIntent helper from AccessibilityRenderObject::setFocus().
        Add support for setSelectedVisibleTextRange() in accessibility tests.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::getJSClass):
        (AccessibilityUIElement::textMarkerForIndex): Deleted.
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):

2015-05-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement the "--show-webview" option for Windows
        https://bugs.webkit.org/show_bug.cgi?id=144589

        Reviewed by Alex Christensen.

        Add another runtime flag (--show-webview) that causes DumpRenderTree
        to draw its view on-screen, rather than the standard offscreen mode.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow): Honor the 'showWebView' flag.
        (initializeGlobalsFromCommandLineOptions): Recognize the new
        command-line argument, and set the global 'showWebView' state if
        appropriate.

2015-05-04  Csaba Osztrogonác  <ossy@webkit.org>

        Remove dead code from TestInvocationCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=144564

        Reviewed by Gyuyoung Kim.

        Only EFL and GTK port use TestInvocationCairo.cpp, there isn't other platform.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2015-05-04  Joonghun Park  <jh718.park@samsung.com>

        [GTK] Add libnotify in gtk install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=144379

        Reviewed by Csaba Osztrogonác.

        * gtk/install-dependencies:

2015-05-01  Dan Bernstein  <mitz@apple.com>

        Test for <rdar://problem/8636045> Back/forward navigation to an error page in Safari breaks the back-forward list
        https://bugs.webkit.org/show_bug.cgi?id=144501

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadAlternateHTMLString.mm: Added.
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didFailProvisionalNavigation:withError:]):
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didFinishNavigation:]):

2015-05-01  Mario Sanchez Prada  <mario@endlessm.com>

        check-webkit-style fails due to system pylint
        https://bugs.webkit.org/show_bug.cgi?id=144360

        Reviewed by Darin Adler.

        Make sure that the directory containing third party autoinstalled modules
        is at the beginning of the search path, to avoid conflicts with other
        versions of the same modules installed in the system (e.g. pylint).

        * Scripts/webkitpy/thirdparty/__init__.py: Prepend the autoinstalled
        modules directory to sys.path, instead of appending it.

2015-05-01  Mario Sanchez Prada  <mario@endlessm.com>

        Unreviewed, updated my list of email addresses.

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

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        USE(...) macro should expect unprefixed variables
        https://bugs.webkit.org/show_bug.cgi?id=144454

        Reviewed by Daniel Bates.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Replace all occurrences WTF_USE with USE.
        * DumpRenderTree/config.h: Ditto.
        * TestWebKitAPI/config.h: Ditto.

2015-05-01  Basile Clement  <basile_clement@apple.com>

        Unreviewed. Add myself as a commiter in contributors.json.

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

2015-05-01  Dewei Zhu  <dewei_zhu@apple.com>

        Update speedometer patch to provide better UI, fix merge result bug and add "Score" metric to speedometer benchmark.
        https://bugs.webkit.org/show_bug.cgi?id=144487

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.merge): Fix bug.
        * Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch: Update appearance and add "Score" metric.

2015-05-01  Brady Eidson  <beidson@apple.com>

        Add API to disable meta refreshes.
        <rdar://problem/20333198> and https://bugs.webkit.org/show_bug.cgi?id=144269

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Reset the meta refresh pref between tests.

2015-05-01  Brent Fulgham  <bfulgham@apple.com>

        Provide a runtime flag to run-webkit-tests that shows the test view
        https://bugs.webkit.org/show_bug.cgi?id=144079.

        Unreviewed correction to r183651.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Make sure the state of the '--show-webview'
        flag is included in the options dictionary passed to the PlatformWebView.

2015-05-01  Antti Koivisto  <antti@apple.com>

        Remove network process load serialization code
        https://bugs.webkit.org/show_bug.cgi?id=144448

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setSerializeHTTPLoads):
        (WTR::TestRunner::dispatchPendingLoadRequests):

2015-05-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Add libhyphen-dev to the build dependencies
        https://bugs.webkit.org/show_bug.cgi?id=144452

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: Added hyphen as Fedora and Arch
        dependencies.

2015-04-30  Brent Fulgham  <bfulgham@apple.com>

        Provide a runtime flag to run-webkit-tests that shows the test view
        https://bugs.webkit.org/show_bug.cgi?id=144079.

        Reviewed by Dean Jackson.

        Add a new flag (--show-webview) that causes DumpRenderTree and WebKitTestRunner to display
        their WebViews on-screen. This can be used when running tests via the "--additional-drt-flag"
        option:
        
        --additional-drt-flag="--show-webview"

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Use an on-screen window rect if the user passed the
        '--show-webview' flag.
        (initializeGlobalsFromCommandLineOptions): Recognize the "--show-webview" option.
        * WebKitTestRunner/Options.cpp:
        (WTR::Options::Options):
        (WTR::handleOptionShowWebView):
        (WTR::OptionsHandler::OptionsHandler): Recognize the new "--show-webview" option.
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize): Use value of 'shouldShowWebView' from the Options bundle.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::shouldShowWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Retrieve the value of the 'ShouldShowWebView' key from the
        options dictionary. If it is true, display the web view while running the test.

2015-04-30  Alexey Proskuryakov  <ap@apple.com>

        r183355 didn't trigger Mac tests
        https://bugs.webkit.org/show_bug.cgi?id=144464

        Reviewed by Simon Fraser.

        Update badly neglected filters and unit tests.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2015-04-30  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Add libhyphen-dev to the build dependencies
        https://bugs.webkit.org/show_bug.cgi?id=144452

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: Added libhyphen-dev to the WebKitGTK+
        build dependencies.

2015-04-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Testing dictionaries are not installed automatically
        https://bugs.webkit.org/show_bug.cgi?id=144460

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Add the testing dictionaries to the main moduleset.

2015-04-30  Dewei Zhu  <dewei_zhu@apple.com>

        Fix return code issue, check return code of safari process and dump results to log
        https://bugs.webkit.org/show_bug.cgi?id=144436

        Reviewed by Ryosuke Niwa.

        * Scripts/run-benchmark:
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.dump): Correct typo.
        (BenchmarkRunner.wrap): Add results to console.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: Check return code to detect Safari crashes.
        (OSXSafariDriver.prepareEnv):
        (OSXSafariDriver.launchUrl):
        (OSXSafariDriver.closeBrowsers):

2015-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        Should no longer need to worry about very old versions of Xcode
        https://bugs.webkit.org/show_bug.cgi?id=144437

        Reviewed by Dan Bernstein.

        * Scripts/check-for-exit-time-destructors:
        * Scripts/check-for-global-initializers:
        * Scripts/check-for-weak-vtables-and-externals:

2015-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(183583): [Mac] make without SDKROOT has issues
        https://bugs.webkit.org/show_bug.cgi?id=144431

        Reviewed by Dan Bernstein.

        * Makefile:
        * WebKitTestRunner/Makefile:
        Assume an empty SDKROOT means an macosx variant, so only
        enable settings if the SDKROOT is not empty and does not
        contain "macosx".

2015-04-29  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143684
        <rdar://problem/20375516>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Make sure the WheelEventTestTrigger state is
        reset before the next test run.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Ditto."

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

        Run javascriptcore tests on Windows without cygwin
        https://bugs.webkit.org/show_bug.cgi?id=144419

        Reviewed by Brent Fulgham.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        Just call ruby, not /usr/bin/env ruby.

2015-04-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK] Add --enable-shared option to LLVM to build mesa
        https://bugs.webkit.org/show_bug.cgi?id=144393

        Reviewed by Martin Robinson.

        The updated mesa requires the shared LLVM libraries.
        To build mesa with LLVM in FTL build, this patch added `--enable-shared` option
        to LLVM configure script. It will provide shared libraries in addition to static libraries.

        * gtk/jhbuild-optional.modules:

2015-04-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add support for automatic hyphenation
        https://bugs.webkit.org/show_bug.cgi?id=44478

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Add a module for testing dictionaries, so that
        all systems will use the same dictionaries for testing purposes.

2015-04-29  Jake Nielsen  <jacob_nielsen@apple.com>

        Failure when building WebKit for appletvsimulator.
        https://bugs.webkit.org/show_bug.cgi?id=144356

        Reviewed by Alexey Proskuryakov.

        Changes Makefile logic to check for "not OS X" rather than "is iOS" to
        make TVOS and WatchOS behave correctly.

        * Makefile:
        * WebKitTestRunner/Makefile:

2015-04-29  Alexey Proskuryakov  <ap@apple.com>

        Use-after-free when invalidating WKPageForceRepaint callback
        https://bugs.webkit.org/show_bug.cgi?id=144401
        rdar://problem/20741111

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.h: (WTR::TestController::isCurrentInvocation): Added.

        * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::forceRepaintDoneCallback):
        Don't do anything on error, because the context may be a stale pointer now.

2015-04-29  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: Don't complain about returning value from Objective-C method call in header
        <http://webkit.org/b/144395>

        Reviewed by Andy Estes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing): Update regex so 'return' is ignored if it
        precedes the whitespace and bracket.  Change category name to
        'whitespace/brackets'.  Add period to error message.
        (CppChecker): Add 'whitespace/brackets' as a category.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (ErrorCollector.__call__): Replace 'STYLE_CATEGORIES' with
        'CppChecker.categories' since that's where the list lives now.
        (CppStyleTest.test_spacing_before_brackets): Add tests for
        'whitespace/brackets' issues and non-issues.

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

        Fix WinCairo bot.

        * Scripts/webkitdirs.pm:
        (determinePassedConfiguration):
        WinCairo bot doesn't use cygwin, but it needs Release_WinCairo for its configuration.

2015-04-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Use CTFontCreateForCSS instead of doing font search ourselves
        https://bugs.webkit.org/show_bug.cgi?id=132159

        Reviewed by Darin Adler.

        Make DumpRenderTree and WebKitTestRunner use the new font whitelist instead of
        swizzling NSFontManager methods. This is predicated on ENABLE(PLATFORM_FONT_LOOKUP).

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

2015-04-29  Alexey Proskuryakov  <ap@apple.com>

        fast/frames/flattening/iframe-flattening-resize-event-count.html times out on Yosemite WK2
        https://bugs.webkit.org/show_bug.cgi?id=144155

        Reviewed by Andreas Kling.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetStateToConsistentValues):
        Make sure that test window is "visible" before each test. While there is no concrete
        evidence that this is the problem indeed, the behavior is consistent with what would
        happen for an invisible window. Also, WKTR obviously needs to do this to protect
        against potential buggy tests that hide the window and don't show it.

2015-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix /webkit2/WebKitWebInspectorServer/test-open-debugging-session.

        Latest changes in the inspector UI made this test fail. We were
        relying that the sidebar was always visible and the first 'li'
        element of the inspector was the one containing the title. This is
        no longer true, so better use document title that is not likely
        to change.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (openRemoteDebuggingSession):

2015-04-29  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Re-sorted my contributor's mails to help bugzilla on showing the proper one.

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

2015-04-29  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Created a new watchlist for changes in WebInspectorUI images and added myself to it.

        * Scripts/webkitpy/common/config/watchlist:

2015-04-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Allow to run the tests on the native X display
        https://bugs.webkit.org/show_bug.cgi?id=144247

        Reviewed by Gyuyoung Kim.

        Added the USE_NATIVE_XDISPLAY option for the WTR.
        We can select the Xorg driver if environment variable is set up before running the tests.

        * Scripts/webkitpy/port/efl.py:
        (EflPort._driver_class):

2015-04-29  Joonghun Park  <jh718.park@samsung.com>

        [GTK] Add libnotify-dev in gtk install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=144379

        Reviewed by Žan Doberšek.

        * gtk/install-dependencies:

2015-04-28  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Merge TILED_BACKING_STORE guard with COORDINATED_GRAPHICS
        https://bugs.webkit.org/show_bug.cgi?id=143001

        Reviewed by Gyuyoung Kim.

        * WebKitTestRunner/TestController.cpp:
        (WTR::shouldUseFixedLayout):

2015-04-28  Dewei Zhu  <dewei_zhu@apple.com>

        Increase stablility of run-benchmark script
        https://bugs.webkit.org/show_bug.cgi?id=144361

        Reviewed by Ryosuke Niwa.

        * Scripts/run-benchmark:
        (main):
        * Scripts/webkitpy/benchmark_runner/README.md: Update readme due to changes.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py:
        (GenericBenchmarkBuilder.clean):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: Improve error handling and remove an unnecessary loop.
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.prepareEnv): Remove saved sessions of Safari.
        * Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Upload 'results' rather than 'time'.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Update formate.
        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: Update formate.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py: 
        (ServerControl.render_POST): Flush the buffer to make sure we can pass the result to stdout.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver.fetchResult):
        (HTTPServerDriver):
        (HTTPServerDriver.killServer): Add kill server interface.
        (HTTPServerDriver.getReturnCode): Add get return code interface.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py: Adjust to support new interfaces.
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver.fetchResult):
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver.killServer):
        (SimpleHTTPServerDriver.getReturnCode):
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (forceRemove): Provide python version of 'rm -rf'.

2015-04-28  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Process NFAs individually to avoid having all NFAs live at the same time
        https://bugs.webkit.org/show_bug.cgi?id=144363

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:
        (TestWebKitAPI::countLiveNodes):
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::buildDFAFromPatterns):
        Update tests to use a hand rolled createNFAs function on top of CombinedURLFilters::processNFAs.

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        * Scripts/build-jsc: Use ENABLE_JIT instead of ENABLE_LLINT_C_LOOP on Mac. Always explicitly
        set the value of ENABLE_JIT and ENABLE_FTL_JIT to avoid assumptions about the default value.
        * Scripts/webkitperl/FeatureList.pm: Add --jit option to build-webkit.

2015-04-28  Commit Queue  <commit-queue@webkit.org>

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

        It broke cloop test bots (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT"
        https://bugs.webkit.org/show_bug.cgi?id=144304
        http://trac.webkit.org/changeset/183514

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        * Scripts/build-jsc: Use ENABLE_JIT instead of ENABLE_LLINT_C_LOOP on Mac. Perform sanity-
        checking to ensure --cloop and --ftl-jit cannot be combined. Always explicitly set the value
        of ENABLE_JIT and ENABLE_FTL_JIT to avoid assumptions about the default value.
        * Scripts/webkitperl/FeatureList.pm: Add --jit option to build-webkit.

2015-04-28  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [CMake] Remove unnecessary include paths in TestWebKitAPI cmake files
        https://bugs.webkit.org/show_bug.cgi?id=144319

        Reviewed by Csaba Osztrogonác.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:

2015-04-28  Joseph Pecoraro  <pecoraro@apple.com>

        Fix common typo "targetting" => "targeting"
        https://bugs.webkit.org/show_bug.cgi?id=144349

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging):

2015-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][jhbuild] Mesa build failure with llvm 3.6
        https://bugs.webkit.org/show_bug.cgi?id=144250

        Reviewed by Žan Doberšek.

        Bump the version of Mesa to 10.5.4

        * gtk/jhbuild.modules:

2015-04-28  Alexey Proskuryakov  <ap@apple.com>

        Disable App Nap in WebKitTestRunner UI process
        https://bugs.webkit.org/show_bug.cgi?id=144308

        Reviewed by Daniel Bates.

        * WebKitTestRunner/mac/main.mm:
        (disableAppNapInUIProcess):
        (main):

2015-04-28  Marcos Chavarría Teijeiro  <chavarria1991@gmail.com>

        [GTK] Update JHBuild Mesa download directory
        https://bugs.webkit.org/show_bug.cgi?id=144318

        Update the download directory of Mesa module since the previous one
        doesn't exist any more.

        Reviewed by Žan Doberšek.

        * gtk/jhbuild.modules:

2015-04-28  Commit Queue  <commit-queue@webkit.org>

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

        Roll back the Mesa dependency bump in fear of uncaught
        regressions while the testing bots are no-op. (Requested by
        zdobersek on #webkit).

        Reverted changeset:

        "[GTK][jhbuild] Mesa build failure with llvm 3.6"
        https://bugs.webkit.org/show_bug.cgi?id=144250
        http://trac.webkit.org/changeset/183477

2015-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][jhbuild] Mesa build failure with llvm 3.6
        https://bugs.webkit.org/show_bug.cgi?id=144250

        Reviewed by Žan Doberšek.

        Bump the version of Mesa to 10.5.4

        * gtk/jhbuild.modules:

2015-04-27  Dewei Zhu  <dewei_zhu@apple.com>

        Add '__init__.py' and fix known bug in benchmark runner.
        https://bugs.webkit.org/show_bug.cgi?id=144296

        Reviewed by Ryosuke Niwa

        * Scripts/webkitpy/benchmark_runner/__init__.py: Make python to recognize this module.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py: Make python to recognize this module.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute): Fix logic bug that '--output-file' option doesn't work, and empty output file bug.
        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Make python to recognize this module.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Make python to recognize this module.

2015-04-27  Alexey Proskuryakov  <ap@apple.com>

        More build fix.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        Use -objectForKey:, not array subscript.

2015-04-27  Alexey Proskuryakov  <ap@apple.com>

        Catch unexpected exits in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=144288

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (atexitFunction):
        (DumpRenderTreeMain):

2015-04-27  Alexey Proskuryakov  <ap@apple.com>

        Build fix

        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        Use -objectForKey:, not array subscript.

2015-04-27  Alexey Proskuryakov  <ap@apple.com>

        fast/frames/flattening/iframe-flattening-resize-event-count.html times out on Yosemite WK2
        https://bugs.webkit.org/show_bug.cgi?id=144155

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues):
        Disable App Nap. I don't have positive evidence that it's the culprit, but it could be,
        and we clearly don't want App Nap while testing.

2015-04-22  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Autogenerate cmakeconfig.h.cmake
        https://bugs.webkit.org/show_bug.cgi?id=143997

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt: Add XP_UNIX to the command-line
        definitions since TestNetscapePlugIn does not use cmakeconfig.h.

2015-04-27  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r182879): Images and video can no longer be downloaded
        https://bugs.webkit.org/show_bug.cgi?id=144267
        <rdar://problem/20702844>

        Reviewed by Simon Fraser.

        Revise tests to check for proper download menu state.
        1. Downloading a loal image should be disabled.
        2. Downloading a local media file should be disabled.
        3. Downloading non-downloadable media should be disabled.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (TestWebKitAPI::TEST):

2015-04-27  Csaba Osztrogonác  <ossy@webkit.org>

        Merge run-launcher into run-minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=141928

        Reviewed by Darin Adler.

        * Scripts/run-iexploder-tests:
        (runSafariWithIExploder):
        * Scripts/run-launcher: Removed.
        * Scripts/run-minibrowser:
        * Scripts/webkitdirs.pm:
        (launcherPath):
        * Scripts/webkitpy/port/efl.py:
        (EflPort.show_results_html_file):
        * Scripts/webkitpy/port/efl_unittest.py:
        (EflPortTest.test_show_results_html_file):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.print_leaks_summary):
        (GtkPort.show_results_html_file):
        (GtkPort): Deleted.
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_show_results_html_file):

2015-04-27  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Fix the output of perf-test buildstep on timeout
        https://bugs.webkit.org/show_bug.cgi?id=144097

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTests.getText2):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunAndUploadPerfTestsTest.test_buildbot_timeout):
        (RunAndUploadPerfTestsTest.test_build_bad_preparation): Deleted.

2015-04-27  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] TestWebKitAPI's forwarding header generator should depend on WebKit2's generator
        https://bugs.webkit.org/show_bug.cgi?id=143874

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/PlatformEfl.cmake: Add the new dependency.

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

        [JHBuild] Move to upstream OpenWebRTC
        https://bugs.webkit.org/show_bug.cgi?id=144145

        Reviewed by Carlos Garcia Campos.

        * efl/jhbuild.modules: Switch to upstream OpenWebRTC repository
        and add a new simple patch to gst-plugins-base, required for
        OpenWebRTC build.
        * efl/patches/gst-plugins-base-rtp-rtcpbuffer-fix-typo-in-enum.patch: Added.
        * gtk/jhbuild.modules: Ditto.
        * gtk/patches/gst-plugins-base-rtp-rtcpbuffer-fix-typo-in-enum.patch: Added.

2015-04-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement ES6 template literals
        https://bugs.webkit.org/show_bug.cgi?id=142691

        Reviewed by Darin Adler.

        Add ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX compile time flag.

        * Scripts/webkitperl/FeatureList.pm:

2015-04-26  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [CMake][EFL] Remove unnecessary include, library path in WebKitTestRunner/PlatformEfl.cmake 
        https://bugs.webkit.org/show_bug.cgi?id=144217

        Reviewed by Darin Adler.

        * WebKitTestRunner/PlatformEfl.cmake:

2015-04-26  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType,
        postTextStateChangeNotification and postTextReplacementNotification to give assistive
        tech apps more reliable context for responding to changes in web content. Also implement
        a mechanism to post value changes in password form fields in coalesced ticks to thwart
        analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent,
        and an overload of postTextReplacementNotification to give assistive tech apps more
        reliable context for responding to changes in web content selection. Also block posting
        selection changes on password fields.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.h:
        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler stopObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::removeNotificationListener):

2015-04-25  Sungmann Cho  <sungmann.cho@navercorp.com>

        Add myself to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=144204

        Reviewed by Darin Adler.

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

2015-04-25  Martin Robinson  <mrobinson@igalia.com>

        Rename ENABLE_3D_RENDERING to ENABLE_3D_TRANSFORMS
        https://bugs.webkit.org/show_bug.cgi?id=144182

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/DumpRenderTree.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.

2015-04-25  Dewei Zhu  <dewei_zhu@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=144038

        Reviewed by Ryosuke Niwa

        Add a script to run Speedometer and JetStream on a browser.

        * Scripts/run-benchmark: Wrapper script to run benchmark.
        (main):
        * Scripts/webkitpy/benchmark_runner/README.md: Introduction of this script.
        * Scripts/webkitpy/benchmark_runner/__init__.py: Added.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py: Added.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py: Added.
        (BenchmarkBuilderFactory):
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Added.
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: Added.
        (GenericBenchmarkBuilder):
        (GenericBenchmarkBuilder.prepare):
        (GenericBenchmarkBuilder._copyBenchmarkToTempDir):
        (GenericBenchmarkBuilder._applyPatch):
        (GenericBenchmarkBuilder.clean):
        * Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py: Added.
        (JetStreamBenchmarkBuilder):
        (JetStreamBenchmarkBuilder.prepare):
        (JetStreamBenchmarkBuilder._runCreateScript):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: Main module that masters all the processes of benchmark running.
        (BenchmarkRunner):
        (BenchmarkRunner.__init__):
        (BenchmarkRunner.execute):
        (BenchmarkRunner.dump):
        (BenchmarkRunner.wrap):
        (BenchmarkRunner.merge):
        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Added.
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py: Added.
        (BrowserDriver):
        (BrowserDriver.prepareEnv):
        (BrowserDriver.launchUrl):
        (BrowserDriver.closeBrowser):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py: Added.
        (BrowserDriverFactory):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_drivers.json: Added.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: Added.
        (OSXChromeDriver):
        (OSXChromeDriver.prepareEnv):
        (OSXChromeDriver.launchUrl):
        (OSXChromeDriver.closeBrowsers):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: Added.
        (OSXSafariDriver):
        (OSXSafariDriver.prepareEnv):
        (OSXSafariDriver.launchUrl):
        (OSXSafariDriver.closeBrowsers):
        * Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Patch that makes JetStream compatible with this script.
        * Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch: Patch that makes Speedometer compatible with this scritp.
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: Added.
        * Scripts/webkitpy/benchmark_runner/generic_factory.py: Factory for generic purpose.
        (GenericFactory):
        (GenericFactory.iterateGetItem):
        (GenericFactory.create):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Added.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py: Added.
        (ServerControl):
        (ServerControl.render_GET):
        (ServerControl.render_POST):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py: Added.
        (HTTPServerDriver):
        (HTTPServerDriver.serve):
        (HTTPServerDriver.fetchResult):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py: Added.
        (HTTPServerDriverFactory):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_drivers.json: Added.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py: Added.
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver.depends):
        (SimpleHTTPServerDriver.__init__):
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver.baseUrl):
        (SimpleHTTPServerDriver.fetchResult):
        * Scripts/webkitpy/benchmark_runner/utils.py: Utility module.
        (ModuleNotFoundError):
        (loadModule):
        (getPathFromProjectRoot):
        (loadJSONFromFile):
        (TimeoutError):
        (timeout):
        (timeout.__init__):
        (timeout.handle_timeout):
        (timeout.__enter__):
        (timeout.__exit__):

2015-04-24  Commit Queue  <commit-queue@webkit.org>

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

        Change was incorrect, broke builds (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Fix the build."
        http://trac.webkit.org/changeset/183303

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

        Fix the build.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController initWithConfiguration:]):

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        Disable ActionMenusPDFTest due to timeout on test bot

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (TestWebKitAPI::TEST):

2015-04-24  Commit Queue  <commit-queue@webkit.org>

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

        Broke 32-bit build and a test. (Requested by ap on #webkit).

        Reverted changeset:

        "AX: richer text change notifications (142719)"
        https://bugs.webkit.org/show_bug.cgi?id=142719
        http://trac.webkit.org/changeset/183266

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION: WebKit2.ActionMenusTest API test fails
        https://bugs.webkit.org/show_bug.cgi?id=144149
        <rdar://problem/20677770>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/action-menu-targets.html: Revise to use the same test PDF
        as the 'ActionMenusPDFTest'.
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (TestWebKitAPI::TEST): Unskip the PDF portion of ActionMenusTest, and revise its expected output
        to match the hit test on the 'action-menu-target.pdf' test file.

2015-04-24  Daniel Bates  <dabates@apple.com>

        Cleanup: Use @memoized for property IOSSimulator.testing_device
        https://bugs.webkit.org/show_bug.cgi?id=141715

        Reviewed by Darin Adler.

        Simplify the caching of the result of IOSSimulator.testing_device
        and make the code more readable by making use of the @memoized declarator
        instead of explicitly managing a private instance variable,
        IOSSimulator._testing_device, for the cached result.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.determine_full_port_name):
        (IOSSimulatorPort.__init__): Delete instance variable IOSSimulatorPort._testing_device.
        (IOSSimulatorPort):
        (IOSSimulatorPort.testing_device): No need to cache the created device object in
        IOSSimulatorPort._testing_device since we are marking this function @memoized.
        (IOSSimulatorPort.reset_preferences): Code style fix; inline self.testing_device.path instead
        of caching in local variable since we only make use of this value exactly once in this function.
        (IOSPort.__init__): Deleted; The instance variable IOSPort._testing_device has never
        been used since being added in r178622. So, we can remove this constructor since
        it's the trivial constructor once we remove the instance variable IOSPort._testing_device.

2015-04-24  Anders Carlsson  <andersca@apple.com>

        Rename -[WKWebsiteDataStore isNonPersistent] to -[WKWebsiteDataStore isPersistent]
        https://bugs.webkit.org/show_bug.cgi?id=144158

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController initWithConfiguration:]):

2015-04-24  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType, postTextStateChangeNotification and postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content. Also implement a mechanism to post value changes in password form fields in coalesced ticks to thwart analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent, and an overload of postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content selection. Also block posting selection changes on password fields.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.h:
        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler stopObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::removeNotificationListener):

2015-04-24  Darin Adler  <darin@apple.com>

        Convert OwnPtr and PassOwnPtr uses to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128007

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/HistoryDelegate.h: Removed unneeded include.
        * DumpRenderTree/win/UIDelegate.h: Ditto.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Removed OwnPtr-specific test cases.
        * TestWebKitAPI/Tests/WTF/HashSet.cpp: Ditto.

        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Removed unneeded include.

        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp: Use unique_ptr.
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::SetUp): Use make_unique.
        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp: Ditto.
        (TestWebKitAPI::WebKit2WillLoadTest::SetUp): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp:
        (WebKitDOMDOMWindowTest::create): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (documentLoadedCallback): Use a queue of DelayedSignal objects instead
        of smart pointers to DelayedSIgnal objects.
        (uriChangedCallback): Ditto.

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unreviewed test fix.
        https://bugs.webkit.org/show_bug.cgi?id=144149

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (TestWebKitAPI::TEST): Temporarily skip the PDF <embed>
        test.

2015-04-23  Darin Adler  <darin@apple.com>

        Another round of removing use of OwnPtr, PassOwnPtr, and deleteOwnedPtr
        https://bugs.webkit.org/show_bug.cgi?id=144090

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/DumpRenderTree.mm: Removed unneeded include.

2015-04-23  Michael Saboff  <msaboff@apple.com>

        lldb macro btjs sometimes can't get a frame description
        https://bugs.webkit.org/show_bug.cgi?id=144130

        Reviewed by Filip Pizlo.

        We look to execute ExecState::describeFrame().  It appears that in some contexts the
        debugger can't find ExecState.  In those cases, CallFrame works as it is a typedef of
        ExecState.  Therefore we can fallback to using CallFrame::describeFrame().

        * lldb/lldb_webkit.py:
        (btjs):

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

        Use less memory when compiling content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=144051

        Reviewed by Darin Adler and Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:
        (TestWebKitAPI::countLiveNodes):

2015-04-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Clean up JSC JIT options
        https://bugs.webkit.org/show_bug.cgi?id=143998

        Reviewed by Filip Pizlo.

        * Scripts/build-jsc: Do not use -ENABLE_LLINT_C_LOOP on CMake ports.
        * Scripts/webkitperl/FeatureList.pm: Remove ENABLE_LLINT_C_LOOP.

2015-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Extend action menus to support PDF
        https://bugs.webkit.org/show_bug.cgi?id=143895
        <rdar://problem/19003333>

        Reviewed by Tim Horton.

        Reactivate the action menu tests, and add a new PDF-based test to make sure that selection
        of PDF content works.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new 'test.pdf' resource to bundle.
        * TestWebKitAPI/Tests/WebKit2/action-menu-targets.html: Update with a new PDF pane.
        * TestWebKitAPI/Tests/WebKit2/test.pdf: Added.
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (-[ActionMenusTestWKView _actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:userData:]):
        Update to support PDF tests.
        (TestWebKitAPI::windowPointForTarget): Add new target for PDF test.
        (TestWebKitAPI::waitForPDFToLoad): New helper function to avoid starting test before the PDF is available.

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

        Unreviewed. Do not run GTK+ user media unit tests when ENABLE_MEDIA_STREAM is disabled.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (beforeAll):
        (testWebViewAudioOnlyUserMediaPermissionRequests):

2015-04-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add myself to watchlist
        https://bugs.webkit.org/show_bug.cgi?id=144041

        Reviewed by Alex Christensen.

        Add myself watching CMake, GtkWebKit2PublicAPI, SoupNetwork, and WebKitGTKTranslations.

        * Scripts/webkitpy/common/config/watchlist:

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

        [GTK] MiniBrowser should use NetworkProcess by default
        https://bugs.webkit.org/show_bug.cgi?id=143948

        Reviewed by Sergio Villar Senin.

        Use WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES by default
        unless MINIBROWSER_SINGLEPROCESS environment variable is present.

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

2015-04-21  Matthew Hanson  <matthew_hanson@apple.com>

        Use grep instead of any in prepare-ChangeLog, to avoid Windows compatibility issues.

        Unreviewed build fix.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp):
        Use grep instead of any to determine if a string is an element of an array.

2015-04-21  Anders Carlsson  <andersca@apple.com>

        Fix block signatures
        https://bugs.webkit.org/show_bug.cgi?id=144002

        Reviewed by Andreas Kling.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

2015-04-21  Philippe Normand  <pnormand@igalia.com>

        [GTK] jhbuild should not use a branch for openwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=143981

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:

2015-04-20  Matthew Hanson  <matthew_hanson@apple.com>

        Fix compilation error for prepare-ChangeLog running with Perl version < v5.18.2.

        Unreviewed build fix.

        The any function was added to List::Utils between Perl v5.16.2 and Perl v5.18.2.
        However, it has been exposed by List::MoreUtils since its inception. This patch uses
        the any function exposed by List::MoreUtils for greater compatibility.

        * Scripts/prepare-ChangeLog:
        Use any from List::MoreUtils instead of List::Utils, as List::MoreUtils exposes
        the any function in all of versions of Perl used by our infrastructure.

2015-04-20  Alex Christensen  <achristensen@webkit.org>

        Remove unnecessary logs when resetting tests.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        In r183020 I added some logs when compiling or removing content extensions fails.
        We often try to remove a content extension that does not exist, and that is not a problem.

2015-04-17  Matthew Hanson  <matthew_hanson@apple.com>

        prepare-ChangeLog should ignore the preceeding function when processing the removal of a function.
        https://bugs.webkit.org/show_bug.cgi?id=143897

        Reviewed by David Kilzer.

        This is a speculative fix that addresses two issues:

        1. An off-by-one error which allowed ending lines to be less than starting lines when a hunk was a pure delete.
        We were determining ending lines from combined diffs using the logic: End = Start + Offset - 1.

        So for a hunk like "@@ -723,10 +721,0 @@ bool foobar", we were generating the following starting/ending line pairs:
        Before: (723, 729)
        After: (721, 720)

        Before is correct, but After should be (721, 721), since it represents the beginning and ending lines for the hunk.
        Whether there are zero lines or one line in the hunk, the starting and ending line are the same.

        This error was causing bad behavior on purely additive and purely subtractive hunks, but since we only refer
        to After when generating ChangeLog output, the extractLineRangeBeforeChange had no visible effect on program output.

        The fix is to set End to the max of Start + Offset - 1 and Start, rather than always using the former.

        2. Creating git diffs from HEAD and not origin/master by default.

        Hard-coding origin/master into the originalFile command has the disadvantage of causing the diff to fail entirely
        when origin/master does not exist, and to do the wrong thing when determining deleted functions/methods.

        * Scripts/prepare-ChangeLog:
        (originalFile):
        Use HEAD instead of origin/master in default Git case.

        (generateFunctionLists):
        Ensure that the end line is not less than the start line.

        (extractLineRangeAfterChange):
        Set the end line to the start line if the end line is less than the start line.

        (extractLineRangeBeforeChange):
        Ditto.

2015-04-17  Matthew Hanson  <matthew_hanson@apple.com>

        Suppress warning in prepare-ChangeLog.
        https://bugs.webkit.org/show_bug.cgi?id=143882

        Reviewed by David Kilzer.

        Prune noisy prepare-ChangeLog output by using the List::Util::any function
        instead of the deprecated smartmatch operator.

        * Scripts/prepare-ChangeLog:
        Import the List::Util::any function.

        (get_function_line_ranges_for_cpp):
        Use the any function instead of smartmatch.

2015-04-20  Anders Carlsson  <andersca@apple.com>

        Modify the WKWebsiteDataStore API to take a NSSet of types instead of a bitmask
        https://bugs.webkit.org/show_bug.cgi?id=143966

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (dataTypes):
        (-[WK2BrowserWindowController fetchWebsiteData:]):
        (-[WK2BrowserWindowController fetchAndClearWebsiteData:]):
        (-[WK2BrowserWindowController clearWebsiteData:]):

2015-04-20  Alex Christensen  <achristensen@webkit.org>

        Fix content extension test flakiness.
        https://bugs.webkit.org/show_bug.cgi?id=143950

        Reviewed by Brady Eidson.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        Remove the TestContentExtensions if it exists.
        (WTR::TestController::platformConfigureViewForTest):
        Log errors in case there are any.

2015-04-20  Alex Christensen  <achristensen@webkit.org>

        Properly report errors from _WKUserContentExtensionStore.
        https://bugs.webkit.org/show_bug.cgi?id=143808

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:
        (TEST_F):

2015-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a rule for NetworkCache to watchlist file
        https://bugs.webkit.org/show_bug.cgi?id=143945

        Reviewed by Sergio Villar Senin.

        And add myself to the list of watchers.

        * Scripts/webkitpy/common/config/watchlist:

2015-04-19  Darin Adler  <darin@apple.com>

        Update RefPtr documentation and deprecation
        https://bugs.webkit.org/show_bug.cgi?id=143936

        Reviewed by Andreas Kling.

        * Scripts/do-webcore-rename: Put in some DeprecatedPassRefPtr renames.

2015-04-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Introduce bytecode intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=143926

        Reviewed by Filip Pizlo.

        Change cpplint to accept emit_intrinsic_XXX.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2015-04-18  Simon Fraser  <simon.fraser@apple.com>

        Fix lldb_webkit.py to show StringImpls correctly
        https://bugs.webkit.org/show_bug.cgi?id=143920

        Reviewed by Andreas Kling.
        
        Update WTFStringImplProvider's is_8bit to use the correct bitmask.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.is_8bit):

2015-04-17  Daniel Bates  <dabates@apple.com>

        Not able to build WebKit against iOS Simulator 8.3 SDK
        https://bugs.webkit.org/show_bug.cgi?id=143883

        Reviewed by David Kilzer.

        Copy libraries libWebKitSystemInterfaceIOS{Device, Simulator}8.3.a to the built product directory
        so that Xcode uses them.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-04-17  Beth Dakin  <bdakin@apple.com>

        Force mouse events should go through normal mouse event handling code paths
        https://bugs.webkit.org/show_bug.cgi?id=143749
        -and corresponding-
        rdar://problem/20472895

        Reviewed by Dean Jackson.

        Add mouseForceDown/mouseForceUp/mouseForceChanged support to WebKitTestRunner. 
        Since there is not a way to create an NSEventTypePressure from scratch, we 
        subclass NSEvent and override all of the critical methods.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseForceDown):
        (WTR::EventSendingController::mouseForceUp):
        (WTR::EventSendingController::mouseForceChanged):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderPressureEvent initAtLocation:globalLocation:stage:pressure:phase:time:eventNumber:]):
        (-[EventSenderPressureEvent timestamp]):
        (-[EventSenderPressureEvent type]):
        (-[EventSenderPressureEvent locationInWindow]):
        (-[EventSenderPressureEvent location]):
        (-[EventSenderPressureEvent stage]):
        (-[EventSenderPressureEvent pressure]):
        (-[EventSenderPressureEvent phase]):
        (-[EventSenderPressureEvent eventNumber]):
        (WTR::EventSenderProxy::mouseForceDown):
        (WTR::EventSenderProxy::mouseForceUp):
        (WTR::EventSenderProxy::mouseForceChanged):

2015-04-17  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard still shows obsolete results for out of order builds sometimes
        https://bugs.webkit.org/show_bug.cgi?id=143885

        Reviewed by Tim Horton.

        Fixed a case where we have two builds with the same revision(s). An in order build
        is one for which the revision is strictly higher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype._checkForInOrderResult):
        (BuildbotQueue.prototype.compareIterationsByRevisions):

2015-04-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182912 and r182920.
        https://bugs.webkit.org/show_bug.cgi?id=143881

        Build breakage in some configurations (Requested by ap on
        #webkit).

        Reverted changesets:

        "Force mouse events should go through normal mouse event
        handling code paths"
        https://bugs.webkit.org/show_bug.cgi?id=143749
        http://trac.webkit.org/changeset/182912

        http://trac.webkit.org/changeset/182920

2015-04-17  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] One more unreviewed fix after r182882.

        * TestWebKitAPI/PlatformGTK.cmake: Added back the WebKit2's forwarding header generator dependency.

2015-04-17  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Unreviewed speculative clean build fix after r182882.

        TestWebKitAPI's forwarding header generator depended on WeKit2's
        which generated SOUP related forwarding headers too.

        This dependency isn't necessary and was removed by r182882 to make
        forwarding header generators parallelizable. But in this case
        TestWebKitAPI's and WebKitTestRunner's forwarding header generator
        should generate SOUP related forwarding headers too similar to EFL.

        * TestWebKitAPI/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:

2015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Redirect to non HTTP destination is broken
        https://bugs.webkit.org/show_bug.cgi?id=143866

        Reviewed by Sergio Villar Senin.

        Add a unit test to check that redirect to a data URI works.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testRedirectToDataURI):
        (serverCallback):
        (beforeAll):

2015-04-16  Jake Nielsen  <jacob_nielsen@apple.com>

        Changes method of quitting iOS Simulator to be more correct.
        https://bugs.webkit.org/show_bug.cgi?id=143847
        <rdar://problem/20530344>

        Reviewed by Darin Adler.

        Fixes by addressing the app by ID rather than by name.

        * Scripts/webkitdirs.pm:
        (quitIOSSimulator):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.check_sys_deps):

2015-04-16  Anders Carlsson  <andersca@apple.com>

        Deprecate _WKWebsiteDataStore in favor of WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=143844

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate newPrivateWindow:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController initWithConfiguration:]):
        (-[WK2BrowserWindowController fetchWebsiteData:]):
        (-[WK2BrowserWindowController fetchAndClearWebsiteData:]):
        (-[WK2BrowserWindowController clearWebsiteData:]):

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

        32-bit build fix.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        (WTR::TestController::platformConfigureViewForTest):
        Added WK_API_ENABLED.

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

        Removed unused WKUserContentFilterRef.
        https://bugs.webkit.org/show_bug.cgi?id=143852

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        (WTR::TestController::platformConfigureViewForTest):

2015-04-16  Jake Nielsen  <jacob_nielsen@apple.com>

        Unreviewed. Adding myself as a commiter in contributers.json.

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

2015-04-16  Alexey Proskuryakov  <ap@apple.com>

        It is very hard to attach a debugger to WebProcess to debug tests
        https://bugs.webkit.org/show_bug.cgi?id=143837

        Reviewed by Chris Dumez.

        --no-timeout used to only affect waitUntilDone timeout, but not IPC timeout in
        WebKitTestRunner, and not pipe reading timeout in run-webkit-tests.

        Now it disables all timeouts in tools, as is best for debugging tests.

        * Scripts/webkitpy/port/driver.py: (Driver.run_test): Respect --no-timeout, so
        that the script doesn't terminate DRT/WKTR when there is no output for a long time.

        * WebKitTestRunner/Options.cpp: Removed --no-timeout-at-all, as --no-timeout
        now has the same functionality.

2015-04-16  Beth Dakin  <bdakin@apple.com>

        Force mouse events should go through normal mouse event handling code paths
        https://bugs.webkit.org/show_bug.cgi?id=143749
        -and corresponding-
        rdar://problem/20472895

        Reviewed by Dean Jackson.

        Add mouseForceDown/mouseForceUp/mouseForceChanged support to WebKitTestRunner. 
        Since there is not a way to create an NSEventTypePressure from scratch, we 
        subclass NSEvent and override all of the critical methods.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseForceDown):
        (WTR::EventSendingController::mouseForceUp):
        (WTR::EventSendingController::mouseForceChanged):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderPressureEvent initAtLocation:globalLocation:stage:pressure:phase:time:eventNumber:]):
        (-[EventSenderPressureEvent timestamp]):
        (-[EventSenderPressureEvent type]):
        (-[EventSenderPressureEvent locationInWindow]):
        (-[EventSenderPressureEvent location]):
        (-[EventSenderPressureEvent stage]):
        (-[EventSenderPressureEvent pressure]):
        (-[EventSenderPressureEvent phase]):
        (-[EventSenderPressureEvent eventNumber]):
        (WTR::EventSenderProxy::mouseForceDown):
        (WTR::EventSenderProxy::mouseForceUp):
        (WTR::EventSenderProxy::mouseForceChanged):

2015-04-16  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump LLVM to version 3.6.0 on X86_64
        https://bugs.webkit.org/show_bug.cgi?id=143604

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/llvm-elf-add-stackmaps-arm64.patch: Added the necessary part of llvm-elf-add-stackmaps.patch.
        * efl/patches/llvm-elf-add-stackmaps.patch: Removed, it is included in LLVM 3.6.0 release.
        * efl/patches/llvm-elf-allow-fde-references-outside-the-2gb-range.patch: Removed, it is included in LLVM 3.6.0 release.
        * efl/patches/llvm-version-arm64.patch: Added. Set PACKAGE_VERSION to "3.5.0ftl" to be able to ensure we use patched LLVM on AArch64.

2015-04-16  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove an unnecessary workaround from jhbuildrc
        https://bugs.webkit.org/show_bug.cgi?id=143823

        Reviewed by Gyuyoung Kim.

        * efl/jhbuildrc:

2015-04-16  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Run forwarding headers generator unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=143819

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:

2015-04-15  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Add gnutls to jhbuild.module
        https://bugs.webkit.org/show_bug.cgi?id=143777

        Reviewed by Csaba Osztrogonác.

        EFL port has required at least 3.0.0 version of gnutls since r176712.
        However some old linux distributions don't support 3.0.0 version. Besides
        other projects sometimes need to use lower version of gnutls.

        This patch supports to download gnutls through jhbuild, and use it.

        * efl/install-dependencies: Add nettle-dev dependency and remove libgnutls28-dev. 
        * efl/jhbuild.modules: Download 3.3 version because 3.3 version is stable version.

2015-04-15  Mark Lam  <mark.lam@apple.com>

        Remove obsolete VMInspector debugging tool.
        https://bugs.webkit.org/show_bug.cgi?id=143798

        Reviewed by Michael Saboff.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp: Removed.

2015-04-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed gardening; Make the previous commit apply only _post_ Yosemite.

        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:

2015-04-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed gardening; disable FullscreenZoomInitialFrame.WebKit2 API test post-Yosemite.

        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::TEST_F):

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

        [Win] DRT does not seem to reset the 'UsesPageCache' setting between tests
        https://bugs.webkit.org/show_bug.cgi?id=143779

        Reviewed by Brent Fulgham.

        Reset the 'UsesPageCache' setting to FALSE between tests on Windows,
        similarly to what is done on Mac / WK1. Without this, PageCache could
        stay enabled after page cache tests and cause weird behaviors.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2015-04-14  Simon Fraser  <simon.fraser@apple.com>

        Re-enable custom dilation for antialiased fonts
        https://bugs.webkit.org/show_bug.cgi?id=143738

        Reviewed by Tim Horton.
        
        Enabling custom dilation for antialised fonts broke layout tests, so re-land it,
        but disable in WebKitTestRunner and DumpRenderTree. The latter requires adding
        a private WebKit pref. This pref defaults to YES, enabling the feature by default
        in WK1 as we do for WK2.

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

2015-04-14  Brent Fulgham  <bfulgham@apple.com>

        Correct layering violation in DumpRenderTree Build
        https://bugs.webkit.org/show_bug.cgi?id=143732

        Reviewed by Simon Fraser.

        Correct a layering violation in DumpRenderTree by calling functions on the
        WebCoreTestSupport library, rather than attempting to work with WebCore
        types directly.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController monitorWheelEvents]): Call methods on WebCoreTestSupport, rather
        than WebCore itself.,
        (-[EventSendingController callAfterScrollingCompletes:]): Ditto.

2015-04-14  Benjamin Poulain  <benjamin@webkit.org>

        Add a conservative DFA minimizer for the content extension matcher
        https://bugs.webkit.org/show_bug.cgi?id=143501

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:

2015-04-14  Daniel Bates  <dabates@apple.com>

        Skip failing test Tests/WebKit2Cocoa/FixedLayoutSize.mm on iOS
        https://bugs.webkit.org/show_bug.cgi?id=143693
        <rdar://problem/20530316>

        Reviewed by Tim Horton.

        Skip the test Tests/WebKit2Cocoa/FixedLayoutSize.mm as we do not plan
        to use the fixed layout code on iOS at this time.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FixedLayoutSize.mm: Add !PLATFORM(IOS)-guard.

2015-04-14  Dominik Röttsches  <dominik.rottsches@intel.com>

        Remove myself from watchlist, remove empty Cairo and HarfBuzz watchlists
        https://bugs.webkit.org/show_bug.cgi?id=143705

        Unreviewed change to watchlist file.

        * Scripts/webkitpy/common/config/watchlist:

2015-04-14  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] favicon wasn't updated for google.com sometimes.
        https://bugs.webkit.org/show_bug.cgi?id=141940

        Reviewed by Gyuyoung Kim.

        As elm_entry_utf8_to_markup can include additional characters, parameter for the
        on_icon_changed_cb was just set by using url string retrieved by ewk_view_url_get().

        * MiniBrowser/efl/main.c:
        (on_url_changed):

2015-04-13  Tim Horton  <timothy_horton@apple.com>

        Add a persistent, fixed scale factor to make it easy to scale down WK(Web)Views
        https://bugs.webkit.org/show_bug.cgi?id=143560
        <rdar://problem/16302047>

        Reviewed by Darin Adler.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController setScale:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (viewScaleForMenuItemTag):
        (-[WK2BrowserWindowController setScale:]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        Add a submenu with four view scale options: 100%, 75%, 50%, and 25%.
        When in use, we resize the window so that the view fits correctly, and
        use automaticallyComputesFixedlayoutSizeFromViewScale so that the page's
        layout size will not change when scaling down (but will update appropriately
        when the view is resized).

2015-04-13  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard shows obsolete results when builds are substantially out of order
        https://bugs.webkit.org/show_bug.cgi?id=138630

        Reviewed by Tim Horton.

        Make sure that we always load at least one in order productive iteration.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue): Added _hasLoadedIterationForInOrderResult to track whether the queue
        is done loading at least one iteration that wasn't an out of order build.
        (BuildbotQueue.prototype.loadMoreHistoricalIterations): Listen for iteration load
        when that's needed to check for out of order builds.
        (BuildbotQueue.prototype.update): Ditto.
        (BuildbotQueue.prototype._checkForInOrderResult): Check if the queue has an in order
        result, and if it does not, load more iterations.
        (BuildbotQueue.prototype.loadAll): We have everything loaded, so we certainly have
        an in order iteration loaded too.
        (BuildbotQueue.prototype.compareIterations): Extracted from sortIterations(), and
        corrected to always sort loaded iterations before unloaded ones.

2015-04-10  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143286
        <rdar://problem/20375516>

        Reviewed by Simon Fraser.

        Extend the WK1 and WK2 test programs to support two new EventSender commands:
        (1) monitorWheelEvents: Tells DRT and WKTR to track the wheel event and animation state, so that we can
        block executing tests until WebKit has completed any rubberband, scroll, or scroll-snap animations.
        (2) callAfterScrollingCompletes: Provide a callback method to be executed when WebKit determines that
        relevant rubberband, scroll, and scroll-snap animations are finished.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Update to recognize 'callAfterScrollingCompletes:'
        and 'monitorWheelEvents'.
        (+[EventSendingController webScriptNameForSelector:]): Ditto.
        (-[EventSendingController mouseScrollByX:andY:continuously:]): Add some stderr logging to help when
        debugging test failures.
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]): Ditto.
        (-[EventSendingController callAfterScrollingCompletes:]): Added. Protects the JSObject representing the callback
        function, then passes it to WebCore to be called once the test deferrals have been cleared.
        (-[EventSendingController monitorWheelEvents:]): Added. Activates the wheel event tracking used by the
        'callAfterScrollingCompletes' method.
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Added signatures for 'callAfterScrollingCompletes'
        and 'monitorWheelEvents'.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::callAfterScrollingCompletes): Added. Protects the JSObject representing the
        callback function, then passes it to WebCore to be called once the test deferrals have been cleared
        (WTR::EventSendingController::monitorWheelEvents): Added. Activates the wheel event tracking used by the
        'callAfterScrollingComplates' method.
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:

2015-04-13  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Crash-only queues should show failure when testing fails to start
        https://bugs.webkit.org/show_bug.cgi?id=143656

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2015-04-13  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION(r181134): [GTK] Test /webkit2/WebKitWebView/insecure-content is failing after r181134
        https://bugs.webkit.org/show_bug.cgi?id=142387

        Reviewed by Carlos Garcia Campos.

        Running mixed content is blocked by default since r181134. Updated
        the test case to reflect the new default settings.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testInsecureContent):

2015-04-13  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Fix wrong value variable in ENABLE_NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=143667

        Reviewed by Csaba Osztrogonác.

        ENABLE_NAVIGATOR_HWCONCURRENCY has used $registerProtocolHandlerSupport value variable
        since r169017. Added $hardwareConcurrencySupport for it.

        Additionally networkInfoSupport is removed because this feature was removed due to spec out.

        * Scripts/webkitperl/FeatureList.pm:

2015-04-13  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Add ENABLE(ATTACHMENT_ELEMENT) to the build system
        https://bugs.webkit.org/show_bug.cgi?id=143664

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2015-04-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Enable Media Source
        https://bugs.webkit.org/show_bug.cgi?id=143635

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm: Enable media source on efl port.

2015-04-12  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Crash-only queues should show failure when failure limit is exceeded
        https://bugs.webkit.org/show_bug.cgi?id=143646

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2015-04-11  Alexey Proskuryakov  <ap@apple.com>

        Use en_US spell checker for tests on Mac instead of Multilingual
        https://bugs.webkit.org/show_bug.cgi?id=143641

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        While at it, override NSUserDictionaryReplacementItems, so that user replacements
        cannot affect tests.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm: (WTR::InjectedBundle::platformInitialize):
        Made this more like WebKit1 version.

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

        Replace setFixedLayoutSizeEnabled: with an enum of layout modes
        https://bugs.webkit.org/show_bug.cgi?id=143576

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FixedLayoutSize.mm:
        (TEST):
        Adopt.

2015-04-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Update my email address and expertise.
        https://bugs.webkit.org/show_bug.cgi?id=143586

        Unreviewed, just update my info.

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

2015-04-09  Joseph Pecoraro  <pecoraro@apple.com>

        Flakiness Dashboard not loading insecure content if loaded with https URL
        https://bugs.webkit.org/show_bug.cgi?id=143570

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/app.yaml:
        * TestResultServer/static-dashboards/loader.js:
        Switch to https scheme.

2015-04-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] WebKit2's generate-forwarding-headers.pl runs too many times
        https://bugs.webkit.org/show_bug.cgi?id=142907

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unreviewed test fix after r182584
        https://bugs.webkit.org/show_bug.cgi?id=143452

        Put both of these tests back to their original state now that the underlying
        problem is fixed.

        * TestWebKitAPI/Tests/WebKit2/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
        (TestWebKitAPI::TEST):

2015-04-08  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-benchmarks geomean of preferred means shouldn't print the VMs header twice
        https://bugs.webkit.org/show_bug.cgi?id=143553

        Reviewed by Ryosuke Niwa.
        
        Remove the spurious printVMs left over from an earlier change.

        * Scripts/run-jsc-benchmarks:

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unreviewed test fix after r182581

        The behavior of control-left-click is controlled by a system preference.
        Our test bots have this turned off.

        * TestWebKitAPI/Tests/WebKit2/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
        (TestWebKitAPI::TEST):

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] WebKit is not honoring OS preferences for secondary click behaviors
        https://bugs.webkit.org/show_bug.cgi?id=143452
        <rdar://problem/20437483>

        Reviewed by Tim Horton.

        Add a new API test to confirm that Cocoa mouse button press events are properly
        tagged with the desired menu behavior (i.e., 'None', 'Context', or 'Action'.)

        The WK2 test dispatches mouse down events to a PlatformWebView, and checks with
        some registered event handlers that the expected button press and context menu
        events are received.

        The WK1 unit test creates an NSEvent with the desired button press state, and then
        uses WebCore::PlatformEventFactory::createPlatformMouseEvent to create a WebCore event.
        We check the resulting PlatformMouseEvent for proper state.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new test files.
        * TestWebKitAPI/Tests/WebKit2/MenuTypesForMouseEvents.cpp: Added.
        (TestWebKitAPI::buildAndPerformTest): Helper function to build/run an individual test.
        * TestWebKitAPI/Tests/WebKit2/mouse-button-listener.html: Added.
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm: Added.
        (TestWebKitAPI::canCallMenuTypeForEvent): Helper function.
        (TestWebKitAPI::buildAndPerformTest): Helper function to build/run an individual test.
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateButtonClick): Added method to support firing
        mouse down events.
        * TestWebKitAPI/mac/PlatformWebViewMac.h:

2015-04-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add pango to jhbuild-optional.modules
        https://bugs.webkit.org/show_bug.cgi?id=143537

        Reviewed by Martin Robinson.

        * gtk/jhbuild-optional.modules: Add pango.

2015-04-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [XvfbDriver] Regular expression used to match running X servers fails on Fedora 22.
        https://bugs.webkit.org/show_bug.cgi?id=143530

        Reviewed by Žan Doberšek.

        Assume that the default value for display (:0) is reserved and start checking on :1
        Adjust webkitpy test and include two new test cases for this bug (display number not specified)
        and for X server named Xorg.bin (previous bug 1376599)

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._next_free_display)
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.test_start_no_pixel_tests):
        (XvfbDriverTest.test_start_pixel_tests):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_next_free_display):
        (XvfbDriverTest.test_start_next_worker):
2015-04-08  Alex Christensen  <achristensen@webkit.org>

        Block popups from content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=143497

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Added popup test.

2015-04-08  Alex Christensen  <achristensen@webkit.org> and Patrick Gansterer  <paroga@webkit.org>

        Add CMake build system for WinCairo port.
        https://bugs.webkit.org/show_bug.cgi?id=115944

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * WinLauncher/CMakeLists.txt: Added.

2015-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in DOMObjectCache when a wrapped object owned by the cache is unreffed by the user
        https://bugs.webkit.org/show_bug.cgi?id=143521

        Reviewed by Martin Robinson.

        Add a way to detect unexpected web process crashes to WebViewTest,
        and a test case to testDOMCache to trigger the crash.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testDOMCache):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (testWebKitWebViewProcessCrashed):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::WebViewTest):
        (WebViewTest::webProcessCrashed):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2015-04-07  Alexey Proskuryakov  <ap@apple.com>

        PageVisibilityStateWithWindowChanges should only be enabled on Yosemite
        rdar://problem/20461342

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:

2015-04-07  Commit Queue  <commit-queue@webkit.org>

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

        caused debug test failures (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "Block popups from content extensions."
        https://bugs.webkit.org/show_bug.cgi?id=143497
        http://trac.webkit.org/changeset/182511

2015-04-07  Alex Christensen  <achristensen@webkit.org>

        Block popups from content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=143497

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Added popup test.

2015-04-07  Benjamin Poulain  <benjamin@webkit.org>

        Get the features.json files ready for open contributions
        https://bugs.webkit.org/show_bug.cgi?id=143436

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONFeaturesChecker.check):
        Extend the syntax checking a bit, but leave everything non-mandatory
        very loose until we figure what fields are important.

2015-04-07  Tim Horton  <timothy_horton@apple.com>

        Expose and test fixedLayoutSize via modern WebKit SPI
        https://bugs.webkit.org/show_bug.cgi?id=143500

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/FixedLayoutSize.mm: Added.
        (-[FixedLayoutSizeNavigationDelegate webView:didFinishNavigation:]):
        (TEST):
        Add a test that verifies that fixedLayoutSize works at all, that
        it persists through a navigation, and that turning it back off reverts to
        laying out at the size of the view.

2015-04-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed. Add myself as a committer.

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

2015-04-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Bots complain about missing /etc/catalog
        https://bugs.webkit.org/show_bug.cgi?id=143484

        Reviewed by Chris Dumez.

        The libxml2 build on Mac, iOS, and Windows does not provide the set
        of default catalog files. We do not actually need these for our
        purposes, but we get warnings and some bot flakiness because they
        are not present.

        We can avoid both problems the same way the Mac and iOS ports do,
        by setting the XML_CATALOG_FILES environment variable to 'empty string',
        which avoid the warnings and bot problems.

        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_environ_for_server): Added.

2015-04-06  Sam Weinig  <sam@webkit.org>

        Use content extensions in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=143446

        Reviewed by Alex Christensen.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate showExtensionsManager:]):
        (-[BrowserAppDelegate userContentContoller]):
        * MiniBrowser/mac/ExtensionManagerWindowController.h: Added.
        * MiniBrowser/mac/ExtensionManagerWindowController.m: Added.
        (-[ExtensionManagerWindowController init]):
        (-[ExtensionManagerWindowController windowDidLoad]):
        (-[ExtensionManagerWindowController add:]):
        (-[ExtensionManagerWindowController remove:]):
        * MiniBrowser/mac/ExtensionManagerWindowController.xib: Added.
        * MiniBrowser/mac/MainMenu.xib:

2015-04-07  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        web-platform-tests server should retrieve the modules file relatively to its docroot path
        https://bugs.webkit.org/show_bug.cgi?id=142742

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._install_modules): Compute the modules description file path according wpt server doc root path.

2015-04-06  Commit Queue  <commit-queue@webkit.org>

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

        broke 32 bit build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Use content extensions in MiniBrowser."
        https://bugs.webkit.org/show_bug.cgi?id=143446
        http://trac.webkit.org/changeset/182445

2015-04-06  Sam Weinig  <sam@webkit.org>

        Use content extensions in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=143446

        Reviewed by Alex Christensen.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate showExtensionsManager:]):
        (-[BrowserAppDelegate userContentContoller]):
        * MiniBrowser/mac/ExtensionManagerWindowController.h: Added.
        * MiniBrowser/mac/ExtensionManagerWindowController.m: Added.
        (-[ExtensionManagerWindowController init]):
        (-[ExtensionManagerWindowController windowDidLoad]):
        (-[ExtensionManagerWindowController add:]):
        (-[ExtensionManagerWindowController remove:]):
        * MiniBrowser/mac/ExtensionManagerWindowController.xib: Added.
        * MiniBrowser/mac/MainMenu.xib:

2015-04-06  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] install-dependencies should prefer dnf to yum
        https://bugs.webkit.org/show_bug.cgi?id=143441

        Reviewed by Martin Robinson.

        Test for the existance of dnf before yum, and only try to use yum if dnf does not exist.

        * gtk/install-dependencies:

2015-04-06  Andy Estes  <aestes@apple.com>

        [iOS] 'make clean' fails in Tools/WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=143455

        Reviewed by Dan Bernstein.

        This Makefile adds '-target WebKitTestRunnerApp' to OTHER_OPTIONS during iOS builds, but the top-level
        Makefile.shared adds '-alltargets' for clean builds, and xcodebuild does not allow both -target and -alltargets.

        * WebKitTestRunner/Makefile: Don't add '-target WebKitTestRunerApp' to OTHER_OPTIONS on clean builds.

2015-04-06  Alexey Proskuryakov  <ap@apple.com>

        WebKit1.SetAndUpdateCacheModelPreferencesChangeMix fails on some machines
        https://bugs.webkit.org/show_bug.cgi?id=143450

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm: (TestWebKitAPI::TEST):
        Make sure that the view is actually closed, regardless of anything else that happens beneath.
        Also, removed unnecessary get() calls.

2015-04-03  Alexey Proskuryakov  <ap@apple.com>

        Reduce the dependency on Flash in regression tests
        https://bugs.webkit.org/show_bug.cgi?id=143391

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::decidePolicyForPluginLoad):
        Only allow QuickTime and the test plug-in.

2015-04-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should generate the modules installed dynamically to run wpt tests
        https://bugs.webkit.org/show_bug.cgi?id=142738

        Reviewed by Ryosuke Niwa.

        The test importer can now generate the submodules description file based on information extracted from the corresponding git repository.
        The implementation is done within TestDownloader and it is activated for the WPT repository.
        LayoutTests/imported/w3c/resources/WPTModules is renamed as LayoutTests/imported/w3c/resources/web-platform-tests-modules.json for that reason.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._install_modules): Updated to cope with path as array.
        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._git_submodules_status): Added so that it can be overriden for unit tests.
        (TestDownloader):
        (TestDownloader._git_submodules_description): Computes submodule description.
        (TestDownloader.generate_git_submodules_description): Write submodule description in a file.
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.do_import): Added the possibility to post process the tests.
        (TestImporter):
        (TestImporter.generate_git_submodules_description_for_all_repositories): Enable generating module description file.
        (TestImporter.should_convert_test_harness_links): Updated according new options format.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.import_downloaded_tests): Making use of TestDownloaderMock. 
        (TestImporterTest.import_downloaded_tests.TestDownloaderMock): Added to override submodule status gathering.
        (TestImporterTest.import_downloaded_tests.TestDownloaderMock.__init__):
        (TestImporterTest.import_downloaded_tests.TestDownloaderMock._git_submodules_status):
        (TestImporterTest.test_submodules_generation): Added to check that modules description files works.

2015-04-05  Antti Koivisto  <antti@apple.com>

        Bloom filter should support longer hashes
        https://bugs.webkit.org/show_bug.cgi?id=143419

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WTF/BloomFilter.cpp:
        (TestWebKitAPI::generateRandomDigests):
        (TestWebKitAPI::TEST):

2015-04-03  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests --remote should add libllvmForJSC.so to the bundle on Linux
        https://bugs.webkit.org/show_bug.cgi?id=143372

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2015-04-03  Antti Koivisto  <antti@apple.com>

        Add non-counting bloom filter class
        https://bugs.webkit.org/show_bug.cgi?id=143366

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/BloomFilter.cpp: Added.
        (TestWebKitAPI::generateRandomHashes):
        (TestWebKitAPI::TEST):

2015-04-03  Csaba Osztrogonác  <ossy@webkit.org>

        FTL JIT tests should fail if LLVM library isn't available
        https://bugs.webkit.org/show_bug.cgi?id=143374

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

2015-04-03  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Speedup jhbuild with disable running autogen.sh
        https://bugs.webkit.org/show_bug.cgi?id=143369

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-04-01  Alexey Proskuryakov  <ap@apple.com>

        filter-webkit-build should filter out "created by an unsupported XCDependencyGraph build" lines
        https://bugs.webkit.org/show_bug.cgi?id=143282

        Reviewed by Daniel Bates.

        * Scripts/filter-build-webkit: (shouldIgnoreLine): Do it.

2015-04-01  Alexey Proskuryakov  <ap@apple.com>

        When LayoutTestHelper fails to start, we continue to run the tests, ending up with mysterious failures
        https://bugs.webkit.org/show_bug.cgi?id=143240
        rdar://problem/19990425

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (colorProfileURLForDisplay):
        (saveDisplayColorProfiles):
        Gracefully handle it when the current profile cannot be retrieved, fixing at
        least one case when LayoutTestHelper couldn't start.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):
        (Manager._force_pixel_tests_if_needed):
        * Scripts/webkitpy/port/base.py: (Port.to.start_helper):
        * Scripts/webkitpy/port/mac.py: (MacPort.start_helper):
        Return and check an error from start_helper().

2015-04-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Run test-webkitpy as part of EWS (just like we do on other platforms)
        https://bugs.webkit.org/show_bug.cgi?id=143321

        Reviewed by Alexey Proskuryakov.

        * EWSTools/start-queue-win.sh: Add commands to run 'test-webkitpy' during processing loop.

2015-04-01  Enrica Casucci  <enrica@apple.com>

        Injected bundle messages should be at the page level.
        https://bugs.webkit.org/show_bug.cgi?id=143283

        Reviewed by Alexey Proskuryakov.

        Updating WebKitTestRunner to use the new page level messaging.
        The author of this patch is Tim Horton, I just finished it.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::scheduleAsynchronousClick):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::scheduleAsynchronousKeyDown):
        (WTR::EventSendingController::mouseScrollBy):
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSendingController::continuousMouseScrollBy):
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::setTouchPointRadius):
        (WTR::EventSendingController::touchStart):
        (WTR::EventSendingController::touchMove):
        (WTR::EventSendingController::touchEnd):
        (WTR::EventSendingController::touchCancel):
        (WTR::EventSendingController::clearTouchPoints):
        (WTR::EventSendingController::releaseTouchPoint):
        (WTR::EventSendingController::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::outputText):
        (WTR::InjectedBundle::postNewBeforeUnloadReturnValue):
        (WTR::InjectedBundle::postAddChromeInputField):
        (WTR::InjectedBundle::postRemoveChromeInputField):
        (WTR::InjectedBundle::postFocusWebView):
        (WTR::InjectedBundle::postSetBackingScaleFactor):
        (WTR::InjectedBundle::postSetWindowIsKey):
        (WTR::InjectedBundle::postSimulateWebNotificationClick):
        (WTR::InjectedBundle::postSetAddsVisitedLinks):
        (WTR::InjectedBundle::setGeolocationPermission):
        (WTR::InjectedBundle::setMockGeolocationPosition):
        (WTR::InjectedBundle::setMockGeolocationPositionUnavailableError):
        (WTR::InjectedBundle::setUserMediaPermission):
        (WTR::InjectedBundle::setCustomPolicyDelegate):
        (WTR::InjectedBundle::setHidden):
        (WTR::InjectedBundle::setCacheModel):
        (WTR::InjectedBundle::shouldProcessWorkQueue):
        (WTR::InjectedBundle::processWorkQueue):
        (WTR::InjectedBundle::queueBackNavigation):
        (WTR::InjectedBundle::queueForwardNavigation):
        (WTR::InjectedBundle::queueLoad):
        (WTR::InjectedBundle::queueLoadHTMLString):
        (WTR::InjectedBundle::queueReload):
        (WTR::InjectedBundle::queueLoadingScript):
        (WTR::InjectedBundle::queueNonLoadingScript):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setHandlesAuthenticationChallenges):
        (WTR::TestRunner::setAuthenticationUsername):
        (WTR::TestRunner::setAuthenticationPassword):
        (WTR::TestRunner::secureEventInputIsEnabled):
        (WTR::TestRunner::setBlockAllPlugins):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didReceivePageMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2015-04-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182174 and r182177.
        https://bugs.webkit.org/show_bug.cgi?id=143314

        Try to correct EWS failures (Requested by bfulgham on
        #webkit).

        Reverted changesets:

        "Python SCM should be able to retrieve untracked files"
        https://bugs.webkit.org/show_bug.cgi?id=143135
        http://trac.webkit.org/changeset/182174

        "[buildbot] clean-build script should remove untracked files
        and revert local changes too"
        https://bugs.webkit.org/show_bug.cgi?id=142400
        http://trac.webkit.org/changeset/182177

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Properly handle regexes that match everything.
        https://bugs.webkit.org/show_bug.cgi?id=143281

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::makeBackend):
        (TestWebKitAPI::TEST_F):
        Removed duplicate code and added test.

2015-03-31  Benjamin Poulain  <bpoulain@apple.com>

        Content Extensions: split the state machines to minimize prefix states
        https://bugs.webkit.org/show_bug.cgi?id=143253

        Reviewed by Alex Christensen.

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

2015-03-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up Identifier factories to clarify the meaning of StringImpl*
        https://bugs.webkit.org/show_bug.cgi?id=143146

        Reviewed by Filip Pizlo.

        Simple API tests for StringImpl are added.

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

2015-03-31  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Add AArch64 builder and tester bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=143092

        Reviewed by Gyuyoung Kim.

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

2015-03-31  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.

2015-03-31  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files
        https://bugs.webkit.org/show_bug.cgi?id=143135

        Reviewed by Ryosuke Niwa.

        This patch introduces SCM.untracked_files to retrieve a list of untracked files.
        Ignored files may be included or not in this list according boolean passed to the function.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.untracked_files):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.untracked_files):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_untracked_files):
        (test_untracked_files):
        (GitSVNTest.test_untracked_files):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.untracked_files):

2015-03-30  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Correctly handle regular expressions matching everything
        https://bugs.webkit.org/show_bug.cgi?id=143235

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::checkCompilerError):
        (TestWebKitAPI::TEST_F):
        Test ContentExtensionErrors.

2015-03-30  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should set NSWindowDisplayWithRunLoopObserver
        https://bugs.webkit.org/show_bug.cgi?id=143241
        rdar://problem/20351297

        Reviewed by Mark Lam.

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

2015-03-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake][EFL] Remove redundant library link and include path
        https://bugs.webkit.org/show_bug.cgi?id=143221

        Reviewed by Csaba Osztrogonác.

        * ImageDiff/PlatformEfl.cmake: Remove unnecessary library link and include path.

2015-03-30  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Flesh out the UserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=143123

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm: Added.
        Add tests for _WKUserContentExtensionStore.

2015-03-30  Marcos Chavarría Teijeiro  <chavarria1991@gmail.com>

        Update install-dependencies Fedora packages after r181624
        https://bugs.webkit.org/show_bug.cgi?id=143215

        Add json-glib, libv4l, openssl and pulseaudio development packages to
        the Fedora list providing we need them to build WebKit dependencies
        for this distribution.

        Reviewed by Philippe Normand.

        * gtk/install-dependencies:

2015-03-30  Commit Queue  <commit-queue@webkit.org>

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

        problem with syntax (Requested by youenn on #webkit).

        Reverted changeset:

        "[buildbot] clean-build script should remove untracked files
        and revert local changes too"
        https://bugs.webkit.org/show_bug.cgi?id=142400
        http://trac.webkit.org/changeset/182119

2015-03-30  Benjamin Poulain  <benjamin@webkit.org>

        Start the features.json files
        https://bugs.webkit.org/show_bug.cgi?id=143207

        Reviewed by Darin Adler.

        I kept the style checking light. We'll have to figure
        what is the best format for each field.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONContributorsChecker.check):
        (JSONFeaturesChecker):
        (JSONFeaturesChecker.check):

2015-03-29  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 deleting SCM untracked files and reverting changes for tracked files.

        * BuildSlaveSupport/clean-build:
        (main): Adding call to Tools/Scripts/clean-webkit.
        * Scripts/clean-webkit: Added.
        (main): Removes untracked and changed files.
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.untracked_files): Retrieves GIT untracked files.
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.untracked_files): Retrieves SVN untracked files.
        (SCM):
        (SCM.discard_untracked_files): Deletes untracked files/folders.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_untracked_files): Unit testing for untracked files.
        (test_untracked_files):
        (GitSVNTest.test_untracked_files):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.untracked_files):

2015-03-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake] Remove unnecessary INCLUDE_IF_EXISTS macro 
        https://bugs.webkit.org/show_bug.cgi?id=143138

        Reviewed by Csaba Osztrogonác.

        INCLUDE_IF_EXISTS isn't used except for 2 places. However those uses can
        be replaced with WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS.

        * ImageDiff/CMakeLists.txt:
        Use WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS() instead of INCLUDE_IF_EXISTS.
        * WebKitTestRunner/CMakeLists.txt: ditto.

2015-03-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Support building WTF on Windows without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=143084

        Reviewed by Brent Fulgham.

        Windows without Cygwin doesn't have curl, unzip, or grep. Luckily, Perl does all of these things.
        This patch also migrates to using File::Spec->catfile() for directory separators.

        * Scripts/update-webkit-dependency:
        (wanted):
        * Scripts/update-webkit-support-libs:
        (wanted):
        (downloadExpectedVersionNumber):
        (zipFileVersion):
        (toUnixPath): Deleted.
        * Scripts/webkitdirs.pm:
        (determineSourceDir):
        (windowsSourceSourceDir):
        (windowsLibrariesDir):
        (windowsOutputDir):
        (checkInstalledTools):
        (buildVisualStudioProject):

2015-03-27  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo bot.
        https://bugs.webkit.org/show_bug.cgi?id=143086

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject):
        (runSvnUpdateAndResolveChangeLogs):
        Use ActivePerl-friendly perl.

2015-03-27  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r182059 to fix the EFL build.

        * TestWebKitAPI/CMakeLists.txt:

2015-03-26  Alexey Proskuryakov  <ap@apple.com>

        Layout test results URL loads in WK1 but not WK2 minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=143117

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]): Fix this, international domain names, and
        everything.
        (-[WK2BrowserWindowController updateTextFieldFromURL:]): Ditto.

2015-03-26  Jer Noble  <jer.noble@apple.com>

        Add --allowed-host support to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=142938

        Reviewed by Brent Fulgham.

        Accept --allowed-host arguments from run-webkit-tests and pass them through to
        DumpRenderTree and WebKitTestRunner.

        Drive-by fix: Depending on the value of the --layout-test-dir parameter, layout test results
        are placed in the wrong location. The argument is compared with each tests's path, and if a
        relative path or a path with '..' was used, results are placed alongside the test. Take the
        absolute path of the --layout-test-dir argument, collapsing path components like '..'.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.allowed_hosts):
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):

2015-03-26  Jer Noble  <jer.noble@apple.com>

        [Mac] Add an --allowed-host argument to DRT and WKTR to allow tests to connect to non-localhost servers
        https://bugs.webkit.org/show_bug.cgi?id=142931

        Reviewed by Brent Fulgham.

        Currently, both DRT and WKTR will refuse to allow network connections to non-localhost servers
        over HTTP/HTTPS. For certain testing scenarios, however, it would be useful if both DRT and
        WKTR could be allowed to make HTTP/HTTPS connections to certain, specific servers defined at
        runtime.

        To allow this, add an optional argument to DRT and WKTR, --allowed-host, which will add the specified
        hostname to a whitelist; requests to these hosts will allowed to proceed normally.

        Drive-by fix: in InjectedBundlePage::willSendRequestForFrame, we get the top loading frame from the
        injected bundle. But after the main resource load completes, the bundle nulls out it's pointer to the
        top loading frame, which causes a subsequent crash when further resources are requested. Instead, get
        the top loading frame from the page, as we do elsewhere in this class.

        * DumpRenderTree/TestRunner.h:
        (TestRunner::allowedHosts):
        (TestRunner::setAllowedHosts):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (runTest):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (isAllowedHost):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::isAllowedHost):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::isAllowedHost):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionAllowedHost):
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:

2015-03-26  Brady Eidson  <beidson@apple.com>

        Apply ContentExtension actions after redirects.
        <rdar://problem/20062613> and https://bugs.webkit.org/show_bug.cgi?id=143055

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame): Dump the fact that the load error is kWKErrorCodeCannotShowURL
          which is specifically interesting to a new test.

2015-03-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Disable building libseccomp on AArch64
        https://bugs.webkit.org/show_bug.cgi?id=143094

        Reviewed by Gyuyoung Kim.

        * efl/jhbuildrc:

2015-03-26  Csaba Osztrogonác  <ossy@webkit.org>

        [jhbuild] git should use only 1 thread for cloning jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=143095

        Reviewed by Gyuyoung Kim.

        * jhbuild/jhbuild-wrapper:
        (clone_jhbuild):

2015-03-25  Joseph Pecoraro  <pecoraro@apple.com>

        Update prepare-ChangeLog to work with ES6 Class syntax
        https://bugs.webkit.org/show_bug.cgi?id=143069

        Reviewed by Timothy Hatcher.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_javascript):
        Better handle ES6 Class syntax.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests.js:
        (BaseClass):
        (DerivedClass):
        (DerivedClass.staticMethod):
        (DerivedClass.prototype.method.nestedFunctionInsideMethod):
        (DerivedClass.prototype.method):
        (DerivedClass.prototype.get getter):
        (namespace.MyClass):
        (namespace.MyClass.staticMethod):
        (namespace.MyClass.prototype.method.nestedFunctionInsideMethod):
        (namespace.MyClass.prototype.method):
        (namespace.MyClass.prototype.get getter):
        Proof!

2015-03-25  Filip Pizlo  <fpizlo@apple.com>

        Use JITCompilationCanFail in more places, and make the fail path of JITCompilationMustSucceed a crash instead of attempting GC
        https://bugs.webkit.org/show_bug.cgi?id=142993

        Reviewed by Mark Lam.
        
        Bunch of support for testing executable allocation failure.

        * Scripts/jsc-stress-test-helpers/js-executable-allocation-fuzz: Added.
        (fail):
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:

2015-03-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix Windows build from r181977.

        Unreviewed.

        * Scripts/update-webkit-dependency:

2015-03-25  Sam Weinig  <sam@webkit.org>

        Address additional review feedback from https://bugs.webkit.org/show_bug.cgi?id=143059.

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

2015-03-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate update-webkit for Windows to not require Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=143040

        Reviewed by Brent Fulgham.

        * Scripts/update-webkit-dependency:
        (wanted):
        (toUnixPath): Deleted.
        * Scripts/webkitdirs.pm:
        (fontExists):
        (checkInstalledTools):
        (setupAppleWinEnv):

2015-03-25  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Convert content extension compiling to return error codes and write its output using a client
        https://bugs.webkit.org/show_bug.cgi?id=143059

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter):
        Update for new interface of compileRuleList().

2015-03-25  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add multi-DFA compiling and interpreting.
        https://bugs.webkit.org/show_bug.cgi?id=143010

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):
        Add some tests for ignore-previous-rules and large rulesets.

2015-03-25  Alexey Proskuryakov  <ap@apple.com>

        Mavericks WK1 still runs JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=143035

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Bring Mavericks WK1 in line
        with other bots.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Updated the tests
        accordingly.

2015-03-25  Commit Queue  <commit-queue@webkit.org>

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

        The test fails most of the time on bots (Requested by ap on
        #webkit).

        Reverted changeset:

        "[Content Extensions] Add multi-DFA compiling and
        interpreting."
        https://bugs.webkit.org/show_bug.cgi?id=143010
        http://trac.webkit.org/changeset/181932

2015-03-24  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add multi-DFA compiling and interpreting.
        https://bugs.webkit.org/show_bug.cgi?id=143010

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):
        Add some tests for ignore-previous-rules and large rulesets.

2015-03-24  Benjamin Poulain  <bpoulain@apple.com>

        Make URL filter patterns matching consistent and add a simple canonicalization step
        https://bugs.webkit.org/show_bug.cgi?id=142998

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

2015-03-24  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Add OpenWebRTC in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=142778

        Reviewed by Gyuyoung Kim.

        Original patch by Philippe Normand <pnormand@igalia.com>

        * efl/install-dependencies: Dependencies for OpenWebRTC.
        * efl/jhbuild.modules: build OpenWebRTC, libusrsctp, libnice and
        the openwebrtc gst plugins.

2015-03-23  Brent Fulgham  <bfulgham@apple.com>

        Regression(r181257): WTF_WorkQueue.Simple is flaky
        https://bugs.webkit.org/show_bug.cgi?id=142560

        Remove the check that the refCount has returned to one after the
        individual tasks have completed. It's too nondeterministic when
        the reference count will be reduced.

        Reviewed by Alexey Proskuryakov

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST): Remove test that refCount is back to 1.

2015-03-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake][EFL] Put failure API test excutables into failure directory
        https://bugs.webkit.org/show_bug.cgi?id=142965

        Reviewed by Csaba Osztrogonác.

        Move failing WK2 API test executables to *bin/TestWebKitAPI/WebKit2/failure* directory.

        * TestWebKitAPI/CMakeLists.txt: Fix a typo. Change *testBaseName* with *testName*.
        * TestWebKitAPI/PlatformEfl.cmake: Additionally remove unnecessary SHARED_CORE and comment for SeccompFilters test.

2015-03-22  Benjamin Poulain  <benjamin@webkit.org>

        CSS Selectors: fix attribute case-insensitive matching of Contain and List
        https://bugs.webkit.org/show_bug.cgi?id=142932

        Reviewed by Darin Adler.

        Add tests for the new features and fix some existing tests using the 
        stringFromUTF8() utility recently added by Dhi.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::stringFromUTF8):
        * TestWebKitAPI/Tests/WTF/StringView.cpp:

2015-03-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] install-dependencies should install orc
        https://bugs.webkit.org/show_bug.cgi?id=142955

        Reviewed by Martin Robinson.

        Install orc, needed by openwebrtc

        * gtk/install-dependencies:

2015-03-22  Benjamin Poulain  <bpoulain@apple.com>

        Detect when url filter pattern with groups match the empty string
        https://bugs.webkit.org/show_bug.cgi?id=142930

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

2015-03-22  Anders Carlsson  <andersca@apple.com>

        _WKWebsiteDataStore should clear WebSQL databases
        https://bugs.webkit.org/show_bug.cgi?id=142947

        Reviewed by Sam Weinig.

        Add a variable that keeps track of the types of data we want to operate on, for easier debugging.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetchWebsiteData:]):
        (-[WK2BrowserWindowController fetchAndClearWebsiteData:]):
        (-[WK2BrowserWindowController clearWebsiteData:]):

2015-03-20  Mark Hahnenberg  <mhahnenb@gmail.com>

        GCTimer should know keep track of nested GC phases
        https://bugs.webkit.org/show_bug.cgi?id=142675

        Reviewed by Darin Adler.

        Adds a tool to aid in parsing the GC phase timing output into a
        tree-like structure based on the parent-child relationships
        of nested GC phases.

        * Scripts/parse-gc-phase-timings: Added.
        (Timing):
        (Timing.__init__):
        (Timing.__unicode__):
        (Timing.__str__):
        (Timing.__repr__):
        (parse_input):
        (print_timing_node):
        (print_timing_tree):
        (link_parents):
        (main):

2015-03-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] Temporarily turn of EWS Windows tests while I debug the test failure.

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

2015-03-20  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] Fix flakey failures due to unstable googlecode repository
        https://bugs.webkit.org/show_bug.cgi?id=142867

        Rubber-stamped by Csaba Osztrogon.

        * gtk/jhbuild.modules: Use Ossy's libusrsctp Github fork. Also use
        a fixed revision for the openwebrtc-gst-plugins.

2015-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix. Don't try to report stats for all benchmarks.
        Just report the geometric mean of preferred means.

        * Scripts/run-jsc-benchmarks:

2015-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-jsc-benchmarks should only report preferred mean
        https://bugs.webkit.org/show_bug.cgi?id=142874

        Reviewed by Geoffrey Garen.

        Just collect statistics for the preferred mean.

        * Scripts/run-jsc-benchmarks:

2015-03-19  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Test regular expression parse failures.
        https://bugs.webkit.org/show_bug.cgi?id=142872

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testPatternStatus):
        (TestWebKitAPI::TEST_F):
        Added tests for each parsing status.

2015-03-19  Alex Christensen  <achristensen@webkit.org>

        Fix API tests after r181754.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequest):

2015-03-19  Brady Eidson  <beidson@apple.com>

        Part of content extensions should apply css selectors
        https://bugs.webkit.org/show_bug.cgi?id=142604

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):

2015-03-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Activate tests on EWS
        https://bugs.webkit.org/show_bug.cgi?id=142850

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/ews.json: Add me as
        the EWS bot watcher, and activate tests.

2015-03-19  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Fix inspector userinterface related incremental build issue
        https://bugs.webkit.org/show_bug.cgi?id=142849

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache):

2015-03-18  Alex Christensen  <achristensen@webkit.org>

        [ContentExtensions] Prepare for compiling stylesheets of selectors to be used on every page.
        https://bugs.webkit.org/show_bug.cgi?id=142799

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testPattern):
        (TestWebKitAPI::TEST_F):
        Start testing regex failures.

2015-03-18  Dhi Aurrahman  <diorahman@rockybars.com>

        Fix StringView typos after r181525 and r181558
        https://bugs.webkit.org/show_bug.cgi?id=142772

        Reviewed by Darin Adler.

        Add some tests in [1] to cover the StringView::startsWith, 
        StringView::startsWithIgnoringASCIICase, StringView::endsWith and 
        StringView::endsWithIgnoringASCIICase implementations.

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

2015-03-18  Dana Burkart  <dburkart@apple.com>

        Remove extraneous import to fix the build.

        Unreviewed.

        * Scripts/webkitpy/port/driver.py:

2015-03-18  Dana Burkart  <dburkart@apple.com>

        ASAN_OPTIONS=allocator_may_return_null=1 needs to be set 
        https://bugs.webkit.org/show_bug.cgi?id=142547

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):

2015-03-18  Alexey Proskuryakov  <ap@apple.com>

        Tweak how AppleSystemFontOSSubversion default is added
        https://bugs.webkit.org/show_bug.cgi?id=142835

        Reviewed by Dan Bernstein.

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

2015-03-18  Dan Bernstein  <mitz@apple.com>

        prepare-ChangeLog doesn't understand C string literals split across multiple lines with \
        https://bugs.webkit.org/show_bug.cgi?id=142815

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): If the line ends with a backslash instead of a matching
        quotation mark, use new variable $quotation_mark to remember what we are looking for, and
        keep consuming the quoted text until the matching quotation mark is reached. Emit the
        warning only if a line ends without a backslash before the matching quotation mark was found.

2015-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused "preprocessor" parameter to sub-CodeGenerators
        https://bugs.webkit.org/show_bug.cgi?id=142793

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (new):

2015-03-18  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump gstreamer version to 1.4.4
        https://bugs.webkit.org/show_bug.cgi?id=142782

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules:
        * efl/patches/gst-libav.patch:
        * efl/patches/gst-plugins-bad-remove-gnustep-support.patch: Added.
        * efl/patches/gst-prevent-neon-check-in-configure-from-passing-under-aarch64.patch: Removed.

2015-03-17  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):

2015-03-17  Dean Jackson  <dino@apple.com>

        check-webkit-style should allow "bool a : 1"
        https://bugs.webkit.org/show_bug.cgi?id=142794

        Reviewed by Brent Fulgham.

        We should allow member bitfields of the form:

        bool m_var : 1;

        It seems that Visual Studio 8 was the last compiler that
        wasn't happy about not using unsigned here. We already have
        about 500 cases (in WebCore) where people were ignoring this rule.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Allow "bool".
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Add tests.
        (CppStyleTest.test_enum_bitfields):
        (CppStyleTest.test_plain_integral_bitfields):

2015-03-17  Benjamin Poulain  <bpoulain@apple.com>

        Compile character ranges targeting the same state as range check in the bytecode
        https://bugs.webkit.org/show_bug.cgi?id=142759

        Reviewed by Alex Christensen.

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

2015-03-17  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test parser and converter should use test importer host
        https://bugs.webkit.org/show_bug.cgi?id=142729

        Reviewed by Bem Jones-Bey.

        When instantiated by TestImporter, TestParser and TestConverter are now using the same host.
        This enables adding more TestImporter unit testing.
        This patch also ensures that the git object instantiated by TestDownloader is using the
        same Executive and FileSystem object as TestDownloader, again to enable TestImporter/TestDownloader unit testing.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.copytree): Fixes implementation as it creates a runtime error.
        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.git): Set the executive of the git object to the one of TestDownloader. Refactoring in a new git function for future reuse.
        (TestDownloader.checkout_test_repository): Making use of the new git function.
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests): Adding host as parameter to the parser.
        (TestImporter.import_tests): Adding host as parameter to the converter.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.create_test_download_importer): Creating a test downloader mock, to be reused by other tests.
        (TestImporterTest):
        (TestImporterTest.test_harnesslinks_conversion): Adding test to check that test harness links are converted for CSS tests but not WPT tests. 
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.__init__): Adding host as parameter constructor.

2015-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitDOM objects leaking
        https://bugs.webkit.org/show_bug.cgi?id=118788

        Reviewed by Darin Adler and Sergio Villar Senin.

        Update DOMObjectCache unit test to check that DOM objects are also
        released when new contents are loaded in the web view, and the old
        document is detached from the frame.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp:
        (testWebKitDOMObjectCache):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (runTest):

2015-03-17  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer default import folder should be LayoutTests/imported/w3c
        https://bugs.webkit.org/show_bug.cgi?id=142728

        Reviewed by Bem Jones-Bey.

        * Scripts/webkitpy/w3c/test_importer.py:
        (parse_args): Updating the default destination option value to 'imported/w3c'.

2015-03-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] basic OpenWebRTC build support
        https://bugs.webkit.org/show_bug.cgi?id=142393

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Add OpenWebRTC and its dependencies. This
        is not the upstream OpenWebRTC repository. This temporary fork
        contains a few patches needed by WebKit for audio/video rendering.

2015-03-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake][EFL] Build test tools only for developer mode
        https://bugs.webkit.org/show_bug.cgi?id=142761

        Reviewed by Csaba Osztrogonác.

        Do not build EFL MiniBrowser, WebKitTestRunner, and ImageDiff on production mode.

        * CMakeLists.txt:

2015-03-17  Joseph Pecoraro  <pecoraro@apple.com>

        Remove never used "useLayerOnTop" bindings generator argument
        https://bugs.webkit.org/show_bug.cgi?id=142773

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (new):

2015-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Enable ES6 classes by default
        https://bugs.webkit.org/show_bug.cgi?id=142774

        Reviewed by Gavin Barraclough.

        * Scripts/webkitperl/FeatureList.pm:

2015-03-16  Alexey Proskuryakov  <ap@apple.com>

        Fix webkitpy tests after r181585.

        Looks like "me" cannot be anyone's email, it's a special case.

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

2015-03-16  Alexey Proskuryakov  <ap@apple.com>

        Add tolerance to WebAudio tests
        https://bugs.webkit.org/show_bug.cgi?id=142676

        Reviewed by Tim Horton.

        * Scripts/webkitpy/common/wavediff.py: Added. Based on Jer Noble's work.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.create_audio_diff_and_write_result):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureAudio.write_failure):
        * Scripts/webkitpy/port/base.py:
        (Port.do_audio_results_differ):
        Diff audio failures.

        * Scripts/webkitpy/port/test.py: Added a test for the tolerance, fixed existing
        tests to use real parseable WAV data, and got rid of base64, which there didn't
        seem to have been any reason for.

2015-03-16  Alexey Proskuryakov  <ap@apple.com>

        [Mac] fast/forms/text-control-intrinsic-widths.html fails when MS Office is installed
        https://bugs.webkit.org/show_bug.cgi?id=142720

        Reviewed by Myles C. Maxfield.

        Activate system copies of Microsoft fonts for the current process, thus overriding
        any other ones that could be preferred by the system otherwise.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateSystemCoreWebFonts):
        (adjustFonts):
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::activateSystemCoreWebFonts):
        (WTR::activateFonts):

2015-03-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Created Streams API watchlist
        https://bugs.webkit.org/show_bug.cgi?id=142684

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/common/config/watchlist: Created StreamsAPI
        watchlist and added Benjamin, Youenn and me to it.

2015-03-15  Benjamin Poulain  <benjamin@webkit.org>

        CSS: fix the case-insensitive matching of the attribute selectors Begin, End and Hyphen
        https://bugs.webkit.org/show_bug.cgi?id=142715

        Reviewed by Brent Fulgham.

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

2015-03-15  Benjamin Poulain  <bpoulain@apple.com>

        Change the exact attribute matching to be ASCII case-insensitive
        https://bugs.webkit.org/show_bug.cgi?id=142609

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        * TestWebKitAPI/Tests/WTF/StringView.cpp:

2015-03-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WebKit test infrastructure should automate the process of cloning W3C test suite and importing tests from it
        https://bugs.webkit.org/show_bug.cgi?id=134764

        Reviewed by Ryosuke Niwa.

        TestDownloader is introduced to download W3C tests from the official
        W3C tests repositories (https://github.com/w3c/web-platform-tests.git
        and https://github.com/w3c/csswg-test.git).
        TestDownloader clones the repositories and checkouts revisions of the tests
        defined in LayoutTests/imported/w3c/resources/TestRepositories.

        Similarly to https://codereview.chromium.org/148173016,
        TestDownloader copies part of the files based on the rules
        defined in LayoutTests/imported/w3c/resources/ImportExpectations.

        TestDownloader is used by TestImporter when no source directory is provided.

        * Scripts/webkitpy/w3c/test_downloader.py: Added.
        (TestDownloader):
        (TestDownloader.default_options):
        (TestDownloader.load_test_repositories):
        (TestDownloader.__init__):
        (TestDownloader.checkout_test_repository):
        (TestDownloader._init_paths_from_expectations):
        (TestDownloader._add_test_suite_paths):
        (TestDownloader._empty_directory):
        (TestDownloader.copy_tests):
        (TestDownloader.download_tests):
        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (parse_args):
        (TestImporter.__init__):
        (TestImporter.do_import):
        (TestImporter.test_downloader):
        (TestImporter.find_importable_tests.should_keep_subdir):
        (TestImporter.should_convert_test_harness_links):
        (TestImporter.import_tests):
        (TestImporter.write_import_log):

2015-03-12  Alexey Proskuryakov  <ap@apple.com>

        [Mavericks] Test snapshots are 1600x1200 on Retina devices
        https://bugs.webkit.org/show_bug.cgi?id=142630

        Reviewed by Tim Horton.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm: (WTR::PlatformWebView::windowSnapshotImage):
        Removed an ifdef that disabled the fix on Mavericks.

2015-03-12  Csaba Osztrogonác  <ossy@webkit.org>

        Remove isWK2 cruft from webkitdirs.pm after r170426
        https://bugs.webkit.org/show_bug.cgi?id=142618

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm:
        (isWK2): Deleted.

2015-03-12  Alexey Proskuryakov  <ap@apple.com>

        testRunner.setAlwaysAcceptCookies does not work with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=138687

        Reviewed by Carlos Garcia Campos.

        Always change cookie policy from UI process, as changing it from WebProcess doesn't
        affect other processes.

        The implementation is imperfect, because the change happens asynchronously, but I
        don't expect it to be a problem in practice.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAlwaysAcceptCookies):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2015-03-12  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Enable building EFL 1.13 with NEON support
        https://bugs.webkit.org/show_bug.cgi?id=142619

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-03-11  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add resource type and load type triggers.
        https://bugs.webkit.org/show_bug.cgi?id=142422

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::mainDocumentRequest):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::testURL): Deleted.

2015-03-10  Sam Weinig  <sam@webkit.org>

        Allow adding a button in input elements for auto fill related functionality
        <rdar://problem/19782066>
        https://bugs.webkit.org/show_bug.cgi?id=142564

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        Update for new callback.

2015-03-11  Benjamin Poulain  <bpoulain@apple.com>

        Add basic support for BOL and EOL assertions to the URL Filter parser
        https://bugs.webkit.org/show_bug.cgi?id=142568

        Reviewed by Alex Christensen.

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

2015-03-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for handling TLS errors to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=142576

        Reviewed by Sergio Villar Senin.

        It's useful for testing TLS errors handling itself, but also to
        allow ignoring TLS errors when testing.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewLoadFailedWithTLSerrors):
        (browserWindowConstructed):

2015-03-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Use out-of-band messaging for RenderBox::firstLineBaseline() and RenderBox::inlineBlockBaseline()
        https://bugs.webkit.org/show_bug.cgi?id=142569

        Reviewed by David Hyatt.

        Test Optional::valueOrCompute().

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

2015-03-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add an option to enable MiniBrowser for non developer builds and always install it
        https://bugs.webkit.org/show_bug.cgi?id=126688

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Build testing tools only for developer builds,
        but MiniBrowser when ENABLE_MINIBROWSER option is ON.
        * MiniBrowser/gtk/CMakeLists.txt: Only add
        -DWEBKIT_INJECTED_BUNDLE_PATH to the build for developer builds,
        and add a rule to install the MiniBrowser.
        * MiniBrowser/gtk/main.c:
        (main): Only set WEBKIT_INJECTED_BUNDLE_PATH env var for developer
        builds.

2015-03-11  Brent Fulgham  <bfulgham@apple.com>

        Add some DateMath tests to TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=142565

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/CMakeLists.txt: Add new DateMath.cpp file.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj: Ditto.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters: Ditto.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto."
        * TestWebKitAPI/Tests/WTF/DateMath.cpp: Added.

2015-03-10  Brent Fulgham  <bfulgham@apple.com>

        Regression(r181257): WTF_WorkQueue.Simple is flaky
        https://bugs.webkit.org/show_bug.cgi?id=142560

        Unreviewed attempt to improve test stability.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp: Check the reference count for
        the WorkQueue a little later to redue flakiness.

2015-03-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate from SystemUIFontSelect to AppleSystemFontOSSubversion
        https://bugs.webkit.org/show_bug.cgi?id=142555

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

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

        Use unsigned for HashSet size.
        https://bugs.webkit.org/show_bug.cgi?id=142518

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::testInitialCapacity):
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::TEST):

2015-03-10  Daniel Bates  <dabates@apple.com>

        [iOS] Add WebKitSystemInterface for iOS 8.2
        https://bugs.webkit.org/show_bug.cgi?id=142505

        Rubber-stamped by Anders Carlsson.

        Make copy-webkitlibraries-to-product-directory install libWebKitSystemInterfaceIOS{Device, Simulator}8.2.a.
        I inadvertently forgot to add libWebKitSystemInterfaceIOS{Device, Simulator}8.2.a to script
        copy-webkitlibraries-to-product-directory in r181286.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-03-10  Benjamin Poulain  <bpoulain@apple.com>

        Extend URL filter's Term definition to support groups/subpatterns
        https://bugs.webkit.org/show_bug.cgi?id=142519

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testURL):

2015-03-06  Jer Noble  <jer.noble@apple.com>

        Add an option to run-webkit-tests to override the LayoutTests/ directory
        https://bugs.webkit.org/show_bug.cgi?id=142418

        Reviewed by David Kilzer.

        Add an arugment to run-webkit-tests which, when set, overrides the port's default LayoutTests
        directory. The base port will parse the options during initialization and store the override
        location if present. layout_tests_dir() will return this overridden location if set.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.layout_tests_dir):

2015-03-09  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Enable WorkQueue tests for CMake ports
        https://bugs.webkit.org/show_bug.cgi?id=142473

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt: Add the WorkQueue tests source file to
        the list of source files.
        * Tools/TestWebKitAPI/PlatformEfl.cmake: Add the DispatchQueueEfl directory
        to the list of include directories for EFL.

2015-03-09  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix timeouts on iOS Simulator layout tests

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run): Most layout test runs on iOS
        Simulator end after the first 50 tests time out.  Some analysis
        this past weekend shows that the 'Booted' status in the output
        of `xcrun simctl list` is not sufficient (and watching the test
        run shows that SpringBoard hasn't fully started to the point
        where it's displaying icons on the home screen).  The workaround
        until we have a better fix is to add an arbitrary timeout to let
        SpringBoard finish launching.  In practice, 15 seconds is
        probably enough, but 30 seconds should nearly always work.

2015-03-09  Per Arne Vollan  <peavo@outlook.com>

        Unreviewed. Add myself as a committer.

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

2015-03-09  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix WTF_WorkQueue.TwoQueues timeout test failure

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST): Change delay from 50ns to 50ms, and add
        an expectation that will fail if we hit the race condition.
        This test is inherently racy and will deadlock if the first job
        for queue2 takes the mutex lock before the second job for
        queue1.

2015-03-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] WTF::WorkQueue does not balance ref/deref properly
        https://bugs.webkit.org/show_bug.cgi?id=142471

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST): Check that the refcount is correct.

2015-03-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Do not show passing test result on output of EFL layout test
        https://bugs.webkit.org/show_bug.cgi?id=142380

        Reviewed by Darin Adler.

        To show passing tests has caused inconvenience when we detect problem tests
        in output of layout test. So this patch applies '--debug-rwt-logging' except for EFL port
        in order not to show passing tests in the output of EFL layout test.

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

2015-03-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST): Remove two unused variables.

2015-03-08  Brent Fulgham  <bfulgham@apple.com>

        Add some WorkQueue tests to TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=142447

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp: Added.
        (TestWebKitAPI::simpleTest):
        (TestWebKitAPI::longTest):
        (TestWebKitAPI::thirdTest):
        (TestWebKitAPI::finishedTests):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::longTest2):

2015-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove willDestroyFrame in WKBundlePageLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=142389

        Reviewed by Anders Carlsson.

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

2015-03-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Increase TestWebKitAPI Test Coverage[Win] Increase TestWebKitAPI Test Coverage
        https://bugs.webkit.org/show_bug.cgi?id=142433

        Reviewed by Darin Adler.

        Include more TestWebKitAPI tests when building for Windows. Also
        fix a build error in MetaAllocator.cpp caused by one of the
        Microsoft headers #defining 'small'.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:

2015-03-06  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Move compiling of content extensions to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=142402

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: Copied from Tools/TestWebKitAPI/Tests/WebCore/ContentFilter.cpp.
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::InMemoryCompiledContentExtension::~InMemoryCompiledContentExtension):
        (TestWebKitAPI::InMemoryCompiledContentExtension::InMemoryCompiledContentExtension):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/ContentFilter.cpp: Removed.
        Update test for new name (ContentFilter -> ContentExtensions) and API (CompiledContentExtension
        is now abstract).

2015-03-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct Windows build.

        Rubberstamped by Michael Saboff

        * win/AssembleBuildLogs/AssembleLogs.cmd: Correct cut/paste error
        in the GOTO labels.

2015-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/sync-request-on-max-conns might fail after finished
        https://bugs.webkit.org/show_bug.cgi?id=142385

        Reviewed by Sergio Villar Senin.

        Use stack allocated GMainLoopSources to make sure they are
        cancelled automatically if the test finishes before they have
        been processed.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebViewSyncRequestOnMaxConns):

2015-03-06  Csaba Osztrogonác  <ossy@webkit.org>

        Remove Mountain Lion libraries since ML isn't supported
        https://bugs.webkit.org/show_bug.cgi?id=142332

        Reviewed by Darin Adler.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-03-06  Carlos Alberto Lopez Perez <clopez@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Layout tests imported/w3c/web-platform-tests certificates should not be tracked on WebKit VCS
        https://bugs.webkit.org/show_bug.cgi?id=142083

        Reviewed by Simon Fraser.

        Modifying on the fly wpt config.json to set the directory where to generate/read certificates as a subfolder of the layout test results folder.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files):

2015-03-06  Csaba Osztrogonác  <ossy@webkit.org>

        setup-git-clone fails due to the failure to download python-irclib-0.4.8
        https://bugs.webkit.org/show_bug.cgi?id=141946

        Reviewed by Ryosuke Niwa.

        Check in ircbot.py and irclib.py to avoid network problems in the future.

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_irc): Deleted.
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports):
        * Scripts/webkitpy/thirdparty/irc/__init__.py: Added.
        * Scripts/webkitpy/thirdparty/irc/ircbot.py: Added.
        * Scripts/webkitpy/thirdparty/irc/irclib.py: Added.

2015-03-06  David Kilzer  <ddkilzer@apple.com>

        Dashboard: Perf bot status is missing for Apple {Mavericks,Yosemite} Release builds

        See also fix to config.json in r181097.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Add missing "WK2" to the names of the perf
        bots.

2015-03-06  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests should determine the architecture from ELF binaries
        https://bugs.webkit.org/show_bug.cgi?id=142335

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2015-03-05  David Kilzer  <ddkilzer@apple.com>

        [iOS] TestExpectations for ios-simulator-wk2 should fall back to 'wk2' after 'ios-simulator'
        <http://webkit.org/b/142226>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_baseline_search_path): Switch the
        TestExpectations order of ios-simulator-wk2 from this:
          ios-simulator-wk2, wk2, ios-simulator
        To this:
          ios-simulator-wk2, ios-simualtor, wk2

2015-03-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Provide tiered logging from MSBuild -- Errors on top, Warnings after
        https://bugs.webkit.org/show_bug.cgi?id=142370

        Reviewed by Dean Jackson.

        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject): Tell MSBuild to output log files to two separate
        logs, one for warnings, the other for errors.
        * win/AssembleBuildLogs/AssembleLogs.cmd: Combine the error and warning logs
        into the standard BuildOutput.htm document.

2015-03-05  David Kilzer  <ddkilzer@apple.com>

        Dashboard has trouble parsing iOS test output
        <http://webkit.org/b/142364>

        Reviewed by Alex Christensen.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults.prototype._parseResults.resultSummarizer):
        Add fallback path to build a regex using 'matchString' so that
        it matches anywhere in the line.  In practice, 'matchString' is
        a prefix for the label following the number.

2015-03-05  Alex Christensen  <achristensen@webkit.org>

        Fix linker warnings in TestWebKitAPI.
        https://bugs.webkit.org/show_bug.cgi?id=141912

        Reviewed by David Kilzer.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Do not export TearDownTestCase or SetUpTestCase symbols.

2015-03-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed EWS fix.

        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject): Dial logging back to 'ErrorsOnly' to see if that makes
        the EWS output more usable.

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

        Regression(r173761): ASSERTION FAILED: !is8Bit() in StringImpl::characters16()
        https://bugs.webkit.org/show_bug.cgi?id=142350

        Reviewed by Michael Saboff and Benjamin Poulain.

        Add API test for WTFString::hasInfixStartingAt() to make sure it doesn't
        crash if the string is 8-bit but the pattern is 16-bit (and vice-versa).

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

2015-03-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Ensure build target directory exists when launching MSBuild
        https://bugs.webkit.org/show_bug.cgi?id=142360

        Reviewed by Dean Jackson.

        Create the build output directory (if it doesn't exist) before
        launching MSBuild so that it can immediately begin writing logs.

        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject):

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

        run-webkit-tests and run-perf-tests should use WebKitTestRunner by default
        https://bugs.webkit.org/show_bug.cgi?id=142325

        Reviewed by Csaba Osztrogonác.

        run-webkit-tests and run-perf-tests now use WebKitTestRunner by default.
        As a result, "--webkit-test-runner / -2" parameters are replaced by
        "--dump-render-tree / -1" so developers can run DumpRenderTree rather
        than WebKitTestRunner.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKit1Tests):
        (RunWebKit1Tests.start):
        (RunWebKit1LeakTests):
        (RunWebKit1LeakTests.start):
        (RunAndUploadPerfTestsWebKit1):
        (RunAndUploadPerfTestsWebKit1.start):
        (TestFactory):
        (TestWebKit1LeaksFactory):
        (TestWebKit1LeaksFactory.__init__):
        (TestWebKit1Factory):
        (TestWebKit1AllButJSCFactory):
        (TestAllButJSCFactory):
        (BuildAndPerfTestWebKit1Factory):
        (BuildAndPerfTestWebKit1Factory.__init__):
        (BuildAndPerfTestFactory):
        (BuildAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit1Factory):
        (DownloadAndPerfTestWebKit1Factory.__init__):
        (DownloadAndPerfTestFactory):
        (DownloadAndPerfTestFactory.__init__):
        (RunWebKitLeakTests): Deleted.
        (RunWebKitLeakTests.start): Deleted.
        (RunWebKit2Tests): Deleted.
        (RunWebKit2Tests.start): Deleted.
        (RunAndUploadPerfTestsWebKit2): Deleted.
        (RunAndUploadPerfTestsWebKit2.start): Deleted.
        (TestLeaksFactory): Deleted.
        (TestLeaksFactory.__init__): Deleted.
        (TestWebKit2Factory): Deleted.
        (TestWebKit2AndJSCFactory): Deleted.
        (BuildAndPerfTestWebKit2Factory): Deleted.
        (BuildAndPerfTestWebKit2Factory.__init__): Deleted.
        (DownloadAndPerfTestWebKit2Factory): Deleted.
        (DownloadAndPerfTestWebKit2Factory.__init__): Deleted.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_build_driver):

2015-03-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch to MSBuild so we get more useful stdout logging in buildbot
        https://bugs.webkit.org/show_bug.cgi?id=140845

        Reviewed by David Kilzer.

        Update 'webkitdirs.pm' to locate the MSBuild used with Visual Studio 2013
        and generate suitable build commands to drive a full build from our
        existing solution files.

        * Scripts/webkitdirs.pm:
        (msBuildInstallDir): Added.
        (determineConfigurationForVisualStudio): Revise to use MSBuild command
        line arguments to drive the build.
        (setupCygwinEnv): Warn user if MSBuild cannot be located.
        (buildVisualStudioProject): Revise to use MSBuild command line arguments
        to specify build architecture.
        * win/AssembleBuildLogs/AssembleLogs.cmd: MSBuild doesn't produce individual
        output logs, so don't attempt to consolidate them. Also: Drive-by fix: Don't
        bother looking for CoreUI or SafariTheme build logs.

2015-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] mastercfg_unittest.py should be runnable easily
        https://bugs.webkit.org/show_bug.cgi?id=142219

        Reviewed by Chris Dumez.

        Buildbot 0.8.6p1 runs on build.webkit org with Twisted 12.1.0, which is
        the last Twisted version works together with this buildbot version.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller): Added prepend_to_search_path argument to be able
        to prefer autoinstalled package to system package.
        (AutoInstaller.__init__):
        (AutoInstaller._set_up_target_dir):
        (AutoInstaller._extract_tar): Renamed from _extract_targz, now it works with tar.bz2 too.
        (AutoInstaller._prepare_package):
        (AutoInstaller._extract_targz): Renamed to _extract_tar.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_buildbot): Autoinstall Twisted 12.1.0.

2015-03-05  Lukasz Bialek  <l.bialek@samsung.com>

        [EFL][WK2] Crash when "Download Linked File" from MiniBrowser context menu is clicked
        https://bugs.webkit.org/show_bug.cgi?id=131162

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_download_request):
        (on_download_finished):
        (on_download_failed):
        (window_create):
        Adapt download callbacks to new callback mechanism

2015-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix /webkit2/WebKitWebResource/mime-type after r180927.

        In r180927 we updated the libsoup version used by the jhbuild. In
        this new version the sniffer uses image/x-icon instead of
        image/vnd.microsoft.icon for blank.ico resource.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebResourceMimeType):

2015-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Check TLS errors as soon as they are set in the SoupMessage
        https://bugs.webkit.org/show_bug.cgi?id=142244

        Reviewed by Sergio Villar Senin.

        Check that the SSL server doesn't process any request in case of
        TLS errors when the policy is set to FAIL.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testTLSErrorsPolicy):
        (testTLSErrorsRedirect):
        (testTLSErrorsHTTPAuth):
        (testLoadFailedWithTLSErrors):
        (testSubresourceLoadFailedWithTLSErrors):
        (httpsServerCallback):

2015-03-05  Pawel Forysiuk  <p.forysiuk@samsung.com>

        [EFL] REGRESSION (r178685): ASSERTION FAILED: !parameters.mediaKeyStorageDirectory.isEmpty()
        https://bugs.webkit.org/show_bug.cgi?id=141154

        Reviewed by Jer Noble.

        Unlike GTK, EFL port enables ENABLE_ENCRYPTED_MEDIA_V2 build option by default.

        For the sake of completeness WebKitTestRunner should specify temporary
        folder for MediaKeysStorageDirecory as well as IndexedDB, LocalStorage, etc.

        Default non legacy paths are set up in ProcessPoolConfiguration constructor.
        They use WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation
        to get data storage paths. Only Mac port has an actual implementation of it.
        However, WebKitTestRunner overrides them in favour of unique temporary dir
        which is taken from libraryPathForTesting().

        Since WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation
        is not implemented for EFL and GTK ports it returns an empty string.
        All default data folders besides MediaKeys are overridden in TestRunner
        code with unique temporary folders derived from DUMPRENDERTREE_TEMP
        env variable.

        GTK port does not enable encrypted keys by default so
        WebMediaKeyStorageManager::initialize() code path is never triggered.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Set MediaKeysStorageDirectory for all
        WebKit ports.

2015-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Add regression test to check which builder runs which tests
        https://bugs.webkit.org/show_bug.cgi?id=142166

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (BuildStepsConstructorTest.createTest):
        (BuildStepsTest):
        (BuildStepsTest.generateTests):
        (BuildStepsTest.createTest):
        (BuildStepsTest.createTest.doTest):
        (BuildStepsTest.test_unnecessary_expected_results):

2015-03-04  Commit Queue  <commit-queue@webkit.org>

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

        Broke the api tests (Requested by sundiamonde on #webkit).

        Reverted changeset:

        "Fix linker warnings in TestWebKitAPI."
        https://bugs.webkit.org/show_bug.cgi?id=141912
        http://trac.webkit.org/changeset/181054

2015-03-04  Alex Christensen  <achristensen@webkit.org>

        Fix linker warnings in TestWebKitAPI.
        https://bugs.webkit.org/show_bug.cgi?id=141912

        Reviewed by David Kilzer.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        Use GCC_SYMBOLS_PRIVATE_EXTERN like we do in WebCore.

2015-03-04  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Set SystemUIFontSelect in DRT and WKTR
        https://bugs.webkit.org/show_bug.cgi?id=142303

        Reviewed by Myles C. Maxfield.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2015-03-04  Chris Dumez  <cdumez@apple.com>

        Mac Perf bots should use WebKitTestRunner instead of DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=142314
        <rdar://problem/20046835>

        Reviewed by Ryosuke Niwa.

        Mac Perf bots should use WebKitTestRunner instead of DumpRenderTree
        to get WK2 code coverage.

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

2015-03-04  Alex Christensen  <achristensen@webkit.org>

        Move content extensions test to properly named directory.
        https://bugs.webkit.org/show_bug.cgi?id=142299

        Reviewed by Tim Horton.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):

2015-03-04  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should use filesystem instead of os.walk
        https://bugs.webkit.org/show_bug.cgi?id=142085

        Reviewed by Bem Jones-Bey.

        Added FileSystem.dirs_under to remove the use of os.walk in test importer.
        Added MockFileSystem.dirs_under and MockFileSystem.getsize to enable unit testing of test importer.
        Added unit test for FileSystem.dirs_under and MockFileSystem.dirs_under.

        Made use of FileSystem.dirs_under within TestImporter.find_importable_tests.
        Added a unit test to check that test importer is now black-box testable using a Mock system.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.dirs_under): Returns a list of filtered sub-directories.
        (FileSystem.dirs_under.filter_all):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.dirs_under):
        (MockFileSystem.dirs_under.filter_all):
        (MockFileSystem.getsize):
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.test_dirs_under):
        (MockFileSystemTest.test_dirs_under.filter_dir):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_sep):
        (RealFileSystemTest):
        (RealFileSystemTest.test_dirs_under):
        (RealFileSystemTest.test_dirs_under.filter_this_dir):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.do_import):
        (TestImporter.find_importable_tests.should_keep_subdir):
        (TestImporter.find_importable_tests):
        (TestImporter.should_keep_subdir): Deleted.
        (TestImporter.should_skip_file): Deleted.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_empty_init_py): Added test to ensure empty __init__.py are no longer empty once imported.

2015-03-04  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Add support for the find and replace bar
        https://bugs.webkit.org/show_bug.cgi?id=142247

        Reviewed by Enrica Casucci.

        While it's not hooked up yet in WKWebView, adding support for the
        find bar to WebEditingTester will help us implement that functionality.

        * WebEditingTester/AppDelegate.h:
        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate performTextFinderAction:]):
        * WebEditingTester/MainMenu.xib:
        Receive performTextFinderAction: and forward it to the frontmost WebDocumentController.

        * WebEditingTester/WK2WebDocumentController.m:
        (-[WK2WebDocumentController awakeFromNib]):
        (-[WK2WebDocumentController performTextFinderAction:]):
        (-[WK2WebDocumentController findBarView]):
        (-[WK2WebDocumentController setFindBarView:]):
        (-[WK2WebDocumentController isFindBarVisible]):
        (-[WK2WebDocumentController setFindBarVisible:]):
        (-[WK2WebDocumentController findBarViewDidChangeHeight]):
        (-[WK2WebDocumentController layout]):
        Implement performTextFinderAction: for WebKit2, and have a NSTextFinder
        pointing at the WKWebView (currently nothing will work, but the bar will
        show up). Install and uninstall the bar as needed.

        * WebEditingTester/WebDocument.xib:
        Don't use a full-size content view. There's no need, and it makes find
        bar layout harder.

        * WebEditingTester/WebDocumentController.h:
        * WebEditingTester/WebDocumentController.m:
        (-[WebDocumentController performTextFinderAction:]):

2015-03-03  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Split parsing and compiling of content extensions into their own files
        https://bugs.webkit.org/show_bug.cgi?id=142259

        Reviewed by Anders Carlsson.

        Add basic unit test for the content filter compiler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ContentFilter.cpp: Added.
        (WebCore::ContentExtensions::operator<<):
        (TestWebKitAPI::ContentFilterTest::SetUp):
        (TestWebKitAPI::TEST_F):

2015-03-04  Matthew Mirman  <mmirman@apple.com>

        Cleaned up BuildAndTestFactory to not be a near duplicate of TestFactory
        https://bugs.webkit.org/show_bug.cgi?id=142230

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestFactory):
        (TestFactory.getProduct): Added
        (TestFactory.__init__): moved downloader to getProduct
        (BuildAndTestFactory):        
        (BuildAndTestFactory.getProduct): Added
        (BuildAndTestFactory.__init__): made to call TestFactory.__init__ and append steps to the end.
        (BuildAndTestWebKit2Factory): Deleted.  Wasn't used anywhere.

2015-03-04  Debarshi Ray  <debarshir@gnome.org>

        [GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
        https://bugs.webkit.org/show_bug.cgi?id=142225

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewWebContextLifetime):
        (beforeAll):

2015-03-03  David Kilzer  <ddkilzer@apple.com>

        [iOS] Crash logs can't be found on ios-simulator because WebKitTestRunner returns the wrong process name
        <http://webkit.org/b/142243>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName):
        (WTR::TestController::networkProcessName):
        - Return the same process name on iOS and Mac because they both
          use the same process name for local engineering builds.

2015-03-03  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: Add exception for FrameworkSoftLink.h header order
        <http://webkit.org/b/141872>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py: Remove unneeded
        semi-colons in various places and fix whitespace.
        (_IncludeState): Add _SOFT_LINK_HEADER and _SOFT_LINK_SECTION
        constants.
        (_IncludeState.__init__): Add self._visited_soft_link_section
        boolean state variable.
        (_IncludeState.visited_soft_link_section): Getter for
        self._visited_soft_link_section.
        (_IncludeState.check_next_include_order): Update state machine
        for soft-link headers.  Add check that soft-link headers always
        appear last.
        (_classify_include): Add check for soft-link header type.
        (check_include_line): Return early if there is a soft-link
        header error.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_public_primary_header): Add tests for
        including soft-link headers.
        (OrderOfIncludesTest.test_classify_include): Add test for
        _SOFT_LINK_HEADER type.

2015-03-03  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Don't repeatedly handle each test type
        https://bugs.webkit.org/show_bug.cgi?id=142211

        Reviewed by Tim Horton and Matt Hanson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.javascriptTestResultsURLForIteration): Deleted.
        (Buildbot.prototype.apiTestResultsURLForIteration): Deleted.
        (Buildbot.prototype.platformAPITestResultsURLForIteration): Deleted.
        (Buildbot.prototype.webkitpyTestResultsURLForIteration): Deleted.
        (Buildbot.prototype.webkitperlTestResultsURLForIteration): Deleted.
        (Buildbot.prototype.bindingsTestResultsURLForIteration): Deleted.
        Removed functions that build a link to test step results. The buildbot provides
        these links in JSON.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration): Put failing tests into an array, instead of named variables.
        (BuildbotIteration.ProductiveSteps): Removed step names that are not used on build.webkit.org.
        We can easily add them to the map as needed.
        (BuildbotIteration.TestSteps): Added a list of test steps to be displayed by test queues.
        (BuildbotIteration.prototype._parseData): Moved code for parsing step results away
        to BuildbotTestResults class. We used to parse here, build an intermediate data structure,
        and then build a BuildbotTestResults object, which was strange.
        (BuildbotIteration.prototype.loadLayoutTestResults): Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        Corrected an unrelated assertion that was buggy, and kept firing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults):
        (BuildbotTestResults.prototype._parseResults.resultSummarizer):
        (BuildbotTestResults.prototype._parseResults):
        (BuildbotTestResults.prototype.addFullLayoutTestResults):
        Moved the code for parsing JSON results for a single step here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._testStepFailureDescription):
        (BuildbotTesterQueueView.prototype._testStepFailureDescriptionWithCount):
        (BuildbotTesterQueueView.prototype._presentPopoverForGenericTestFailures):
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus): Deleted.
        (BuildbotTesterQueueView.prototype.update): Deleted.
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds): Deleted.
        Updated for the new data structures. One behavior change is that we now display individual
        counts when multiple test kinds fail, e.g. "1 javascript test failure, 83+ layout
        test failures, 3 platform api test failures".

2015-03-03  Matthew Mirman  <mmirman@apple.com>

        JSC tests should not be repeated twice for each branch builder, and should if possible have their own queue.
        https://bugs.webkit.org/show_bug.cgi?id=142094

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added bots 155 and 157
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestFactory):
        (TestFactory.__init__): Made running of JSC tests conditional.
        (TestAllButJSCFactory):
        (TestJSCFactory): Added.
        (TestJSCFactory.__init__):
        (TestWebKit2AndJSCFactory): Added factory to not run JSC tests on WebKit2.

2015-03-03  David Kilzer  <ddkilzer@apple.com>

        `build-webkit --help` is wrong about how to build for the iOS simulator
        <http://webkit.org/b/142223>

        Reviewed by Csaba Osztrogonác.

        * Scripts/build-webkit: Fix help.

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

        Unreviewed. Bump libsoup version to 2.49.91.1 to fix 32 bit build.

        * gtk/jhbuild.modules:

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

        [SOUP] Synchronous XMLHttpRequests can time out when we reach the max connections limit
        https://bugs.webkit.org/show_bug.cgi?id=141508

        Reviewed by Sergio Villar Senin.

        Add a unit test to check that synchronous XHRs load even if the
        maximum connection limits are reached.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebViewSyncRequestOnMaxConns):
        (serverCallback):
        (beforeAll):
        * gtk/jhbuild.modules: Bump libsoup version to 2.49.91.

2015-03-02  Alexey Proskuryakov  <ap@apple.com>

        Update the name of ASan build step.

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

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

        [WK1][WK2][Mac] Fullscreen animation is incorrect when page is scaled.
        https://bugs.webkit.org/show_bug.cgi?id=142121

        Reviewed by Simon Fraser.

        Add a test which changes the WebView's page scale, then enters fullscreen mode, and verifies
        that the initial and final screen rects for the web content are as expected.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.html: Added.
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm: Added.
        (-[FullscreenStateDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (runJavaScriptAlert):
        (TestWebKitAPI::FullscreenZoomInitialFrame::initializeView):
        (TestWebKitAPI::FullscreenZoomInitialFrame::teardownView):
        (TestWebKitAPI::FullscreenZoomInitialFrame::setPageScale):
        (TestWebKitAPI::FullscreenZoomInitialFrame::sendMouseDownEvent):
        (TestWebKitAPI::FullscreenZoomInitialFrame::runTest):
        (TestWebKitAPI::TEST_F):

2015-03-01  David Kilzer  <ddkilzer@apple.com>

        LayoutTestRealy: Prepend __XPC_ to the key, not the value!

        Follow-up fix for:

        LayoutTestRelay: App environment variables not set for --guard-malloc or --leaks
        <http://webkit.org/b/142145>

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController _environmentVariables]): Fix think-o.

2015-03-01  David Kilzer  <ddkilzer@apple.com>

        LayoutTestRelay: App environment variables not set for --guard-malloc or --leaks
        <http://webkit.org/b/142145>

        Reviewed by Simon Fraser.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController _environmentVariables]): Add.
        (-[LTRelayController launchApp]): Use -_environmentVariables.

2015-02-28  David Kilzer  <ddkilzer@apple.com>

        [iOS] Stop running webkit-build-directory on every layout test

        This was originally fixed by David Farler for Bug 135409 in
        r172602.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.relay_path): Mark as @memoized so it doesn't
        run webkit-build-directory every time it's called.

2015-02-28  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C importer should use filesystem instead of shutil/host
        https://bugs.webkit.org/show_bug.cgi?id=142012

        Reviewed by Bem Jones-Bey.

        Removed direct use of python shutil and os, except for os.walk which will require its own fix.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (TestImporter.do_import):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        (TestImporter.remove_deleted_files):
        (TestImporter.write_import_log):

2015-02-28  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should use filesystem to read and write files
        https://bugs.webkit.org/show_bug.cgi?id=142084

        Reviewed by Bem Jones-Bey.

        Use of FileSystem.write_binary_file, read_text_file and write_text_file in lieu of open().

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.import_tests):
        (TestImporter.remove_deleted_files):
        (TestImporter.write_import_log):

2015-02-27  Sam Weinig  <sam@webkit.org>

        Add WebKit2 SPI to create a DOM File object
        https://bugs.webkit.org/show_bug.cgi?id=142109

        Reviewed by Tim Horton.

        Add a test for WKBundleFileHandleRef.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKBundleFileHandle.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKBundleFileHandle_Bundle.cpp: Added.
        (TestWebKitAPI::WKBundleFileHandleTest::WKBundleFileHandleTest):
        * TestWebKitAPI/Tests/WebKit2/bundle-file.html: Added.

2015-02-27  Michael Saboff  <msaboff@apple.com>

        Add ability for run-jsc-benchmarks to set library path from test binary when run on a build bot
        https://bugs.webkit.org/show_bug.cgi?id=142112

        Reviewed by Filip Pizlo.

        Added check for VMs in the form of <someDir>/{DumpRenderTree,webkitTestRunner,jsc} and use
        <someDir> as the library path.

        * Scripts/run-jsc-benchmarks:

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

        [WinCairo] Unreviewed build fix.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props:
        Use TestWebKitAPIPrefix.h like in TestWebKitAPICommon.props.

2015-02-27  Anders Carlsson  <andersca@apple.com>

        Add infrastructure for handling website data in the network process
        https://bugs.webkit.org/show_bug.cgi?id=142092

        Reviewed by Andreas Kling.

        Add a menu item that will fetch all website data, delete the returned data records, and
        fetch all website data again so we can confirm that it's all empty.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetchAndClearWebsiteData:]):

2015-02-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove remaining SafariTheme cruft
        https://bugs.webkit.org/show_bug.cgi?id=142075

        Reviewed by Anders Carlsson.

        Remove reference to SafariTheme-switching preference.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        (prepareConsistentTestingEnvironment):

2015-02-26  Doug Russell  <d_russell@apple.com>

        AX: Expose caret browsing preference to accessibility API
        https://bugs.webkit.org/show_bug.cgi?id=141862

        Reviewed by Chris Fleizach.

        Exposing the caret browsing setting on WebCore::Frame via the accessibility API would allow assistive tech apps to enable it contextually (for example, when the assistive tech app is running).
        Enabling caret browsing when assistive tech apps are running greatly improves the reliability of keyboard navigation on the web. Most especially in cases where selection would be disrupted by focus events.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setBoolAttributeValueCallback):
        (selectedTextMarkerRangeCallback):
        (resetSelectedTextMarkerRangeCallback):
        (AccessibilityUIElement::setBoolAttributeValue):
        (AccessibilityUIElement::selectedTextMarkerRange):
        (AccessibilityUIElement::resetSelectedTextMarkerRange):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setBoolAttributeValue):
        (AccessibilityUIElement::selectedTextMarkerRange):
        (AccessibilityUIElement::resetSelectedTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::setBoolAttributeValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setBoolAttributeValue):
        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):

2015-02-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove WebKitExportGenerator project (and related)
        https://bugs.webkit.org/show_bug.cgi?id=142035

        Reviewed by Dean Jackson.

        * win/AssembleBuildLogs/AssembleLogs.cmd: Don't look for a
        build log from WebKitExportGenerator.

2015-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.13.0
        https://bugs.webkit.org/show_bug.cgi?id=141708

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-02-26  Sam Weinig  <sam@webkit.org>

        Check in missing WebEditingTester.xcconfig file.

        * WebEditingTester/Configurations/WebEditingTester.xcconfig: Added.

2015-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        [webkitpy] Remove skipped file related crufts
        https://bugs.webkit.org/show_bug.cgi?id=142046

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/base.py:
        (Port.skipped_layout_tests):
        (Port._tests_from_skipped_file_contents): Deleted.
        (Port): Deleted.
        (Port._expectations_from_skipped_files): Deleted.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_default_timeout_ms):
        (MacTest): Deleted.
        (test_tests_from_skipped_file_contents): Deleted.

2015-02-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed WinCairo build fix after r180653.

        TestWebKitAPI should know about proper WEBCORE_EXPORT definitions.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props:
        * TestWebKitAPI/win/TestWebKitAPIPrefix.cpp: Added.
        * TestWebKitAPI/win/TestWebKitAPIPrefix.h: Added.

2015-02-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use WEBCORE_EXPORT instead of Definition file
        https://bugs.webkit.org/show_bug.cgi?id=141734

        Reviewed by Alex Christensen.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        Use a precompiled header so we can define our export macros properly.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj.filters:
        Visual studio automatic update stuff.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        Set up Precompiled Header use for project..
        * DumpRenderTree/win/DumpRenderTreePrefix.cpp: Added.
        * DumpRenderTree/DumpRenderTreePrefix.h: Update with proper export
        declarations for building DumpRenderTree as a client of
        WebCore/WebKit.

2015-02-25  Mark Lam  <mark.lam@apple.com>

        ASan does not like JSC::MachineThreads::tryCopyOtherThreadStack.
        <https://webkit.org/b/141672>

        Reviewed by Alexey Proskuryakov.

        ASan does not like the fact that we memcpy the stack for GC scans.  So,
        we're working around this by using our own memcpy (asanUnsafeMemcpy)
        implementation that we can tell ASan to ignore.

        Also removed the previous added directive to ignore *tryCopyOtherThreadStack*
        which isn't effective for working around this issue. 

        * asan/webkit-asan-ignore.txt:

2015-02-25  Benjamin Poulain  <bpoulain@apple.com>

        CodeBlock crashes when dumping op_push_name_scope
        https://bugs.webkit.org/show_bug.cgi?id=141953

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2015-02-25  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should use argparse instead of optparse
        https://bugs.webkit.org/show_bug.cgi?id=142013

        Reviewed by Bem Jones-Bey.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main): Updating according argparse.
        (parse_args): Moving from optparse to argparse.

2015-02-25  Brady Eidson  <beidson@apple.com>

        Get rid of TestInvocation::pathOrURL
        https://bugs.webkit.org/show_bug.cgi?id=142021

        Reviewed by Tim Horton.

        The pathOrURL string is a relative path used as an argument to WebKitTestRunner,
        but most code that uses it expected an absolute path.

        This gets rid of the member and replaces all uses with a more descriptive "urlContains" method.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        (WTR::shouldUseFixedLayout):
        (WTR::TestController::updateLayoutTypeForTest):

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::urlContains):
        (WTR::TestInvocation::shouldLogFrameLoadDelegates):
        (WTR::TestInvocation::shouldLogHistoryClientCallbacks):
        (WTR::TestInvocation::invoke):
        (WTR::shouldLogFrameLoadDelegates): Deleted.
        (WTR::shouldLogHistoryClientCallbacks): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::pathOrURL): Deleted.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::shouldMakeViewportFlexible):
        (WTR::TestController::platformConfigureViewForTest):

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::shouldUseThreadedScrolling):
        (WTR::TestController::platformConfigureViewForTest):

2015-02-25  Brady Eidson  <beidson@apple.com>

        Layout test support for user content filters
        https://bugs.webkit.org/show_bug.cgi?id=142018

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Clear all user content filters between tests.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest): For all tests with usercontentfilter/ in their path try to load a matching .json
          file before loading the test itself.

2015-02-24  Sam Weinig  <sam@webkit.org>

        Convert WebEditingTester to use xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=141879

        Reviewed by Darin Adler.

        Add xcconfig files to WebEditingTester based on the ones used by MiniBrowser.

        * WebEditingTester/Configurations: Added.
        * WebEditingTester/Configurations/Base.xcconfig: Added.
        * WebEditingTester/Configurations/DebugRelease.xcconfig: Added.
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:

2015-02-24  Andy Estes  <aestes@apple.com>

        Teach MiniBrowser how to disable per-window web processes
        https://bugs.webkit.org/show_bug.cgi?id=141988

        Reviewed by Darin Adler.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration): Created a _WKProcessPoolConfiguration with maximumProcessCount == 1 if per-window web processes are disabled.
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]): Added a new Settings menu item.
        (-[SettingsController validateMenuItem:]): Validated the new Settings menu item.
        (-[SettingsController togglePerWindowWebProcessesDisabled:]): Displayed an alert informing the user that MiniBrowser must be restarted for the setting to take effect.
        (-[SettingsController perWindowWebProcessesDisabled]): Returned the value from user defaults.

2015-02-24  Alexey Proskuryakov  <ap@apple.com>

        Bot watcher's dashboard sometimes hits an assertion: data.num_missing === this.layoutTestResults.testsWithMissingResults.length
        https://bugs.webkit.org/show_bug.cgi?id=141889

        Reviewed by Darin Adler.

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

2015-02-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Brent Fulgham.

        Drop javaScriptExperimentsEnabled and specify JavaScriptRuntimeFlagsAllEnabled as KJavaScriptRuntimeFlags.

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

2015-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Crash loading local file with WebPageProxy::loadAlternateHTMLString
        https://bugs.webkit.org/show_bug.cgi?id=141867

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::loadAlternateHTMLString): Split most of this test into a function so it can
        be shared with the new test.
        (TestWebKitAPI::TEST): Add a cross-platform test for this crash.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp: Add a GTK+ test for this crash.
        (testLoadAlternateHTMLForLocalPage):
        (beforeAll):

2015-02-24  David Kilzer  <ddkilzer@apple.com>

        [iOS] Implement WTR::activateFonts() to fix missing fonts in WebKit2 test runs
        <http://webkit.org/b/141900>

        Reviewed by Myles C. Maxfield.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        (OTHER_LDFLAGS_BASE): Link to CoreText.framework.
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm: Rename from Tools/WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm.
        - Rename to share code with iOS.
        - Add USE(APPKIT) around AppKit-specific headers and code.
        - Fix a check-webkit-style warning.
        * WebKitTestRunner/InjectedBundle/ios/ActivateFontsIOS.mm: Remove.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        - Rename mac/ActivateFonts.mm to cocoa/ActivateFontsCocoa.mm.
        - Remove ios/ActivateFontsIOS.mm.
        - Fix InjectedBundle/cocoa group to represent the directory on
          disk.  Includes a change to InjectedBundlePageCocoa.mm.

2015-02-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180547 and r180550.
        https://bugs.webkit.org/show_bug.cgi?id=141957

        Broke 10 Windows tests. (Requested by bfulgham_ on #webkit).

        Reverted changesets:

        "REGRESSION(r179429): Can't type comments in Facebook"
        https://bugs.webkit.org/show_bug.cgi?id=141859
        http://trac.webkit.org/changeset/180547

        "Constructor returning null should construct an object instead
        of null"
        https://bugs.webkit.org/show_bug.cgi?id=141640
        http://trac.webkit.org/changeset/180550

2015-02-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Geoffrey Garen.

        Drop javaScriptExperimentsEnabled and specify JavaScriptRuntimeFlagsAllEnabled as KJavaScriptRuntimeFlags.

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

2015-02-23  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] fix eo errors
        https://bugs.webkit.org/show_bug.cgi?id=141909

        Reviewed by Gyuyoung Kim.

        Fix eo errors that occur whenever minibrowser is launched.
        - elm_obj_entry_text_style_user_push can only be applied for elm_entry
        - elm_obj_win_resize_object_add's first parameter should be elm_win

        * MiniBrowser/efl/main.c:
        (window_create):

2015-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix after r180535. Removed the test case that wasn't compiling.

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

2015-02-23  Brent Fulgham  <bfulgham@apple.com>

        WTF::WeakPtr should rename 'forgot' to 'clear' and support nullptr assignment
        https://bugs.webkit.org/show_bug.cgi?id=141935

        Reviewed by Myles C. Maxfield.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST): Updated for 'clear' method rename, and added a few
        tests for assigning from nullptr.

2015-02-23  Brent Fulgham  <bfulgham@apple.com>

        WTF::WeakPtr should have a 'forget' method.
        https://bugs.webkit.org/show_bug.cgi?id=141923

        Reviewed by Myles C. Maxfield.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST): Added 'Forget' tests case.

2015-02-23  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard CrashOnly queues should not show two green bubbles
        https://bugs.webkit.org/show_bug.cgi?id=141920

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        Do the same thing as we do for regular green bubbles.

2015-02-23  Alexey Proskuryakov  <ap@apple.com>

        Bot watcher's dashboard doesn't show a popover for commit history when all commits were to another branch
        https://bugs.webkit.org/show_bug.cgi?id=141925

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange):

2015-02-23  Anders Carlsson  <andersca@apple.com>

        Add API for fetching website data records to _WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=141926

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetchWebsiteData:]):
        Add menu item to fetch and dump website data.

2015-02-23  David Kilzer  <ddkilzer@apple.com>

        [iOS] run-webkit-tests --leaks is broken because IOSSimulatorPort has no is_snowleopard attribute
        <http://webkit.org/b/141884>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks): Remove
        snowleopard, lion and older leaks.  Add known leak for
        mavericks, but check Port.operating_system before calling
        Port.is_mavericks.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.is_snowleopard): Delete.
        (MacPort.is_lion): Delete.
        (MacPort.is_mavericks): Add.

2015-02-23  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard should filter out commits to other branches
        https://bugs.webkit.org/show_bug.cgi?id=140362

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits):
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange):
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration):
        (BuildbotQueueView.prototype.revisionContentForIteration):
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Deleted.
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Deleted.
        (BuildbotQueueView.prototype._revisionPopoverContentForIteration): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype.get oldestRecordedRevisionNumber):
        (Trac.prototype.commitsOnBranch):
        (Trac.prototype._xmlTimelineURL):
        (Trac.prototype._convertCommitInfoElementToObject):
        (Trac.prototype._update):
        (Trac.prototype.startPeriodicUpdates):
        (Trac.prototype.loadMoreHistoricalData):
        (Trac.prototype.update): Deleted.

2015-02-21  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Tests don't work on some bots: Failed to stop wptwk
        https://bugs.webkit.org/show_bug.cgi?id=141235

        Reviewed by Ryosuke Niwa.

        Logging of server subprocesses in launcher script.
        Killing of server subprocesses when stopping/before starting.
        Removed empty __init.py__ file creation as importer now ensures these files cannot be empty anymore.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (main): Removed empty __init.py__ file creation as importer now ensures these files cannot be empty anymore. Added logging in a file of server subprocesses to clean them in case of abnormal shutdown. 
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__):
        (WebPlatformTestServer._stop_running_subservers): Kill server subprocesses based on file created by wpt launcher.
        (WebPlatformTestServer):
        (WebPlatformTestServer.stop): Overriden to ensure killing subprocesses in case of orphaned process.
        (WebPlatformTestServer._stop_running_server): Killing of wpt launcher process after regular shutdown. 
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_server_closes_previously_spawned_instance): Reworked the test to call start/stop with an existing pid file.
        (TestWebPlatformTestServer.test_import_web_platform_test_modules): No change.
        (TestWebPlatformTestServer):
        (TestWebPlatformTestServer.test_corrupted_subserver_files): Checked that server subprocess cleaning does not throw in case of bad server pid file.

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Allow dropping HTML files on the app
        https://bugs.webkit.org/show_bug.cgi?id=141834

        Reviewed by Simon Fraser.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate openDocument:]):
        (-[WebEditingAppDelegate application:openFile:]):
        Implement application:openFile:, factoring file loading code out of openDocument.

        * WebEditingTester/Info.plist:
        Register as an editor for HTML files.

        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:
        Enrica is not an organization.

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Expand "WK" to "WebKit" in a few places
        https://bugs.webkit.org/show_bug.cgi?id=141833

        Reviewed by Anders Carlsson.

        * WebEditingTester/AppDelegate.h:
        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate newEditor:]):
        (-[WebEditingAppDelegate toggleUseWebKit2ByDefault:]):
        (-[WebEditingAppDelegate validateMenuItem:]):
        (-[WebEditingAppDelegate _updateNewWindowKeyEquivalents]):
        (-[WebEditingAppDelegate applicationDidFinishLaunching:]): Deleted.
        (-[WebEditingAppDelegate applicationWillTerminate:]): Deleted.
        (-[WebEditingAppDelegate showOperations:]): Deleted.
        * WebEditingTester/MainMenu.xib:
        The WK abbreviation is unnaturally grating in menu items for some reason.

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Add a custom protocol for loading canned content
        https://bugs.webkit.org/show_bug.cgi?id=141830

        Reviewed by Enrica Casucci.

        Add a canned:// protocol handler, which can be used to emulate behaviors
        in WebKit client apps (like Mail) that use custom protocol handlers,
        which can have important effects on editing (mostly, the URLs are only
        valid inside of the client application, but not when copied/dragged out).

        For now, we only support two canned files:

            canned://dice is a PNG of dice (stolen from LayoutTests/)
            canned://text is the string "canned text" served as text/html

        In the future we could support things like very large (generated) files,
        progressive loading, etc. to further simulate conditions in other apps.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate applicationDidFinishLaunching:]):
        Register the protocol with CFNetwork, and the scheme with WebKit2.

        * WebEditingTester/Canned Content/dice.png: Added.
        * WebEditingTester/CannedContent.h: Added.
        * WebEditingTester/CannedContent.m: Added.
        (-[CannedContent initWithRequest:cachedResponse:client:]):
        (+[CannedContent canonicalRequestForRequest:]):
        (+[CannedContent canInitWithRequest:]):
        We only want to handle canned:// URLs.

        (-[CannedContent startLoading]):
        For now, immediately load the two files we know about.
        Otherwise, immediately fail the load.

        (-[CannedContent stopLoading]):
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Implement an open panel
        https://bugs.webkit.org/show_bug.cgi?id=141829

        Reviewed by Simon Fraser.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate _useWebKit1ForOpeningDocument:]):
        (-[WebEditingAppDelegate _useWebKit2ForOpeningDocument:]):
        (-[WebEditingAppDelegate openDocument:]):
        Add an open panel (with radio buttons to pick which WebKit to open with).
        Loads the file as an HTML string.

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

        [WebEditingTester] @properties, dot syntax, and remember the window position
        https://bugs.webkit.org/show_bug.cgi?id=141843

        Reviewed by Tim Horton.
        
        Modernize a bit with more dot syntax, use @property for the web views,
        and give the main window an Autosave name so it remembers the widow position.

        * WebEditingTester/WK1WebDocumentController.m:
        (-[WK1WebDocumentController awakeFromNib]):
        (-[WK1WebDocumentController loadHTMLString:]):
        * WebEditingTester/WK2WebDocumentController.m:
        (-[WK2WebDocumentController awakeFromNib]):
        * WebEditingTester/WebDocument.xib:

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Hook up key equivalents for new window action
        https://bugs.webkit.org/show_bug.cgi?id=141828

        Reviewed by Enrica Casucci.

        * WebEditingTester/AppDelegate.h:
        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate applicationDidFinishLaunching:]):
        (-[WebEditingAppDelegate newEditor:]):
        (-[WebEditingAppDelegate _defaultWebDocumentControllerClass]):
        (-[WebEditingAppDelegate toggleUseWK2ByDefault:]):
        (-[WebEditingAppDelegate _updateNewWindowKeyEquivalents]):
        (defaultConfiguration): Deleted.
        (-[WebEditingAppDelegate applicationWillTerminate:]): Deleted.
        Move WKWebViewConfiguration setup into WK2WebDocumentController.
        Remove unused application termination code.
        Update new-window menu item key equivalents when launching and when
        changing the use-WebKit2-by-default setting.
        Make WebDocumentController subclasses all initialized the same way,
        and use that to factor out alloc/init.
        Rename loadContent to loadHTMLString for future use.

        * WebEditingTester/MainMenu.xib:
        Add default key equivalents.
        Cmd-N will always make the default kind of window (controlled by the pref).
        Cmd-Opt-N will always make the other kind.
        The menu items are configured as alternates so they only show up if you
        press alt (just like in MiniBrowser).

        * WebEditingTester/WK1WebDocumentController.m:
        (-[WK1WebDocumentController loadHTMLString:]):
        (-[WK1WebDocumentController loadContent]): Deleted.
        * WebEditingTester/WK2WebDocumentController.h:
        * WebEditingTester/WK2WebDocumentController.m:
        (defaultConfiguration):
        (-[WK2WebDocumentController awakeFromNib]):
        (-[WK2WebDocumentController loadHTMLString:]):
        (-[WK2WebDocumentController initWithConfiguration:]): Deleted.
        (-[WK2WebDocumentController dealloc]): Deleted.
        * WebEditingTester/WebDocumentController.h:
        * WebEditingTester/WebDocumentController.m:
        (-[WebDocumentController init]):
        (-[WebDocumentController initWithWindow:]):
        (+[WebDocumentController defaultEditingSource]):
        (-[WebDocumentController loadHTMLString:]):
        (-[WebDocumentController windowDidLoad]): Deleted.
        (-[WebDocumentController defaultEditingSource]): Deleted.
        (-[WebDocumentController applicationTerminating]): Deleted.
        (-[WebDocumentController loadContent]): Deleted.

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] ARC-ify WebEditingTester
        https://bugs.webkit.org/show_bug.cgi?id=141827

        Reviewed by Sam Weinig.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate showOperations:]):
        * WebEditingTester/EditingOperations.m:
        (editingOperations):
        * WebEditingTester/WK1WebDocumentController.m:
        (-[WK1WebDocumentController dealloc]): Deleted.
        * WebEditingTester/WK2WebDocumentController.m:
        (-[WK2WebDocumentController dealloc]): Deleted.
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:
        Turn on ARC and remove a few retain/release/autorelease calls.
        We don't need to implement dealloc in either document controller
        because WebView and WKWebView's UIDelegate property does not hold a
        strong reference.

2015-02-20  Timothy Horton  <timothy_horton@apple.com>

        [WebEditingTester] Factor out list of editing operations
        https://bugs.webkit.org/show_bug.cgi?id=141826

        Reviewed by Sam Weinig.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate showOperations:]):
        * WebEditingTester/EditingOperations.h: Added.
        * WebEditingTester/EditingOperations.m: Added.
        (editingOperations):
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:
        Move EditingOperations array to its own file, and make it an NSArray
        instead of a C array. Adjust accordingly in showOperations:.

2015-02-20  Michael Saboff  <msaboff@apple.com>

        DFG JIT needs to check for stack overflow at the start of Program and Eval execution
        https://bugs.webkit.org/show_bug.cgi?id=141676

        Reviewed by Filip Pizlo.

        Set the newly added --maximumEvalCacheableSourceLength option for eager test runs.  This is needed
        to allow the eval out of stack tests to tier up.  Without this option, we don't cache the likely
        large string expression that we want to eval.

        * Scripts/run-jsc-stress-tests:

2015-02-19  Daniel Bates  <dabates@apple.com>

        REGRESSION (r180239): run-webkit-test fails to boot simulator device that was booted by previous test run
        https://bugs.webkit.org/show_bug.cgi?id=141815
        <rdar://problem/19893933>

        Reviewed by Simon Fraser.

        Fixes an issue where run-webkit-tests would fail to boot the WebKit Tester simulator device if it
        was booted by iOS Simulator in a previous run of run-webkit-test.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.check_sys_deps): Added logic moved from IOSSimulatorPort.setup_test_run().
        (IOSSimulatorPort.setup_test_run): Moved logic to quit the iOS Simulator app and wait for the
        testing device to be in the shutdown state from here to IOSSimulatorPort.check_sys_deps().

2015-02-19  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: do not warn about missing primary header for *SoftLink.cpp files
        <http://webkit.org/b/141799>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_IncludeState.check_next_include_order): Don't emit a warning
        if the primary header exists and the source file name ends with
        "SoftLink.cpp".  Add 'filename' argument to method.
        (check_include_line): Pass in 'filename'.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_next_include_order__no_config):
        (OrderOfIncludesTest.test_check_next_include_order__no_self):
        (OrderOfIncludesTest.test_check_next_include_order__likely_then_config):
        (OrderOfIncludesTest.test_check_next_include_order__other_then_config):
        (OrderOfIncludesTest.test_check_next_include_order__config_then_other_then_likely):
        - Add test filename arguments for calls to
          check_next_include_order().
        (OrderOfIncludesTest.test_primary_header): Add test for a file
        name ending in "SoftLink.cpp".

2015-02-18  Enrica Casucci  <enrica@apple.com>

        Add new tool to test editable Webviews.
        https://bugs.webkit.org/show_bug.cgi?id=141772

        Reviewed by Tim Horton.

        Adding WebEditingTester, a Cocoa application to
        test WK1 and Wk2 views in editable mode.

        * WebEditingTester: Added.
        * WebEditingTester/AppDelegate.h: Added.
        * WebEditingTester/AppDelegate.m: Added.
        (-[WebEditingAppDelegate init]):
        (defaultConfiguration):
        (-[WebEditingAppDelegate applicationDidFinishLaunching:]):
        (-[WebEditingAppDelegate applicationWillTerminate:]):
        (-[WebEditingAppDelegate newEditor:]):
        (-[WebEditingAppDelegate showOperations:]):
        (-[WebEditingAppDelegate useWebKit2ByDefault]):
        (-[WebEditingAppDelegate toggleUseWK2ByDefault:]):
        (-[WebEditingAppDelegate validateMenuItem:]):
        * WebEditingTester/Info.plist: Added.
        * WebEditingTester/MainMenu.xib: Added.
        * WebEditingTester/WK1WebDocumentController.h: Added.
        * WebEditingTester/WK1WebDocumentController.m: Added.
        (-[WK1WebDocumentController awakeFromNib]):
        (-[WK1WebDocumentController loadContent]):
        (-[WK1WebDocumentController dealloc]):
        (-[WK1WebDocumentController pasteAsMarkup:]):
        * WebEditingTester/WK2WebDocumentController.h: Added.
        * WebEditingTester/WK2WebDocumentController.m: Added.
        (-[WK2WebDocumentController initWithConfiguration:]):
        (-[WK2WebDocumentController pasteAsMarkup:]):
        (-[WK2WebDocumentController awakeFromNib]):
        (-[WK2WebDocumentController dealloc]):
        (-[WK2WebDocumentController loadContent]):
        * WebEditingTester/WebDocument.xib: Added.
        * WebEditingTester/WebDocumentController.h: Added.
        * WebEditingTester/WebDocumentController.m: Added.
        (-[WebDocumentController initWithWindow:]):
        (-[WebDocumentController windowDidLoad]):
        (-[WebDocumentController defaultEditingSource]):
        (-[WebDocumentController applicationTerminating]):
        (-[WebDocumentController loadContent]):
        * WebEditingTester/WebEditingTester.xcodeproj: Added.
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj: Added.
        * WebEditingTester/main.m: Added.
        (main):

2015-02-18  Csaba Osztrogonác  <ossy@webkit.org>

        Run JSC tests on ARM EFL bots
        https://bugs.webkit.org/show_bug.cgi?id=141165

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.countFailures):
        (RunRemoteJavaScriptCoreTests):
        (RunRemoteJavaScriptCoreTests.start):
        (BuildAndRemoteJSCTestsFactory):
        (BuildAndRemoteJSCTestsFactory.__init__):

2015-02-18  Alexey Proskuryakov  <ap@apple.com>

        Streamline unexported function build fixes
        https://bugs.webkit.org/show_bug.cgi?id=141761

        Reviewed by Alex Christensen.

        * Scripts/check-for-weak-vtables-and-externals: (readXcode5SymbolsToIgnore): Deleted.
        We don't need to ignore symbols that are not exported due to the .unexp file.

2015-02-18  Timothy Horton  <timothy_horton@apple.com>

        Remove more references to WebCore.exp.in
        https://bugs.webkit.org/show_bug.cgi?id=141747

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):

2015-02-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Windows test results should not fall back to mac-mountainlion after r180176
        https://bugs.webkit.org/show_bug.cgi?id=141719

        Reviewed by Brent Fulgham.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * Scripts/webkitpy/port/win.py:
        (WinPort.default_baseline_search_path):
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_baseline_search_path):

2015-02-17  Daniel Bates  <dabates@apple.com>

        [iOS] run-webkit-tests should check that simctl can boot and shutdown simulator device before running tests
        https://bugs.webkit.org/show_bug.cgi?id=141718

        Reviewed by Alex Christensen.

        We should only run layout tests if simctl can successfully boot and shutdown the testing device.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.check_sys_deps): Modified to call Simulator.check_simulator_device_and_erase_if_needed().
        Log a error and return False if we are unable to boot the simulator device so that the caller can take
        appropriate action, say exit(3) before running any layout tests.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator._boot_and_shutdown_simulator_device): Added. Boot and then shut down the simulator device
        with the specified UDID.
        (Simulator.check_simulator_device_and_erase_if_needed): Added. Checks that simulator device
        with the specified UDID can successfully boot and shut down. We make at most two attempts to
        boot and shut down the device, erasing the device between tries so as to restore the device
        to a known good state.

2015-02-17  Daniel Bates  <dabates@apple.com>

        run_webkit_tests.py should not know about iOS Simulator details
        https://bugs.webkit.org/show_bug.cgi?id=141711

        Reviewed by Alex Christensen.

        Run_webkit_tests.py should only parse the iOS-specific command
        line options --runtime and --device-type. Let the port-specific
        logic in ios.py validate the parsed options and instantiate
        internal data structures.

        Currently run_webkit_tests.py parses the iOS-specific command
        line options --runtime and --device-type, validates them, and
        instantiates internal data structures from the parsed strings.
        Instead the validation logic and instantiation of internal
        data structures should be handled by the iOS port object.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Remove logic to validate --runtime and --device-type
        and instantiate internal data structures for them.
        * Scripts/webkitpy/port/driver.py:
        (IOSSimulatorDriver.cmd_line): Modified to reference IOSSimulatorPort.simulator_runtime
        and IOSSimulatorPort.simulator_device_type for the iOS Simulator runtime and device type,
        respectively.
        * Scripts/webkitpy/port/ios.py: Sort the list of imports.
        (IOSSimulatorPort.simulator_runtime): Added. Instantiates a Runtime
        object from --runtime, if specified. Otherwise, instantiates a Runtime
        object for the latest installed iphonesimulator SDK version.
        (IOSSimulatorPort.simulator_device_type): Added. Instantiates a DeviceType
        object from --device-type, if specified. Otherwise, instantiates
        a DeviceType object for a iPhone 5 or iPhone 5s when on a 32-bit and 64-bit
        machine, respectively.
        (IOSSimulatorPort.check_sys_deps): Added. Validate if the chosen iOS simulator
        runtime is available to use.
        (IOSSimulatorPort.testing_device): Modified to make use of properties simulator_device_type
        and simulator_runtime for the iOS Simulator device type and runtime, respectively.
        * Scripts/webkitpy/xcode/simulator.py:
        (Runtime.from_version_string): Added. Turns around and calls Runtime.from_identifier()
        with a runtime identifier for the specified iOS version.

2015-02-17  Dana Burkart  <dburkart@apple.com>

        ASan does not like JSC::MachineThreads::tryCopyOtherThreadStack
        https://bugs.webkit.org/show_bug.cgi?id=141672

        Reviewed by David Kilzer.

        * asan/webkit-asan-ignore.txt:

2015-02-17  Alex Christensen  <achristensen@webkit.org>

        Remove WebCore.exp.in and clean up.
        https://bugs.webkit.org/show_bug.cgi?id=141491

        Reviewed by Andreas Kling.

        * Scripts/sort-export-file: Removed.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        Don't check if the export files are sorted.
        * Scripts/webkitpy/style/checkers/exportfile.py: Removed.
        * Scripts/webkitpy/style/checkers/exportfile_unittest.py: Removed.

2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ make distcheck.

        Do not exclude bmalloc directory from the tarball.

        * gtk/manifest.txt.in:

2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix /webkit2/WebKitDOMNode/dom-cache after r180214.

        I forgot to add the return of a bool function.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testDOMCache):

2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GObject DOM bindings object are cached forever
        https://bugs.webkit.org/show_bug.cgi?id=141558

        Reviewed by Sergio Villar Senin.

        Add checks for all DOM objects to ensure they are not leaked. Also
        add a dedicated test for the DOM Object Cache.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp:
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testHierarchyNavigation):
        (WebKitDOMNodeTest::testInsertion):
        (WebKitDOMNodeTest::testTagNames):
        (WebKitDOMNodeTest::testDOMCache):
        (registerTests):
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMXPathNSResolverTest.cpp:
        (WebKitDOMXPathNSResolverTest::evaluateFooChildTextAndCheckResult):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverNative):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp:
        (testWebKitDOMObjectCache):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (documentLoadedCallback):

2015-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitFrame objects are never released
        https://bugs.webkit.org/show_bug.cgi?id=141641

        Reviewed by Martin Robinson.

        Add a way to check GObjects leaks for WebProcess tests and check
        WebKitFrame objects are not leaked.

        * TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp:
        (WebKitFrameTest::testMainFrame):
        (WebKitFrameTest::testURI):
        (WebKitFrameTest::testJavaScriptContext):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (WebProcessTest::assertObjectIsDeletedWhenTestFinishes):
        (runTest):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h:

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

        Fix the MiniBrowser build with newer clang

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _toggleBooleanDefault:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController windowWillClose:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController windowWillClose:]):
        NSApp is id and clang gets confused about which -delegate we're talking about.

2015-02-16  Antti Koivisto  <antti@apple.com>

        Develop/Disable Caches does not properly disable disk cache
        https://bugs.webkit.org/show_bug.cgi?id=141636

        Reviewed by Anders Carlsson.

        Make testRunner.setCacheModel() use the WKContext interface so the model gets passed to
        the network process too.

        This makes setCacheModel asynchronous but there don't seem to be any tests that expect otherwise.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::setCacheModel):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:

            Forward to TestController.

        (WTR::TestRunner::setCacheModel):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2015-02-16  Andrzej Badowski  <a.badowski@samsung.com>

        Unreviewed. Add myself as a committer.

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

2015-02-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r180082): WebCore Debug builds fail on Mavericks due to weak export symbols
        <http://webkit.org/b/141607>

        * Scripts/check-for-weak-vtables-and-externals: Ignore weak
        externals in Source/WebCore/Configurations/WebCore.unexp when
        building with Xcode 5.x.
        (readXcode5SymbolsToIgnore): Add.

2015-02-15  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] fix Evas GL engine error.
        https://bugs.webkit.org/show_bug.cgi?id=141621

        Reviewed by Gyuyoung Kim.

        As new elm engine api was added from efl 1.10, replace elm_config_preferred_engine_set with elm_config_accel_preference_set.

        * MiniBrowser/efl/main.c:
        (elm_main):

2015-02-14  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Enable run-api-tests on release Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=141518

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunUnitTests):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (RunUnitTests.start): Deleted.
        (unitTestsSupported): Deleted.

2015-02-13  Anders Carlsson  <andersca@apple.com>

        Add a move constructor and move assignment operator to Deque
        https://bugs.webkit.org/show_bug.cgi?id=141571

        Reviewed by Andreas Kling.

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

2015-02-13  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests --remote should skip profiler tests
        https://bugs.webkit.org/show_bug.cgi?id=141470

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2015-02-13  Anders Carlsson  <andersca@apple.com>

        Add an initializer list constructor to Deque
        https://bugs.webkit.org/show_bug.cgi?id=141565

        Reviewed by Andreas Kling.

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

2015-02-13  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Remove buildJSCTool cruft from master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=141513

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests):
        (RunJavaScriptCoreTests.start):
        (RunWebKitTests):
        (RunWebKitTests.start):
        (TestFactory.__init__):
        (TestLeaksFactory.__init__):
        (RunJavaScriptCoreTests.__init__): Deleted.
        (RunWebKitTests.__init__): Deleted.

2015-02-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, remove empty directories.

        * DumpRenderTree/gtk: Removed.
        * DumpRenderTree/gtk/fonts: Removed.
        * DumpRenderTree/unix: Removed.
        * DumpRenderTree/unix/TestNetscapePlugin: Removed.
        * GtkLauncher: Removed.
        * TestWebKitAPI/Tests/WebKitGtk: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources: Removed.
        * WebKitTestRunner/WebKitTestRunnerAppTests: Removed.
        * WebKitTestRunner/WebKitTestRunnerAppTests/en.lproj: Removed.

2015-02-13  Csaba Osztrogonác  <ossy@webkit.org>

        Remove Windows cruft from Tools/Scripts/build-webkittestrunner
        https://bugs.webkit.org/show_bug.cgi?id=141519

        Reviewed by Alexey Proskuryakov.

        * Scripts/build-webkittestrunner:

2015-02-12  Alex Christensen  <achristensen@webkit.org>

        Removed empty directory.

        * WinCELauncher: Removed.

2015-02-12  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests --remote should be able add the necessary libraries to the bundle on Linux
        https://bugs.webkit.org/show_bug.cgi?id=141202

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2015-02-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Test bot infrastructure should not try to find/use old Safari DLLs
        https://bugs.webkit.org/show_bug.cgi?id=141517

        Reviewed by Anders Carlsson.

        We do not need to locate or use the DLL's that came with Safari, so stop
        failing when we cannot find them. Also remove some old Qt cruft from this
        script.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): 
        (extractBuiltProduct):

2015-02-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] [64-bit] Work around MSVC2013 Runtime Bug
        https://bugs.webkit.org/show_bug.cgi?id=141498
        <rdar://problem/19803642>

        Reviewed by Anders Carlsson.

        Disable FMA3 instruction use in the MSVC math library to
        work around a VS2013 runtime crash. We can remove this
        workaround when we switch to VS2015.

        * DumpRenderTree/cg/ImageDiffCG.cpp: Call _set_FMA3_enable(0) to
        disable FMA3 support.
        * DumpRenderTree/win/DumpRenderTree.cpp: Ditto.
        * DumpRenderTree/win/ImageDiffCairo.cpp: Ditto.
        * DumpRenderTree/win/TestRunnerWin.cpp: Ditto.
        * Scripts/webkitperl/httpd.pm: Ditto.
        * TestWebKitAPI/win/main.cpp: Ditto.
        * WinLauncher/Common.cpp: Ditto.
        * win/DLLLauncher/DLLLauncherMain.cpp: Ditto.

2015-02-12  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests should accept remote host config from JSON file
        https://bugs.webkit.org/show_bug.cgi?id=141509

        Reviewed by Michael Saboff.

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

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

        [GTK] Add API to allow overriding the default color chooser implementation
        https://bugs.webkit.org/show_bug.cgi?id=98935

        Reviewed by Gustavo Noronha Silva.

        Add a color chooser implementation for MiniBrowser using
        GtkPopover when the GTK+ version is recent enough.
        And a test case to check the new color chooser API.

        * MiniBrowser/gtk/BrowserWindow.c:
        (colorChooserRGBAChanged):
        (popoverColorClosed):
        (colorChooserRequestFinished):
        (runColorChooserCallback):
        (browserWindowConstructed):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewColorChooserRequest):
        (beforeAll):

2015-02-11  Csaba Osztrogonác  <ossy@webkit.org>

        Make run-jsc-stress-tests --remote work with make-based runner
        https://bugs.webkit.org/show_bug.cgi?id=141079

        Reviewed by Darin Adler.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Pass through the --shell-runner and --make-runner arguments.
        * Scripts/run-jsc-stress-tests: Made the make-based runner the default runner,
        except for remote testing on Darwin. Unified runShellTestRunner and runMakeTestRunner
        to avoid code duplication.

2015-02-11  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress tests should detect the number of processors on the remote machine too
        https://bugs.webkit.org/show_bug.cgi?id=141196

        Reviewed by Darin Adler.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Pass through the --child-processes argument.
        * Scripts/run-jsc-stress-tests: Added determineNumberOfProcessors function
        to detect the number of local and remote processors with the same algorithm.
        Additionally introduced $numChildProcesses to emphasize it isn't necessarily
        same as $numProcessors.

2015-02-11  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests should pass JSC_timeout to remote hosts
        https://bugs.webkit.org/show_bug.cgi?id=141164

        Reviewed by Darin Adler.

        Additonally removed IMPORTANT_ENVS, since JSC_timeout was the only one.

        * Scripts/run-jsc-stress-tests:

2015-02-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add default color chooser implementation using GtkColorChooserDialog
        https://bugs.webkit.org/show_bug.cgi?id=141392

        Reviewed by Gustavo Noronha Silva.

        Enable INPUT_TYPE_COLOR by default for GTK+ port.

        * Scripts/webkitperl/FeatureList.pm:

2015-02-09  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests shell test runner should run tests in fixed order
        https://bugs.webkit.org/show_bug.cgi?id=141383

        Reviewed by Darin Adler.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh:

2015-02-08  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver appears unresponsive when JavaScript alerts are triggered via focus or blur events
        https://bugs.webkit.org/show_bug.cgi?id=140485

        Reviewed by Anders Carlsson.

        Implement takeFocus() as a way to set focus through accessibility wrappers.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::takeFocus):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::takeFocus):

2015-02-08  Darin Adler  <darin@apple.com>

        Remove the SVG instance tree
        https://bugs.webkit.org/show_bug.cgi?id=140602

        Reviewed by Dean Jackson.

        * Scripts/check-for-global-initializers: Removed special case for
        SVGElementInstance.o.

2015-02-07  David Kilzer  <ddkilzer@apple.com>

        [iOS] run-webkit-tests fails due to simulator devices from previous SDK installs being marked as unavailable
        <http://webkit.org/b/141365>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Add unavailable_version_re precompiled regex.
        (Simulator._parse_devices): Check for unavailable versions and
        ignore them if found when parsing the output of
        `xcrun simctl list`.
        * Scripts/webkitpy/xcode/simulator_unittest.py:
        (test_unavailable_devices): Add test with output from
        `xcrun simctl list` with unavailable runtimes that fails before
        the fix.

2015-02-07  Chris Dumez  <cdumez@apple.com>

        Add Vector::removeFirstMatching() / removeAllMatching() methods taking lambda functions
        https://bugs.webkit.org/show_bug.cgi?id=141321

        Reviewed by Darin Adler.

        Use new Vector::removeFirstMatching() / removeAllMatching() methods.

2015-02-07  David Kilzer  <ddkilzer@apple.com>

        [iOS] Make Simulator class testable
        <http://webkit.org/b/141358>

        Rubber-stamped by Darin Adler.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.xcode_simctl_list): Move `xcrun simctl list`
        command to here from Simulator.refresh() in xcode/simulator.py
        so that the output of the command can be mocked.

        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__): Set self.expected_xcode_simctl_list
        to None.
        (MockPlatformInfo.xcode_simctl_list): Add method that returns
        self.expected_xcode_simctl_list expectation.

        * Scripts/webkitpy/xcode/simulator.py: Add missing copyright
        and license header.
        (Simulator.__init__): Add optional 'host' parameter to make it
        possible to pass in a mock object for testing.  Set self._host
        to 'host' parameter or create Host() object.
        (Simulator.refresh): Call new PlatformInfo.xcode_simctl_list()
        method.

        * Scripts/webkitpy/xcode/simulator_unittest.py: Add unit test
        for current code.
        (SimulatorTest):
        (SimulatorTest.setUp):
        (SimulatorTest._set_expected_xcrun_simctl_list):
        (SimulatorTest.test_simulator_device_types):
        (test_invalid_device_types_header):
        (test_invalid_runtimes_header):
        (test_invalid_devices_header):

2015-02-07  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests --remote should use the default ssh port
        https://bugs.webkit.org/show_bug.cgi?id=141287

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests: Extended URI module to be able to handle ssh scheme with the default 22 port number.

2015-02-06  Dana Burkart  <dburkart@apple.com>

        dashboard: BuildbotTesterQueueView crashesOnly logic is wrong
        https://bugs.webkit.org/show_bug.cgi?id=141349

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype.update):

2015-02-06  Alexey Proskuryakov  <ap@apple.com>

        Report network process crashes during layout tests
        https://bugs.webkit.org/show_bug.cgi?id=139646

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::networkProcessName):
        (WTR::TestController::networkProcessDidCrash):
        * WebKitTestRunner/TestController.h:

2015-02-06  Csaba Osztrogonác  <ossy@webkit.org>

        run-jsc-stress-tests --remote should create remote directory before copying the bundle
        https://bugs.webkit.org/show_bug.cgi?id=141329

        Reviewed by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2015-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKitWebView::close-notification signal
        https://bugs.webkit.org/show_bug.cgi?id=141330

        Reviewed by Gustavo Noronha Silva.

        Update notifications unit tests according to the API changes, and
        add a test case to check that onclose event is fired when a
        notification is closed by the user.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification):

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

        Dashboard doesn't consider building ASan a productive step
        https://bugs.webkit.org/show_bug.cgi?id=141312

        Reviewed by Simon Fraser.

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

2015-02-05  Daniel Bates  <dabates@apple.com>

        [iOS] webkitpy.xcode.simulator.Runtime.from_identifier() returns wrong result for non-existent runtime
        https://bugs.webkit.org/show_bug.cgi?id=141306

        Reviewed by Alexey Proskuryakov.

        The function webkitpy.xcode.simulator.Runtime.from_identifier always returns a Runtime object
        corresponding to the last-most runtime parsed from the output of `simctl list` for any non-
        existent runtime.

        * Scripts/webkitpy/xcode/simulator.py:
        (Runtime.from_identifier):

2015-02-05  Daniel Bates  <dabates@apple.com>

        LayoutTestRelay does not install DumpRenderTree.app/WebKitTestRunnerApp.app
        https://bugs.webkit.org/show_bug.cgi?id=139746
        <rdar://problem/19283658>

        Reviewed by Alexey Proskuryakov.

        Fixes an issues where LayoutTestRelay may fail to install DumpRenderTree.app/WebKitTestRunnerApp.app
        if the simulator device is not in state Booted.

        Currently run-webkit-test --ios-sim executes LayoutTestRelay immediately after
        launching/relaunching the iOS Simulator app and a simulator app can only be installed
        on a device that is in the Booted state. LayoutTestRelay may run before the
        device is booted and hence fail to install DumpRenderTree.app/WebKitTestRunnerApp.app.
        We should defer executing LayoutTestRelay until the simulator device booted by
        iOS Simulator is in the Booted state.

        * Scripts/webkitpy/port/ios.py: Import webkitpy.xcode.simulator.Simulator to avoid prefixing
        Simulator methods with the module name, simulator.
        (IOSSimulatorPort.setup_test_run): Wait for the simulator device to be in the Booted state
        after launching iOS Simulator. Also, wait until the simulator device is in the Shutdown state
        before launching iOS Simulator to boot it.
        (IOSSimulatorPort.testing_device): Fix up caller since we now import webkitpy.xcode.simulator.Simulator.
        (IOSSimulatorPort.simulator_path): Deleted; moved this function to class Simulator and renamed to device_directory().
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.__init__): Remove parameter state and an instance variable of the same name, which represented
        the state of the device when we created this object as part of parsing the output of `simctl list`. Callers
        interested in the state of the device are more likely interested in the current state of the device as
        opposed to the state of the device when the Device object was created.
        (Device.state): Added; turn around and call Simulator.device_state() for the current state of the device.
        (Device.path): Extracted implementation into Simulator.device_directory() so that it can be called
        from both this function and Simulator.device_state().
        (Device.create): Use Simulator.wait_until_device_is_in_state() to simplify the implementation of this function.
        (Simulator.DeviceState): Added; class of constants.
        (Simulator.wait_until_device_is_in_state): Added; this function does not return until the specified
        device is in the specified state.
        (Simulator.device_state): Added; parses the state of the device from the appropriate CoreSimulator device.plist file.
        (Simulator.device_directory): Added.
        (Simulator._parse_devices): Do not pass argument state to Device constructor as it no longer accepts it.

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

        Disable retries on Mac debug testers
        https://bugs.webkit.org/show_bug.cgi?id=141296

        Reviewed by Simon Fraser.

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

2015-02-05  Dan Bernstein  <mitz@apple.com>

        Need a way to force $xcodeSDK in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=141291

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (setXcodeSDK): Added.

2015-02-05  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar <calvaris@igalia.com>

        [Streams API] Implement a barebone ReadableStream interface
        https://bugs.webkit.org/show_bug.cgi?id=141045

        Reviewed by Benjamin Poulain.

        * Scripts/webkitperl/FeatureList.pm: Added streams-api compilation switch.

2015-02-04  Joseph Pecoraro  <pecoraro@apple.com>

        filter-build-webkit: reduce more unfiltered output
        https://bugs.webkit.org/show_bug.cgi?id=141282

        Reviewed by Daniel Bates.

        * Scripts/filter-build-webkit:
        Report CompileDTraceScript and Preprocess lines as successful.

2015-02-04  Dana Burkart  <dburkart@apple.com>

        Botwatcher's Dashboard is cramped
        https://bugs.webkit.org/show_bug.cgi?id=140273

        Reviewed by Alexey Proskuryakov.

        Add a heading key which will allow for arbitrary headings in builder queues.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus):
        (BuildbotBuilderQueueView.prototype.update):
        (BuildbotBuilderQueueView.prototype.update.appendBuildArchitecture): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotLeaksQueueView.js:
        (BuildbotLeaksQueueView.prototype.update):
        (BuildbotLeaksQueueView.prototype.update.appendBuild): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:
        (BuildbotPerformanceQueueView.prototype.update):
        (BuildbotPerformanceQueueView.prototype.update.appendBuild): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._unauthorizedAccess):
        (BuildbotQueueView.prototype._appendBuild):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype.update):
        (BuildbotTesterQueueView.prototype.update.appendBuild): Deleted.

2015-02-04  Simon Fraser  <simon.fraser@apple.com>

        WKTR should not use -mainScreen to pick a color profile
        https://bugs.webkit.org/show_bug.cgi?id=141265

        Reviewed by Tim Horton.
        
        -[NSScreen mainScreen] depends on the active window, so use the first screen
        (which is the one we put the window on anyway).
        
        Do some cleanup in DRT that makes the code look similar.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2015-02-04  Simon Fraser  <simon.fraser@apple.com>

        LayoutTestHelper should set the color profile of all displays
        https://bugs.webkit.org/show_bug.cgi?id=141260

        Reviewed by Tim Horton.
        
        WebKitTestRunner can (erroneously) grab the colorspace of the "main" screen.
        which is the screen with the active window. Make things more robust by changing
        the colorspace of all displays, not just the main screen, when running layout tests.

        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig: Enable ARC
        * DumpRenderTree/mac/LayoutTestHelper.m: 
        (originalColorProfileURLs):
        (colorProfileURLForDisplay):
        (displayUUIDStrings):
        (saveDisplayColorProfiles):
        (setDisplayColorProfile):
        (restoreDisplayColorProfiles):
        (installLayoutTestColorProfile):
        (restoreUserColorProfile):
        (main):        
        Store display color profiles by map of UUID strings to URLs (NSUUID and CFUUID are not
        toll-free bridged, sadly). Use the map to restore all profiles on exit.
        Convert to use more Obj-C types.

2015-02-04  Daniel Bates  <dabates@apple.com>

        test-webkitpy fails on Mac without iphoneos SDK
        https://bugs.webkit.org/show_bug.cgi?id=141255
        <rdar://problem/19619691>

        I inadvertently committed the wrong exception message. Fix up the exception message
        to instruct a person to install the iOS SDK when it cannot be found.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.determine_full_port_name):

2015-02-04  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should sort the list of files when generating the w3c-import.log
        https://bugs.webkit.org/show_bug.cgi?id=141156

        Reviewed by Bem Jones-Bey.

        Sort explicitly the list of imported files written in the w3c-import.log.
        Removed logging of the import date.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_import_log):

2015-02-04  Daniel Bates  <dabates@apple.com>

        test-webkitpy fails on Mac without iphoneos SDK
        https://bugs.webkit.org/show_bug.cgi?id=141255
        <rdar://problem/19619691>

        Reviewed by David Kilzer and Alexey Proskuryakov.

        Fixes an issue where test-webkitpy fails on a Mac without the iOS SDK. We should
        should not require the iphoneos SDK to be installed to run the webkitpy tests.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.xcode_sdk_version): Added; return the version of the specified SDK, if
        installed. We take advantage of the behavior that xcrun --show-sdk-version only writes
        to standard output if the SDK is installed to return the empty string if the SDK is
        not installed.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.xcode_sdk_version): Added.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.determine_full_port_name): Modified to call PlatformInfo.xcode_sdk_version()
        to get the version of the iphoneos SDK, if installed.

2015-02-04  Alexey Proskuryakov  <ap@apple.com>

        run-webkit-tests doesn't always capture ASan violation reports
        https://bugs.webkit.org/show_bug.cgi?id=141231

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test): Don't look for CrashReporter crash logs if a log was provided
        by the driver already (as is the case with ASan violations, which are printed to
        stderr).
        (Driver._check_for_address_sanitizer_violation): Check if the line is a start of ASan
        report.
        (Driver._read_block): Give ASan enough time to symbolicate a crash, and put it into
        a separate variable for reporting.

2015-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        [webkitpy] Add platform specific Skipped file mechanism for performance tests
        https://bugs.webkit.org/show_bug.cgi?id=141152

        Reviewed by Csaba Osztrogonác.

        Support a test-expectation-like syntax in performance tests' skipped files.
        e.g. [Mac] Parsed/BadTest.html will skip Parsed/BadTest.html on Mac ports.

        * Scripts/webkitpy/port/base.py:
        (Port.skipped_perf_tests): Implemented the syntax support by a regular expression.

        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_skipped_perf_tests): Test the new syntax.

2015-02-04  Alexey Proskuryakov  <ap@apple.com>

        When tests fail on leaks bot so much that there are no leaks detected, dashboard erroneously shows green
        https://bugs.webkit.org/show_bug.cgi?id=141236

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotLeaksQueueView.js:
        (BuildbotLeaksQueueView.prototype.update.appendLeaksQueueStatus):

2015-02-04  Chris Dumez  <cdumez@apple.com>

        Add removeFirst(value) / removeAll(value) methods to WTF::Vector
        https://bugs.webkit.org/show_bug.cgi?id=141192

        Reviewed by Benjamin Poulain.

        Add API tests for Vector::removeFirst(value) and
        Vector::removeAll(value).

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

2015-02-03  Tim Horton  <timothy_horton@apple.com>

        Add WKPageNavigationClient as C SPI around API::NavigationClient, and adopt in WKTR
        https://bugs.webkit.org/show_bug.cgi?id=141217

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestController.cpp:
        (WTR::copyWebCryptoMasterKey):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptions):
        (WTR::TestController::didCommitNavigation):
        (WTR::TestController::didFinishNavigation):
        (WTR::TestController::canAuthenticateAgainstProtectionSpace):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::decidePolicyForPluginLoad):
        (WTR::TestController::decidePolicyForNavigationAction):
        (WTR::TestController::decidePolicyForNavigationResponse):
        (WTR::TestController::didCommitLoadForFrame): Deleted.
        (WTR::TestController::didFinishLoadForFrame): Deleted.
        * WebKitTestRunner/TestController.h:
        Adopt WKPageNavigationClient and adjust to its semantics (navigations are main-frame-only, etc.)

2015-02-03  Dhi Aurrahman  <diorahman@rockybars.com>

        Unreviewed. Add myself as a committer.

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

2015-02-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix.

        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::unableToImplementPolicyWithError): The message was missing a linefeed,
        so was not matching expected output.

2015-02-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Unreviewed. Moving myself to the committer section at last.

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

2015-02-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Tests fail because DRT reports '(null)' instead of an empty string
        https://bugs.webkit.org/show_bug.cgi?id=141205

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/HistoryDelegate.cpp:
        (HistoryDelegate::didNavigateWithNavigationData): Deal with empty BSTR values
        properly so that we match expected DumpRenderTree output.

2015-02-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] TestWebKitAccessibility is not skipped
        https://bugs.webkit.org/show_bug.cgi?id=141179

        Reviewed by Carlos Garcia Campos.

        Don't attempt to skip TestWebKitAccessibility. This path is wrong so it was not being
        skipped, and it apparently works reliably on the bots.

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

2015-02-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        run-perf-tests: allow to specify a wrapper command.
        https://bugs.webkit.org/show_bug.cgi?id=141172

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Update text to indicate is also valid for WTR.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Add wrapper command.

2015-02-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct version parsing warning in update-webkit
        https://bugs.webkit.org/show_bug.cgi?id=141200

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (setupAppleWinEnv): Strip out any specific version build level
        from the Cygwin version information.
  

2015-02-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Attempt to improve the reliability of HTTP service
        https://bugs.webkit.org/show_bug.cgi?id=141191

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Use default XAMPP pidfile location.
        (LayoutTestApacheHttpd._stop_running_server): Delete the abandoned PID file
        when stopping the service doesn't do so on its own (for Windows runs).

2015-02-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Web platform test server should not need to create __init__.py files
        https://bugs.webkit.org/show_bug.cgi?id=141030

        Reviewed by Ryosuke Niwa.

        W3C TestImporter ensures that copied __init__.py files are not empty.
        If needed, a comment is inserted in __init__.py files.
        Added a unit test to check that web-platform-tests tools and scripts python modules can be imported.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.getsize):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_start_cmd):
        (TestWebPlatformTestServer):
        (TestWebPlatformTestServer.test_import_web_platform_test_modules):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.import_tests):

2015-01-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Unreviewed. Moving myself to the committer section.

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

2015-02-02  Saam Barati  <saambarati1@gmail.com>

        Create tests for JSC's Control Flow Profiler
        https://bugs.webkit.org/show_bug.cgi?id=141123

        Reviewed by Filip Pizlo.

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

2015-02-02  Csaba Osztrogonác  <ossy@webkit.org>

        Remove copy/paste code from run-jsc-stress-tests to determine numberOfTests
        https://bugs.webkit.org/show_bug.cgi?id=141158

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2015-02-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] MiniBrowser should close itself on Ctrl+W or Ctrl+Q
        https://bugs.webkit.org/show_bug.cgi?id=141142

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Quit on Ctrl+W or Ctrl+Q

2015-02-01  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Web platform test server is not always launching properly on Mac EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=141141

        Unreviewed.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (create_wpt_empty_file_if_needed): Removed creation of empty __init.py__ files from AutoInstalled modules.

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove even more Mountain Lion support
        https://bugs.webkit.org/show_bug.cgi?id=141124

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateTestingFonts):
        (prepareConsistentTestingEnvironment):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        (-[EventSendingController contextClick]):
        * DumpRenderTree/mac/TextInputController.m:
        * LayoutTestRelay/Configurations/Base.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _downloadDidFinish:]):
        * TestWebKitAPI/Tests/mac/StringTruncator.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * WebKitLauncher/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::webProcessName):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        * asan/asan.xcconfig:

2015-01-31  Commit Queue  <commit-queue@webkit.org>

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

        This didn't fully fix the issue (Requested by anttik on
        #webkit).

        Reverted changeset:

        "OSObjectPtr does not work with dispatch_data_t on Maverics"
        https://bugs.webkit.org/show_bug.cgi?id=141081
        http://trac.webkit.org/changeset/179408

2015-01-31  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        https://trac.webkit.org/changeset/179439 breaks a python test
        https://bugs.webkit.org/show_bug.cgi?id=141114

        Unreviewed.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._install_modules): Checks whether WPTModules file exists before reading it as no such file exists in mock tests.  

2015-01-31  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Import W3C web platform tests infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=140934

        Reviewed by Ryosuke Niwa.

        Loading necessary web platform tests modules before launching server.
        Ensuring that some empty __init__.py files are present and create them if necessary. 

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:

2015-01-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Another unreviewed test fix.

        Correct copy/paste error in buildbot handling.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._get_apache_config_file_path):

2015-01-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix.

        Correct path handling based on failures on test bots to get things running again.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._get_apache_config_file_path):

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed. Fix Windows build after r179409.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::notifyDone):
        (TestRunner::queueLoad):

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Rename shared() static member functions to singleton() for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=141088

        Reviewed by Ryosuke Niwa and Benjamin Poulain.

        Rename shared() static member functions to singleton() for singleton
        classes as per the recent coding style change.

2015-01-30  Antti Koivisto  <antti@apple.com>

        OSObjectPtr does not work with dispatch_data_t on Maverics
        https://bugs.webkit.org/show_bug.cgi?id=141081

        Reviewed by Pratik Solanki.

        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtr.cpp:
        (TestWebKitAPI::TEST):

2015-01-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch to Apache on Windows
        https://bugs.webkit.org/show_bug.cgi?id=141060

        Reviewed by Alexey Proskuryakov.

        Update our scripts under Windows (and Cygwin) to locate and use
        the XAMPP installation of Apache for running tests.

        * Scripts/run-webkit-httpd:
        * Scripts/webkitperl/httpd.pm:
        (getHTTPDPath):
        (getDefaultConfigForTestDirectory):
        (getHTTPDConfigPathForTestDirectory):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_kill_process):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._get_apache_config_file_path):
        (LayoutTestApacheHttpd._stop_running_server):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._is_server_running_on_all_ports):
        * Scripts/webkitpy/port/base.py:
        (Port._apache_config_file_name_for_platform):
        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform):
        * Scripts/webkitpy/port/win.py:
        (WinPort.show_results_html_file):
        (WinPort._uses_apache):
        (WinPort):
        (WinPort._path_to_apache):

2015-01-29  Alexey Proskuryakov  <ap@apple.com>

        Built result takes too long to be compressed on bots
        https://bugs.webkit.org/show_bug.cgi?id=141056

        Reviewed by Daniel Bates.

        Reduces compression time from ~3.5 min to ~1.5 min. Archive size gets 2% bigger.

        * BuildSlaveSupport/test-result-archive: (archiveTestResults):

2015-01-29  Sam Weinig  <sam@webkit.org>

        Remove support for screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=141038

        Reviewed by Tim Horton.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        Remove call to now setScreenFontSubstitutionEnabled() which is a no-op.

2015-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        Make run-jsc-stress-tests --remote work on Linux too
        https://bugs.webkit.org/show_bug.cgi?id=141000

        Reviewed by Darin Adler.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: Omit error message of sysctl,
        use bash/dash compatible signal names, use Linux/Mac compatible find options,
        use bash/dash compatible functions.
        * Scripts/run-jsc-stress-tests: Use Linux/Mac compatible find options.

2015-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Simplify jscore-test buildstep
        https://bugs.webkit.org/show_bug.cgi?id=140821

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): Inherited from TestWithFailureCount and removed useless actual.html logfile.
        (RunJavaScriptCoreTests.countFailures): Added.
        (RunJavaScriptCoreTests.commandComplete): Deleted.
        (RunJavaScriptCoreTests.evaluateCommand): Deleted.
        (RunJavaScriptCoreTests.getText): Deleted.
        (RunJavaScriptCoreTests.getText2): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Updated.
        (RunJavaScriptCoreTestsTest.test_mozilla_failure_old_output):
        (RunJavaScriptCoreTestsTest.test_mozilla_failures_old_output):
        (RunJavaScriptCoreTestsTest.test_jsc_stress_failure_new_output):
        (RunJavaScriptCoreTestsTest.test_jsc_stress_failures_new_output):

2015-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, revert r179337, we don't need this dependency.

        * efl/install-dependencies:
        * gtk/install-dependencies:

2015-01-28  Shivakumar JM  <shiva.jm@samsung.com>

        Unreviewed. Moving myself to the committer section.

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

2015-01-28  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r179326, added uuid-dev package as new dependency.

        * efl/install-dependencies:
        * gtk/install-dependencies:

2015-01-28  Timothy Horton  <timothy_horton@apple.com>

        Add a WebKitMessageRecorder DTrace provider, exposing IPC details to DTrace
        https://bugs.webkit.org/show_bug.cgi?id=140673

        Reviewed by Sam Weinig.

        * Scripts/dtrace/trace-webkit2-messages.d: Added.
        Add a DTrace script that outputs a small blob of JSON per message.

2015-01-28  Geoffrey Garen  <ggaren@apple.com>

        Removed fastMallocForbid / fastMallocAllow
        https://bugs.webkit.org/show_bug.cgi?id=141012

        Reviewed by Mark Hahnenberg.

        Fixed a test bug I noticed while testing.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (stopJavaScriptThreads): Lock the javaScriptThreads lock before
        accessing javaScriptThreads -- otherwise, you'll ASSERT.

2015-01-28  Dana Burkart  <dburkart@apple.com>

        asan.xcconfig should use CLANG_ADDRESS_SANITIZER=YES instead of -fsanitize=address
        https://bugs.webkit.org/show_bug.cgi?id=141015

        Reviewed by Alexey Proskuryakov.

        * asan/asan.xcconfig:

2015-01-28  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-01-28  Lucas Forschler  <lforschler@apple.com>

        Increase the FileUpload block size in an attempt to improve network performance.
        
        Reviewed by Alexey Proskuryakov.
        
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (UploadBuiltProduct.__init__):

2015-01-28  Dana Burkart  <dburkart@apple.com>

        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=136765

        Reviewed by Alexey Proskuryakov.

        * 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:
        * WebKitLauncher/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2015-01-28  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Implement support for new AtkRole types for MathML
        https://bugs.webkit.org/show_bug.cgi?id=140916

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp: Add mapping for new ATK roles
        * gtk/jhbuild.modules: Bump minimum version of ATK used by jhbuild to 2.15.4

2015-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Stop removing color marks from unit tests output
        https://bugs.webkit.org/show_bug.cgi?id=140996

        Reviewed by Philippe Normand.

        Since r178236 google tests use a custom simplified output without
        any colors, so we don't need to handle the case of non ttys to
        remove the color marks.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__):
        (TestRunner._run_test_command.parse_line):

2015-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Unit test /webkit2/WebKitWebView/page-visibility from WebKit2Gtk/TestWebKitWebView fails
        https://bugs.webkit.org/show_bug.cgi?id=131731

        Reviewed by Žan Doberšek.

        A web page loaded offscreen is in prerender state not hidden.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip /webkit2/WebKitWebView/page-visibility.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewPageVisibility):

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        Partially revert r178802.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion@2x.png:

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard asserts on some commits
        https://bugs.webkit.org/show_bug.cgi?id=140926

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._convertCommitInfoElementToObject): Added a case for another root directory.

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        Make flakiness dashboard OS list actually match test_expectations.py
        https://bugs.webkit.org/show_bug.cgi?id=140969

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2015-01-27  Brent Fulgham  <bfulgham@apple.com>

        [Win] WinLauncher crashes on eleventh site visited
        https://bugs.webkit.org/show_bug.cgi?id=140960

        Reviewed by Anders Carlsson.

        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::showLastVisitedSites): Don't access off the end of
        the history array.

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Disable building Java applets by default
        https://bugs.webkit.org/show_bug.cgi?id=140957
        rdar://problem/19619529

        Reviewed by Anders Carlsson.

        It was actually already disabled unconditionally, by accident.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: (parse_args):
        * Scripts/webkitpy/port/mac.py:
        (MacPort._check_port_build):
        (MacPort._build_java_test_support):

2015-01-27  Daniel Bates  <dabates@apple.com>

        [iOS] run-webkit-tests --platform=ios* --lint-test-files does not work
        https://bugs.webkit.org/show_bug.cgi?id=140949

        Reviewed by Alexey Proskuryakov.

        Add "ios-simulator" and "ios-simulator-wk2" to the list of ports without
        builders so that run-webkit-tests can lint the appropriate TestExpectation
        files.

        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__): Move logic to query for the Mac build directory from here...
        (IOSSimulatorPort.relay_path): to here as this is the only caller that makes use of that
        information to find the LayoutTestRelay tool. Otherwise, "self.assertEqual(len(calls), 1)"
        in unit test webkitpy.tool.commands.rebaseline_unittest.TestRebaselineExpectations.test_rebaseline_expectations
        will fail because IOSSimulatorPort.__init__() ultimately calls Tools/Scripts/webkit-build-directory
        to determine the Mac build directory for each instantiation of IOSSimulatorPort. And this unit
        test instantiates a port object for each builder listed in file Scripts/webkitpy/port/builders.py.


2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        Update bots on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=140956

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2015-01-27  Daniel Bates  <dabates@apple.com>

        [iOS WK2] Add directory LayoutTests/platform/wk2 to the list of baseline search paths
        https://bugs.webkit.org/show_bug.cgi?id=140942

        Reviewed by Alexey Proskuryakov.

        The directory LayoutTests/platform/wk2 contains test expectations and test results that
        are applicable to all WebKit2 ports. We should make use of this information when
        running layout tests using iOS WebKit2.

        Additionally, make use of the convenience function Port._wk2_port_name() for the name
        of the WebKit2 port instead of directly using string concatenation.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_baseline_search_path):

2015-01-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Win] Disable FTL stress tests
        https://bugs.webkit.org/show_bug.cgi?id=140932

        Reviewed by Brent Fulgham.

        * Scripts/run-javascriptcore-tests:

2015-01-27  Daniel Bates  <dabates@apple.com>

        REGRESSION (r179130): Perl warns about subroutine redefinition when running configure-xcode-for-ios-development
        https://bugs.webkit.org/show_bug.cgi?id=140939

        Reviewed by Eric Carlson.

        Fixes the Perl warning: "Subroutine wanted redefined at Tools/Scripts/configure-xcode-for-ios-development line 106."

        * Scripts/webkitdirs.pm:
        (hasUserInstalledAppInSimulatorDevice): Pass a reference to an anonymous function instead
        of a named function to find() to avoid redefinition warnings in scripts that include webkitdirs.pm
        and define a function called wanted.

2015-01-27  Daniel Bates  <dabates@apple.com>

        Teach run-webkit-app --simulator how to install custom built app
        https://bugs.webkit.org/show_bug.cgi?id=140691

        Fix inadvertent omission of directory test flag in expression to check for the
        existence of the iOS simulator device-specific directory for user installed apps.

        * Scripts/webkitdirs.pm:
        (hasUserInstalledAppInSimulatorDevice):

2015-01-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] ASSERTION FAILED !m_ptr under AccessibilityController::winAddNotificationListener
        https://bugs.webkit.org/show_bug.cgi?id=87426
        <rdar://problem/11527899>

        Reviewed by Darin Adler.

        Revise COMPtr to work better with our HashMap implementation. Use
        modern loop syntax.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::winNotificationReceived):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpBackForwardListForAllWindows):

2015-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Win] Enable JSC stress tests by default
        https://bugs.webkit.org/show_bug.cgi?id=128307

        Reviewed by Brent Fulgham.

        * Scripts/run-javascriptcore-tests:

2015-01-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Remove the various aliases for --ios-simulator (--sim, --simulator, --ios-sim) in
        arguments for build and test scripts
        https://bugs.webkit.org/show_bug.cgi?id=139748

        Reviewed by Daniel Bates.

        There was much confusion resulting from the multitude of aliases used to build/test for
        the iOS simulator. Standardize on "--ios-simulator", which is also the name of the layout
        tests directory.

        This fixes an issue where run-api-tests and some other scripts failed when run with
        --simulator.

        * Scripts/build-webkit:
        * Scripts/package-root:
        (usage):
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineXcodeSDK):
        * Scripts/webkitpy/port/factory.py:
        (platform_options):

2015-01-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix possible crash when -[WKWebView evaluateJavaScript:completionHandler:] was called then the WKWebView is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=140203
        rdar://problem/19198492

        Reviewed by Sam Weinig.

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

2015-01-26  David Kilzer  <ddkilzer@apple.com>

        Add iOS EWS to build.webkit.org/dashboard
        <http://webkit.org/b/140627>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice.png: Add.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice@2x.png: Add.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Add ios-ews queue info.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        Add iOS8Device platform.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-8 img.logo): Add CSS to draw
        iOS device logo.

2015-01-26  Filip Pizlo  <fpizlo@apple.com>

        copy-webkitlibraries-to-product-directory's hack to build LLVM from source should be hardened for Xcode deciding it needs SDKROOT set
        https://bugs.webkit.org/show_bug.cgi?id=140896

        Reviewed by Michael Saboff.
        
        I've encountered some Xcode setups where you need to set SDKROOT to get llvm to build. This
        makes our script do this.
        
        Note that an alternative would be to run clang via "xcrun clang" rather than directly, but
        this would be harder given llvm's autoconf setup.

        * Scripts/copy-webkitlibraries-to-product-directory:

2015-01-26  Alexey Proskuryakov  <ap@apple.com>

        Update bot assignments.

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

2015-01-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Integrate WP python server into WebKit test framework
        https://bugs.webkit.org/show_bug.cgi?id=127094

        Reviewed by Ryosuke Niwa.

        This patch adds W3C web server (wptserver) as a new HTTP server.
        wptserver is used to serve all tests inside LayoutTests/imported/w3c/wpt.
        wptserver implementation should be imported within the import of the Web Platform Test suite (to ensure keeping server and tests in sync) in LayoutTests/imported/w3c/wpt.

        Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py serves as main entry point to wpt spawned process.
        Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py is responsible to start/stop the wpt server process.
        It also sets up the server config and testharness.js/testharnessreport.js files at start and stop of the wpt server.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.communicate):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py: Adding start/stop of web platform test server according boolean parameter.
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner.start_servers):
        (LayoutTestRunner.stop_servers):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py: Updated to check for wpt server start/stop.
        (LayoutTestRunnerTests._run_tests):
        (LayoutTestRunnerTests.test_servers_started.start_web_platform_test_server):
        (LayoutTestRunnerTests.test_servers_started.stop_web_platform_test_server):
        (LayoutTestRunnerTests):
        (LayoutTestRunnerTests.test_servers_started):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:  Updated to check whether a test is a wpt test and whether wpt server launch is needed.
        (Manager.__init__):
        (Manager._is_http_test):
        (Manager._is_web_platform_test):
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_needs_servers.get_wpt_doc_root):
        (ManagerTest.test_needs_servers.get_manager):
        (ManagerTest.test_needs_servers):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Added an option to control the doc_root of the wpt server.
        (parse_args):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py: Added.
        (main):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py: Added.
        (doc_root):
        (base_url):
        (WebPlatformTestServer):
        (WebPlatformTestServer.__init__):
        (WebPlatformTestServer._set_start_cmd):
        (WebPlatformTestServer._copy_webkit_test_files):
        (WebPlatformTestServer._clean_webkit_test_files):
        (WebPlatformTestServer._prepare_config):
        (WebPlatformTestServer._spawn_process):
        (WebPlatformTestServer._stop_running_server):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py: Added.
        (TestWebPlatformTestServer):
        (TestWebPlatformTestServer.test_start_cmd):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.to.start_web_platform_test_server):
        (Port.to):
        (Port.to.web_platform_test_server_doc_root):
        (Port.to.web_platform_test_server_base_url):
        (Port.to.stop_web_platform_test_server):
        * Scripts/webkitpy/port/driver.py: Updated the test name <-> test URL conversion routines.
        (Driver.__init__):
        (Driver.is_web_platform_test):
        (Driver.test_to_uri):
        (Driver.uri_to_test):
        (Driver._command_from_driver_input):
        * Scripts/webkitpy/port/driver_unittest.py:  Updated tests according new conversion rules.
        (DriverTest.test_test_to_uri):
        (DriverTest.test_uri_to_test):

2015-01-26  Daniel Bates  <dabates@apple.com>

        Teach run-webkit-app --simulator how to install custom built app
        https://bugs.webkit.org/show_bug.cgi?id=140691

        Reviewed by David Kilzer.

        We should teach run-webkit-app --simulator how to install a custom built app.

        Currently run-webkit-app --simulator can only run a system app or an app that
        was installed using the simctl command line tool. For convenience we should
        teach run-webkit-app --simulator how to install a custom built app.

        As a side effect of this change run-safari --simulator will install and run
        a custom built of MobileSafari (if it exists).

        * Scripts/webkitdirs.pm:
        (iOSSimulatorDevices): Added FIXME comment to decouple device representation in
        Perl from the structure of the device.plist file.
        (plistPathFromBundle): Fix if-statement condition so that we actually perform a
        file system check to determine the plist path for a Mac app bundle.
        (appIdentifierFromBundle): Pass absolute files system path to defaults(1). Otherwise,
        it will complain that it cannot find the file: "Domain ... does not exist".
        (appDisplayNameFromBundle): Ditto.
        (waitUntilIOSSimulatorDeviceIsInState): Added; helper function that does not return
        until a simulator device is the specified state.
        (relaunchIOSSimulator): Renamed; formerly named openIOSSimulator. Quits iOS Simulator
        (if it's open) before opening it again so as to ensure that the iOS Simulator boots
        the specified device.
        (quitIOSSimulator): Added optional parameter, $waitForShutdownOfSimulatedDeviceUDID.
        As implied by its name, this function will not return until the specified simulator
        device UDID is in the shutdown state.
        (iosSimulatorDeviceByUDID): Added; returns the device dictionary object for the simulator
        device with the specified UDID.
        (isIOSSimulatorSystemInstalledApp): Resolve symbolic links in iosSimulatorApplicationsPath()
        before using it as part of a prefix match to avoid a mismatch. In the public iOS 8.1 SDK the
        return value of iosSimulatorApplicationsPath(), which returns a result analogous to the shell
        expression echo `xcrun --sdk iphonesimulator --show-sdk-path`/Applications/, contains a
        symbolic link. Specifically, echo `xcrun --sdk iphonesimulator --show-sdk-path` returns
        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk,
        which is a symbolic link to /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk.
        (hasUserInstalledAppInSimulatorDevice): Added.
        (isSimulatorDeviceBooted): Added; returns whether the specified simulator device is in the
        "Booted" state.
        (runIOSWebKitAppInSimulator): Modified to install a custom built app (if needed). For now,
        switching between a system installed app and a custom built version of the same app (e.g.
        custom build of MobileSafari) will erase all contents and settings in the simulator device.
        (eraseIOSSimulatorDevice): Deleted; inline implementation into runIOSWebKitAppInSimulator()
        as that was the only caller of this function.
        (bootedIOSSimulatorDevice): Deleted.
        (openIOSSimulator): Deleted.

2015-01-26  Alexey Proskuryakov  <ap@apple.com>

        Update bot assignments.

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

2015-01-26  Alexey Proskuryakov  <ap@apple.com>

        Leaks bot shouldn't run JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=140877

        Reviewed by Darin Adler.

        Shaves off 48 minutes of time.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestLeaksFactory): Slim down the leaks queue.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.print_leaks_summary):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.print_leaks_summary):
        Don't yell when leaks are detected.

2015-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        Refactor run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=140824

        Reviewed by Darin Adler.

        Separated mozilla, stress test code paths and
        determining skipped mozilla tests into subroutines.

        * Scripts/run-javascriptcore-tests:
        (runMozillaTests):
        (runJSCStressTests):
        (defaultJsDriverArgsForMozillaTests):

2015-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Fix grammar of TestWithFailureCount
        https://bugs.webkit.org/show_bug.cgi?id=140884

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestWithFailureCount):
        (TestWithFailureCount.commandComplete):
        (TestWithFailureCount.getText2):
        (RunUnitTests):
        (RunPythonTests):
        (RunPerlTests):
        (RunLLINTCLoopTests):
        (Run32bitJSCTests):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunLLINTCLoopTestsTest.test_failure):
        (Run32bitJSCTestsTest.test_failure):
        (RunUnitTestsTest.assertFailures):

2015-01-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Unreviewed. Moving myself to the committer section.

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

2015-01-26  Michael Catanzaro  <mcatanzaro@igalia.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] gtkdoc does not appear in DevHelp
        https://bugs.webkit.org/show_bug.cgi?id=139369

        Reviewed by Philippe Normand.

        * gtk/generate-gtkdoc: Create the generators in the main function
        and use them to get the local cross renference dependencies. Also
        pass the generator module name to webkitdom.write_doc_files().
        (get_gtkdoc_module_paths): Receive a list of local cross reference
        dependencies.
        (get_generator_for_config): Set the main_sgml_file property of the
        GtkDoc object from the configuration file.
        (generate_documentation): Generate the documentation for the given
        generator.
        (generate_documentation_for_config): Deleted.
        * gtk/manifest.txt.in: Expect the API version in the gtkdoc filenames.
        * gtk/webkitdom.py:
        (write_doc_files): Receive the module name used to build the
        -sections.txt filename.

2015-01-26  Commit Queue  <commit-queue@webkit.org>

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

        The GCC in the bots doesn't support the AsyncTask
        implementation (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Enable IndexedDB"
        https://bugs.webkit.org/show_bug.cgi?id=98932
        http://trac.webkit.org/changeset/179107

2015-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump libseccomp version to 2.1.1
        https://bugs.webkit.org/show_bug.cgi?id=140357

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2015-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Enable IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=98932

        Reviewed by Žan Doberšek.

        * Scripts/webkitperl/FeatureList.pm: Enable IndexedDB for the GTK port.

2015-01-25  Alexey Proskuryakov  <ap@apple.com>

        Would like leaks bot results at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122657

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        Record links provided by buildbot steps. Currently, the dashboard hardcodes more links
        than necessary, could use the ones from buildbot in more places.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue): Reflect configuration option for leaks queues.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        Add leaks queues to performance column. First, leaks are about performance indeed,
        and second, this is where we have some space to spare.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Added Yosemite Leaks queue, which was sitting neglected for at
        least a year.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid td): Moved height from queue-view - we can now have more than one
        queue view per cell. The heigt is needed to avoid ugly overlapping while loading
        results - once the results are loaded, all rows are currently higher than that.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        (.leaks-popover): Added.

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

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:
        Load BuildbotLeaksQueueView.js.

2015-01-25  peavo@outlook.com  <peavo@outlook.com>

        [Win] Add WebKit message loop interface.
        https://bugs.webkit.org/show_bug.cgi?id=140857

        Reviewed by Brent Fulgham.

        Added message loop interface which will run the message loop,
        and perform required tasks (like calling CFRunLoopRunInMode)
        on each iteration of the loop.

        * WinLauncher/WinMain.cpp:
        (wWinMain): Use new message loop interface.

2015-01-24  Dan Bernstein  <mitz@apple.com>

        update-webkit’s --internal option is unused
        https://bugs.webkit.org/show_bug.cgi?id=140861

        Reviewed by Anders Carlsson.

        * Scripts/update-webkit: Removed the option.

2015-01-24  Brent Fulgham  <bfulgham@apple.com>

        DumpRenderTree needs to run with Windows native controls on Windows
        https://bugs.webkit.org/show_bug.cgi?id=25592

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues): Tell DRT to use native controls.
        (prepareConsistentTestingEnvironment): Ditto.

2015-01-23  David Kilzer  <ddkilzer@apple.com>

        test-webkitpy: webkitpy.tool.commands.earlywarningsystem_unittest.EarlyWarningSystemTest.test_ewses fails on EFL, GTK, Win ports
        <http://webkit.org/b/140787>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.determine_full_port_name): Instead of checking the type
        of the current host, test if /usr/bin/xcrun exists before trying
        to use it.

2015-01-23  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the false positive build failures on the Windows buildbots
        https://bugs.webkit.org/show_bug.cgi?id=140819

        Reviewed by Brent Fulgham.

        Increase the build timeout (without producing output) to 2 hours for Windows bots,
        the default 20 minutes is enough for others since they produce output during the build.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildFactory.__init__):

2015-01-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Teach WebKit to provide IAccessible2 'get_language' and access AXLanguage
        https://bugs.webkit.org/show_bug.cgi?id=140839

        Reviewed by Dean Jackson.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::language): Retrieve the 'language' BSTR
        from the IA2Locale structure and pass it to DRT.

2015-01-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update DRT Accessibility implementation to better match Mac.
        https://bugs.webkit.org/show_bug.cgi?id=140830

        Reviewed by Dean Jackson.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (convertToDRTLabel):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::helpText):
        (AccessibilityUIElement::isFocused):

2015-01-23  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION: run-perf-tests --profiler= seems to have broken
        https://bugs.webkit.org/show_bug.cgi?id=113528

        Reviewed by Daniel Bates.

        The problem is that "perf --record" (or the equivalent call for
        other profilers) is never called whenever there is a wrapper
        option in the port. We should inject the profiler call first
        (should it exists) and then use the port wrapper.

        * Scripts/webkitpy/port/driver.py:
        (Driver._command_wrapper):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_profiler_and_wrapper): New unit test.

2015-01-22  David Kilzer  <ddkilzer@apple.com>

        configure-xcode-for-ios-development needs to import webkitdirs.pm
        <http://webkit.org/b/140704>

        Fixes the following runtime error:

            Undefined subroutine &main::exitStatus called at ./Tools/Scripts/configure-xcode-for-ios-development line 167.

        * Scripts/configure-xcode-for-ios-development: Add back code to
        import webkitdirs.pm for the exitStatus() method.  Not sure why
        I removed it before patch review.

2015-01-22  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r178847): Yosemite 32-bit bot isn't doing any work
        https://bugs.webkit.org/show_bug.cgi?id=140795

        Reviewed by Jon Honeycutt.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        r178847 accidentally remove the scheduler for this bot. Re-add it to the
        Yosemite scheduler.

2015-01-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Expose missing editing features through WebView interface
        https://bugs.webkit.org/show_bug.cgi?id=140773
        <rdar://problem/19565421>

        Reviewed by Dean Jackson.

        Connect the various WebView editing delegate methods to our
        test infrastructure. Also prefer _bstr_t to raw BSTR types
        to simplify life cycle management.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::QueryInterface):
        (dumpPath):
        (dump):
        (EditingDelegate::shouldBeginEditingInDOMRange):
        (EditingDelegate::shouldEndEditingInDOMRange):
        (EditingDelegate::shouldInsertNode):
        (EditingDelegate::shouldInsertText):
        (EditingDelegate::shouldDeleteDOMRange):
        (EditingDelegate::shouldChangeSelectedDOMRange):
        (EditingDelegate::shouldApplyStyle):
        (EditingDelegate::shouldChangeTypingStyle):
        (EditingDelegate::doPlatformCommand):
        (EditingDelegate::webViewDidBeginEditing):
        (EditingDelegate::webViewDidChange):
        (EditingDelegate::webViewDidEndEditing):
        (EditingDelegate::webViewDidChangeTypingStyle):
        (EditingDelegate::webViewDidChangeSelection):
        (EditingDelegate::checkSpellingOfString):
        (EditingDelegate::onNotify):
        * DumpRenderTree/win/EditingDelegate.h:

2015-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Add a build flag for ES6 class syntax
        https://bugs.webkit.org/show_bug.cgi?id=140760

        Reviewed by Michael Saboff.

        * Scripts/webkitperl/FeatureList.pm:

2015-01-22  Daniel Bates  <dabates@apple.com>

        [iOS] run-webkit-tests --ios-sim dies with an error; fails to parse Apple Internal
        runtime in simctl output
        https://bugs.webkit.org/show_bug.cgi?id=140751

        Reviewed by David Kilzer.

        Following the fix for <rdar://problem/19444383>, run-webkit-tests --ios-sim dies
        with an error because it does not know how to parse the output of the simctl tool
        to identify an Apple Internal runtime.

        * Scripts/webkitpy/xcode/simulator.py:
        (Runtime.__init__): Add parameter is_internal_runtime (defaults to False).
        (Runtime.__eq__): Take is_internal_runtime when comparing two Runtime objects for equality.
        (Runtime.__repr__): Update printable representation of Runtime object to indicate whether
        the runtime is an internal runtime.
        (Simulator): Update regular expressions runtime_re and version_re to match an internal runtime.
        (Simulator._parse_runtimes): Pass is_internal_runtime to the Runtime constructor with the
        appropriate value.
        (Simulator._parse_devices): Pass argument is_internal_runtime to Simulator.runtime() so that
        it updates the appropriate Runtime object.
        (Simulator.runtime): Added optional parameter, is_internal_runtime. Modified to support
        looking up a Runtime object for an internal runtime.

2015-01-22  Alexey Proskuryakov  <ap@apple.com>

        LeaksViewer doesn't show recent builds if there are less than 10
        https://bugs.webkit.org/show_bug.cgi?id=140716

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:

2015-01-22  Lucas Forschler  <lforschler@apple.com>

        Add Apple build slaves.
        Fixed text alignment for slave list.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2015-01-21  Lucas Forschler  <lforschler@apple.com>

        Teach build.webkit.org about bot308 and bot309.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2015-01-21  Lucas Forschler  <lforschler@apple.com>

        Add two Apple Mavericks slaves.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2015-01-21  Daniel Bates  <dabates@apple.com>

        Add iOS WebKit1 TestExpectation file
        https://bugs.webkit.org/show_bug.cgi?id=140739

        Reviewed by David Kilzer.

        Teach run-webkit-tests to look for iOS WebKit1-specific test results and
        expectations in directory LayoutTests/platform/ios-simulator-wk1.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_baseline_search_path):

2015-01-21  David Kilzer  <ddkilzer@apple.com>

        [iOS] Update configure-xcode-for-ios-development to copy missing headers to iphoneos SDK
        <http://webkit.org/b/140704>

        Reviewed by Daniel Bates.

        * Scripts/configure-xcode-for-ios-development:
        - Update copyright.
        - Remove FIXME addressed by r178709.
        - Call copyMissingHeadersToIPhoneOSSDKIfNeeded().
        (copyMissingHeadersToIPhoneOSSDKIfNeeded): Add method to copy
        missing headers from iphonesimulator SDK to iphoneos SDK.
        (sdkDirectory): Add method that returns SDK directory.
        (sdkPlatformDirectory): Extract method from
        xcodeSDKSpecificationsPath() that returns SDK platform
        directory.
        (xcodeSDKSpecificationsPath): Update to use
        sdkPlatformDirectory().

2015-01-21  Alexey Proskuryakov  <ap@apple.com>

        https://build.webkit.org/dashboard/metrics.html fails because of ios-ews
        https://bugs.webkit.org/show_bug.cgi?id=140731

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._analyzeAllBubblesPerformance): Corrected a typo.

2015-01-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] eventSender does not support scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=140726
        <rdar://problem/19549865>

        Reviewed by Dean Jackson.

        * DumpRenderTree/win/EventSender.cpp:
        (scalePageByCallback): Provide implementation using new WebView method.

2015-01-21  Lucas Forschler  <lforschler@apple.com>

        Remove Apple Mountain Lion Build & Test slaves.
        
        Unreviewed.

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

2015-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(INSPECTOR) ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=140668

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::showWebInspector):
        (TestRunner::closeWebInspector):
        (TestRunner::evaluateInWebInspector):
        * Scripts/webkitperl/FeatureList.pm:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::showWebInspector):
        (WTR::TestRunner::closeWebInspector):
        (WTR::TestRunner::evaluateInWebInspector):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2015-01-20  Alexey Proskuryakov  <ap@apple.com>

        Update build.webkit.org/dashboard to match current Mac queues.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Lion.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Lion@2x.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion@2x.png: Removed.
        * 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:
        (table.queue-grid tr.platform.mac-os-x-mountain-lion img.logo): Deleted.
        (table.queue-grid tr.platform.mac-os-x-lion img.logo): Deleted.

2015-01-20  Lucas Forschler  <lforschler@apple.com>

        Update Apple MountainLion Leaks slave to Yosemite
        Update Apple MountainLion Release (32-bit) Build slave to Yosemite
        
        Unreviewed.

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

2015-01-20  Lucas Forschler  <lforschler@apple.com>

        Update LeaksViewer from MountainLion to Yosemite
        
        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._displayURLPrompt):

2015-01-20  Jake Nielsen  <jacob_nielsen@apple.com>

        Fix EWS python unit tests and address code comments as per 140476
        https://bugs.webkit.org/show_bug.cgi?id=140637

        Reviewed by David Kilzer.

        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.__init__):
        Adds DEFAULT_ARCHITECTURE member.
        (Port.architecture):
        Removes architecture member and instead uses
        self.get_option('architecture'). Also removes redundant architecture
        method.
        (Port.set_architecture):
        Adds a setter for the architecture variable to be able to set a flag
        upon modification.
        (Port.test_configuration):
        Uses self.architecture() instead of self._architecture.
        * Scripts/webkitpy/port/ios.py:
        Overrides DEFAULT_ARCHITECTURE.
        (IOSPort):
        (IOSPort.determine_full_port_name):
        Uses subprocess.check_output instead of Popen. Uses rstrip instead of
        strip. Fixes regex to not match arbitrary characters after the
        relevent digits are matched.
        (IOSPort.__init__):
        Removes old _architecture defaulting strategy.
        (IOSPort._build_driver_flags):
        Uses self.architecture() instead of self._architecture.
        (IOSSimulatorPort):
        Overrides DEFAULT_ARCHITECTURE.
        (IOSSimulatorPort.__init__):
        Removes old _architecture defaulting strategy.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        Overrides DEFAULT_ARCHITECTURE.
        (MacPort.__init__):
        Removes old _architecture defaulting strategy.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.run_command):
        Checks the did_override_architecture flag to determine whether to add
        the --architecture option.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        Uses ews.architecture rather than trying to discern the correct
        architecture using a port object.
        (EarlyWarningSystemTest._default_expected_logs):
        * Scripts/webkitpy/tool/commands/queues.py:
        Removes use of optparse, and removes the import statement.
        (AbstractQueue.__init__):
        (PatchProcessingQueue.begin_work_queue):

2015-01-20  Sam Weinig  <sam@webkit.org>

        Attempt to fix Mountain Lion and EFL tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Disable Process-per-tab and network process on Mountain Lion and EFL.

2015-01-20  Darin Adler  <darin@apple.com>

        Remove SVGElementInstanceList, m_instanceUnderMouse, DUMP_INSTANCE_TREE, DUMP_SHADOW_TREE
        https://bugs.webkit.org/show_bug.cgi?id=140679

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
        Removed a reference to SVGElementInstanceList.

2015-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WebViewTest should prohibit overriding initializeWebExtensions()
        https://bugs.webkit.org/show_bug.cgi?id=140028

        Reviewed by Carlos Garcia Campos.

        This won't work as expected, since this function is called before the
        WebViewTest constructor completes.

        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2015-01-20  David Kilzer  <ddkilzer@apple.com>

        configure-xcode-for-ios-development needs to update iPhoneOS SDK
        <http://webkit.org/b/140661>

        Reviewed by Daniel Bates.

        * Scripts/configure-xcode-for-ios-development: Add for() loop to
        run createXcodeSpecificationFilesForSDKIfNeeded() for both
        "iphoneos" and "iphonesimulator" SDKs.
        (createXcodeSpecificationFilesForSDKIfNeeded): Extracted from
        the main body of the script.

2015-01-20  Tomas Popela  <tpopela@redhat.com>

        [GTK] Add API to set the web view editable into WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=139443

        Reviewed by Carlos Garcia Campos.

        Create the new test cases for setting the editable property on the web
        view and on the contenteditable enabled document. Also rework the
        current tests that are expecting that the web view is editable.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:
        (loadTestHtml):
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        (runEditorEditableCutTests):
        (testWebViewEditorEditableOnNonEditable):
        (testWebViewEditorEditableOnContentEditable):
        (testWebViewEditorNonEditable):
        (beforeAll):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::isEditable):
        (WebViewTest::setEditable):

2015-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add an option to create WebKitWebView snapshots with transparent background
        https://bugs.webkit.org/show_bug.cgi?id=140617

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewSnapshot): Check that the same snapshot with
        transparent background is different than the default one filled
        with white.

2015-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to change the WebKitWebView background color
        https://bugs.webkit.org/show_bug.cgi?id=140610

        Reviewed by Gustavo Noronha Silva.

        Add --bg-color command line option to MiniBrowser to be able to
        manually test the API passing any RGBA color to MiniBrowser.
        Also add a simple unit test to check that getting and setting
        colors from the API point of view.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_set_background_color):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserWindow):
        (parseBackgroundColor):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewBackgroundColor):
        (beforeAll):

2015-01-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Layout Test fast/xmlhttprequest/xmlhttprequest-no-file-access.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=140665

        Reviewed by Brian Burg.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Correct string search and concatenation to
        match expected test output.

2015-01-19  Benjamin Poulain  <bpoulain@apple.com>

        Remove the support for custom suffixes on ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=140648

        Reviewed by David Kilzer.

        Custom suffixes were used for the iOS branch of WebKit.
        Now that everything is opensource, there is no need for it.

        * Scripts/VCSUtils.pm:
        (changeLogSuffix): Deleted.
        (changeLogFileName): Deleted.
        * Scripts/commit-log-editor:
        * Scripts/prepare-ChangeLog:
        (getLatestChangeLogs):
        (generateNewChangeLogs):
        (generateFileList):
        * Scripts/resolve-ChangeLogs:
        (findChangeLog):

2015-01-19  Timothy Horton  <timothy_horton@apple.com>

        Adjust naming of action menu SPI
        https://bugs.webkit.org/show_bug.cgi?id=140644
        <rdar://problem/19448129>

        Reviewed by Brian Weinstein.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (-[ActionMenusTestWKView runMenuSequenceAtPoint:preDidCloseMenuHandler:]):
        (TestWebKitAPI::TEST):

2015-01-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Generate the make dist manifest from a CMake template file
        https://bugs.webkit.org/show_bug.cgi?id=139387

        Reviewed by Martin Robinson.

        Remove the code that performs variable substitution on manifest.txt.
        Replace the custom variables used in that file with CMake variables.

        * gtk/make-dist.py:
        (Manifest.add_directory):
        (Manifest.get_full_source_path):
        (Manifest.process_line):
        (Manifest.resolve_variables): Deleted.
        (Manifest.get_full_tarball_path): Deleted.
        * gtk/manifest.txt.in: Renamed from Tools/gtk/manifest.txt.

2015-01-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct merge error in last commit.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (findAccessibleObjectById): Undo accidental paste made during landing.

2015-01-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Periodic failure in DumpRenderTree related to WebActionPropertyBag::Read
        https://bugs.webkit.org/show_bug.cgi?id=139906

        Reviewed by Dean Jackson.

        WebKit on Windows was creating uninitialized VARIANT structures, then attempting
        to use them. This patch fixes that.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (findAccessibleObjectById):
        (AccessibilityController::focusedElement):
        (logEventProc):
        (notificationListenerProc):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (self):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::valueDescription):
        (accessibilityState):
        (AccessibilityUIElement::isChecked):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFrameScrollPosition):
        (dumpFramesAsText):
        * DumpRenderTree/win/PolicyDelegate.cpp:
        (PolicyDelegate::decidePolicyForNavigationAction):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::exceededDatabaseQuota):
        * WinLauncher/Common.cpp:
        (setWindowText):

2015-01-19  Dean Jackson  <dino@apple.com>

        Add "override" to fix the build with newer clangs.

        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::CalculationDeletionTestNode::operator==):

2015-01-19  David Kilzer  <ddkilzer@apple.com>

        [iOS] Do not hard-code iphoneos.internal SDK in buildXCodeProject()
        <http://webkit.org/b/140623>

        Reviewed by Daniel Bates.

        * Scripts/build-webkit: Update help for --device switch.
        * Scripts/webkitdirs.pm:
        (determineXcodeSDK): When passing --device, prefer the internal
        iOS SDK if it exists, else fall back to the external iOS SDK.
        (buildXCodeProject): Use xcodeSDK() as -sdk argument for
        xcodebuild instead of trying to sanitize values.

2015-01-19  Alexey Proskuryakov  <ap@apple.com>

        "Unknown option: sharedworkerglobalscopeconstructorsfile" when running bindings tests.
        https://bugs.webkit.org/show_bug.cgi?id=140606

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2015-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] [WK2] TestWebKitWebView snapshot fails
        https://bugs.webkit.org/show_bug.cgi?id=120404

        Reviewed by Žan Doberšek.

        Rework the test to make sure the snapshot is always created at the
        desired size.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip /webkit2/WebKitWebView/snapshot.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewSnapshot): Use a fixed size for the document, and
        disable scrollbars to make sure the visible area is always the
        WebView size.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::showInWindowAndWaitUntilMapped): Add optional width
        and height parameters to create the window with a given size.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2015-01-18  David Kilzer  <ddkilzer@apple.com>

        iOS EWS queue name should be consistent
        <http://webkit.org/b/140585>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/config/ews.json: Rename 'ios-device'
        to 'ios'.
        * Scripts/webkitpy/common/config/ports.py: Ditto.
        (DeprecatedPort.port):
        (IOSPort):
        * Scripts/webkitpy/port/ios.py: Ditto.
        (IOSPort):

        * Scripts/webkitpy/port/factory.py:
        (PortFactory): Re-order PORT_CLASSES so ios.IOSSimulatorPort
        appears before ios.IOSPort.  If this is not done,
        `run-webkit-tests --ios-simulator` will get the wrong Port class
        (IOSPort instead of IOSSimulatorPort) due to the way that
        PortFactory.get() uses prefix matching of <Port>.port_name to
        find the correct class to use.

2015-01-18  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: OS X EWS is now on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=140595

        Reviewed by Csaba Osztrogonác.

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

2015-01-17  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix webkitpy tests on Mountain Lion, Mavericks bots

        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Add 'ios-device-7' to VERSION_FALLBACK_ORDER so that
        test-webkitpy doesn't fail since iOS 7.x SDKs are installed on
        the Mountain Lion and Mavericks bots.

2015-01-17  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix webkitpy tests on GTK Linux ports

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.determine_full_port_name): Set a sensible default if
        not running on a Mac platform or if no iOS SDK is installed.

2015-01-17  Jake Nielsen  <jacob_nielsen@apple.com>

        Create iOS-EWS client queue
        https://bugs.webkit.org/show_bug.cgi?id=140476

        Reviewed by Alexey Proskuryakov.

        * EWSTools/start-queue-mac.sh:
        Adds call to configure-xcode-for-ios-development for iOS EWS.
        * Scripts/webkitpy/common/config/ews.json:
        Adds the iOS EWS config entry.
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        Adds IOSPort to the port map.
        (IOSPort):
        (IOSPort.build_webkit_command):
        Adds --sdk=iphoneos to the webkit build command.
        * Scripts/webkitpy/port/base.py:
        (Port.architecture):
        Adds an accessor for the architecture member variable.
        * Scripts/webkitpy/port/factory.py:
        (PortFactory):
        Adds IOSPort to the port class list.
        * Scripts/webkitpy/port/ios.py:
        Adds the IOSPort to encapsulate iOS-specific things.
        (IOSPort):
        (IOSPort.determine_full_port_name):
        (IOSPort.__init__):
        (IOSPort._build_driver_flags):
        (IOSPort.operating_system):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        Adds the archetecture option to the mock options.
        (DownloadCommandsTest._default_options):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        Appends the archetecture option into calls to webkit-patch.
        (AbstractEarlyWarningSystem.review_patch):
        (AbstractEarlyWarningSystem.run_command):
        (AbstractEarlyWarningSystem.load_ews_classes):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        Adds logic to soothe the unittest now that --architecture is being
        thrown around everywhere.
        (EarlyWarningSystemTest._default_expected_logs):
        * Scripts/webkitpy/tool/commands/queues.py:
        Adds glue code to ferry the --architecture option around.
        (AbstractQueue.__init__):
        (PatchProcessingQueue.begin_work_queue):
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        Adds the archetecture option to all AbstractSteps so that
        EarlyWarningSystem doesn't start shoving --architecture into
        unsuspecting commands.
        (AbstractStep.options):
        * Scripts/webkitpy/tool/steps/build.py:
        Translates the --architecture option into an ARCHS= format to pass to
        build-webkit.
        (Build.build):
        * Scripts/webkitpy/tool/steps/options.py:
        Adds a definition for the --architecture option.
        (Options):

2015-01-16  Sam Weinig  <sam@webkit.org>

        Add a basic configuration object for WKView
        https://bugs.webkit.org/show_bug.cgi?id=140559

        Reviewed by Anders Carlsson.

        Add tests for WKPageConfigurationRef.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::initialize):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):

2015-01-16  Myles C. Maxfield  <mmaxfield@apple.com>

        WeakPtr functions crash when created with default constructor
        https://bugs.webkit.org/show_bug.cgi?id=140479

        Reviewed by Andreas Kling.

        Add WeakPtr API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Added.
        * TestWebKitAPI/Tests/WTF/Ref.cpp: Update to not use copy constructor.

2015-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(r178586): Caused webkitpy.w3c.test_converter_unittest.W3CTestConverterTest.test_convert_prefixed_properties to fail
        https://bugs.webkit.org/show_bug.cgi?id=140568

        Reviewed by Alexey Proskuryakov.

        Fix the script parsing CSSPropertyNames.in to stop splitting lines
        on '=' sign. The '=' sign is also used in StyleBuilder parameters:
        e.g. "Longhands=background-position-x|background-position-y".
        This would confuse the script and treat this as a CSS property:
        "background-position-x|background-position-y".

        We now split on white space and treat the first string on the line
        to be the property name (this is the syntax in this file).

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.read_webkit_prefixed_css_property_list):

2015-01-16  Daniel Bates  <dabates@apple.com>

        REGRESSION (r171968): run-safari --simulator fails to launch Safari on iOS
        https://bugs.webkit.org/show_bug.cgi?id=135589

        Reviewed by David Kilzer.

        Derived from a patch by David Farler.

        Following the removal IPhoneSimulatorNotification.pm in <http://trac.webkit.org/changeset/171968>
        run-safari --simulator fails to launch Safari on iOS. We need to implement run-safari
        in terms of the simctl command line utility.

        * Scripts/webkitdirs.pm: Added constant SIMULATOR_DEVICE_STATE_BOOTED.
        (eraseIOSSimulatorDevice): Added.
        (bootedIOSSimulatorDevice): Added.
        (iosSimulatorApplicationsPath): Added.
        (installedMobileSafariBundle): Implemented in terms of iosSimulatorApplicationsPath().
        (openIOSSimulator): Modified to launch iOS Simulator using OPEN(1).
        (quitIOSSimulator): Added.
        (iosSimulatorDeviceByName): Modified to find the first simulator device that matches
        the specified name and currently selected iOS runtime.
        (isIOSSimulatorSystemInstalledApp): Added.
        (runIOSWebKitAppInSimulator): Modified to use simctl launch to launch an app in the simulator.
        (deleteiOSSimulatorDevice): Deleted.
        (loadIPhoneSimulatorNotificationIfNeeded): Deleted.
        (installAndLaunchIOSWebKitAppInSimulator): Deleted.

2015-01-16  Alex Christensen  <alex.christensen@flexsim.com>

        Resurrect the WinCairo bot.
        https://bugs.webkit.org/show_bug.cgi?id=139908

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (appendCustomBuildFlags):
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):
        Add WinCairo buildbot.

2015-01-16  Chris Dumez  <cdumez@apple.com>

        webkit-patch should auto-install the keyring python module
        https://bugs.webkit.org/show_bug.cgi?id=140547

        Reviewed by David Kilzer.

        Auto-install the keyring python module. This is the module that
        webkit-patch uses for cross-platform access to the keyring
        service.

        Without this module, if the password if not in the keychain,
        webkit-patch will keep asking for your username / password and
        never remember them.

        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_keyring):

2015-01-15  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(SQL_DATABASE) guards
        https://bugs.webkit.org/show_bug.cgi?id=140434

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2015-01-15  Daniel Bates  <dabates@apple.com>

        [iOS] REGRESSION (r174642): DumpRenderTree.app test may dump result twice
        https://bugs.webkit.org/show_bug.cgi?id=139685
        <rdar://problem/19281317>

        Reviewed by Simon Fraser.

        Fixes an issue where a test in DumpRenderTree.app may dump its result twice. In particular,
        the test LayoutTests/fast/dom/gc-10.html may dump its result twice.

        Following <http://trac.webkit.org/changeset/174642>, we dump the test result asynchronously
        as opposed to synchronously. So, the WebThread or the main thread may perform other tasks
        before DRT dumps the output of a test. In particular, the WebThread may start a new page
        load (say, as a result of continued JavaScript execution), which will ultimately lead to
        dumping the test result again. Instead we want DRT to dump the test result synchronously
        such that we capture the state of the web page either when the page is loaded or when
        window.testRunner.notifyDone() is called.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView): Moved logic to re-enable tile painting and update the
        state of the display from here to updateDisplay(). Added call to -[CATransaction flush] to
        flush CA transactions to the window.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (updateDisplay): Added iOS-specific code to update tiles and tell WebKit to flush
        compositing changes to ensure that we have up-to-date tile content for a pixel/ref-test.
        (dump): Renamed; formerly named dumpTestResults().
        (displayWebView): Removed outdated FIXME comment. Added FIXME comment to investigate
        enabling repaint support on iOS.
        (-[DumpRenderTree _deferDumpToMainThread]): Deleted.
        (-[DumpRenderTree _waitForWebThreadThenDump]): Deleted.
        (dumpTestResults): Deleted.

2015-01-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Miscellaneous DRT fixes
        https://bugs.webkit.org/show_bug.cgi?id=116562

        Reviewed by Tim Horton.

        While investigating the cause of several Windows crashes, I found:
        (1) Messy conversions to and from BSTR types
        (2) Weird mixes of wide-string and narrow string conversions
        (3) Passing nullptr to some CoreFoundation routines that do not
            permit null arguments.
        (4) Commands to link the executable to the VS2005 runtime.

        This patch cleans up these issues to improve DRT reliability on
        Windows.

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (main): Get rid of VS2005 runtime linking.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Protect against being asked
        to process an empty URL.
        (dumpHistoryItem): Do BSTR string building using _bstr_t, rather
        than converting to/from wchar_t buffers.
        (runTest): Simplify string and BSTR handling.
        (createWebViewAndOffscreenWindow): Ditto.
        (main): Get rid of VS2005 runtime linking.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (jsStringRefToWString): Simplify code.
        (TestRunner::pathToLocalResource):
        (TestRunner::setUserStyleSheetLocation):
        * TestWebKitAPI/win/main.cpp: Get rid of
        VS2005 runtime linking.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain): Ditto.

2015-01-15  Alexey Proskuryakov  <ap@apple.com>

        Stop hardcoding mac-mountainlion in commit queue
        https://bugs.webkit.org/show_bug.cgi?id=140492

        Reviewed by Anders Carlsson.

        Use "mac", not "mac-<platform>". This matches how EWS queues are initialized, and
        there should be no change in behavior, because:
        1. PatchProcessingQueue converts the name with _new_port_name_from_old() before
        using it to create a port object.
        2. Although it doesn't convert the name before using DeprecatedPort.port(), it
        is actually correct to use "mac" for the name there. We only used to get the expected
        behavior with "mac-mountainlion" accidentally, because of a fallback to "mac"
        for unknown deprecated port names.

        * Scripts/webkitpy/tool/commands/queues.py: (CommitQueue):

2015-01-14  Jake Nielsen  <jacob_nielsen@apple.com>

        Create iOS-EWS server queue
        https://bugs.webkit.org/show_bug.cgi?id=140473

        Reviewed by Benjamin Poulain.

        * QueueStatusServer/app.yaml: Updates the SVN version number.
        * QueueStatusServer/config/queues.py: Add ios-ews queue.
        * QueueStatusServer/model/queues.py:         
        (Queue.display_name): Makes sure the display name is pretty!

2015-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] run-webkit-tests --ios hangs trying to launch iOS Simulator with unavailable runtime
        https://bugs.webkit.org/show_bug.cgi?id=140301
        <rdar://problem/19389266>

        Reviewed by Jon Honeycutt.

        Fixes an issue where run-webkit-tests --ios will hang when trying to launch iOS Simulator
        with an unavailable runtime.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Modified to access property Simulator.latest_available_runtime,
        which was formerly called Simulator.latest_runtime. Additionally, raise an exception if the
        specified runtime cannot be used because it is unavailable.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.testing_device): Modified to call Simulator.lookup_or_create_device(),
        which was formerly named testing_device.
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.create): Modified to lookup created device by the UDID returned by simctl, which is
        more robust than looking up the simulator device by name and runtime. This approach also
        avoids returning the wrong device due to <rdar://problem/19444383> (simctl list shows
        unavailable runtimes under the same iOS heading it would use to show it as available).
        (Simulator.find_device_by_udid): Added.
        (Simulator.device): Added optional parameter should_ignore_unavailable_devices (defaults
        to False) to ignore devices that are unavailable (say, because their runtime is unavailable).
        (Simulator.available_runtimes): Added.
        (Simulator.latest_available_runtime): Renamed; formerly named latest_runtime. Take advantage
        of the reverse=True argument to sorted() to sort the list of available runtimes such that the
        first element of the sorted list is the runtime with the highest version number.
        (Simulator.lookup_or_create_device): Renamed; formerly named testing_device.

2015-01-14  Csaba Osztrogonác  <ossy@webkit.org>

        Remove WK2 Windows cruft
        https://bugs.webkit.org/show_bug.cgi?id=140440

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Removed.

2015-01-13  Hunseop Jeong  <hs85.jeong@samsung.com>

        Fix TestWTF failed in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=140333

        Reviewed by Sam Weinig.

        Clear the std::ostringstream before starting test.

        * TestWebKitAPI/Tests/WTF/RefLogger.h:
        (TestWebKitAPI::DerivedRefLogger::DerivedRefLogger):

2015-01-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        TestWebKitWebContext depends on British English spellcheck dictionary
        https://bugs.webkit.org/show_bug.cgi?id=140403

        Reviewed by Martin Robinson.

        Install all English hunspell dictionaries on Fedora and Arch.

        * gtk/install-dependencies:

2015-01-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] install-dependencies should grok dnf
        https://bugs.webkit.org/show_bug.cgi?id=140396

        Reviewed by Martin Robinson.

        Fedora: install dependencies with dnf if yum is not installed.

        * gtk/install-dependencies:

2015-01-12  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][GTK] Fix build after r178309  
        https://bugs.webkit.org/show_bug.cgi?id=140381

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/CMakeLists.txt: Added the API directory

2015-01-11  Sam Weinig  <sam@webkit.org>

        Remove support for SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=140344

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/FeatureList.pm:

2015-01-12  Anders Carlsson  <andersca@apple.com>

        Make delegates conform to formal delegate protocols
        https://bugs.webkit.org/show_bug.cgi?id=140370

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::numberOfPendingGeolocationPermissionRequests):
        (TestRunner::setGeolocationPermission):

2015-01-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        build-webkit: silence output of 'which'
        https://bugs.webkit.org/show_bug.cgi?id=140278

        Reviewed by Daniel Bates.

        Use a more elegent test for the existance of ninja and eclipse.

        * Scripts/webkitdirs.pm:
        (commandExists): Don't assume the command supports --version
        (canUseNinja): Use commandExists()
        (canUseEclipse): Use commandExists()

2015-01-09  Sam Weinig  <sam@webkit.org>

        Update the output format for run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=140332

        Reviewed by Dan Bernstein.

        Changes the output format for run-api-tests be a bit simpler (no longer 
        indented based on suite, as we were not really using suite very well) but
        also include details in the case of failure.

        Changes verbose mode to no longer spew out the gtest default printer output,
        as the custom printer now includes the failure information.

        * Scripts/run-api-tests:
        (runTestsBySuite):
        (runTest):
        Augment the custom gtest printer by replacing the tokens "**PASS**" and "**FAIL**"
        with colorized variants and strip out leaks spew (the leaks can be added back using
        the new --show-leaks argument).

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::Printer::OnTestPartResult):
        (TestWebKitAPI::Printer::OnTestEnd):
        (TestWebKitAPI::TestsController::run):
        Implement a custom result printer that just prints out the information we want.

2015-01-09  Sam Weinig  <sam@webkit.org>

        TestWebKitAPI should print out the lists that fail at the end
        https://bugs.webkit.org/show_bug.cgi?id=140329

        Reviewed by Tim Horton.

        * Scripts/run-api-tests:
        (runTestsBySuite):
        Print out failures and timeouts in all modes, not just verbose.

2015-01-07  Geoffrey Garen  <ggaren@apple.com>

        Make bmalloc work with ASan
        https://bugs.webkit.org/show_bug.cgi?id=140194

        Reviewed by Mark Lam.

        * asan/asan.xcconfig: No need to disable FastMalloc; bmalloc supports
        ASan automatically (by forwarding to system malloc at runtime).

2015-01-09  Daniel Bates  <dabates@apple.com>

        [iOS] Make DumpRenderTree build with public SDK
        https://bugs.webkit.org/show_bug.cgi?id=140311

        Reviewed by Sam Weinig.

        Use CGRound() instead of the obsolete macro function _ROUNDF_ (defined in
        header UIKit/UIMath.h), and std::max() instead of the macro function MAX.
        Additionally, remove unused header CoreGraphics/CGFontDB.h.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[ScrollViewResizerDelegate view:didSetFrame:oldFrame:asResultOfZoom:]):

2015-01-09  Alexey Proskuryakov  <ap@apple.com>

        platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration.html fails on Retina machines
        https://bugs.webkit.org/show_bug.cgi?id=140300

        Reviewed by Simon Fraser.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::updateWindowScaleForTest):
        (WTR::TestController::configureViewForTest):
        * WebKitTestRunner/TestController.h:

2015-01-09  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Unreviewed. Moving myself to the committer section.

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

2015-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a script to check for platform layering violations
        https://bugs.webkit.org/show_bug.cgi?id=140248

        Reviewed by Darin Adler.

        It prints all the cases where files inside platform include
        headers that are not in platform directory.

        * Scripts/check-for-platform-layering-violations: Added.
        (get_platform_headers):
        (check_source_file):

2015-01-08  Alexey Proskuryakov  <ap@apple.com>

        [Mac WK2] Test snapshots are 1600x1200 on Retina devices
        https://bugs.webkit.org/show_bug.cgi?id=139884

        Reviewed by Tim Horton.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm: (WTR::PlatformWebView::windowSnapshotImage):
        Tell CGWindowListCreateImage to use the correct resolution. I don't really understand
        what the "nominal resolution" is, but this appears to work in practice.

2015-01-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] DumpRenderTree is always using 800x600 size, even if tests need other size.
        https://bugs.webkit.org/show_bug.cgi?id=140256

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues): Drive-by fix of a buffer overrun found while
        running with heap validation checks.
        (sizeWebViewForCurrentTest): Check both path separators ('/' and '\\') when checking for
        the "svg\\W3C-SVG-1.1" test directory.
        (removeFontFallbackIfPresent): Use nullptr instead of 0.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::clearPersistentUserStyleSheet): Ditto.

2015-01-08  Alexey Proskuryakov  <ap@apple.com>

        Follow-up to:  When WebProcess is slow to respond to IPC, that's mistakenly reported as crash
        https://bugs.webkit.org/show_bug.cgi?id=140218

        * Scripts/webkitpy/port/driver.py: (Driver._check_for_driver_crash_or_unresponsiveness):
        Undone an accidental change - check for self.has_crashed() again. This code path
        is for ports that don't have a signal handler printing #CRASHED when main process
        crashes.

        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_check_for_driver_crash.assert_crash):
        (DriverTest.test_check_for_driver_crash):
        Updated the tests, all changes are expected.

2015-01-08  Alexey Proskuryakov  <ap@apple.com>

        When WebProcess is slow to respond to IPC, that's mistakenly reported as crash
        https://bugs.webkit.org/show_bug.cgi?id=140218

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Removed _subprocess_was_unresponsive that was a modifier for
        "process crashed" condition. These don't make sense together - it's either a crash
        or a timeout, and we should detect those properly at a much lower level.
        (Driver.run_test): Ditto.
        (Driver._check_for_driver_crash_or_unresponsiveness): Split crash and unresponsiveness
        cases.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName): 
        (WTR::TestController::processDidCrash):
        Factored out hardcoded child process names, as we now use these in two places.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness): Dump an accurate child
        process name, so that it can be sampled (fixes sampling on Mavericks and above).

2015-01-08  Zan Dobersek  <zdobersek@igalia.com>

        Reorder my list of email addresses, keeping the Bugzilla address at the
        top since Bugzilla and other webkitpy scripts rely on that ordering.

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

2015-01-08  Zan Dobersek  <zdobersek@igalia.com>

        Moving myself to the reviewers section and updating
        the list of my email addresses.

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

2015-01-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Build gtk-doc without gtkdoc-mktmpl
        https://bugs.webkit.org/show_bug.cgi?id=140225

        Reviewed by Darin Adler.

        Stop calling gtkdoc-mktmpl. It's being removed upstream, and since we
        don't modify the tmpl files that it generates, it's not doing anything
        for us.

        * gtk/gtkdoc.py:
        (GTKDoc.generate):
        (GTKDoc._run_gtkdoc_scangobj):
        (GTKDoc._run_gtkdoc_mktmpl): Deleted.

2015-01-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK][ThreadedCompositor] Add support for threaded compositor.
        https://bugs.webkit.org/show_bug.cgi?id=118265

        Reviewed by Martin Robinson.

        Added the ENABLE_THREADED_COMPOSITOR feature flag to the cmake and
        autotools build systems. The feature is disabled by default.
        And remove deprecated the WTF_USE_TILED_BACKING_STORE feature flag
        from the feature flags.

        * Scripts/webkitperl/FeatureList.pm:

2015-01-07  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        Use SPI wrapper headers instead of directly referencing private SPI headers.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Append directory Source/WebKit2/Platform/spi/ios
        to the list of iOS header search directories so that we can include header UIKitSPI.h.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:

2015-01-07  Commit Queue  <commit-queue@webkit.org>

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

        Breaks the iOS build (Requested by enrica on #webkit).

        Reverted changeset:

        "[iOS] Make WebKit2 build with public iOS SDK and more build
        fixes for DRT"
        https://bugs.webkit.org/show_bug.cgi?id=137371
        http://trac.webkit.org/changeset/178068

2015-01-07  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        Use SPI wrapper headers instead of directly referencing private SPI headers.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Append directory Source/WebKit2/Platform/spi/ios
        to the list of header search directories so that we can include header UIKitSPI.h.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:

2015-01-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test change to improve run reproducibility

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes): Run a single DRT instance to help
        identify failures caused by earlier test runs.

2015-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Myles C. Maxfield is a reviewer now
        https://bugs.webkit.org/show_bug.cgi?id=140196

        Reviewed by Dean Jackson.

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

2015-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Make webkit-patch try harder to find keychain credentials
        https://bugs.webkit.org/show_bug.cgi?id=140170

        Reviewed by Ryosuke Niwa.

        When the user manually enters a password into webkit-patch, we hand that off to the
        Keyring Python module. However, that module creates a generic password entry instead
        of an internet password entry. We should look for both kinds.

        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._run_security_tool):
        (Credentials._credentials_from_keychain):
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        (test_security_output_parse_entry_not_found):
        (_assert_security_call):

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Try to fix the Mountain Lion build.

        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::didGetImageForMatchResult):

2015-01-06  Alexey Proskuryakov  <ap@apple.com>

        Debug ASan builds frequently crash in Register::jsValue under DFG::prepareOSREntry
        https://bugs.webkit.org/show_bug.cgi?id=140095

        Reviewed by Anders Carlsson.

        * asan/webkit-asan-ignore.txt: Blacklist a function that gets inlined in release
        builds, but not in debug ones.

2015-01-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Extend WinLauncher with support for Page Zoom
        https://bugs.webkit.org/show_bug.cgi?id=140152

        Reviewed by Anders Carlsson.

        * WinLauncher/Common.cpp:
        (WndProc):
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::resetZoom):
        (WinLauncher::zoomIn):
        (WinLauncher::zoomOut):
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h:
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain):

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Fix API tests that are broken under HiDPI
        https://bugs.webkit.org/show_bug.cgi?id=140146

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::didGetImageForMatchResult):
        NSImages are measured in points, so grab the underlying bitmap image and get its size in pixels.

        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        (TestWebKitAPI::DeviceScaleFactorOnBack::runTest):
        Don't assume that a web view not in a window has a backing scale factor of 1. Instead, always have web views start
        out in a window that has a backing scale factor of 1.
 
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        (TestWebKitAPI::DynamicDeviceScaleFactor::runTest):
        Ditto.

2015-01-06  Alexey Proskuryakov  <ap@apple.com>

        ADDRESS_SANITIZER macro is overloaded
        https://bugs.webkit.org/show_bug.cgi?id=140130

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp: Use the new macro.

2015-01-05  Joseph Pecoraro  <pecoraro@apple.com>

        Remove some stale class names in check-for-inappropriate-objc-class-names
        https://bugs.webkit.org/show_bug.cgi?id=140104

        Reviewed by Darin Adler.

        * Scripts/check-for-inappropriate-objc-class-names:
        These UIWK* classes no longer exist.

2015-01-05  Anders Carlsson  <andersca@apple.com>

        heap-buffer-overflow on fast/loader/reload-zero-byte-plugin.html
        https://bugs.webkit.org/show_bug.cgi?id=140096
        rdar://problem/19368938

        Reviewed by Alexey Proskuryakov.

        When creating a new page, don't pass clientInfo when setting up the frame and policy clients,
        since clientInfo points to a web view, not the test controller.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):

2015-01-05  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][GTK] WKPreferencesDefaults test failed after r177506 
        https://bugs.webkit.org/show_bug.cgi?id=140077

        Reviewed by Csaba Osztrogonác.

        WebKit C SPI is available on EFL,GTK.
        Changed the define order to pass the API test.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2015-01-01  Alexey Proskuryakov  <ap@apple.com>

        Simplify WebKitTestRunner timeout tracking
        https://bugs.webkit.org/show_bug.cgi?id=140036

        Reviewed by Darin Adler.

        The code for configuring timeouts was mostly dead, because run-webkit-tests never
        passes the --timeout option to WebKitTestRunner.

        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/Options.cpp:
        (WTR::Options::Options):
        (WTR::OptionsHandler::OptionsHandler):
        (WTR::handleOptionTimeout): Deleted.
        Removed support for --timeout. Timeouts are passed for each test individually,
        and defaults are good enough for the rare cases where WebKitTestRunner is run
        manually without run-webkit-tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::reattachPageToWebProcess):
        (WTR::TestController::runUntil):
        * WebKitTestRunner/TestController.h:
        Simplified runUntil by passing the actual timeout, not an enum.
        Increased short timeout for ASan enabled builds, as WebProcess launching takes
        quite a while.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): Removed dead code that handled a timeout from NoTimeout.

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformRunUntil):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformRunUntil):
        Build fixes.

2015-01-02  Anders Carlsson  <andersca@apple.com>

        Remove now unused storage tracker glue from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=140045

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/StorageTrackerDelegate.h: Removed.
        * DumpRenderTree/StorageTrackerDelegate.mm: Removed.
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (syncLocalStorageCallback): Deleted.
        (observeStorageTrackerNotificationsCallback): Deleted.
        (deleteAllLocalStorageCallback): Deleted.
        (deleteLocalStorageForOriginCallback): Deleted.
        (localStorageDiskUsageForOriginCallback): Deleted.
        (originsWithLocalStorageCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::syncLocalStorage): Deleted.
        (TestRunner::localStorageDiskUsageForOrigin): Deleted.
        (TestRunner::observeStorageTrackerNotifications): Deleted.
        (TestRunner::deleteAllLocalStorage): Deleted.
        (TestRunner::originsWithLocalStorage): Deleted.
        (TestRunner::deleteLocalStorageForOrigin): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::syncLocalStorage): Deleted.
        (TestRunner::localStorageDiskUsageForOrigin): Deleted.
        (TestRunner::observeStorageTrackerNotifications): Deleted.
        (TestRunner::deleteAllLocalStorage): Deleted.
        (TestRunner::originsWithLocalStorage): Deleted.
        (TestRunner::deleteLocalStorageForOrigin): Deleted.

2015-01-01  Darin Adler  <darin@apple.com>

        We often misspell identifier as "identifer"
        https://bugs.webkit.org/show_bug.cgi?id=140025

        Reviewed by Michael Saboff.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        * Scripts/webkitdirs.pm:
        (appIdentifierFromBundle):
        (installAndLaunchIOSWebKitAppInSimulator):
        Fix misspellings

2015-01-01  Zalan Bujtas  <zalan@apple.com>

        Saturated arithmetics: Incorrect float/double clamping.
        https://bugs.webkit.org/show_bug.cgi?id=139888
        rdar://problem/19330885

        Reviewed by Simon Fraser.

        Clamp float and double values correctly when applying saturated arithmetics.

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

2014-12-30  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Bump version of ATK used by jhbuild to 2.15.2
        https://bugs.webkit.org/show_bug.cgi?id=139816

        Reviewed by Gyuyoung Kim.

        Bump version of ATK used by jhbuild to 2.15.2

        * efl/jhbuild.modules:

2014-12-29  Fabien Vallée  <fvallee@connected-labs.com>

        [jhBuild] cairo build error (-flto)
        https://bugs.webkit.org/show_bug.cgi?id=139056

        Reviewed by Philippe Normand.

        cairo fails to link  with gcc 4.9 due to lto
        related issue. This problem has been partially
        addressed by cairo:
        http://cgit.freedesktop.org/cairo/commit/?id=c3645d97ebd24c6f7ad850785d585aebc706a11c
        use the cairo --disable-lto option and remove jhbuild
        makeargs fixes the issue.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-1.12.8-add_disable-lto.patch: Added.

2014-12-27  Myles C. Maxfield  <mmaxfield@apple.com>
        [Mac] Enable kerning, ligatures, and printer fonts 
        https://bugs.webkit.org/show_bug.cgi?id=139970

        Rubber stamped by Simon Fraser.

        Flip the switch.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/mac/main.mm:

2014-12-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=139950

        Reviewed by David Kilzer.

        * asan/asan.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
        in a manner that works with Xcode 5.1.1.

2014-12-24  Dan Bernstein  <mitz@apple.com>

        Engineering builds of MiniBrowser ignore deprecated declaration warnings
        https://bugs.webkit.org/show_bug.cgi?id=139941

        Reviewed by Darin Adler.

        * MiniBrowser/Configurations/Base.xcconfig: Added semicolon.
        * MiniBrowser/Configurations/DebugRelease.xcconfig: Set GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
        to YES.
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate openDocument:]): Use NSFileHandlingPanelOKButton instead of
        deprecated NSOKButton.

2014-12-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should have an option to disable testharness.js/testharnessreport.js link conversion
        https://bugs.webkit.org/show_bug.cgi?id=134763

        Reviewed by Ryosuke Niwa.

        Adding an option to disable test harness link conversion.

        * Scripts/webkitpy/w3c/test_converter.py:
        (convert_for_webkit):
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.convert_attributes_if_needed):
        * Scripts/webkitpy/w3c/test_importer.py:
        (parse_args):
        (TestImporter.import_tests):

2014-12-23  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree crashes are mis-reported as timeouts on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=139933

        Reviewed by Daniel Bates.

        Crash logs take a very long time to be generated on Yosemite (rdar://problem/18701447),
        and there is no way for run-webkit-tests to tell a crashed process from a frozen one
        until ReportCrash lets it go.

        Reuse existing machinery that tells run-webkit-tests about crashes. The script may
        even get the actual crash log eventually - even when it times out waiting for the log, it
        makes a second lookup at the very end, after all tests finish. There may be further
        improvements needed here, but this small fix addresses most cases that happen in practice.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (writeCrashedMessageOnFatalError):
        (dumpRenderTree):
        Removed PLATFORM(IOS) ifdefs, this code is just as helpful on Mac.

        * Scripts/webkitpy/port/driver.py: (Driver._check_for_driver_crash): Removed an
        unhelpful comment.

2014-12-23  Alexey Proskuryakov  <ap@apple.com>

        Don't force -O1 for debug ASan builds
        https://bugs.webkit.org/show_bug.cgi?id=139926

        Reviewed by Darin Adler.

        * asan/asan.xcconfig:

2014-12-23  Alexey Proskuryakov  <ap@apple.com>

        Simplify building with ASan
        https://bugs.webkit.org/show_bug.cgi?id=139916

        Reviewed by Mark Rowe.

        * Scripts/set-webkit-configuration: Store ASan state into a new configuration file.
        We could also update Configuration file format, but that's a little scary because
        of how many places in code read it.

        * Scripts/webkitdirs.pm:
        (determineASanIsEnabled): Read it from ASan configuration file.
        (argumentsForConfiguration): Added a FIXME.
        (asanIsEnabled): A caching wrapper similar to what we have for other configuration options.
        (XcodeOptions): Pass the options needed for ASan.

        * asan/asan.xcconfig: Use the right toolchains. Made warnings fatal again, as there
        no warnings to avoid. Removed explicit linking options, as -fsanitize=address does
        that automatically.

2014-12-23  Alexey Proskuryakov  <ap@apple.com>

        TestWebKitAPI build is broken when ASan is enabled
        https://bugs.webkit.org/show_bug.cgi?id=139902

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPILibrary.xcconfig:
        Inherit linker flags from DebugRelease, which respects ASAN.

2014-12-22  Simon Fraser  <simon.fraser@apple.com>

        Sort the Xcode project file.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2014-12-22  Lucas Forschler  <lforschler@apple.com>

        Update apple-mac-114 to bot629.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2014-12-22  Lucas Forschler  <lforschler@apple.com>

        Replace Apple bot104 with bot124.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2014-12-22  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177639.

        * TestWebKitAPI/CMakeLists.txt:

2014-12-22  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] MiniBrowser steals web view's focus
        https://bugs.webkit.org/show_bug.cgi?id=139482

        Reviewed by Gyuyoung Kim.

        Although we set focus on ewk_view while MiniBrowser initialization
        Ecore steals it in a favor of main window. As a result
        focused element on web page is unable to receive events.

        * MiniBrowser/efl/main.c:
        (window_create):
        Prevent window from stealing web view's focus on start up.

2014-12-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Revise DRT logic to match Mac.

        Rubberstamped by Anders Carlsson.

        Update the Windows logic to perform initialization of preferences and WebKit
        settings to match Mac. Also make sure that we only ever emit #EOF tokens under
        the same circumstances as the Mac version.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (resetWebPreferencesToConsistentValues):
        (setDefaultsToConsistentValuesForTesting):
        (resetWebViewToConsistentStateBeforeTesting):
        (sizeWebViewForCurrentTest):
        (runTest):
        (createWebViewAndOffscreenWindow):
        (allocateGlobalControllers):
        (prepareConsistentTestingEnvironment):
        (main):
        (resetDefaultsToConsistentValues): Deleted.

2014-12-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Rollout r177605.

        * EWSTools/start-queue-win.sh:

2014-12-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Try running EWS scripts without —no-confirm, since it defaults to true.

        * EWSTools/start-queue-win.sh:

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

        [iOS] Add WebKitSystemInterface for iOS 8.1
        https://bugs.webkit.org/show_bug.cgi?id=139831

        Reviewed by Alexey Proskuryakov.

        Implement support in copy-webkitlibraries-to-product-directory to copy
        WebKitSystemInterface for iOS to the product directory and have build-webkit
        pass --wksi to copy-webkitlibraries-to-product-directory when building for iOS.

        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

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

        copy-webkitlibraries-to-product-directory uses wrong SDK when called from build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=139829

        Reviewed by Alexey Proskuryakov.

        The script build-webkit calls script copy-webkitlibraries-to-product-directory with
        argument --sdk to specify the Xcode SDK to use, but copy-webkitlibraries-to-product-directory
        expects the Xcode SDK to be specified using the --sdk-name command line argument.

        Currently copy-webkitlibraries-to-product-directory has its own logic to handle
        parsing for a specified Xcode SDK. Instead we should make use of the webkitdirs.pm
        logic to both avoid duplicating effort and make the command line options for
        copy-webkitlibraries-to-product-directory for specify the Xcode SDK consistent
        with the approach used in other WebKit tools.

        As a side effect of making use of the webkitdirs.pm logic for determining the Xcode SDK
        copy-webkitlibraries-to-product-directory now recognizes --device and --simulator
        shorthands for --sdk=iphoneos.internal and --sdk=iphonesimulator, respectively.

        * Scripts/copy-webkitlibraries-to-product-directory: Also, renamed some variables to
        improve the readability of the code.
        (executeRanlib): Added; convenience function that calls the RANLIB(1) with the appropriate
        Xcode SDK. We pass -no_warning_for_no_symbols to RANLIB(1) when using an Xcode SDK
        for iOS since it's acceptable that an empty object file (say, for a Mac-specific feature)
        be included in a library.
        (unpackIfNecessary): Modified to call executeRanlib().

2014-12-19  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (177368): Some tests started to immediately time out
        https://bugs.webkit.org/show_bug.cgi?id=139826

        Reviewed by Daniel Bates.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: (WTR::InjectedBundlePage::dump):
        Move invalidateWaitToDumpWatchdogTimer() call from dump() to done(). When a test
        ends in a load failure, we don't dump, so we used to leak the timer.
        
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::notifyDone):
        Added a comment.

2014-12-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Add accessor for serializing HTTP loads
        https://bugs.webkit.org/show_bug.cgi?id=139817

        Reviewed by Mark Lam.

        * DumpRenderTree/win/DumpRenderTree.cpp: Reset serialized HTTP loads in our reset method.
        * DumpRenderTree/win/TestRunnerWin.cpp: Provide implementation for serializing HTTP. Also
        remove some redundant code from the destructor.

2014-12-19  Alexey Proskuryakov  <ap@apple.com>

        Clean up a fix for performance test bot failing to build
        https://bugs.webkit.org/show_bug.cgi?id=139818

        Reviewed by Csaba Osztrogonác.

        The "_1" in step name was annoying.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CleanBuildIfScheduled.start):
        (RunAndUploadPerfTests):
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):
        (CleanBuildUnconditionally): Deleted.
        (CleanBuildUnconditionally.start): Deleted.

2014-12-19  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r177535): It broke the GTK performance bot
        https://bugs.webkit.org/show_bug.cgi?id=139811

        Reviewed by Carlos Garcia Campos.

        Trigger clean build only on mac platform.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):

2014-12-18  KwangHyuk Kim  <hyuki.kim@samsung.com>

        Unreviewed, moved myself to the list of committers.

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

2014-12-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update DumpRenderTree to more closely match Mac version
        https://bugs.webkit.org/show_bug.cgi?id=139799

        Reviewed by Tim Horton.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::accessibleElementById): Correct
        use of BSTR to avoid leak.
        * DumpRenderTree/win/DumpRenderTree.cpp: Reorder methods and
        update to match Mac version more closely.
        (dumpFramesAsText):
        (dump):
        (resetDefaultsToConsistentValues):
        (resetWebViewToConsistentStateBeforeTesting):
        (sizeWebViewForCurrentTest):
        (runTest):
        (openWindows):
        (windowToWebViewMap):
        (createWebViewAndOffscreenWindow):
        (sharedCFURLCache):
        (initializeGlobalsFromCommandLineOptions):
        (main):
        * DumpRenderTree/win/TestRunnerWin.cpp: Ditto.
        (TestRunner::addDisallowedURL):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::syncLocalStorage):
        (TestRunner::localStorageDiskUsageForOrigin):
        (TestRunner::observeStorageTrackerNotifications):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::originsWithApplicationCache):
        (TestRunner::deleteAllLocalStorage):
        (TestRunner::setStorageDatabaseIdleInterval):
        (TestRunner::closeIdleLocalStorageDatabases):
        (TestRunner::originsWithLocalStorage):
        (TestRunner::deleteLocalStorageForOrigin):
        (TestRunner::copyDecodedHostName):
        (TestRunner::copyEncodedHostName):
        (TestRunner::keepWebHistory):
        (TestRunner::numberOfPendingGeolocationPermissionRequests):
        (TestRunner::setAppCacheMaximumSize):
        (TestRunner::setCustomPolicyDelegate):
        (TestRunner::goBack):
        (TestRunner::setDefersLoading):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::setMockDeviceOrientation):
        (TestRunner::setMockGeolocationPosition):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setIconDatabaseEnabled):
        (TestRunner::setMainFrameIsFirstResponder):
        (TestRunner::setSpatialNavigationEnabled):
        (TestRunner::setPluginsEnabled):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::setUseDashboardCompatibilityMode):
        (TestRunner::dispatchPendingLoadRequests):
        (TestRunner::findString):
        (TestRunner::setCacheModel):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (TestRunner::setWebViewEditable):
        (TestRunner::authenticateSession):
        (TestRunner::abortModal):
        (TestRunner::setSerializeHTTPLoads):
        (TestRunner::addChromeInputField):
        (TestRunner::removeChromeInputField):
        (TestRunner::focusWebView):
        (TestRunner::setBackingScaleFactor):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::removeAllWebNotificationPermissions):
        (TestRunner::simulateWebNotificationClick):

2014-12-18  Gavin Barraclough  <barraclough@apple.com>

        Add strong typing to RefCounter interface, return value as a bool.
        https://bugs.webkit.org/show_bug.cgi?id=139776

        Reviewed by Geoff Garen.

        Currently all token vended by a RefCounter have the same type - Ref<RefCounter::Count>.
        This means there is no compile time type checking to prevent mistakes. Update the count()
        method to token<>(), templated on type used to identify the token being returned.
        Calls to token<T>() will return a result of type RefCounter::Token<T>.

        There are a few problems with the fact the counter will return you an exact count of the
        number of outstanding tokens:
          - It is desirable to only fire the callback on zero-edge changes; it is more consistent
            to do so if the value is only readable as a boolean.
          - It is desirable to provide the value as an argument to the callback, however to make
            this useful for integer values it is also necessary to indicate the direction of change
            (0->1 is often interesting where 2->1 is not).
          - There is a mismatch between the precision of returning a count, and the inherent
            imprecision of a token based mechanism, where it may be difficult to guarantee
            absolutely no unnecessary refcount churn, and thus unintentional counter values.

        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
            - update API test.

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

        Disable retries on Mac Release WK2 testers
        https://bugs.webkit.org/show_bug.cgi?id=139798

        Reviewed by Simon Fraser.

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

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

        Perf tests frequently fail saying "build not up to date"
        https://bugs.webkit.org/show_bug.cgi?id=139786

        Illegitimately yet authoritatively reviewed by Lucas Forschler.

        Undo the rest of the first fix, and implement the behavior differently.

        is_clean isn't automatically forwarded from config.json to properties.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CleanBuildUnconditionally):
        (CleanBuildUnconditionally.start):
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):

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

        Roll out part of the previous patch - BuildAndPerfTestWebKit2 is used by Efl.
        I thought that it was unused because grepping for BuildAndPerfTestWebKit2Factory
        found nothing.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildAndPerfTestFactory):
        (BuildAndPerfTestWebKit2Factory):

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

        Perf tests frequently fail saying "build not up to date"
        https://bugs.webkit.org/show_bug.cgi?id=139786

        Reviewed by Ryosuke Niwa.

        Perf tests only build DumpRenderTree, not WebKit itself. Just clean the build
        directory to get rid of stale precompiled headers, and let it rebuild
        DumpRenderTree each time, that's fast.

        Also, removed unused "build and perf test" code.

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

2014-12-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening. Reorder file contents to match Mac version.

        Reorder the contents of the TestRunnerWin so that it matches TestRunnerMac. This makes
        it easier to see what steps are missing when running under Windows.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::callShouldCloseOnWebView):
        (TestRunner::clearAllApplicationCaches):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::syncLocalStorage):
        (TestRunner::localStorageDiskUsageForOrigin):
        (TestRunner::observeStorageTrackerNotifications):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::originsWithApplicationCache):
        (TestRunner::clearAllDatabases):
        (TestRunner::deleteAllLocalStorage):
        (TestRunner::setStorageDatabaseIdleInterval):
        (TestRunner::closeIdleLocalStorageDatabases):
        (TestRunner::originsWithLocalStorage):
        (TestRunner::deleteLocalStorageForOrigin):
        (TestRunner::numberOfPendingGeolocationPermissionRequests):
        (jsStringRefToWString):
        (TestRunner::setAppCacheMaximumSize):
        (TestRunner::setDatabaseQuota):
        (TestRunner::goBack):
        (TestRunner::setDefersLoading):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::dispatchPendingLoadRequests):
        (TestRunner::overridePreference):
        (TestRunner::removeAllVisitedLinks):
        (TestRunner::waitForPolicyDelegate):
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::removeAllWebNotificationPermissions):
        (TestRunner::simulateWebNotificationClick):
        (TestRunner::simulateLegacyWebNotificationClick):

2014-12-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct Windows tests after Bug 139149 (edit)
        https://bugs.webkit.org/show_bug.cgi?id=139781

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::clearAllApplicationCaches): Use new WebApplicationCache
        interface.

2014-12-18  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Remove the various aliases for --ios-simulator (--sim, --simulator, --ios-sim) in arguments for build and test scripts
        https://bugs.webkit.org/show_bug.cgi?id=139748

        Reviewed by Daniel Bates.
        
        Staging change to support --ios-sim and --ios-simulator temporarily until the bots
        have all been updated.

        * Scripts/webkitpy/port/factory.py:
        (platform_options):

2014-12-18  Simon Fraser  <simon.fraser@apple.com>

        Build more of TestWebKitAPI for iOS
        https://bugs.webkit.org/show_bug.cgi?id=139747

        Reviewed by Daniel Bates.
        
        Base.xcconfig removed many test files from the iOS build via EXCLUDED_SOURCE_FILE_NAMES,
        which excluded some tests that should be run for iOS.
        
        Fix by removing some patterns from EXCLUDED_SOURCE_FILE_NAMES, and #ifdeffing
        source files instead. config.h defines WK_HAVE_C_SPI when the WebKit C SPI is
        available (i.e. Mac OS X), and most files use that. Some files with Mac-only
        functionality (ActionMenus, Downloads) use #if PLATFORM(MAC).
        
        Added PlatformUtilitiesCocoa.mm and moved WeakObjCPtr.mm into a cocoa directory
        to share code between Mac and iOS.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/InjectedBundleController.cpp:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        * TestWebKitAPI/JavaScriptTest.cpp:
        * TestWebKitAPI/PlatformUtilities.cpp:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp:
        * TestWebKitAPI/Tests/WebKit2/CloseThenTerminate.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications.mm:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/ReloadPageAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResizeWindowAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad_bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp:
        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp:
        * TestWebKitAPI/Tests/WebKit2/UserMessage_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKImageCreateCGImageCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPageGetScaleFactorNotZero.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebCoreStatisticsWithNoWebProcess.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/cocoa/WeakObjCPtr.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm.
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm: Copied from Tools/TestWebKitAPI/Tests/WebKit2/WKImageCreateCGImageCrash.cpp.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::sleep):
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::run): Deleted.
        (TestWebKitAPI::Util::sleep): Deleted.
        (TestWebKitAPI::Util::toSTD): Deleted.

2014-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [GTK] Add support for FTL JIT on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=139677

        Reviewed by Csaba Osztrogonác.

        * gtk/jhbuild-optional.modules:
        * gtk/patches/llvm-elf-add-stackmaps-arm64.patch: Added.
        * gtk/patches/llvm-elf-allow-fde-references-outside-the-2gb-range-arm64.patch: Added.

2014-12-18  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Implement webkit_web_view_is_playing_audio()
        https://bugs.webkit.org/show_bug.cgi?id=138918

        Reviewed by Carlos Garcia Campos.

        Add test case case for webkit_web_view_is_playing_audio() and the
        WebKitWebView::is-playing-audio property.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (urlForResource): Utility function to get URLs pointing to resources
        under the Tools/TestWebKitAPI/Tests/WebKit2/ directory.
        (testWebViewIsPlayingAudio): Added.
        (beforeAll):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (getResourcesDir): Allow passing a flag to choose from the WebKit2 GTK
        API tests resources directory, or the WebKit2 C API tests resources
        directory. The default value of the flag is to use the WebKit2 GTK
        one, to avoid having to change existing tests.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (isPlayingAudioChanged): Added.
        (WebViewTest::waitUntilIsPlayingAudioChanged): Added.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

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

        [GTK] [EFL] Enable per_test_timeout
        https://bugs.webkit.org/show_bug.cgi?id=139771

        Reviewed by Csaba Osztrogonác.

        This is needed to make WKTR use either the default port timeout, or the
        user supplied timeout via the "--time-out-ms" parameter of run-webkit-tests.
        Otherwise WTR will use the default (30 seconds after r177363 and r177471).

        * Scripts/webkitpy/port/efl.py:
        (EflPort.supports_per_test_timeout): Enabled.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.supports_per_test_timeout): Enabled.

2014-12-17  Lucas Forschler  <lforschler@apple.com>

        Move Apple buildbot slaves to their new home.
        
        Reviewed by Roger Fong.

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

2014-12-17  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r177363): Gtk and Efl testing is broken
        https://bugs.webkit.org/show_bug.cgi?id=139734

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Remove timeout adjustment from here, because it
        affected both script and tool timeout. This is still the right place for this logic,
        but it would be a larger refactoring than I can do right now.

        * Scripts/webkitpy/port/base.py:
        (Port.supports_per_test_timeout): Added a FIXME.
        (Port.default_timeout_ms): Now that the effective timeout is longer, change this
        to avoid making tests take more time.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test): Adjust script timeout here.
        (Driver._check_for_driver_timeout): Fix the timeout detection.
        (Driver._read_block): Actually use the timeout detection code.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: (WTR::InjectedBundle::beginTesting):
        Use TestRunner default timeout when there isn't a timeout passed from command line for the test.

        * Scripts/webkitpy/port/port_testcase.py: (PortTestCase.test_default_timeout_ms):
        Update results for the new default.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_hung_thread): Restore a test that I previously deleted, it was
        actually a good one.

2014-12-17  Commit Queue  <commit-queue@webkit.org>

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

        Broke webkitpy and Mac tests (Requested by ap on #webkit).

        Reverted changeset:

        "REGRESSION (r177363): Gtk and Efl testing is broken"
        https://bugs.webkit.org/show_bug.cgi?id=139734
        http://trac.webkit.org/changeset/177456

2014-12-17  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r177363): Gtk and Efl testing is broken
        https://bugs.webkit.org/show_bug.cgi?id=139734

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Remove timeout adjustment from here, because it
        affected both script and tool timeout. This is still the right place for this logic,
        but it would be a larger refactoring than I can do right now.

        * Scripts/webkitpy/port/base.py:
        (Port.supports_per_test_timeout): Added a FIXME.
        (Port.default_timeout_ms): Now that the effective timeout is longer, change this
        to avoid making tests take more time.

        * Scripts/webkitpy/port/driver.py: (Driver.run_test): Adjust script timeout here.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: (WTR::InjectedBundle::beginTesting):
        Use TestRunner default timeout when there isn't a timeout passed from command line for the test.

2014-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify timeout handling in TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=139725

        Reviewed by Martin Robinson.

        The timeout is already in milliseconds, so we don't need to do any conversion.

        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):

2014-12-17  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL]Fix build warning in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=139723

        Reviewed by Darin Adler.

        The warning is caused by the compiler wanting the first argument to be a
        string literal, not a dynamically created string.

        * MiniBrowser/efl/main.c:
        (quit):

2014-12-16  Sam Weinig  <sam@webkit.org>

        TestWebKitAPI should use a static lib to support both Mac and iOS cleanly
        https://bugs.webkit.org/show_bug.cgi?id=139718

        Reviewed by Mark Rowe.

        Change TestWebKitAPI to be more like DumpRenderTree by moving all the source
        files into a static lib which the command line utility can link link against.
        This will allow us to create a TestWebKitAPI.app that can run on iOS.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPILibrary.xcconfig: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2014-12-16  Alexey Proskuryakov  <ap@apple.com>

        Sort out timeout implementations in DRT and WKTR
        https://bugs.webkit.org/show_bug.cgi?id=139671

        Remove an obsolete test that doesn't capture how run-webkit-tests interacts
        with the tool.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_hung_thread):

2014-12-15  Alexey Proskuryakov  <ap@apple.com>

        Sort out timeout implementations in DRT and WKTR
        https://bugs.webkit.org/show_bug.cgi?id=139671

        Reviewed by Simon Fraser.

        Test timeout implementation had many deficiencies, please see the bug for details.
        Most notably, we shouldn't have the tool confused about timeouts vs. failures, and
        [ Slow ] modifiers should work a lot better.

        * DumpRenderTree/TestRunner.cpp: (TestRunner::TestRunner):
        * DumpRenderTree/TestRunner.h: (TestRunner::setCustomTimeout):
        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest):
        * DumpRenderTree/mac/TestRunnerMac.mm: (TestRunner::setWaitToDump):
        DumpRenderTree already read the --timeout option from command line, and webkitpy
        was already configured to pass it on Mac and iOS. Let's actually use it.
        TestCommand already had the same 30 second default, so this doesn't change behavior
        when DRT is ran manually without the option.
        Windows DumpRenderTree will need to be fixed separately (that's easy).

        * DumpRenderTree/TestRunner.cpp: (TestRunner::waitToDumpWatchdogTimerFired()):
        Don't print the timeout message to stdout to match WebKitTestRunner. It would be
        slightly better to use stderr in both, as this is an out of band message, but
        that's a larger refactoring, and the difference is minimal in practice.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Ensure that script and tool timeouts are substantially
        different. We want the tool to reliably detect timeouts that can be detected, and
        not race with the script for that.

        * Scripts/webkitpy/port/base.py: (Port.default_timeout_ms): Don't make WebKit2
        timeout longer than WebKit1 one, I doubt that this is necessary. Now that the value
        is honored inmore cases, that could make tests run slower.
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__):
        (Driver.run_test):
        (Driver.cmd_line):
        (Driver._check_for_driver_timeout):
        Detect tests that have the timeout output, and make these have the proper Timeout result.

        * Scripts/webkitpy/port/ios.py: (IOSSimulatorPort.default_timeout_ms): Remove an
        incorrect recent change - 80 * 1000 is 80 seconds, not 80 milliseconds.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCustomTimeout): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::setCustomTimeout):
        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        Updated to use a timeout passed from UI process, which used to be ignored.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::runUntil):
        (WTR::TestController::getCustomTimeout): Deleted.
        * WebKitTestRunner/TestController.h:
        Delete unused m_timeout. First, it was always 0, and second, we don't need it at all.
        Changed default message timeouts to match new run-webkit-tests timeout. These don't
        affect ports where timeout is passed per test (shouldn't they all be like that?).

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::setCustomTimeout): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::setCustomTimeout):
        (WTR::TestInvocation::customTimeout):
        Ditto.

2014-12-16  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Add logging domain for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=139642

        Reviewed by Gyuyoung Kim.

        Similarly to EWebKit2, provide logging facility for MiniBrowser
        based on Eina Log module to have a convenient way to display
        all/subset/none messages for EFL based libraries and MiniBrowser.

        Usage:
        1. Disable all messages:
           EINA_LOG_LEVEL=0 ./Tools/Scripts/run-launcher --efl

        2. Enable all messages:
           EINA_LOG_LEVEL=7 ./Tools/Scripts/run-launcher --efl

        3. Enable MiniBrowser and EWebkit2 messages only:
           EINA_LOG_LEVELS="minibrowser:7,ewebkit2:7" ./Tools/Scripts/run-launcher --efl

        More information and examples you can find here:
        http://docs.enlightenment.org/auto/eet/tutorial_log_page.html

        * MiniBrowser/efl/main.c:
        (on_mouse_wheel):
        (on_window_resize):
        (save_page_contents_callback):
        (script_execute_callback):
        (on_key_down):
        (on_download_request):
        (on_download_finished):
        (on_download_failed):
        (quit):
        (on_refresh_button_clicked):
        (on_stop_button_clicked):
        (navigation_button_longpress_process):
        (on_popup_menu_item_clicked):
        (popup_menu_populate):
        (on_popup_menu_show):
        (on_window_create):
        (context_menu_item_selected_cb):
        (context_menu_populate):
        (on_context_menu_show):
        (on_context_menu_hide):
        (on_navigation_policy_decision):
        (window_create):
        (parse_cookies_policy):
        (elm_main):
        (has_scheme):
        (list_item_label_get):
        (on_popup_menu_hide):
        (on_window_close):
        (on_home_button_clicked):
        Replace locally info() macro with newly introduced
        one which uses Eina Log module. There is no logic change.

2014-12-15  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [EFL] FTL JIT not working on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=139295

        Reviewed by Michael Saboff.

        Added patches for llvm to add ARM64 support for FTL JIT

        * efl/jhbuild.modules:
        * efl/patches/llvm-elf-add-stackmaps-arm64.patch: Added.
        * efl/patches/llvm-elf-allow-fde-references-outside-the-2gb-range-arm64.patch: Added.

2014-12-15  Timothy Horton  <timothy_horton@apple.com>

        Move Said to the committers section.

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

2014-12-15  Timothy Horton  <timothy_horton@apple.com>

        Implement Data Detectors immediate actions for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139617
        <rdar://problem/19198539>

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:
        (TestWebKitAPI::TEST):
        Temporarily disable the action menu tests while the
        underlying code is in flux.

2014-12-14  Andreas Kling  <akling@apple.com>

        Replace PassRef with Ref/Ref&& across the board.
        <https://webkit.org/b/139587>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Ref.cpp:
        (TestWebKitAPI::passWithRef):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::passWithPassRef): Deleted.
        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):

2014-12-13  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] MiniBrowser's window_create may return NULL
        https://bugs.webkit.org/show_bug.cgi?id=139585

        Reviewed by Gyuyoung Kim.

        Move NULL checking before using object which window_create
        returns.

        * MiniBrowser/efl/main.c:
        (elm_main):

2014-12-12  Alexey Proskuryakov  <ap@apple.com>

        Layout Test http/tests/loading/307-after-303-after-post.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=73030

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::initialize): Set icon
        database to empty to avoid having it fetch default favicons at random times.
        DumpRenderTree also disables it, and also it has a way for tests to temporarily
        enable it.

2014-12-12  Lucas Forschler  <lforschler@apple.com>

        Update Apple owned build slaves after infrastructure update.
        
        Reviewed by Ryosuke Niwa.

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

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

        [GTK] REGRESSION(r175555) GTK API Tests run outside the JHBuild.
        https://bugs.webkit.org/show_bug.cgi?id=139537

        Reviewed by Carlos Garcia Campos.

        * jhbuild/jhbuild-wrapper: Pass the port name in the invocation
        of get_dependencies_path().
        * jhbuild/jhbuildutils.py:
        (get_dependencies_path): Fix the function to return the new
        dependencies path: DependenciesPORT.
        (enter_jhbuild_environment_if_available): Pass the port name
        when invoking get_dependencies_path().

2014-12-10  Lucas Forschler  <lforschler@apple.com>

        Update Apple owned build slaves.
        
        Rubber-stamped by Dana Burkart.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2014-12-10  Daniel Bates  <dabates@apple.com>

        [iOS] REGRESSION (r174642): Watchdog timer expiration reported as DumpRenderTree.app
        timeout instead of test failure
        https://bugs.webkit.org/show_bug.cgi?id=139525

        Reviewed by Zalan Bujtas.

        Increase the default process timeout limit in run-webkit-tests to 80ms to prevent
        run-webkit-tests from prematurely terminating DumpRenderTree.app before it dumps
        output.

        Following <http://trac.webkit.org/changeset/174642>, DumpRenderTree.app waits
        for the WebThread to spin its run loop before dumping its output. A test that
        calls testRunner.waitUntilDone() and does not subsequently call testRunner.notifyDone()
        before DumpRenderTree.app's watchdog timer expires may be incorrectly reported
        by run-webkit-tests as a DumpRenderTree.app timeout instead of a test failure
        because run-webkit-tests may terminate a DumpRenderTree.app process when it
        exceeds its process time limit (defaults to 35ms) regardless of whether such
        a DumpRenderTree.app process was waiting for the WebThread to run so as to dump output.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_timeout_ms):

2014-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK][WK2] Add HTML5 Notifications support
        https://bugs.webkit.org/show_bug.cgi?id=61140

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm: enable notifications for GTK+.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification):
        (beforeAll):
        * MiniBrowser/gtk/BrowserWindow.c: also handle notification permission requests.
        (permissionRequestDialogCallback):
        (webViewDecidePermissionRequest):
        (geolocationRequestDialogCallback): Deleted.

2014-12-09  Benjamin Poulain  <bpoulain@apple.com>

        Fix webkitpy test expectation

        Not sure what I messed up, but TOTAL_SKIPS was not right.

        * Scripts/webkitpy/port/test.py:

2014-12-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove virtual test support from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=139427

        Reviewed by Alexey Proskuryakov.

        It seems that the only concrete client of virtual tests is the unit tests :D

        This patch tries to clean as much useless code as possible.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tolerance):
        (RunTest.test_virtual): Deleted.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_test_trace):
        * Scripts/webkitpy/port/base.py:
        (Port.expected_filename):
        (Port.tests):
        (Port.test_isfile):
        (Port.test_isdir):
        (Port.sample_process):
        (Port.find_system_pid):
        (Port.test_expectations_file_position):
        (Port.virtual_test_suites): Deleted.
        (Port): Deleted.
        (Port.populated_virtual_test_suites): Deleted.
        (Port._virtual_tests): Deleted.
        (Port.lookup_virtual_test_base): Deleted.
        (Port.lookup_virtual_test_args): Deleted.
        (VirtualTestSuite): Deleted.
        (VirtualTestSuite.__init__): Deleted.
        (VirtualTestSuite.__repr__): Deleted.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_test_exists):
        (PortTest.test_test_isfile):
        (PortTest.test_test_isdir):
        (PortTest.test_tests):
        * Scripts/webkitpy/port/driver.py:
        (DriverProxy.run_test): Deleted.
        * Scripts/webkitpy/port/test.py:
        (TestPort._skipped_tests_for_unsupported_features):
        (TestPort.all_baseline_variants):
        (TestPort.virtual_test_suites): Deleted.
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintBaselines.__init__):
        (PrintBaselines.execute):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintBaselinesTest.test_basic):
        (PrintBaselinesTest.test_multiple):
        (PrintBaselinesTest.test_csv):

2014-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        Blink Merge: Remove 'http_lock' code from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=136722

        Reviewed by Alexey Proskuryakov.

        Based on Blink commit by Dirk Pranke <dpranke@chromium.org>
        https://chromium.googlesource.com/chromium/blink/+/196f8146a948275c2f1594b13e30ab19a6e6fd66

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner.start_servers): Renamed from start_servers_with_lock.
        (LayoutTestRunner.stop_servers): Renamed from stop_servers_with_lock.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter.flush):
        (LayoutTestRunnerTests._runner):
        (LayoutTestRunnerTests._run_tests):
        (LayoutTestRunnerTests.test_servers_started):
        (LockCheckingRunner): Deleted.
        (LockCheckingRunner.__init__): Deleted.
        (LockCheckingRunner.handle_finished_list): Deleted.
        (LayoutTestRunnerTests.test_http_locking): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.to.http_server_supports_ipv6):
        (Port.to.stop_websocket_server):
        (Port.to.acquire_http_lock): Deleted.
        (Port.to.release_http_lock): Deleted.
        * Scripts/webkitpy/port/http_lock.py: Removed.
        * Scripts/webkitpy/port/http_lock_unittest.py: Removed.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.show_results_html_file):
        (IOSSimulatorPort.acquire_http_lock): Deleted.
        (IOSSimulatorPort): Deleted.
        (IOSSimulatorPort.release_http_lock): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.show_results_html_file):
        (MacPort): Deleted.
        (MacPort.acquire_http_lock): Deleted.
        (MacPort.release_http_lock): Deleted.
        * Scripts/webkitpy/port/mock_drt.py:
        (MockDRTPort.start_websocket_server):
        (MockDRTPort.stop_websocket_server):
        (MockDRTPort.acquire_http_lock): Deleted.
        (MockDRTPort.release_http_lock): Deleted.
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_uses_apache):
        (MockDRTPortTest.integration_test_http_lock): Deleted.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.assert_servers_are_up):
        (PortTestCase.integration_test_http_lock): Deleted.
        * Scripts/webkitpy/port/test.py:
        (TestPort.start_websocket_server):
        (TestPort.stop_websocket_server):
        (TestPort.acquire_http_lock): Deleted.
        (TestPort.release_http_lock): Deleted.

2014-12-09  Alberto Garcia  <berto@igalia.com>

        convertToUTF8String converts null string to empty string
        https://bugs.webkit.org/show_bug.cgi?id=133904

        Reviewed by Carlos Garcia Campos.

        Test that trying to get the value of a non-existent attribute
        returns 0 instead of an empty string.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testInsertion):

2014-12-09  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Bump minimum version of ATK used by jhbuild to at least 2.15.2
        https://bugs.webkit.org/show_bug.cgi?id=139070

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:

2014-12-08  Tim Horton  <timothy_horton@apple.com>

        Add action menu tests
        https://bugs.webkit.org/show_bug.cgi?id=139156

        Reviewed by Dean Jackson.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        Add a mechanism allowing tests to provide their own WKView subclass.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/action-menu-targets.html: Added.
        Add a file with lots of menu targets.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm: Added.
        (-[ActionMenusTestWKView _actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:userData:]):
        (-[ActionMenusTestWKView runMenuSequenceAtPoint:preMenuNeedsUpdateHandler:preWillOpenMenuHandler:preDidCloseMenuHandler:]):
        (-[ActionMenusTestWKView runMenuSequenceAtPoint:preDidCloseMenuHandler:]):
        Run through the normal sequence of callbacks, recording what items and type were returned, and give clients a chance to do work at various points in the process.

        (-[ActionMenusTestWKView _setOverrideActionMenuItems:]):

        (TestWebKitAPI::didFinishLoadForFrameCallback):
        (TestWebKitAPI::didFinishDownloadCallback):
        (TestWebKitAPI::didCreateDownloadDestinationCallback):
        Watch downloads and ensure that they match the content we expect.

        (TestWebKitAPI::watchPasteboardForString):
        (TestWebKitAPI::watchPasteboardForImage):
        (TestWebKitAPI::JavaScriptStringCallbackContext::JavaScriptStringCallbackContext):
        (TestWebKitAPI::JavaScriptBoolCallbackContext::JavaScriptBoolCallbackContext):
        (TestWebKitAPI::javaScriptStringCallback):
        (TestWebKitAPI::javaScriptBoolCallback):
        (TestWebKitAPI::callJavaScriptReturningString):
        (TestWebKitAPI::callJavaScriptReturningBool):
        (TestWebKitAPI::watchEditableAreaForString):
        (TestWebKitAPI::waitForVideoReady):
        (TestWebKitAPI::retrieveSelection):
        (TestWebKitAPI::retrieveSelectionInElement):
        (TestWebKitAPI::performMenuItemAtIndexOfTypeAsync):
        (TestWebKitAPI::ensureMenuItemAtIndexOfTypeIsDisabled):
        Add many helpers for testing, especially to make asynchronous things synchronous.

        (TestWebKitAPI::windowPointForTarget):
        (TestWebKitAPI::inset8):
        Hard-code points in action-menu-targets.html for hit testing.

        (TestWebKitAPI::TEST):
        Add a suite of tests for WebKit2 action menus.

        * TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm: Added.
        (TestWebKitAPI::createActionContextForPhoneNumber):
        (TestWebKitAPI::ActionMenuTest::ActionMenuTest):
        (TestWebKitAPI::ActionMenuTest::prepareForActionMenu):
        (TestWebKitAPI::ActionMenuTest::actionContextForResultAtPoint):
        (TestWebKitAPI::ActionMenuTest::drawRect):
        (TestWebKitAPI::ActionMenuTest::didCreatePage):
        Add a bundle with a PageOverlay and a actionContextForResultAtPoint override,
        so that we can test that infrastructure.

2014-12-08  Philippe Normand  <pnormand@igalia.com>

        [GTK] UserMedia Permission Request API
        https://bugs.webkit.org/show_bug.cgi?id=136449

        Reviewed by Carlos Garcia Campos.

        The GTK version of the MiniBrowser has gained UserMedia permission
        request support.

        * MiniBrowser/gtk/BrowserWindow.c: Show a popup when the page
        requires user permission to access audio/video devices.
        (permissionRequestDialogCallback):
        (webViewDecidePermissionRequest):
        (geolocationRequestDialogCallback): Deleted.

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out method for clearing out the website data store
        https://bugs.webkit.org/show_bug.cgi?id=139404

        Reviewed by Antti Koivisto.

        Add a debug menu item for testing clearing of website data.

        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController clearWebsiteData:]):

2014-12-07  Gwang Yoon Hwang  <yoon@igalia.com>

        Update style checker to deal with "const override"
        https://bugs.webkit.org/show_bug.cgi?id=139371

        Reviewed by Csaba Osztrogonác.

        check-webkit-style shouldn't complain about an open brace to start a
        line after a function definition with const override.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line):

2014-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix GObject DOM bindings API break tests after r176920
        https://bugs.webkit.org/show_bug.cgi?id=139368

        Reviewed by Gustavo Noronha Silva.

        Remove the @version from the symbol name before comparing.

        * gtk/check-for-webkitdom-api-breaks:
        (read_expected_api):

2014-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove the option to automatically update the GObject DOM bindings symbols file
        https://bugs.webkit.org/show_bug.cgi?id=139366

        Reviewed by Martin Robinson.

        It's currently broken, because symbols now need to be in a
        specific order. Now that the symbols file only contains stable
        API, it's not a problem to manually update it every time new API
        is added.

        * gtk/check-for-webkitdom-api-breaks:
        (read_expected_api):
        (check_api):
        (write_expected_api): Deleted.

2014-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GMainLoopSource in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=138831

        Reviewed by Sergio Villar Senin.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::waitToDumpWatchdogTimerCallback): Deleted.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):
        (WTR::cancelTimeout): Deleted.

2014-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Missing API detected in GObject DOM bindings after r176630
        https://bugs.webkit.org/show_bug.cgi?id=139201

        Reviewed by Gustavo Noronha Silva.

        Handle deprecated symbols again when generating the GObject DOM
        bindings documentation.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator):
        (WebKitDOMDocGenerator.is_deprecated_symbol_file):
        (WebKitDOMDocGenerator.generate):
        (WebKitDOMDocGeneratorSections.__init__):
        (WebKitDOMDocGeneratorSections._find_deprecated_symbols):
        (WebKitDOMDocGeneratorSections.write_section):

2014-12-07  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][jhbuild] Fix libsoup build with clang
        https://bugs.webkit.org/show_bug.cgi?id=139088

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/soup-clang-warning-fix1.patch: Added.
        * efl/patches/soup-clang-warning-fix2.patch: Added.

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

        [Mac] DumpRenderTree sets storage directory incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=139347

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        Don't use user defaults to pass per-instance paths, as user defaults are shared
        across all instances.

2014-12-05  Chris Fleizach  <cfleizach@apple.com>

        AX: I cannot activate links on the mobile version of news.google.com
        https://bugs.webkit.org/show_bug.cgi?id=139330

        Reviewed by Simon Fraser.

        Implement press for iOS.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::press):

2014-12-05  Daniel Bates  <dabates@apple.com>

        [iOS] Query -[WAKWindow screenScale] instead of using WKGetScreenScaleFactor()
        https://bugs.webkit.org/show_bug.cgi?id=139326

        Reviewed by Anders Carlsson.

        Ask the window for its screen scale factor instead of calling WKGetScreenScaleFactor()
        to query the OS for it. This approach will ensure DumpRenderTree takes the snapshot
        using the same scale factor as used in WebKit.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):

2014-12-05  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r176677): All tests crash on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139321

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        Don't call CFRelease on the url while we have an outstanding pointer to its string,
        and use the right number of bytes when allocating the testURL buffer.

2014-12-05  Daniel Bates  <dabates@apple.com>

        [iOS] DumpRenderTree produces many reference test mismatches
        https://bugs.webkit.org/show_bug.cgi?id=139314

        Reviewed by Simon Fraser.

        Fixes an issue where the scale factor used to render the snapshot taken by
        DumpRenderTree may differ from the device scale factor. In particular, the
        scale factor used to render a snapshot of a test may differ from the scale
        factor used to render the snapshot of its expected result.

        Currently DumpRenderTree uses SPI, -[UIView newSnapshotForRect], on iOS to
        snapshot the UIWebBrowserView. This SPI always render using a scale factor
        of one when the backing store for the LegacyTileLayer objects were out-of-
        date regardless of the device scale factor. Instead we should use UIImage
        and CALayer API to perform the snapshot with respect to the device scale
        factor.

        Additionally write iOS pixel dump support logic in terms of existing
        DumpRenderTree abstractions so as to support generating and comparing
        pixel dump checksums as well as make the iOS code more consistent with
        the logic used by other ports.

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected): Removed !PLATFORM(IOS)-guard.
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (BitmapContext::createFromUIImage): Added.
        (BitmapContext::pixelData): Added.
        (BitmapContext::BitmapContext): Added.
        (computeMD5HashStringForBitmapContext): Added.
        (dumpBitmap): Added.
        (createBitmapContextFromWebView): Moved logic from dumpWebViewAsPixelsAndCompareWithExpected() to here.
        (dumpWebViewAsPixelsAndCompareWithExpected): Deleted.

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Give all web pages a website data store
        https://bugs.webkit.org/show_bug.cgi?id=139317

        Reviewed by Tim Horton.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate newPrivateWindow:]):
        Don't release the controller - it's implicitly retained by the window.

2014-12-05  Daniel Bates  <dabates@apple.com>

        [iOS] DumpRenderTree fails to render every other test when pixel tests are on
        https://bugs.webkit.org/show_bug.cgi?id=137581
        <rdar://problem/18642906>

        Reviewed by Simon Fraser.

        Fixes an issue where the DumpRenderTree snapshot may reflect the rendered content
        of the test that proceeded the currently running test.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (dumpWebViewAsPixelsAndCompareWithExpected): Ensure that UIKit has performed a layout
        of the UIWebBrowserView view. Also, remove unnecessary call to -[UIWebDocumentView layoutTilesNow]
        as -[UIWebDocumentView newSnapshotWithRect] will layout the tiles.

2014-12-05  Jer Noble  <jer.noble@apple.com>

        [WTF] MediaTime should support round-tripping from and to doubles.
        https://bugs.webkit.org/show_bug.cgi?id=139248

        Reviewed by Eric Carlson.

        Add API tests for new features of MediaTime. Update the LLDB python provider to correctly display
        the MediaTimes after this change.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (WTF::operator<<):
        (TestWebKitAPI::TEST):
        * lldb/lldb_webkit.py:
        (WTFMediaTime_SummaryProvider):
        (WTFMediaTimeProvider.timeValueAsDouble):
        (WTFMediaTimeProvider.isIndefinite):
        (WTFMediaTimeProvider):
        (WTFMediaTimeProvider.hasDoubleValue):

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Add a private browsing mode to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=139308

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate newPrivateWindow:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK2BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController initWithConfiguration:]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):

2014-12-04  Alexey Proskuryakov  <ap@apple.com>

        Run http tests parallel
        https://bugs.webkit.org/show_bug.cgi?id=138958

        Reviewed by Daniel Bates.

        Remove the concept of "locked shard". Now http tests are just like any other tests.
        We start HTTP and WebSocket servers at the start if we need them, and terminate them
        when done with all the tests (not when the last http test runs, which is unnecessarily
        unpredictable).

        This makes debug tests run in 8 minutes and 12 seconds on my Mac Pro. Without the
        patch, they used to take over 15 minutes.

        As part of the fix, we no longer pass the number of servers to Apache. I don't
        think that these parameters did what we wanted them to do; Apache handles the load
        just fine without them.

        The change applies to all platforms. I fixed everything I could find on Mac, and
        Ossy told me that he's been running http tests in parallel for a long time. If
        there is increased instability for some ports, it will need to be fixed - there is
        generally nothing special about http tests at this point, and most code is
        cross-platform in WebKit2.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner.start_servers_with_lock):
        (LayoutTestRunner._handle_started_test):
        (Worker.handle):
        (Sharder.__init__):
        (Sharder.shard_tests):
        (Sharder._shard_every_file):
        (Sharder._shard_by_directory):
        (LayoutTestRunner._handle_finished_test_list): Deleted.
        (LayoutTestRunner._handle_finished_test_list.find): Deleted.
        (Sharder._shard_in_two): Deleted.
        (Sharder): Deleted.
        (Sharder._resize_shards): Deleted.
        (Sharder._resize_shards.divide_and_round_up): Deleted.
        (Sharder._resize_shards.extract_and_flatten): Deleted.
        (Sharder._resize_shards.split_at): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter.print_workers_and_shards):
        (LayoutTestRunnerTests.test_servers_started.start_http_server):
        (LayoutTestRunnerTests.test_servers_started):
        (SharderTests.get_shards):
        (SharderTests.test_shard_by_dir):
        (SharderTests.test_shard_every_file):
        (SharderTests): Deleted.
        (SharderTests.test_shard_in_two): Deleted.
        (SharderTests.test_shard_in_two_has_no_locked_shards): Deleted.
        (SharderTests.test_shard_in_two_has_no_unlocked_shards): Deleted.
        (SharderTests.test_multiple_locked_shards): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_needs_servers.get_manager):
        (ManagerTest.integration_test_needs_servers.get_manager):
        (ManagerTest.test_look_for_new_crash_logs.get_manager):
        (ManagerTest):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_batch_size):
        (RunTest.test_max_locked_shards): Deleted.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        (TestLayoutTestApacheHttpd.test_start_cmd):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.__init__):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_workers_and_shards):
        * Scripts/webkitpy/port/base.py:
        (Port.default_child_processes):
        (Port.to.start_http_server):
        (Port.default_max_locked_shards): Deleted.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.make_port):
        (PortTestCase.test_default_max_locked_shards): Deleted.
        * Scripts/webkitpy/port/test.py:
        (TestPort.start_http_server):

2014-12-04  Alexey Proskuryakov  <ap@apple.com>

        Don't lock perf tests in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=139264

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2014-12-03  Alexey Proskuryakov  <ap@apple.com>

        http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html fails unless certain other tests run before it
        https://bugs.webkit.org/show_bug.cgi?id=139243

        Reviewed by Anders Carlsson.

        We didn't get WKPageLoaderClient calls in secondary windows, so we didn't have a
        chance to allow untrusted certificates.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::createOtherPage):
        Set up more client objects for secondary windows. We may be able to share some of the
        code with main view creation function, but it's not exactly the same (notably, we
        do not focus a secondary window when it's done loading).

2014-12-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Inline text elements with accessible object attributes and/or event handlers are not exposed
        https://bugs.webkit.org/show_bug.cgi?id=139071

        Reviewed by Chris Fleizach.

        Add string value for ATK_ROLE_STATIC in roleToString.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2014-12-03  Renato Nagy  <rnagy@inf.u-szeged.hu>

        check-webkit-style is confused by ternary expression inside first member initializer
        https://bugs.webkit.org/show_bug.cgi?id=136442

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):

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

        [GTK] [JHBuild] gst-plugins-bad fails to build if the GNUStep libraries are installed.
        https://bugs.webkit.org/show_bug.cgi?id=139220

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules:
        * gtk/patches/gst-plugins-bad-remove-gnustep-support.patch: Added.

2014-12-03  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Remove unused JSC runtime options
        https://bugs.webkit.org/show_bug.cgi?id=133070

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests:

2014-12-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Add subtle crypto to the build system
        https://bugs.webkit.org/show_bug.cgi?id=138612

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm:

2014-12-02  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Table captions and table rows are missing from the accessible hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=139005

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        Add mapping for ATK_ROLE_CAPTION to roleToString

2014-12-02  Alexey Proskuryakov  <ap@apple.com>

        http/tests/appcache/main-resource-fallback-for-network-error-crash.html can break subsequent tests
        https://bugs.webkit.org/show_bug.cgi?id=139149

        Reviewed by Anders Carlsson.

        WebKit2 already cleared application caches between runs (although it wasn't entirely
        effective without WebCore changes in this patch).

        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest): Clear applicaiton caches between runs.

        * DumpRenderTree/win/DumpRenderTree.cpp: (runTest): Ditto (unfortunately, this
        function is not implemented on Windows, see below).

        * DumpRenderTree/win/TestRunnerWin.cpp: (TestRunner::clearAllApplicationCaches):
        Ameded a FIXME.

2014-12-02  Gavin Barraclough  <barraclough@apple.com>

        Generalize PageActivityAssertionToken
        https://bugs.webkit.org/show_bug.cgi?id=139106

        Reviewed by Sam Weinig.

        Add an API test for WTF::RefCounter.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/RefCounter.cpp: Added.
        (TestWebKitAPI::TEST):
            - added RefCounter test.

2014-12-02  Alexey Proskuryakov  <ap@apple.com>

        [Mac, iOS] Crash log application information contains latest main frame URL instead of test URL
        https://bugs.webkit.org/show_bug.cgi?id=139174

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/TestRunner.h:
        Renamed testPathOrURL to testURL, because this variable always contains a URL.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (sizeWebViewForCurrentTest): Updated for testPathOrURL renaming.
        (testPathFromURL): Moved from FrameLoadDelegate.mm.
        (runTest): Set crash reporter information here, as we know the exact test URL.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]): Don't set crash
        reporter information here.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        Updated for testPathOrURL renaming.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): WebProcess doesn't know
        test URL until load starts, so save it into TestRunner now. A new TestRunner object
        is created for each test.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::testURL):
        (WTR::TestRunner::setTestURL):
        Make TestRunner know the test name. For now, it's good enough to have it once load
        starts, but if we ever need it earlier, we can send it with BeginTest message.

        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):
        Use test URL, not currently loading URL for CrashReporter.

        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        (WTR::setCrashReportApplicationSpecificInformationToURL): Added a space after colon
        (WebKit1 already had it right).

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (sizeWebViewForCurrentTest):
        (runTest):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):
        Changed Windows DumpRenderTree to also use URL in TestRunner.

2014-12-02  Daniel Bates  <dabates@apple.com>

        [iOS] run-webkit-tests records most DumpRenderTree.app crashes as time-outs
        https://bugs.webkit.org/show_bug.cgi?id=139143

        Reviewed by David Kilzer.

        Similar to the Windows-specific fix in <https://bugs.webkit.org/show_bug.cgi?id=37859>,
        teach DumpRenderTree for iOS to write "#CRASHED" to the standard error stream when it
        crashes. Run-webkit-tests will record as crashing the test associated with the
        DumpRenderTree instance that wrote that string.

        Currently almost all of the DumpRenderTree.app crashes are recorded by run-
        webkit-tests as a time-out because ReportCrash(8) delays delivery of the
        process exit notification for DumpRenderTree.app to LayoutTestRelay, which
        launched DumpRenderTree.app, past the time-out time limit. Notice LayoutTestRelay
        was launched by run-webkit-tests. So, run-webkit-tests kills LayoutTestRelay
        (since it exceeded the time-out time limit) before it can inform rub-webkit-tests
        about a crash.

        Additionally, update the crash message format written to standard error when LayoutTestRelay
        detects that {WebKitTestRunner, DumpRenderTree}.app crashed so as to be similar to the
        crash message format used by WebKitTestRunner when it detects that the WebProcess crashed.
        Then run-webkit-tests will collect the crash logs for {WebKitTestRunner, DumpRenderTree}.app
        when they crash in their test machinery logic/UI process code.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (writeCrashedMessageOnFatalError): Added.
        (dumpRenderTree): Register signal handler, writeCrashedMessageOnFatalError(), for signals:
        SIGILL, SIGFPE, SIGBUS and SIGSEGV.
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController didCrashWithMessage:]): Emit a crash message with a format
        similar to the format used by WebKitTestRunner so that run-webkit-tests will collect
        the crash logs for WebKitTestRunner/DumpRenderTree.app.
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Update comment.
        (Driver._check_for_driver_crash): Ditto.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort): Add class constant SUBPROCESS_CRASH_REGEX, which represents a compiled
        regular expression. This constant is used as an optimization to avoid compiling the same
        regular expression across invocations of _get_crash_log().
        (IOSSimulatorPort._get_crash_log): Modified to parse the WebKitTestRunner-like crash message
        for the subprocess name and pid. Also, moved variables crash_log, crash_logs, and now to be
        closer to where they are used.

2014-12-01  Anders Carlsson  <andersca@apple.com>

        Remove WKBundleRemoveAllVisitedLinks
        https://bugs.webkit.org/show_bug.cgi?id=139163

        Reviewed by Sam Weinig.

        Remove the call to WKBundleRemoveAllVisitedLinks and add a FIXME instead.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2014-12-02  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setAlwaysAcceptCookies):

2014-12-02  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Remove edbus dependency from jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=139130

        Reviewed by Gyuyoung Kim.

        After http://trac.webkit.org/changeset/176555 we
        don't need it anymore.

        * efl/jhbuild.modules:

2014-12-02  Philippe Normand  <pnormand@igalia.com>

        [jhbuild] wrong Dependencies path
        https://bugs.webkit.org/show_bug.cgi?id=139176

        Reviewed by Martin Robinson.

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

2014-12-02  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Bump internal jhbuild versions to 1.4.4
        https://bugs.webkit.org/show_bug.cgi?id=138866

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:
        * gtk/patches/gst-events-arent-gstobjects.patch: Removed.
        * gtk/patches/gst-plugins-base-fix-build-gcc-4.9-x86.patch: Removed.
        * gtk/patches/gst-prevent-neon-check-in-configure-from-passing-under-aarch64.patch: Removed.

2014-12-01  Commit Queue  <commit-queue@webkit.org>

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

        It broke the GTK performance tests. (Requested by clopez on
        #webkit).

        Reverted changeset:

        "[GTK] Use GMainLoopSource in WebKitTestRunner"
        https://bugs.webkit.org/show_bug.cgi?id=138831
        http://trac.webkit.org/changeset/176566

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Crash when calling WKPageClose on the originated page from within createNewPage callback
        https://bugs.webkit.org/show_bug.cgi?id=139099
        <rdar://problem/19052564>

        Reviewed by Sam Weinig.

        Add a test.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::createNewPage):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/close-from-within-create-page.html: Added.
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):

2014-11-28  Commit Queue  <commit-queue@webkit.org>

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

        massive failures on release test bot (Requested by philn on
        #webkit).

        Reverted changeset:

        "[GStreamer] Bump internal jhbuild versions to 1.4.4"
        https://bugs.webkit.org/show_bug.cgi?id=138866
        http://trac.webkit.org/changeset/176564

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

        [GTK] Use GMainLoopSource in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=138831

        Reviewed by Sergio Villar Senin.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::waitToDumpWatchdogTimerCallback): Deleted.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):
        (WTR::cancelTimeout): Deleted.

2014-11-24  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Bump internal jhbuild versions to 1.4.4
        https://bugs.webkit.org/show_bug.cgi?id=138866

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:
        * gtk/patches/gst-events-arent-gstobjects.patch: Removed.
        * gtk/patches/gst-plugins-base-fix-build-gcc-4.9-x86.patch: Removed.
        * gtk/patches/gst-prevent-neon-check-in-configure-from-passing-under-aarch64.patch: Removed.

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

        [GTK] Use custom JavaScript instead of DBus to implement WebProcess tests
        https://bugs.webkit.org/show_bug.cgi?id=138834

        Reviewed by Sergio Villar Senin.

        It makes everyting simpler and the tests run faster too, since we
        don't need to spawn the private bus and wait until the DBus name
        is registered. The web extension registers a new JavaSCript class
        with a status method to run the tests, similar to the DBus
        method. In the UI process side, tests use webkit_web_view_run_java_script()
        instead of sending a DBus message.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp:
        (WebKitDOMNodeFilterTest::create):
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        (WebKitDOMNodeFilterTest::webPageFromArgs): Deleted.
        (WebKitDOMNodeFilterTest::runTest): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::create):
        (WebKitDOMNodeTest::testHierarchyNavigation):
        (WebKitDOMNodeTest::testInsertion):
        (WebKitDOMNodeTest::testTagNames):
        (WebKitDOMNodeTest::webPageFromArgs): Deleted.
        (WebKitDOMNodeTest::runTest): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMXPathNSResolverTest.cpp:
        (WebKitDOMXPathNSResolverTest::create):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverNative):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverCustom):
        (WebKitDOMXPathNSResolverTest::webPageFromArgs): Deleted.
        (WebKitDOMXPathNSResolverTest::runTest): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp:
        (WebKitFrameTest::create):
        (WebKitFrameTest::testMainFrame):
        (WebKitFrameTest::testURI):
        (WebKitFrameTest::testJavaScriptContext):
        (WebKitFrameTest::webPageFromArgs): Deleted.
        (WebKitFrameTest::runTest): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp:
        (testWebKitDOMNodeHierarchyNavigation):
        (testWebKitDOMNodeInsertion):
        (testWebKitDOMNodeTagNames):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp:
        (runTest):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMXPathNSResolver.cpp:
        (testWebKitDOMXPathNSResolverNative):
        (testWebKitDOMXPathNSResolverCustom):
        (beforeAll):
        (afterAll):
        (runTest): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp:
        (webkitFrameTestRun):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (testsMap):
        (WebProcessTest::add):
        (WebProcessTest::create):
        (runTest):
        (windowObjectClearedCallback):
        (webkit_web_extension_initialize):
        (methodCallCallback): Deleted.
        (webkit_web_extension_initialize_with_user_data): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.cpp: Removed.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.h: Removed.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::runWebProcessTest):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2014-11-28  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] libseccomp should pick up CC environment variable to be conform to other jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=139086

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:
        * efl/patches/libseccomp-pick-up-CC.patch: Added.

2014-11-28  Bartlomiej Gajda  <b.gajda@samsung.com>

        [EFL] Add warning if CMake version is too old for building with ninja.
        https://bugs.webkit.org/show_bug.cgi?id=139055

        Reviewed by Gyuyoung Kim.

        CMake need to be >= 2.8.10 to build WebKit using ninja, some repos don't have
        that version in their repositories.

        * efl/install-dependencies:

2014-11-28  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Allowing the use of AccessibilityUIElement::columnHeaders method for table.
        https://bugs.webkit.org/show_bug.cgi?id=139044

        Reviewed by Chris Fleizach.

        ATK method AccessibilityUIElement::columnHeaders currently focused only on the object table cell.
        The proposed solution will enable the use of this method for the object table.
        Existing test shows the result.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::columnHeaders):

2014-11-27  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Remove E_Dbus dependency
        https://bugs.webkit.org/show_bug.cgi?id=136355

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/CMakeLists.txt: Removed E_DBUS includes.

2014-11-26  Akos Kiss  <akiss@inf.u-szeged.hu>

        [EFL][GTK] Bump up FDE relocation fixing patch to version accepted to LLVM trunk.
        https://bugs.webkit.org/show_bug.cgi?id=139047

        Reviewed by Carlos Garcia Campos.

        * efl/jhbuild.modules:
        * efl/patches/llvm-elf-allow-fde-references-outside-the-2gb-range.patch: Added.
        * efl/patches/llvm-elf-fix-x86_64-fdecfiencoding.patch: Removed.
        * gtk/jhbuild-optional.modules:
        * gtk/patches/llvm-elf-allow-fde-references-outside-the-2gb-range.patch: Added.
        * gtk/patches/llvm-elf-fix-x86_64-fdecfiencoding.patch: Removed.

2014-11-25  Tanay C  <tanay.c@samsung.com>

        [GTK] Minibrowser: Add support for zoom using Control Key + Mouse scroll
        https://bugs.webkit.org/show_bug.cgi?id=138090

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserWindow.c: Implementing zoom using Cntrl + Mouse scroll
        (browserWindowZoomIn): Added.
        (browserWindowZoomOut): Added.
        (scrollEventCallback): Added.
        (zoomInCallback): Modified.
        (zoomOutCallback): Modified.
        (browserWindowConstructed): Modified.

2014-11-25  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION(r176514): It made performance tests fail
        https://bugs.webkit.org/show_bug.cgi?id=139037

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitpy/port/efl.py:
        (EflPort.setup_environ_for_server): Pass ACCESSIBILITY_EAIL_LIBRARY_PATH environment variable to WTR.
        * efl/jhbuildrc: Set ACCESSIBILITY_EAIL_LIBRARY_PATH to point to DependenciesEFL/lib/libeail.so
        only if ACCESSIBILITY_EAIL_LIBRARY_PATH isn't already set and DependenciesEFL/lib/libeail.so exists.

2014-11-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] update-webkitgtk-libs fails to build fontconfig
        https://bugs.webkit.org/show_bug.cgi?id=139032

        Reviewed by Martin Robinson.

        On Fedora, if docbook-utils is installed but docbook-utils-pdf is not,
        fontconfig will try to generate documentation and fail.

        * gtk/install-dependencies:

2014-11-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ make distcheck.

        * gtk/manifest.txt: Remove deleted files.

2014-11-24  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Utilize Eail library to support accessibility in EFL
        https://bugs.webkit.org/show_bug.cgi?id=137742

        Reviewed by Gyuyoung Kim.

        Eail, atk-bridge, at-spi2 are not mandatory modules for webkit-efl. They are rather optional.

        * efl/jhbuild-optional.modules: Added.
        * efl/jhbuild.modules:

2014-11-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView is created with the wrong web context when using webkit_web_view_new_with_related_view()
        https://bugs.webkit.org/show_bug.cgi?id=139023

        Reviewed by Sergio Villar Senin.

        Rename WebKitWebView/default-context as WebKitWebView/web-context
        and check we are always using the right context for new web views.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (beforeAll):
        (testWebViewDefaultContext): Deleted.

2014-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to override the default local storage directory
        https://bugs.webkit.org/show_bug.cgi?id=138828

        Reviewed by Gustavo Noronha Silva.

        Add test to check that the local storage directory is created at
        the path given on construction.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextConfiguration):
        (beforeAll):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::Test):
        (Test::~Test): Deleted.

2014-11-21  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add "show simple line layout debug borders" setting to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=138981

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleSimpleLineLayoutDebugBordersEnabled:]):
        (-[SettingsController simpleLineLayoutDebugBordersEnabled]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2014-11-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove http lock code from webkitperl
        https://bugs.webkit.org/show_bug.cgi?id=138959

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitperl/httpd.pm:
        (cleanUp):
        (extractLockNumber): Deleted.
        (getLockFiles): Deleted.
        (getNextAvailableLockNumber): Deleted.
        (getLockNumberForCurrentRunning): Deleted.
        (waitForHTTPDLock): Deleted.
        (scheduleHttpTesting): Deleted.
        (getWaitTime): Deleted.

2014-11-20  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] The option value of fixed layout is false in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=138830

        Reviewed by Gyuyoung Kim.

        Changed the option value of fixed layout to EINA_TRUE in MiniBrowser.

        * MiniBrowser/efl/main.c:

2014-11-20  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Provide convenience API in DOM bindings to post messages to user message handlers
        https://bugs.webkit.org/show_bug.cgi?id=138871

        Reviewed by Carlos Garcia Campos.

        Add a test case for the convenience API for posting user messages
        added to the DOM bindings.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (testUserContentManagerMessageFromConvenienceDOMBindings):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (documentLoadedCallback):

2014-11-19  Dana Burkart  <dburkart@apple.com>

        Work around the fact that different masters may have different names for their codebases.
        https://bugs.webkit.org/show_bug.cgi?id=138878

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (parseRevisionProperty): Changed.
        Take a "fallback key" in addition to the primary key, so we can deal with inconsistencies in
        opensource / internal codebase naming convention.

2014-11-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Screen braille input doesn't work on forms.
        https://bugs.webkit.org/show_bug.cgi?id=138804

        Unreviewed build fix.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::setValue):

2014-11-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Screen braille input doesn't work on forms.
        https://bugs.webkit.org/show_bug.cgi?id=138804

        Reviewed by Mario Sanchez Prada.

        Add a method to setValue through the AX API in DRT.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setValueCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::setValue):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setValue):

2014-11-18  Csaba Osztrogonác  <ossy@webkit.org>

        Remove the WinCairo buildbot
        https://bugs.webkit.org/show_bug.cgi?id=138805

        Reviewed by Alex Christensen.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (appendCustomBuildFlags):
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):

2014-11-18  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Include header MachVMSPI.h instead of including the private header mach/mach_vm.h.

        * DumpRenderTree/mac/CheckedMalloc.cpp:

2014-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix after /webkit2/WebKitWebView/default-context r176256.

        Forgot to fix this test before landing.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewDefaultContext):

2014-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to create a WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=138826

        Reviewed by Gustavo Noronha Silva.

        Use a different WebKitWebContext for every test to ensure test
        cases are independent to each other. Tests using DBus to
        communicate with the injected bundle extension now use a unique
        name for the well known DBus name.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
        (beforeAll): Remove comment about the order of the tests and
        move the success test before the failed one now that tests don't
        depend on each others.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (beforeAll): Remove call to set the web extensions directory,
        since this is now done for all test in the Test constructor.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
        (beforeAll): Do not create a temporary directory, a temporary data
        directory is now created for all tests.
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp:
        (testWebKitDOMNodeHierarchyNavigation): Pass the web extension ID
        to the web process test runner.
        (testWebKitDOMNodeInsertion): Ditto.
        (testWebKitDOMNodeTagNames): Ditto.
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp:
        (runTest): Pass the web extension ID to the web process test runner.
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMXPathNSResolver.cpp:
        (runTest): Pass the web extension ID to the web process test runner.
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (createFileAtDestination): Use Test::dataDirectory() as base dir
        for temporary files.
        (beforeAll): Do not create a temporary directory.
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp:
        (webkitFrameTestRun): Pass the web extension ID to the web process
        test runner.
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        (testProcessPerWebView): Use local member instead of global variable.
        (testMultiprocessWebViewCreateReadyClose): Ditto.
        (beforeAll): Do not connect to initialize-web-extensions, Test now
        connects to the signal for all tests and calls a virtual method
        that test can override.
        (afterAll):
        (initializeWebExtensions): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        (testPrintOperationPrint): Use Test::dataDirectory() as base dir
        for temporary files.
        (beforeAll): Do not create a temporary directory.
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (beforeAll): Remove comment about the tests order.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (testWebExtensionGetTitle): Build the DBus service name using the
        web extension ID.
        (testDocumentLoadedSignal): Ditto.
        (testWebKitWebViewProcessCrashed): Ditto.
        (testWebExtensionIsolatedWorld): Ditto.
        (beforeAll): Remove initialization-user-data test, since now all
        tests are passing user data to the web extension.
        (testWebExtensionInitializationUserData): Deleted.
        (initializeWebExtensions): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        (testSetDirectory): Use the web context member inherited from Test.
        (testClearDatabase): Ditto.
        (testGetFaviconURI): Ditto.
        (beforeAll): Do not create a temporary directory.
        (afterAll):
        (webkitFaviconDatabaseFinalizedCallback): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (UserContentManagerTest::UserContentManagerTest):
        (beforeAll): Remove call to set the web extensions directory.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextDefault): Check also that a newly create web
        context is not the default web context.
        (testWebContextSpellChecker): Use the web context member inherited
        from Test.
        (testWebContextLanguages): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (methodCallCallback): Remove GetInitializationUserData method.
        (webkit_web_extension_initialize_with_user_data): Always create
        the DBus name using the user data provided.
        (makeBusName): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (webkit_web_extension_initialize_with_user_data): Create the DBus
        name using the user data provided.
        (webkit_web_extension_initialize): Deleted.
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.cpp:
        (Test::dataDirectory): Return the temporary data directory.
        (removeNonEmptyDirectory): Also remove directories recursively.
        (main): Remove the disk cache directory initialization, since this
        is now done in the Test constructor.
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::initializeWebExtensionsCallback): Call the virtual method
        initializeWebExtensions()
        (Test::Test): Create a new WebKitWebContext and initialize it.
        (Test::~Test): Disconnect initialize-web-extensions signal.
        (Test::initializeWebExtensions): Set the web extensions directory
        and user data.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.cpp:
        (WebProcessTestRunner::~WebProcessTestRunner): Use nullptr.
        (WebProcessTestRunner::runTest): Build the DBus proxy using a
        unique name created with the Test web extension ID.
        (WebProcessTestRunner::proxy): Deleted.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::WebViewTest): Create the web view with the Test web
        context.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h: Add optional user
        content manager parameter to the constructor.

2014-11-18  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Mesa build fails over llvm-3.5
        https://bugs.webkit.org/show_bug.cgi?id=138825

        Reviewed by Gustavo Noronha Silva.

        OwningPtr.h have been removed in llvm-3.5. Instread we should use std::unique_ptr for mesa build.

        * gtk/jhbuild.modules:
        * gtk/patches/mesa-gallivm-Fix-build-after-LLVM-commit-211259.patch: Added.

2014-11-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r176232.

        Broke the Mac build. Will investigate offline.

        Reverted changeset:

        "[iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions,
        MobileGestalt"
        https://bugs.webkit.org/show_bug.cgi?id=138802
        http://trac.webkit.org/changeset/176232

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Include header MachVMSPI.h instead of including the private header mach/mach_vm.h.

        * DumpRenderTree/mac/CheckedMalloc.cpp:

2014-11-17  Jake Nielsen  <jacob_nielsen@apple.com>

        Having 30+ flaky failures breaks EWS
        https://bugs.webkit.org/show_bug.cgi?id=138743

        Reviewed by Alexey Proskuryakov.

        Adds tests to ensure that the problem has been solved.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (test_first_failure_limit):
        (test_first_failure_limit_with_some_tree_redness):
        (test_second_failure_limit):
        (test_tree_failure_limit_with_patch_that_potentially_fixes_some_redness):
        (test_first_and_second_failure_limit):
        (test_first_and_clean_failure_limit):
        (test_first_second_and_clean_failure_limit):
        (test_very_red_tree_retry): Deleted.
        Really this was renamed to test_first_second_and_clean_failure_limit.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Makes the appropriate changes to PatchAnalysisTask to make sure that
        even when the first test run hits the failure limit, it will still try
        a second run.
        (PatchAnalysisTask._results_failed_different_tests):
        (PatchAnalysisTask._test_patch):
        (PatchAnalysisTask._continue_testing_patch_that_exceeded_failure_limit_on_first_or_second_try): Deleted.

2014-11-17  Ting-Wei Lan  <lantw44@gmail.com>

        [GTK] Add library search paths from LDFLAGS before pkg-config --libs
        https://bugs.webkit.org/show_bug.cgi?id=136018

        Reviewed by Carlos Garcia Campos.

        It is possible that the order of -L arguments in the output of
        pkg-config is wrong, which causes the linker to find the wrong
        version (usually older version) of libraries when running
        gtkdoc-scangobj.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_scangobj):

2014-11-17  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Bump EFL version to 1.12.0
        https://bugs.webkit.org/show_bug.cgi?id=138733

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2014-11-16  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose the blockquote element using ATK_ROLE_BLOCK_QUOTE
        https://bugs.webkit.org/show_bug.cgi?id=138771

        Reviewed by Chris Fleizach.

        Add mapping for ATK_ROLE_BLOCK_QUOTE in roleToString()

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2014-11-15  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Video and audio elements should be exposed using ATK's video and audio roles.
        https://bugs.webkit.org/show_bug.cgi?id=138767

        Reviewed by Chris Fleizach.

        Add mappings for ATK_ROLE_AUDIO and ATK_ROLE_VIDEO to roleToString().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2014-11-14  Alexey Proskuryakov  <ap@apple.com>

        Add shortcut macros to Mac TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=138729

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/port/mac.py: (MacPort.configuration_specifier_macros):
        Add version macros for current OS versions.

2014-11-13  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=138628
        A patch that doesn't apply is stuck in commit queue

        Rubber-stamped by David Kilzer.

        This also hopefully fixes other issues:
        - a patch that has cq+ flag set by a non-committer kills commit queue;
        - EWS never reports failing tests, and keeps spinning instead.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.set_flag_on_attachment):
        (Bugzilla.obsolete_attachment):
        Apply the fix from r174797 to more places.

2014-11-13  Dan Bernstein  <mitz@apple.com>

        Policy client not called for navigations through the page cache
        https://bugs.webkit.org/show_bug.cgi?id=138703

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[DecidePolicyForPageCacheNavigationDelegate webView:didFinishNavigation:]):
        (-[DecidePolicyForPageCacheNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2014-11-13  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Do not return ATK_ROLE_UNKNOWN for null or otherwise invalid accessible objects
        https://bugs.webkit.org/show_bug.cgi?id=137867

        Reviewed by Chris Fleizach.

        Add ATK_ROLE_INVALID to roleToString. Remove the null AtkRole check in
        AccessibilityUIElement::role: ATK_ROLE_INVALID = 0, and we need to be
        able to test for the presence of ATK_ROLE_INVALID.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::role):

2014-11-13  Juergen Ributzka  <juergen@apple.com>

        Update the "combineModules" script to handel more LLVM metadata.
        https://bugs.webkit.org/show_bug.cgi?id=138514

        Reviewed by Filip Pizlo.

        * ReducedFTL/combineModules.rb:

2014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow constructing a base PassRef with a derived Ref
        https://bugs.webkit.org/show_bug.cgi?id=138701

        Reviewed by Andreas Kling

        * TestWebKitAPI/Tests/WTF/Ref.cpp:
        (TestWebKitAPI::passWithPassRef):
        (TestWebKitAPI::passWithPassRefPtr):
        (TestWebKitAPI::TEST):

2014-11-05  Ada Chan  <adachan@apple.com>

        Implement new plug-in API for muting plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=138105

        Reviewed by Anders Carlsson.

        Add a new plug-in test for the mute API.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/SetMuted.cpp: Added.
        (SetMuted::SetMuted):
        (SetMuted::isMuted):
        (SetMuted::cachedIsMuted):
        (SetMuted::ScriptableObject::hasProperty):
        (SetMuted::ScriptableObject::getProperty):
        (SetMuted::ScriptableObject::pluginTest):
        (SetMuted::NPP_New):
        (SetMuted::NPP_GetValue):
        (SetMuted::NPP_SetValue):

2014-11-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip the UserMediaBasic test because it depends on
        constraints validation which is going to be fixed in bug #136449.

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

        [GTK] Expose user script messages to GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=138411

        Reviewed by Philippe Normand.

        Add a test case to check that user script messages sent using the
        DOM bindings API are also received in the UI process.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (UserScriptMessageTest::waitUntilMessageReceived):
        (UserScriptMessageTest::postMessageAndWaitUntilReceived):
        (testUserContentManagerScriptMessageFromDOMBindings):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (documentLoadedCallback):

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

        Unreviewed. Fix GTK+ clean build after r175930.

        Partial rollout of r175930 to not build the new unit test that
        broke clean builds in GTK+ port.

        * TestWebKitAPI/PlatformGTK.cmake:

2014-09-01  Philippe Normand  <pnormand@igalia.com>

        [WK2] UserMediaClient support
        https://bugs.webkit.org/show_bug.cgi?id=123158

        Reviewed by Benjamin Poulain.

        Simple API test for the UserMedia permission request API. The
        required test infrastructure is also added, inspired by the
        Geolocation infrastructure.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: New API test for UserMedia
        Permission request.
        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp: Added.
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/getUserMedia.html: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: new
        helper method to set the permission request result without user interaction.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Ditto.
        (WTR::InjectedBundle::setUserMediaPermission):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Ditto.
        (WTR::TestRunner::setUserMediaPermission):
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForUserMediaPermissionRequest): Permission
        request handler.
        (WTR::TestController::createOtherPage): Enable the new UserMedia
        permission request handler.
        (WTR::TestController::createWebViewWithOptions): Ditto.
        (WTR::TestController::resetPreferencesToConsistentValues): Enable
        MediaStream support, this is needed for getUserMedia.
        (WTR::TestController::resetStateToConsistentValues): clear
        UserMedia permissions list and flags.
        (WTR::TestController::setUserMediaPermission): Set permission
        request result and distpatch it.
        (WTR::TestController::handleUserMediaPermissionRequest): Save
        request and dispatch it.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):
        Dispatch cached permission requests.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2014-11-11  David Kilzer  <ddkilzer@apple.com>

        webkit-patch --suggest-reviewers is broken with newer versions of git
        <http://webkit.org/b/138627>

        Reviewed by Michael Saboff with feedback from Daniel Bates.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._changes_files_for_commit): Strip blank lines instead of
        assuming there is always a blank line at the beginning of the
        list.

2014-11-11  Alexey Proskuryakov  <ap@apple.com>

        DRT and WKTR touch disk cache
        https://bugs.webkit.org/show_bug.cgi?id=138622

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm: (prepareConsistentTestingEnvironment):
        Set a shared cache before calling -_switchNetworkLoaderToNewTestingSession, not after,
        because this function uses the shared cache.

        * WebKitTestRunner/mac/TestControllerMac.mm: (WTR::TestController::platformInitializeContext):
        Create an empty shared cache to prevent a default one from being created on disk.

2014-10-07  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Limit the size of explicit/implicit grid
        https://bugs.webkit.org/show_bug.cgi?id=136217

        Reviewed by Andreas Kling.

        Added a new unit test for the CSS parser. Right now it only checks
        that we properly clamp the maximum number of tracks on a grid to a
        maximum of 1 million.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CSSParser.cpp: Added.
        (TestWebKitAPI::computeNumberOfTracks): Helper function.
        (TestWebKitAPI::TEST): Added a
        CSSPropertyParserTest.GridTrackLimits test case.

2014-11-11  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        webkitpy test fix after r175867
        https://bugs.webkit.org/show_bug.cgi?id=138607

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py:
        (GDBCrashLogGeneratorTest.test_generate_crash_log):

2014-11-10  Philippe Normand  <pnormand@igalia.com>

        webkitpy: demangle C++ symbols from crash log stderr
        https://bugs.webkit.org/show_bug.cgi?id=138565

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator.generate_crash_log): Process stderr output
        with c++filt.

2014-11-10  Philippe Normand  <pnormand@igalia.com>

        [GTK] fix up the GDB backtrace report tool
        https://bugs.webkit.org/show_bug.cgi?id=138564

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._get_crash_log): Match the process name reported by the
        driver with the GTK port WebProcess executable filename.
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._get_gdb_output): Invoke gdb for the crashed
        program.
        (GDBCrashLogGenerator.generate_crash_log): Use %E in the core
        pattern to workaround the 16 characters size limit of %e.

2014-11-10  Conrad Shultz  <conrad_shultz@apple.com>

        Unreviewed, moved myself to the list of committers.

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

2014-11-10  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Fix the test font path after r175555.

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/PlatformEfl.cmake: Dependencies -> DependenciesEFL

2014-11-10  Akos Kiss  <akiss@inf.u-szeged.hu>

        Fix the exception fuzz helper to generate targets in the correct range
        https://bugs.webkit.org/show_bug.cgi?id=138544

        Reviewed by Filip Pizlo.

        Currently, the script generates exception fuzz targets in the range of
        0..($checkCount-1). However, target 0 is never hit, while target 1 is
        always outside of the outermost try block of the tests, which therefore
        prints unexpected output and results in false failures when fired at.
        Additionally, target $checkCount is never generated.

        This patch fixes the script to generate targets in the range of
        2..$checkCount.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:

2014-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        make-passwords-json.py should generarate everything needed for testing
        https://bugs.webkit.org/show_bug.cgi?id=138503

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/make_passwords_json.py:
        Renamed from make-passwords-json.py to be able included from mastercfg_unittest.py.
        Additionally generate auth.json, credentials.cfg and committers.cfg too.
        (create_mock_slave_passwords_dict): Moved from mastercfg_unittest.py
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (BuildBotConfigLoader._mock_open): Use make_passwords_json.create_mock_slave_passwords_dict() to avoid duplication.
        (BuildBotConfigLoader._create_mock_passwords_dict): Deleted.

2014-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] generate-gtkdoc should ignore invalid files
        https://bugs.webkit.org/show_bug.cgi?id=138542

        Reviewed by Darin Adler.

        * gtk/generate-gtkdoc:
        (files_to_ignore.file_should_be_ignored): Return True to ignore
        invalid files.

2014-11-08  Alexey Proskuryakov  <ap@apple.com>

        Delete cookies between tests
        https://bugs.webkit.org/show_bug.cgi?id=138528

        Reviewed by Sam Weinig.

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

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        Added a FIXME.

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

        [GTK] Run layout tests using the network process
        https://bugs.webkit.org/show_bug.cgi?id=138428

        Reviewed by Martin Robinson.

        Shared secondary process is the default in the GTK+ port, but we
        should run the tests using the network process to ensure
        everything works with the network process. In the future, the
        shared secondary process model might be a special case of multiple
        processes with 1 as maximum number of processes, but always using
        the network process.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

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

        [GTK] Allow to create a view with a related page in WTR
        https://bugs.webkit.org/show_bug.cgi?id=138501

        Reviewed by Martin Robinson.

        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Pass nullptr as
        related page to WKViewCreate.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView): Pass the given related
        page to WKViewCreate.

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

        WTR crashes after running a test when NetworkProcess enabled
        https://bugs.webkit.org/show_bug.cgi?id=138500

        Reviewed by Alexey Proskuryakov.

        WebNotificationProvider destructor is calling
        WKNotificationManagerSetProvider, but m_notificationManager is
        null because removeNotificationManager was already called.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::~WebNotificationProvider): Check
        m_notificationManager is not null before calling WKNotificationManagerSetProvider.

2014-11-06  Jake Nielsen  <jacob_nielsen@apple.com>

        Remove duplicate code from PatchAnalysisTask._test_patch and fix bug
        regarding incorrect call to PatchAnalysisTask.report_failure
        https://bugs.webkit.org/show_bug.cgi?id=138229

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        Makes sure test_results returns a list.
        (LayoutTestResults.test_results):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        Makes unit tests also check to make sure
        task.results_from_patch_test_run() and
        task.results_from_test_run_without_patch return instances of
        LayoutTestResults.
        (CommitQueueTaskTest._run_and_expect_patch_analysis_result):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Condenses duplicate code into _should_defer_patch_or_throw, and
        removes the now-unused _clean_tree_results member.
        (PatchAnalysisTask.__init__):
        (PatchAnalysisTask._continue_testing_patch_that_exceeded_failure_limit_on_first_or_second_try):
        (PatchAnalysisTask._should_defer_patch_or_throw):
        (PatchAnalysisTask._test_patch):
        (PatchAnalysisTask.results_from_patch_test_run):
        (PatchAnalysisTask.results_from_test_run_without_patch): Deleted.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        Removes needless call to results_from_test_run_without_patch
        (AbstractEarlyWarningSystem._failing_tests_message):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        Changes order of test failure messages to be in the order that they
        appear.
        (AbstractEarlyWarningSystemTest.test_failing_tests_message):
        * Scripts/webkitpy/tool/commands/queues.py:
        Removes needless call to results_from_test_run_without_patch.
        (CommitQueue._failing_tests_message):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (MockCommitQueueTask.results_from_test_run_without_patch): Deleted.

2014-11-06  Ryuan Choi  <ryuan.choi@navercorp.com>

        Unreviewed. Reorder my e-mail addresses in contributors.json

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

2014-11-06  Matthew Hanson  <matthew_hanson@apple.com>

        Remove code that prepends a leading 'r' to the first argument of _run_git_svn_find_rev
        https://bugs.webkit.org/show_bug.cgi?id=138475

        Reviewed by Ryosuke Niwa.

        The change in https://trac.webkit.org/175603 introduced broke compatibility with svn_revision_from_git_commit.
        This patch reverts the part of that change that broke compatibility. In addition, this patch adds a comment to
        explain that SVN revisions require a leading 'r', moves an existing comment to a more appropriate location and
        renames the positional argument to better reflect that it can represent either an SVN revision or a Git tree-ish.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._run_git_svn_find_rev):
        Add comment mentioning that svn_revisions need to begin with 'r'.
        Move comment (explaining that git svn find-rev exits with code 0 when no match is found) to a more appropriate location.
        Rename the argument 'revision' to 'revision_or_treeish' to reflect the dual form that argument can take.
        Remove code that coerced the revision/treeish into a string and prepended an 'r'.

2014-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add context menu API to Web Process Extensions
        https://bugs.webkit.org/show_bug.cgi?id=138311

        Reviewed by Gustavo Noronha Silva.

        Add tests cases for WebKitWebPage::context-menu signal.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuWebExtensionMenu):
        (testContextMenuWebExtensionNode):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (serializeContextMenu):
        (serializeNode):
        (contextMenuCallback):
        (pageCreatedCallback):

2014-11-06  Commit Queue  <commit-queue@webkit.org>

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

        We are not ready to run layout tests using the network process
        yet (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Run layout tests using the network process"
        https://bugs.webkit.org/show_bug.cgi?id=138428
        http://trac.webkit.org/changeset/175690

2014-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Run layout tests using the network process
        https://bugs.webkit.org/show_bug.cgi?id=138428

        Reviewed by Martin Robinson.

        Shared secondary process is the default in the GTK+ port, but we
        should run the tests using the network process to ensure
        everything works with the network process. In the future, the
        shared secondary process model might be a special case of multiple
        processes with 1 as maximum number of processes, but always using
        the network process.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2014-11-05  Dan Bernstein  <mitz@apple.com>

        Remove the unused deletion UI feature
        https://bugs.webkit.org/show_bug.cgi?id=138442

        Rubber-stamped by Alexey Proskuryakov.

        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[EditingDelegate webView:shouldShowDeleteInterfaceForElement:]): Deleted implementation of
        delegate method that’s been removed.

2014-11-05  Alexey Proskuryakov  <ap@apple.com>

        fast/dom/remove-body-during-body-replacement2.html fails on WK2
        https://bugs.webkit.org/show_bug.cgi?id=138334

        Reviewed by Anders Carlsson.

        Reset focus to main frame between tests. DumpRenderTree does this via -makeFirstResponder
        calls, which works because each frame is an NSView in WK1. WK2 makes equivalent
        -makeFirstResponder calls, which may or may not be needed for other reasons, but
        it also needs to reset internal focus explicitly.

        It's not clear if this is the right long-term fix or a workaround for a WebKit bug.
        WebKit behavior appears wrong, but it matches Firefox.

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

2014-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebResource::failed-with-tls-errors signal
        https://bugs.webkit.org/show_bug.cgi?id=137862

        Reviewed by Gustavo Noronha Silva.

        Add a test case to check that WebKitWebResource::failed-with-tls-errors
        is emitted when a subresource load fails due to TLS errors.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (TLSSubresourceTest::resourceLoadStartedCallback):
        (TLSSubresourceTest::TLSSubresourceTest):
        (TLSSubresourceTest::subresourceFailedCallback):
        (TLSSubresourceTest::subresourceFailedWithTLSErrorsCallback):
        (TLSSubresourceTest::subresourceLoadStarted):
        (TLSSubresourceTest::subresourceFailedWithTLSErrors):
        (TLSSubresourceTest::waitUntilSubresourceLoadFail):
        (testSubresourceLoadFailedWithTLSErrors):
        (httpsServerCallback):
        (httpServerCallback):
        (beforeAll):

2014-11-05  Alexey Proskuryakov  <ap@apple.com>

        Build fix for some compiler versions.

        * TestWebKitAPI/Tests/mac/TypingStyleCrash.mm: (TestWebKitAPI::TEST): Compiler was
        unhappy because this is a getter, and these shouldn't have side effects.

2014-11-04  Matthew Hanson  <matthew_hanson@apple.com>

        Add a method for performing cherrypick-merges.
        https://bugs.webkit.org/show_bug.cgi?id=138375

        Reviewed by Ryosuke Niwa.

        Adds support for cherrypick-merges.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.cherrypick_merge): Added.

2014-11-04  Matthew Hanson  <matthew_hanson@apple.com>

        Add a way to ascertain the SVN URL associated with a Git branch.
        https://bugs.webkit.org/show_bug.cgi?id=138374

        Reviewed by Ryosuke Niwa.

        The svn_url method returns the SVN URL associated with the current Git branch.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.svn_url): Added.

2014-11-04  Matthew Hanson  <matthew_hanson@apple.com>

        Add the ability to search for modifications that are staged for commit.
        https://bugs.webkit.org/show_bug.cgi?id=138373

        Reviewed by Ryosuke Niwa and Daniel Bates.

        This makes is easy to do identify files that require merge post-processing,
        in addition to stand-alone utility.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.modifications_staged_for_commit): Added.

2014-11-04  Matthew Hanson  <matthew_hanson@apple.com>

        Add a branch keyword argument to _run_git_svn_find_rev.
        https://bugs.webkit.org/show_bug.cgi?id=138372

        Reviewed by Ryosuke Niwa.

        The addition of this keyword argument allows clients to determine the Git hash
        of commits made on an SVN branch, provided that branch has been fetched locally.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._run_git_svn_find_rev):
        Add a branch keyword argument that is added to the end of the command, if present.

2014-11-04  Chris Dumez  <cdumez@apple.com>

        Add ptr() method to Ref class
        https://bugs.webkit.org/show_bug.cgi?id=138361

        Reviewed by Darin Adler.

        Use the new Ref::ptr() method.

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

2014-11-04  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [jhbuild] Make it possible to build GTK/EFL in same repository
        https://bugs.webkit.org/show_bug.cgi?id=137448

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (getJhbuildPath):
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.cpp:
        (getPlatformFontsPath):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getFontsPath):
        * jhbuild/jhbuild-wrapper:
        (determine_platform):
        (install_jhbuild):
        * jhbuild/jhbuildrc_common.py:
        (init):

2014-11-04  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [EFL] Bump LLVM to version 3.5.0
        https://bugs.webkit.org/show_bug.cgi?id=138312

        Reviewed by Csaba Osztrogonác.

        * efl/jhbuild.modules:
        * efl/patches/llvm-elf-add-stackmaps.patch: Added.
        * efl/patches/llvm-elf-fix-x86_64-fdecfiencoding.patch: Added.

2014-11-03  Simon Fraser  <simon.fraser@apple.com>

        Add page overlays that show regions with mouseWheel event handlers, and the non-fast-scrollable region, and code to toggle them in MiniBrowser WK2
        https://bugs.webkit.org/show_bug.cgi?id=138257

        Reviewed by Tim Horton.
        
        Add a "Debug Overlays" submenu item under "WebKit2-only Settings" which allows
        the user to toggle region page overlays on and off. Two overlays are available,
        for the non-fast scrollable region, and the region of element with wheel
        event handlers.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController nonFastScrollableRegionOverlayVisible]):
        (-[SettingsController wheelEventHandlerRegionOverlayVisible]):
        (-[SettingsController preferenceKeyForRegionOverlayTag:]):
        (-[SettingsController toggleDebugOverlay:]):
        (-[SettingsController debugOverlayVisible:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2014-11-03  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (Subpixel layout): Bubbles don't fit in Bugzilla review page
        https://bugs.webkit.org/show_bug.cgi?id=138323

        Reviewed by Zalan Bujtas.

        * QueueStatusServer/templates/statusbubble.html: Round the sizes up, not down.

2014-11-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [ninja] Don't remove response files for verbose builds
        https://bugs.webkit.org/show_bug.cgi?id=137816

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (determineNinjaVersion):
        (buildCMakeGeneratedProject):

2014-11-02  Akos Kiss  <akiss@inf.u-szeged.hu>

        [GTK] Fix the build of FTL JIT
        https://bugs.webkit.org/show_bug.cgi?id=138298

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild-optional.modules:
        Bump up LLVM version to 3.5.0 release and apply patches.
        * gtk/patches/llvm-elf-add-stackmaps.patch:
        Added. Adds .llvm_stackmaps section to ELF files. Backported from LLVM
        trunk.
        * gtk/patches/llvm-elf-fix-x86_64-fdecfiencoding.patch:
        Added. Ensures that PC-relative relocations in EH frames are not
        truncated to 32 bits on x86_64.

2014-10-31  Michael Saboff  <msaboff@apple.com>

        No way to specify target os or architecture when using the --no-copy option with run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=138268

        Reviewed by Andreas Kling.

        Added a --arch and --os option to set or override the values that are
        normally computed based on examining the JavaScriptCore we want to test.

        * Scripts/run-jsc-stress-tests:

2014-10-31  Dan Bernstein  <mitz@apple.com>

        llvmForJSC build emits a linker warning that it can't find usr/local/LLVMForJavaScriptCore/lib under the build directory
        https://bugs.webkit.org/show_bug.cgi?id=138259

        Reviewed by Geoff Garen.

        * Scripts/copy-webkitlibraries-to-product-directory: Create this directory even if it’s
        going to be empty to silence the warning.

2014-10-31  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Support script message handlers WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=133730

        Reviewed by Carlos Garcia Campos.

        Support user script message handlers in WebKitUserContentManager.
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
        an option is added to the CMake build files. The option is disabled
        globally by default, and the WebKitGTK port enables it. On the API
        level, two new methods to register and unregister names are provided
        in the "window.webkit" namespace, and on message reception the
        "WebKitUserContentManager::script-message-received" signal is
        emitted, using the registered names as signal detail.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        Add test case for user script message handlers.
        (scriptMessageReceived):
        (testUserContentManagerScriptMessageReceived):
        (beforeAll):

2014-10-30  Matthew Hanson  <matthew_hanson@apple.com>

        bisect-builds should support WebKit clients other than Safari
        https://bugs.webkit.org/show_bug.cgi?id=138225

        This patch adds support for bisecting WebKit nightly builds with clients other than Safari.

        The -a / --application optional argument allows the user to specify which application (or application bundle)
        should be run against the WebKit nightly builds.

        Reviewed by David Kilzer.

        * Scripts/bisect-builds:
        Swap out $safariPath for the more general $applicationPath
        Leave --safari-path as a commandline option for backwards compatibility
        (mountAndRunNightly):
        Use File::Spec->cat correctly (one directory per argument)
        Use open --wait-apps instead of running the target application directly

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Perpare for the mysterious future

        Reviewed by Lucas Forschler.

        * 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:
        * WebKitLauncher/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2014-10-30  Matthew Hanson  <matthew_hanson@apple.com>

        Update safariVersion to safariVersionString
        https://bugs.webkit.org/show_bug.cgi?id=138193

        The preceding change updated safariVersion to safariVersionString for the "4 Public Beta" check in OS X 10.5.x,
        but it should have also been done for the "4 Public Beta" check in OS X 10.4.x.

        Rubber-stamped by David Kilzer.

        * Scripts/bisect-builds:
        (makeNightlyList):
        Compare safariVersionString to a string literal, instead of safariVersion.

2014-10-30  Rohit Kumar  <kumar.rohit@samsung.com>

        [GTK] Minibrowser : Add window fullscreen support for Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=137775

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserWindow.c:
        (toggleFullScreen): Callback to toggle window fullscreen on pressing F11 key.
        (browser_window_init):

2014-10-29  Jake Nielsen  <jacob_nielsen@apple.com>

        CommitQueue and EWS should reject any patches that result in consistent test
        failures that aren't present on the tree.
        https://bugs.webkit.org/show_bug.cgi?id=138184

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/models/test_results.py:
        Adds a simple hashing function to allow for set operations to handle
        TestResult objects properly.
        (TestResult.__hash__):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        Adds one unit test, and modifies others to agree with the notion that
        patches that introduce new test failures (but also have flakyness)
        should be rejected rather than spin.
        (MockCommitQueue.report_flaky_tests):
        (CommitQueueTaskTest._run_and_expect_patch_analysis_result):
        (test_double_flaky_test_failure):
        (test_two_flaky_tests):
        (test_very_flaky_patch):
        (test_very_flaky_patch_with_some_tree_redness):
        (test_different_test_failures):
        (test_different_test_failures_with_some_tree_redness):
        (test_different_test_failures_with_some_tree_redness_and_some_fixes):
        (test_mildly_flaky_patch):
        (test_mildly_flaky_patch_with_some_tree_redness):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Makes PatchAnalysisTask reject said patches.
        (PatchAnalysisTask._test_patch):

2014-10-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WinCairoRequirements.zip cannot be downloaded from dropbox
        https://bugs.webkit.org/show_bug.cgi?id=138113

        Reviewed by Alexey Proskuryakov.

        * Scripts/update-webkit-dependency: Removing --sslv3 option from curl

2014-10-29  Matthew Hanson  <matthew_hanson@apple.com>

        bisect-builds should filter out nightlies that predate the introduction of an OS X operating system
        https://bugs.webkit.org/show_bug.cgi?id=138193

        This patch restricts the set of nightles to bisect to only those nightlies that ship with frameworks
        for the target OS (only support for OS X Yosemite, Mavericks and Mountain Lion was added.)

        It also does a bit of refactoring, including distinguishing between versions and version strings and
        saving versions to local variables instead of using eval in each conditional.

        Reviewed by David Kilzer.

        * Scripts/bisect-builds:
        (makeNightlyList):
        Restrict the set of nightlies to r174650 and above when running Yosemite.
        Restrict the set of nightlies to r157846 and above when running Mavericks.
        Restrict the set of nightlies to r122421 and above when running Mountain Lion.

2014-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] build-webkit should try harder to avoid re-running cmake
        https://bugs.webkit.org/show_bug.cgi?id=137949

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): Don't remove CMakeCache unconditionally for EFL.
        (generateBuildSystemFromCMakeProject): Comment fix after r174681.

2014-10-28  Daniel Bates  <dabates@apple.com>

        Unify logic in RunTests.run() to run the Python unit tests
        https://bugs.webkit.org/show_bug.cgi?id=138160

        Reviewed by Martin Robinson.

        Unify the interactive and non-interactive code path for running the Python unit tests
        in step RunTests so as to remove duplicate code to compute the the path to the script
        test-webkitpy and log an informative message ("Running Python unit tests") to the console.

        No new tests since no functionality was changed.

        * Scripts/webkitpy/port/base.py:
        (Port.python_unittest_results_directory):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):

2014-10-28  Jake Nielsen  <jacob_nielsen@apple.com>

        Make runtest.py call test-webkitpy with the --json flag when in
        non-interactive mode.
        https://bugs.webkit.org/show_bug.cgi?id=137667

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/base.py:
        Adds the python_unittest_results_directory method.
        (Port.python_unittest_results_directory):
        * Scripts/webkitpy/tool/steps/runtests.py:
        Changes RunTests to call test-webkitpy with the --json flag if the
        --non-interactive flag is set.
        (RunTests):
        (RunTests.run):

2014-10-28  Rebecca Hauck  <rhauck@adobe.com>

        import-w3c-tests should use re.escape() wherever it's handling file paths
        https://bugs.webkit.org/show_bug.cgi?id=137934

        This patch adds re.escape() to a few places where we're doing string
        conversions. This prevents errors when attribute values coincidentally
        have character sequences that can be interpreted as regular expressions.

        Reviewed by Bem Jones-Bey.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.convert_attributes_if_needed):

2014-10-28  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [EFL] Remove an unused include from Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=138130

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:

2014-10-25  Raniere Silva  <raniere@ime.unicamp.br>

        Fix link to Arch Linux Wiki
        https://bugs.webkit.org/show_bug.cgi?id=138010

        Reviewed by Benjamin Poulain.

        * gtk/install-dependencies:

2014-10-25  Alexey Proskuryakov  <ap@apple.com>

        Test regressions are not detected when image result is missing
        https://bugs.webkit.org/show_bug.cgi?id=138070

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        Count these as regressions, not as flaky tests.

        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        Test it.

2014-10-24  Timothy Horton  <timothy_horton@apple.com>

        Add Conrad Shultz to the contributors list.

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

2014-10-24  Dan Bernstein  <mitz@apple.com>

        build.webkit.org/dashboard immediately retries a request to buildbot when the response is 404
        https://bugs.webkit.org/show_bug.cgi?id=138046

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype._load): Only consider retrying immediately if the error code was
        401. Otherwise, we’ll retry normally in 45 seconds.

2014-10-24  Marcos Chavarría Teijeiro  <chavarria1991@gmail.com>

        [GTK] Implement is_selected method on WebKitHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=137110

        Reviewed by Tim Horton.

        Add tests for new context SELECTION on WebKitHitTestResult.

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

2014-10-23  Roger Fong  <roger_fong@apple.com>

        [Win] Skip failing JSC tests following r175078
        https://bugs.webkit.org/show_bug.cgi?id=130967.

        * Scripts/run-javascriptcore-tests:

2014-10-22  Jake Nielsen  <jacob_nielsen@apple.com>

        commitqueuetask_unittest.py should be made more concise.
        https://bugs.webkit.org/show_bug.cgi?id=137985

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        Refactors tests to use MockSimpleTestPlanCommitQueue where possible.
        (MockCommitQueue.__init__):
        (MockCommitQueue.report_flaky_tests):
        (MockCommitQueue):
        (MockCommitQueue.get_reported_flaky_tests):
        (MockSimpleTestPlanCommitQueue.__init__):
        (MockSimpleTestPlanCommitQueue.run_command):
        (MockSimpleTestPlanCommitQueue.did_run_clean_tests):
        (CommitQueueTaskTest._run_and_expect_patch_analysis_result):
        (test_land_failure):
        (test_failed_archive):
        (test_double_flaky_test_failure):
        (test_test_failure):
        (test_red_test_failure):
        (test_very_red_tree_retry):
        (test_red_tree_patch_rejection):
        (test_one_flaky_test):
        (test_tree_more_red_than_patch):
        (MockCommitQueue.test_results): Deleted.
        (test_simple_flaky_test_failure): Deleted.
        (_expect_validate): Deleted.
        (_expect_validate.MockDelegate): Deleted.
        (_expect_validate.MockDelegate.refetch_patch): Deleted.
        (_expect_validate.MockDelegate.expected_failures): Deleted.
        (_mock_patch): Deleted.
        (test_validate): Deleted.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Fixes a bug that slipped through the cracks prior to this change.
        (PatchAnalysisTask._test_patch):

2014-10-22  Alexey Proskuryakov  <ap@apple.com>

        Flakiness dashboard should support OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=137986

        Reviewed by Ryosuke Niwa.

        * TestResultServer/app.yaml:
        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2014-10-22  Jake Nielsen  <jacob_nielsen@apple.com>

        commitqueuetask should include more tests to ensure that the behavior
        of PatchAnalysisTask._test_patch() is well defined
        https://bugs.webkit.org/show_bug.cgi?id=137977

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        Adds the MockSimpleTestPlanCommitQueue class, which makes it easier
        and more readable to define tests that are meant to test the behaviour
        of PatchAnalysisTask._test_patch(), and adds several unit tests.
        (FailingTestCommitQueue.test_results):
        (PatchAnalysisResult):
        (MockSimpleTestPlanCommitQueue):
        (MockSimpleTestPlanCommitQueue.__init__):
        (MockSimpleTestPlanCommitQueue.run_command):
        (MockSimpleTestPlanCommitQueue._mock_test_result):
        (MockSimpleTestPlanCommitQueue.test_results):
        (CommitQueueTaskTest._run_and_expect_patch_analysis_result):
        (test_flaky_test_failure):
        (test_failed_archive):
        (test_two_flaky_tests):
        (test_one_flaky_test):
        (test_very_flaky_patch):
        (test_very_flaky_patch_with_some_tree_redness):
        (test_different_test_failures):
        (test_different_test_failures_with_some_tree_redness):
        (test_mildly_flaky_patch):
        (test_mildly_flaky_patch_with_some_tree_redness):
        (test_tree_more_red_than_patch):

2014-10-22  Jake Nielsen  <jacob_nielsen@apple.com>

        PatchAnalysisTask._test_patch() needs refactoring
        https://bugs.webkit.org/show_bug.cgi?id=137904

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        Fixes several small bugs, and makes minor changes to accomodate the
        changes in PatchAnalysisTask.
        (MockCommitQueue.refetch_patch):
        (MockCommitQueue.test_results):
        (test_flaky_test_failure):
        (test_failed_archive):
        (test_very_red_tree_retry):
        (_expect_validate.MockDelegate.refetch_patch):
        (MockCommitQueue.expected_failures): Deleted.
        (_expect_validate.MockDelegate.expected_failures): Deleted.
        * Scripts/webkitpy/tool/bot/expectedfailures.py: Removed.
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Removes the unexpected_failures member, adds the _clean_tree_results
        member, adds a helper function for _test_patch, and refactors
        _test_patch to be more readable.
        (PatchAnalysisTask.__init__):
        (PatchAnalysisTask._continue_testing_patch_that_exceeded_failure_limit_on_first_or_second_try):
        (PatchAnalysisTask._test_patch):
        (PatchAnalysisTask.results_from_test_run_without_patch):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        Removes AbstractEarlyWarningSystem's dependancy on ExpectedFailures. 
        (AbstractEarlyWarningSystem.begin_work_queue):
        (AbstractEarlyWarningSystem._failing_tests_message):
        (AbstractEarlyWarningSystem.command_failed):
        (AbstractEarlyWarningSystem.expected_failures): Deleted.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        Makes changes to accomodate the changes made to PatchAnalysisTask.
        (AbstractEarlyWarningSystemTest.test_failing_tests_message):
        * Scripts/webkitpy/tool/commands/perfalizer.py:
        Removes Perfalizer's dependancy on ExpectedFailures. 
        (PerfalizerTask.refetch_patch):
        (PerfalizerTask.expected_failures): Deleted.
        * Scripts/webkitpy/tool/commands/queues.py:
        Removes CommitQueue's dependancy on ExpectedFailures, and adds an
        initializer to allow for mock injection.
        (CommitQueue.__init__):
        (CommitQueue.begin_work_queue):
        (CommitQueue.process_work_item):
        (CommitQueue._failing_tests_message):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        Removes dependancy on ExpectedFailures, and instead uses mock
        injection.
        (MockCommitQueueTask):
        (MockCommitQueueTask.results_from_patch_test_run):
        (MockCommitQueueTask.results_from_test_run_without_patch):
        (mock_run_webkit_patch):

2014-10-22  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][WK2] Minibrowser : Add support for mouse middle button to open links in new window
        https://bugs.webkit.org/show_bug.cgi?id=136736

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_navigation_policy_decision): Check whether it's a link clicked with the middle mouse button and load the request in a new window.
        (window_create):

2014-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GtkInputMethodFilter from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137884

        Reviewed by Gustavo Noronha Silva.

        Move InputMethodFilter test from WebCore tests to WebKit2 tests
        and adapt it to use the new InputMethodFilter WebKit class. Instead
        of having virtual methods just for testing, it has a testing mode
        that logs the events.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKit2/gtk/InputMethodFilter.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/gtk/InputMethodFilter.cpp.
        (TestWebKitAPI::TestInputMethodFilter::TestInputMethodFilter):
        (TestWebKitAPI::TestInputMethodFilter::~TestInputMethodFilter):
        (TestWebKitAPI::TestInputMethodFilter::sendKeyEventToFilter):
        (TestWebKitAPI::TestInputMethodFilter::sendPressAndReleaseKeyEventPairToFilter):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::temporaryGetPreeditStringOverride):
        (TestWebKitAPI::temporaryResetOverride):
        (TestWebKitAPI::verifyCanceledComposition):

2014-10-21  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Cannot click on green tester bubbles
        https://bugs.webkit.org/show_bug.cgi?id=137909

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2014-10-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Run DumpRenderTree using native controls, not SafariTheme.dll.
        https://bugs.webkit.org/show_bug.cgi?id=137932

        Reviewed by Simon Fraser.

        This is the first step in moving over to native Windows rendering for our layout tests.
        Once this change lands, approximately 300 tests will start failing on Windows. I will
        rebaseline these changes against our test hardware and update this bug with the
        commits related to that work.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Call 'setShouldPaintNativeControls(TRUE)' so that
        we use native Windows drawing style.

2014-10-21  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        Fix FTL Native Inlining for EFL
        https://bugs.webkit.org/show_bug.cgi?id=137774

        Reviewed by Michael Saboff.

        Added Clang as an optional module to jhbuild.

        * efl/jhbuild.modules:

2014-10-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Change the default TLS errors policy to WEBKIT_TLS_ERRORS_POLICY_FAIL
        https://bugs.webkit.org/show_bug.cgi?id=137832

        Reviewed by Carlos Garcia Campos.

        Ensure each test sets the TLS errors policy that it really needs.
        Have each test except testTLSErrorsPolicy stash and restore the original
        TLS errors policy. Update testTLSErrorsPolicy to account for the new
        default policy.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testSSL):
        (testInsecureContent):
        (testTLSErrorsPolicy):
        (testTLSErrorsRedirect):
        (testTLSErrorsHTTPAuth):
        (testLoadFailedWithTLSErrors):
        (beforeAll):

2014-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Unskip inspector server unit tests.

        They should pass now.

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

2014-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test TestWebKitAPI/WebKit2Gtk/TestInspectorServer fails
        https://bugs.webkit.org/show_bug.cgi?id=132044

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (openRemoteDebuggingSession): Remove trailing slash when
        concatenating base inspector URL with the page, because the
        inspector returns the relative paths with a leading slash.

2014-10-20  Tanay C  <tanay.c@samsung.com>

        [EFL][WK2] Minibrowser : Add support for Case sensitive and word start search
        https://bugs.webkit.org/show_bug.cgi?id=137023

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Added functionality to support case sensitive and word start search
        (search_box_show): Modified.
        (search_box_hide): Modified.
        (on_search_field_activated): Modified.
        (on_search_backward_button_clicked): Modified.
        (on_search_forward_button_clicked): Modified.
        (on_search_case_option_changed): Added.
        (on_search_word_start_option_changed): Added.
        (window_create): Modified.

2014-10-20  Tanay C  <tanay.c@samsung.com>

        [GTK][Minibrowser] Escape key does not hide the search box
        https://bugs.webkit.org/show_bug.cgi?id=137734

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c: Added the check to handle search box hide
        (stopPageLoad): Modified.

2014-10-18  Antti Koivisto  <antti@apple.com>

        REGRESSION (r173356): Safari can't install a profile, gets 'Download Failed error
        https://bugs.webkit.org/show_bug.cgi?id=137855

        Reviewed by Dan Bernstein.

        Test and warn if the dumped response mime type differs from the platform response mime type.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        (WTR::InjectedBundlePage::platformResponseMimeType):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::platformResponseMimeType):

2014-10-17  Joseph Pecoraro  <pecoraro@apple.com>

        Remove run-inspector-perf-tests.py there is no PerformanceTests/inspector anymore
        https://bugs.webkit.org/show_bug.cgi?id=137835

        Reviewed by Andreas Kling.

        * Scripts/run-inspector-perf-tests.py: Removed.
        This script is stale, as PerformanceTests/inspector no longer exists.

2014-10-17  Simon Fraser  <simon.fraser@apple.com>

        Fix typo: should be ios-simulator-wk2, not ios-simulator_wk2.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_baseline_search_path):

2014-10-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Simplify test fallback paths for iOS Simulator testing
        https://bugs.webkit.org/show_bug.cgi?id=137830

        Reviewed by Zalan Bujtas.
        
        Make the fallback paths be:
            ios-simulator -> generic
            ios-simulator-wk2->ios-simulator -> generic
        
        so don't include mac in the fallback path. Also remove the
        version handling for simplicity.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort):
        (IOSSimulatorPort.default_baseline_search_path):

2014-10-17  Dana Burkart  <dburkart@apple.com>

        Fix typos in the dashboard config file.

        Unreviewed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2014-10-17  Brent Fulgham  <bfulgham@apple.com>

        [Win] Allow WinLauncher to specify Custom User Agent strings
        https://bugs.webkit.org/show_bug.cgi?id=137828

        Reviewed by Dean Jackson.

        * WinLauncher/Common.cpp: Add support for custom user agent strings.
        * WinLauncher/WinLauncher.cpp: Add some convenience methods to get
        and set the user agent strings.
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Add new menu
        resources and dialog for setting custom User Agent strings.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h:

2014-10-16  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Turn off font autosizing for iOS WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=137806

        Reviewed by Sam Weinig.

        Confusingly, WKPreferencesSetTextAutosizingEnabled() does nothing on iOS.
        Instead, we have to add WKPreferencesSetMinimumZoomFontSize() and set it to 0
        to disable font autosizing.
        
        Add platformResetPreferencesToConsistentValues() and implement it in the iOS
        test controller to set platform-specific prefs.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):

2014-10-16  Dan Bernstein  <mitz@apple.com>

        OSObjectPtr is missing leakRef()
        https://bugs.webkit.org/show_bug.cgi?id=137798

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtr.cpp:
        (TestWebKitAPI::TEST(OSObjectPtr, LeakRef)): Added.

2014-10-16  Lucas Forschler  <lforschler@apple.com>

        Update target platform to remove Leopard, Snow Leopard, Lion.
        Add Yosemite. 
        
        Unreviewed.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):

2014-10-16  David Kilzer  <ddkilzer@apple.com>

        commit-queue: fails to replace OO-PS! with reviewer name
        <http://webkit.org/b/137795>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.fetch_bug_dictionary): Bugzilla 4.2.x never gives out
        email addresses to unauthenticated page loads, so we must always
        authenticate before getting bug data so we get full email
        addresses.

2014-10-16  David Kilzer  <ddkilzer@apple.com>

        commit-queue: fails to close bugs after successfully landing patches
        <http://webkit.org/b/137794>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.clear_attachment_flags): Change 'nr=0' to 'nr=1' to
        tell Mechanize to use the second <textarea> on the page with
        name="comment".

2014-10-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update DRT to match Mac Logic
        https://bugs.webkit.org/show_bug.cgi?id=137787

        Reviewed by Dean Jackson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): 0 -> nullptr
        (runTest): Initialize MSG structure before using.
        (main): Add CRT debug flags if building DRT with debug malloc on Windows.
        Also, cleanly shut down COM when exiting.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didChangeLocationWithinPageForFrame): Move from
        header and add printf to match Mac.
        (FrameLoadDelegate::windowScriptObjectAvailable): Ditto.
        * DumpRenderTree/win/FrameLoadDelegate.h:
        (FrameLoadDelegate::didChangeLocationWithinPageForFrame): Deleted.
        (FrameLoadDelegate::windowScriptObjectAvailable): Deleted.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (isLocalhost): Added.
        (hostIsUsedBySomeTestsToGenerateError): Added.
        (ResourceLoadDelegate::willSendRequest): Add logic to mimic Mac's use
        of certain error and redirect host names.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Use 'done' flag to decide if
        anything should be output to the console. This modifies behavior to match the Mac.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Ditto.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Ditto.
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage): Ditto.
        (UIDelegate::webViewAddMessageToConsole): Ditto.
        * WinLauncher/PageLoadTestClient.cpp:
        (PageLoadTestClient::pageLoadEndedAtTime): Drive-by-fix for an assertion that I
        added last week.

2014-10-16  Commit Queue  <commit-queue@webkit.org>

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

        Speculative fix for Windows test was ineffective. (Requested
        by rfong on #webkit).

        Reverted changeset:

        "[Windows] Add some more logging to debug Windows test
        issues."
        http://trac.webkit.org/changeset/174754

2014-10-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, add myself to CoordinatedGraphics watchers.

        * Scripts/webkitpy/common/config/watchlist:

2014-10-15  Roger Fong  <roger_fong@apple.com>

        [Windows] Speculative Windows test fix.

        * DumpRenderTree/win/DumpRenderTree.cpp: Make sure that OLEAUT32.dll doesn't cache BSTRs.

2014-10-15  Rebecca Hauck  <rhauck@adobe.com>

        import-w3c-test rewrites relative src paths in ref files incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=137586

        This patch fixes a bug in test_converter.py where src paths were getting 
        rewritten as ../../some-path instead of <script src="../../some-path>". 
        It also adds support for rewriting src paths in style  elements, which was 
        missing before and it adds tests for this case.

        Reviewed by Bem Jones-Bey.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.convert_attributes_if_needed):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (test_convert_attributes_if_needed):
        (verify_reference_relative_paths):

2014-10-15  Jake Nielsen  <jacob_nielsen@apple.com>

        Add --json flag to test-webkitpy to emit JSON formatted test results
        to stdout
        https://bugs.webkit.org/show_bug.cgi?id=137353

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/server_process_unittest.py:
        Adds the read method to MockFile to allow the stdout of test_webkitpy
        to be redirected without causing erroneous test failures.
        In particular,
        webkitpy.port.server_process_unittest.TestServerProcess.test_broken_pipe
        and
        webkitpy.port.server_process_unittest.TestServerProcess.test_cleanup
        because when redirecting to a file, the
        _wait_for_data_and_update_buffers_using_select method in 
        server_process.py will find that there is a read file descriptor in
        its call to select.select, which eventually leads to it calling read()
        on the MockFile object.
        (MockFile.read):
        * Scripts/webkitpy/test/main.py:
        Adds the _print_results_as_json method and the --json flag which
        determines whether _print_results_as_json will get called.
        (Tester._parse_args):
        (Tester._print_results_as_json):
        (Tester._print_results_as_json.result_dict_from_tuple):
        (Tester._run_tests):

2014-10-13  David Farler  <dfarler@apple.com>

        [iOS] LayoutTestRelay: Detect broken pipe when reading simulator app's stdout and stderr.
        https://bugs.webkit.org/show_bug.cgi?id=137662

        Reviewed by Darin Adler.

        The layout test harness can close LayoutTestRelay's subprocess
        stdout and stderr in the case of a timeout or if a run is
        cancelled and the FIFOs are cleaned up. If LayoutTestRelay
        finds that no one is listening to its stdout/stderr (broken
        pipe), then just exit(1), there is nothing to report.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController didReceiveStdoutData:]):
        Add @try/@catch for NSFileHandleOperationException.
        (-[LTRelayController didReceiveStderrData:]):
        Add @try/@catch for NSFileHandleOperationException.

2014-10-15  Rohit Kumar  <kumar.rohit@samsung.com>

        [GTK] Minibrowser : Add keyboard support for zoom in , zoom out and default zoom in GTK Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=137060

        Reviewed by Philippe Normand.

        Add keyboard support for zoom in , zoom out and default zoom using 'Ctrl' + '+', 'Ctrl' + '-' and 'Ctrl' + '0' respectively.

        * MiniBrowser/gtk/BrowserWindow.c:
        (zoomInCallback):
        (zoomOutCallback):
        (defaultZoomCallback): Callback for default zoom keyboard support.
        (browser_window_init):

2014-10-14  Simon Fraser  <simon.fraser@apple.com>

        [Mac] DRT stderr logging after the test completes gets attributed to the next test

        Reviewed by Alexey Proskuryakov.
        
        DRT would send "#EOF" to stderr just after doing so to stdout, which cause any later
        logging to stderr to get associated with the next test.
        
        Fix by logging #EOF to stderr later, after we've completely finished with this test.

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

2014-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening. Ignore Visual Studio *.sdf temporary files.

        * DumpRenderTree/DumpRenderTree.vcxproj: Modified property svn:ignore.

2014-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Fix the make build after r174683
        https://bugs.webkit.org/show_bug.cgi?id=137703

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject):

2014-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Adding myself to the watchlist to CachedFont

        Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2014-10-14  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL][GTK] Make it possible to get verbose output with ninja
        https://bugs.webkit.org/show_bug.cgi?id=137606

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject):

2014-10-14  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Make it possible to use ninja for EFL build too
        https://bugs.webkit.org/show_bug.cgi?id=137605

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        * efl/install-dependencies:

2014-10-14  Rohit Kumar  <kumar.rohit@samsung.com>

        [GTK] Minibrowser : Add home buton and keyboard support for home page load
        https://bugs.webkit.org/show_bug.cgi?id=137486

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (loadHomePage): Callback for home page load.
        (browser_window_init):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (main):

2014-10-14  Manuel Rego Casasnovas  <rego@igalia.com>

        import-w3c-tests doesn't prefix property values
        https://bugs.webkit.org/show_bug.cgi?id=137600

        Reviewed by Bem Jones-Bey.

        Some property values are prefixed in WebKit. Modified the W3C import
        script in order to prefix property values and not only properties.
        The patch re-uses most of the already existent logic to prefix
        properties.

        * Scripts/webkitpy/w3c/test_converter.py: Read prefixed property values
        from CSSValueKeywords.in and adapt converter to modify both properties
        and property values.
        (convert_for_webkit):
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.output):
        (_W3CTestConverter.read_webkit_prefixed_css_property_list):
        (_W3CTestConverter):
        (_W3CTestConverter.add_webkit_prefix_to_unprefixed_properties_and_values):
        (_W3CTestConverter.add_webkit_prefix_following_regex):
        (_W3CTestConverter.convert_reference_relpaths):
        (_W3CTestConverter.convert_style_data):
        (_W3CTestConverter.convert_attributes_if_needed):
        (_W3CTestConverter.add_webkit_prefix_to_unprefixed_properties): Deleted.
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Updated unit test to
        include checks for property values too.
        (W3CTestConverterTest.test_read_prefixed_property_list):
        (verify_no_conversion_happened):
        (verify_prefixed_properties):
        (verify_prefixed_property_values):
        (generate_test_content_properties_and_values):
        (generate_test_content):
        * Scripts/webkitpy/w3c/test_importer.py: Modified importer to manage
        prefixed property values and inform about them.
        (TestImporter.import_tests):
        (TestImporter.write_import_log):

2014-10-13  Jer Noble  <jer.noble@apple.com>

        MediaPlayer::characteristicChanged() is not called when new tracks are found in SourceBufferPrivateAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=137533

        Reviewed by Andy Estes.

        Follow up patch; bail out of the test early (without failing) if the platform does not support MSE.

        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::isMSEEnabledCallback):
        (TestWebKitAPI::TEST):

2014-10-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement a page load profiling tool
        https://bugs.webkit.org/show_bug.cgi?id=137673

        Reviewed by Dean Jackson.

        Add a tool to capture and summarize page load statistics.

        * WinLauncher/Common.cpp:
        (parseCommandLine): Move from WinMain.cpp so that it can
        be shared with internal tools.
        * WinLauncher/PageLoadTestClient.cpp: Added.
        (PageLoadTestClient::PageLoadTestClient):
        (PageLoadTestClient::pageLoadStartedAtTime):
        (PageLoadTestClient::didStartProvisionalLoad):
        (PageLoadTestClient::didCommitLoad):
        (PageLoadTestClient::didFirstLayoutForMainFrame):
        (PageLoadTestClient::didHandleOnLoadEvents):
        (PageLoadTestClient::didFinishLoad):
        (PageLoadTestClient::didFailLoad):
        (PageLoadTestClient::didInitiateResourceLoad):
        (PageLoadTestClient::didEndResourceLoad):
        (PageLoadTestClient::pageLoadEndedAtTime):
        (PageLoadTestClient::endPageLoad):
        (PageLoadTestClient::clearPageLoadState):
        (PageLoadTestClient::shouldConsiderPageLoadEnded):
        (PageLoadTestClient::maybeEndPageLoadSoon):
        (PageLoadTestClient::setPageURL):
        (PageLoadTestClient::dumpRunStatistics):
        * WinLauncher/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest): Handle
        nullptr URL properly.
        * WinLauncher/ResourceLoadDelegate.cpp: Added.
        (ResourceLoadDelegate::QueryInterface):
        (ResourceLoadDelegate::AddRef):
        (ResourceLoadDelegate::Release):
        (ResourceLoadDelegate::identifierForInitialRequest):
        (ResourceLoadDelegate::willSendRequest):
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        (ResourceLoadDelegate::didCancelAuthenticationChallenge):
        (ResourceLoadDelegate::didReceiveResponse):
        (ResourceLoadDelegate::didReceiveContentLength):
        (ResourceLoadDelegate::didFinishLoadingFromDataSource):
        (ResourceLoadDelegate::didFailLoadingWithError):
        (ResourceLoadDelegate::plugInFailedWithError):
        * WinLauncher/ResourceLoadDelegate.h: Added.
        (ResourceLoadDelegate::ResourceLoadDelegate):
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::WinLauncher): Accept argument to indicate we want to capture
        page loading statistics.
        (WinLauncher::setFrameLoadDelegatePrivate): Get rid of stub implementation
        and set private load delegate state.
        (WinLauncher::setResourceLoadDelegate): Replace stub with a full implementation
        that sets the view's resource load delegate.
        (WinLauncher::loadURL): If no URL is passed, load the test document.
        * WinLauncher/WinLauncher.h:
        (WinLauncher::pageLoadTestClient):
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Updated for new source files.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters: Ditto.
        * WinLauncher/WinLauncherWebHost.cpp:
        (WinLauncherWebHost::updateAddressBar): Hook into page load statistics routine.
        (WinLauncherWebHost::loadURL): Moved 'SendMessage' call to its own method so that
        it could be used from other source files.
        (WinLauncherWebHost::didFinishLoadForFrame): Added overload to capture statistics.
        (WinLauncherWebHost::didStartProvisionalLoadForFrame): Ditto.
        (WinLauncherWebHost::didFailLoadWithError): Ditto.
        (WinLauncherWebHost::didHandleOnloadEventsForFrame): Ditto.
        (WinLauncherWebHost::didFirstLayoutInFrame): Ditto.
        (WinLauncherWebHost::didFinishDocumentLoadForFrame): Ditto.
        (WinLauncherWebHost::didFirstVisuallyNonEmptyLayoutInFrame): Ditto.
        (WinLauncherWebHost::didStartProvisionalLoadForFrame): Deleted.
        * WinLauncher/WinLauncherWebHost.h:
        * WinLauncher/WinMain.cpp:
        (wWinMain): Create and use new delegates for gathering page load data.
        * WinLauncher/stdafx.h: Need to add <wtf/Platform> include for various macros used in build.

2014-10-13  Simon Fraser  <simon.fraser@apple.com>

        Improve the test image diffs page
        https://bugs.webkit.org/show_bug.cgi?id=137674

        Reviewed by Alexey Proskuryakov.
        
        Don't treat the input file as a format string, otherwise we have to escape special
        characters. Just do a couple of replaces.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.write_image_diff_files):

2014-10-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [XvfbDriver] Regular expression used to match running X servers fails on Fedora 21.
        https://bugs.webkit.org/show_bug.cgi?id=137659

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._next_free_display): Update the regular expression to also match Xorg.bin

2014-10-13  Alexey Proskuryakov  <ap@apple.com>

        Add more detailed wait time information to EWS metrics
        https://bugs.webkit.org/show_bug.cgi?id=137649

        Reviewed by Daniel Bates.

        Added average and worst time (we used to only have median), and also a percentage
        of patches that took a non-trivial time to start. Non-trivial is defined as 3 minutes.

        There is always some wait due to the polling nature of the queues, which is well understood
        and doesn't need to be measured. What needs to be measured is whether there is enough
        bot machines to process patches as soon as they are submitted.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._analyzeBubblePerformance):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsBubbleView.js:
        (MetricsBubbleView.prototype._update):

2014-10-11  Jer Noble  <jer.noble@apple.com>

        MediaPlayer::characteristicChanged() is not called when new tracks are found in SourceBufferPrivateAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=137533

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/file-with-mse.html: Added.
        * TestWebKitAPI/Tests/WebKit2/test-mse.mp4: Added.

2014-10-13  Simon Fraser  <simon.fraser@apple.com>

        iOS DRT snapshots are limited to the page visible area
        https://bugs.webkit.org/show_bug.cgi?id=137650

        Reviewed by Daniel Bates.
        
        LegacyTileCache drawing was limited to the window's visible area, found by
        crawling up the layer hierarchy to the root layer. This caused test snapshots to
        be missing non-composited content outside the iPhone visible area, which hinders
        testing.
        
        Fix by adding a test-only mode where the window visible area is the entire window.
        
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (dumpWebViewAsPixelsAndCompareWithExpected): Drive-by RetainPtr fix.
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithLayer:]): Call setEntireWindowVisibleForTesting:YES
        for the DRT window.
        

2014-10-12  Simon Fraser  <simon.fraser@apple.com>

        Page not fully rendered in iOS DRT snapshots
        https://bugs.webkit.org/show_bug.cgi?id=137638

        Reviewed by Tim Horton.
        
        In iOS DumpRenderTree, we need to wait for a cycle of the WebThread runloop
        to ensure that the page has laid out and is rendered by the time we take
        the snapshot.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DumpRenderTree _webThreadEventLoopHasRun]): Moved.
        (-[DumpRenderTree _webThreadInvoked]): Moved.
        (-[DumpRenderTree _waitForWebThreadThenDump]):
        (dump): Use a performSelectorOnMainThread:withObject:waitUntilDone:NO to wait
        for a cycle of the WebThrewd runloop. We can't just call _waitForWebThread because
        that blocks on a delegate callback, and we can't dispatch_async because _waitForWebThread
        relies on dispatch_async too, and the inner block won't complete until the outer block
        has completed.
        (dumpTestResults): Move the guts of dump() here.
        (runTest): Whitespace.

2014-10-12  Alexey Proskuryakov  <ap@apple.com>

        Adding svn:ignore so that .pyc files don't show up as new.

        * Scripts/webkitpy/xcode: Added property svn:ignore.

2014-10-12  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Introduce EWebKit_Extension
        https://bugs.webkit.org/show_bug.cgi?id=134921

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Added x option to test extension path.
        (window_create):
        (elm_main):
        * Scripts/webkitpy/common/config/watchlist:
        Added Source/WebKit2/WebProcess/InjectedBundle/API/efl/ into EFLWebKit2PublicAPI.
        * Scripts/webkitpy/style/checker.py:
        Added Source/WebKit2/WebProcess/InjectedBundle/API/efl/ into EFL exceptions.

2014-10-11  Simon Fraser  <simon.fraser@apple.com>

        After r174628 we send the test process a SIGTERM before the SIGKILL.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_kill_process):

2014-10-11  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Enable WebP support.
        https://bugs.webkit.org/show_bug.cgi?id=136156

        Reviewed by Gyuyoung Kim.

        Include libwebp-dev package to support WebP for WK2 Efl.

        * efl/install-dependencies:

2014-10-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Split GMainLoopSource moving thread safe implementation to its own class GThreadSafeMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=137485

        Reviewed by Sergio Villar Senin.

        Update GMainLoopSource tests. Most of the tests are now run twice,
        first with a GMainLoopSource and then with a
        GThreadSafeMainLoopSource, since both should have the same
        behaviour. The threading test uses GThreadSafeMainLoopSource and
        the delete on destroy test uses GMainLoopSource. The tests
        themselves haven't changed, since there's no change in behaviour.

        * TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:
        (TestWebKitAPI::GMainLoopSourceTest::source):
        (TestWebKitAPI::basicRescheduling):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::reentrantRescheduling):
        (TestWebKitAPI::cancelRepeatingSourceDuringDispatch):
        (TestWebKitAPI::basicDestroyCallbacks):
        (TestWebKitAPI::destroyCallbacksAfterCancellingDuringDispatch):
        (TestWebKitAPI::destroyCallbacksAfterReschedulingDuringDispatch):

2014-10-10  Dana Burkart  <dburkart@apple.com>

        Fix fat-fingered function name in git-add-reviewer.

        Unreviewed.

        * Scripts/git-add-reviewer:
        (getConfigValue):

2014-10-10  David Farler  <dfarler@apple.com>

        [iOS] LayoutTestRelay should ensure its DRT/WKTR dies when receiving kill/term signals
        https://bugs.webkit.org/show_bug.cgi?id=137528

        Reviewed by Simon Fraser.

        Catch SIGINT and SIGTERM signals in the LayoutTestRelay
        and SIGKILL the paired simulator app before exiting cleanly.

        webkitpy only uses SIGKILL to kill processes which you cannot
        catch. Send SIGTERM to the process and give it chance to do
        its thing before sending SIGKILL. Sending a SIGKILL to an already
        dead PID is safe.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.h:
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController finish]):
        * LayoutTestRelay/LayoutTestRelay/main.m:
        (receivedSignal):
        (main):

2014-10-10  David Farler  <dfarler@apple.com>

        [iOS] LayoutTestRelay should detect EOF and properly signal underlying DRT/WKTR
        https://bugs.webkit.org/show_bug.cgi?id=137527

        Reviewed by Simon Fraser.

        NSFileHandle doesn't notify of EOF in its readability handler.
        Use a dispatch_source_t and an event handler that is called when reading is possible.
        In the handler block, do a run-of-the-mill read(2) from standard input and
        detect EOF in the usual way by checking that zero bytes were read.

        Once an EOF is received, the FIFOs are disconnected, the simulator app
        is killed, and the relay exits with status 0.

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController initWithDevice:productDir:appPath:identifierSuffix:dumpToolArguments:]):
        (-[LTRelayController didDisconnect]):
        (-[LTRelayController didConnect]):
        (-[LTRelayController launchApp]):
        Rename "dispatchSource" to "simulatorAppExitDispatchSource" to prevent any
        confusion with this new dispatch source, called "standardInputDispatchSource".
        (-[LTRelayController finish]): Added.
        (-[LTRelayController readFileHandle:]): Deleted.

2014-10-10  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Crash on facebook.com
        https://bugs.webkit.org/show_bug.cgi?id=137562

        Reviewed by Chris Dumez.

        Crash occurs on the facebook.com when the webview is resized
        after the <select> item is clicked but no item is chosen.
        This crash is just caused by the reference of invalidated variable.
        From the EwkView::closePopupMenu(), ewk_menu is just invalidated.
        Therefore ewk_menu variable is not available anymore when on_popup_menu_hide()
        on MiniBrowser is called.
        As a result, just set ewk_menu to NULL in order to prevent crash condition.

        * MiniBrowser/efl/main.c:
        (on_popup_menu_hide):

2014-10-10  Alexey Proskuryakov  <ap@apple.com>

        A small wording change for clarity.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsBubbleView.js:
        (MetricsBubbleView.prototype._update):

2014-10-10  Alexey Proskuryakov  <ap@apple.com>

        Dashboard metrics page should have EWS statistics
        https://bugs.webkit.org/show_bug.cgi?id=137626

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueue.js:
        (BubbleQueue): Put shortName in the object, so that it's actually useful.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Re-ordered queues to match bubble order.
        (BubbleQueueServer.prototype.jsonProcessingTimesURL): Added URL for the new handler.
        (BubbleQueueServer.prototype.loadProcessingTimes): Load the data from webkit-queues.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        Added analysis for bubble queues.

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

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsMain.js:
        (buildBubbleQueuesTable): Build the UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/metrics.html:
        Added JS sources to load.

        * QueueStatusServer/app.yaml: To update app version.

        * QueueStatusServer/handlers/processingtimesjson.py: Added.

        * QueueStatusServer/main.py: Added a handler for processing-times-json.

2014-10-10  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Commit queue doesn't process rollouts
        https://bugs.webkit.org/show_bug.cgi?id=137623

        Reviewed by Tim Horton.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/updateworkitems.py:
        (UpdateWorkItems._work_items_from_request):

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

        Fix syntax error after r174601.

        * Scripts/run-javascriptcore-tests:

2014-10-10  Michael Saboff  <msaboff@apple.com>

        Add ability to select tarfile name in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=137614

        Reviewed by Mark Hahnenberg.

        Added optional file name argument to the --tarball option.  

        * Scripts/run-javascriptcore-tests: Added "--" to terminate options so the first
        extra test given after the options wont be used for the optional tarball file name.
        * Scripts/run-jsc-stress-tests:

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update my information in contributors.json

        Use my preferred first name and update my expertise areas.

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

2014-10-10  Adrien Destugues  <pulkomandy@gmail.com>

        Fix perl scripts to run with env on Linux
        https://bugs.webkit.org/show_bug.cgi?id=137601

        Reviewed by Csaba Osztrogonác.

        Use of arguments in #! is nonstandard and does not behave the same on
        different systems. Linux would look for an executable named "perl -w" 
        "use warnings;" does the same things in a more portable way.

        * Scripts/commit-log-editor:
        * Scripts/num-cpus:
        * Scripts/prepare-ChangeLog:
        * Scripts/run-launcher:
        * Scripts/svn-create-patch:

2014-10-10  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [jhbuild] We should be able to disable wiping on configuration change
        https://bugs.webkit.org/show_bug.cgi?id=137446

        Reviewed by Csaba Osztrogonác.

        The default behaviour isn't changed, wiping on configuration change feature can be disabled with
        setting JHBUILD_WIPE_ON_CHANGE=0 environment variable
        or passing --no-wipe-on-change command line option.

        * Scripts/update-webkit-libs-jhbuild:

2014-10-09  Andy Estes  <aestes@apple.com>

        Teach webkitpy about OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=137585

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_mac_version):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_os_version):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/port/mac_unittest.py:
        (test_versions):
        (test_baseline_search_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):
        (TestRebaselineExpectations.test_rebaseline_expectations):

2014-10-09  Dana Burkart  <dburkart@apple.com>

        Add Mac OS Yosemite dashboard support.

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:

2014-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Add Babak to contributors.json and add historical email addresses for some contributors
        https://bugs.webkit.org/show_bug.cgi?id=137546

        Reviewed by Christophe Dumez.

        contributors.json is used to analyze historical commit data and change logs.

        Add back historical email addresses for some contributors and also add Babak (Shafiei).

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

2014-10-09  Lucas Forschler  <lforschler@apple.com>

        Add Mac OS Yosemite webkit build infrastructure.
        
        This patch adds 15 bots to our build.webkit.org configuration.
        We are matching the current Mavericks machines 1:1.
        
        This patch includes some minor spacing changes to the buildslaves section to make everything similar.
        
        Reviewed by Matt Hanson.

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

2014-10-09  Dana Burkart  <dburkart@apple.com>

        Don't use backticks when running commands, as we run into sh-related
        interpolation issues. Also, fix our usage of system() to properly
        retrieve the status code.
        https://bugs.webkit.org/show_bug.cgi?id=137541

        Reviewed by Darin Adler.

        * Scripts/git-add-reviewer:
        (interactive):
        (nonInteractive):
        (requireCleanWorkTree):
        (cherryPick):
        (commit):
        (addReviewerToFile):
        (head):
        (isAncestor):
        (toCommit):
        (changeLogsForCommit):
        (resetToCommit):
        (getConfigValue):
        (runCommandWithOutput):

2014-10-09  Tim Horton  <timothy_horton@apple.com>

        Add a WebKit1 preference for selection services
        https://bugs.webkit.org/show_bug.cgi?id=137498
        <rdar://problem/18572699>

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        Turn on image and selection services in the Legacy WebKit MiniBrowser.

2014-10-09  Adrien Destugues  <pulkomandy@gmail.com>

        Get the patch scripts running on Haiku
        https://bugs.webkit.org/show_bug.cgi?id=137559

        Reviewed by Benjamin Poulain.

        Use /usr/bin/env instead of hardcoding path to perl.
        Declare haiku platform in platforminfo.py to avoid check-webkit-style
        failure.

        * Scripts/commit-log-editor:
        * Scripts/num-cpus:
        * Scripts/prepare-ChangeLog:
        * Scripts/run-launcher:
        * Scripts/svn-create-patch:
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_os_name):

2014-10-08  Jake Nielsen  <jacob_nielsen@apple.com>

        StyleQueue should throw a PatchIsNotValid exception to achieve
        consistency with CommitQueue and EWS
        https://bugs.webkit.org/show_bug.cgi?id=137500

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        Adds a call to validate() in run().
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        Adds a return False in the patch is not valid exception statement.
        (AbstractEarlyWarningSystem.review_patch):
        * Scripts/webkitpy/tool/commands/queues.py:
        Adds a return False in the patch is not valid exception statement in
        commit queue, and adds an except statement to catch PatchIsNotValid
        exceptions in style queue.
        (CommitQueue.process_work_item):
        (StyleQueue.review_patch):

2014-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Race condition with WebKitWebView:is-loading after starting page load
        https://bugs.webkit.org/show_bug.cgi?id=136692

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (loadChangedCallback): Only check is-loading is false when load
        has finished if the load didn't fail due to a cancellation.
        (loadFailedCallback): Only check is-loading is false if the load
        didn't fail due to a cancellation.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::loadURI): Check is-loading is true and active URI is
        the requested one rigth after requesting the load.
        (WebViewTest::loadHtml): Ditto.
        (WebViewTest::loadPlainText): Ditto.
        (WebViewTest::loadBytes): Ditto.
        (WebViewTest::loadRequest): Ditto.
        (WebViewTest::loadAlternateHTML): Ditto.
        (WebViewTest::goBack): Ditto.
        (WebViewTest::goForward): Ditto.
        (WebViewTest::goToBackForwardListItem): Ditto.

2014-10-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] Resolve various static analyzer warnings in Tools.
        https://bugs.webkit.org/show_bug.cgi?id=137534

        Reviewed by Dean Jackson.

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (main): User proper printf specifiers.
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::childrenCount): Handle possibility that
        gcc_accChildCount returns with an error.
        (accessibilityState): Ditto for gcc_accState.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::showDesktopNotification): Use proper
        check for return value from 'isHTML'. HRESULT is not a boolean and cannot
        be treated as such.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (DumpRenderTreeWndProc): Avoid possible infinite loop on teardown caused
        by comparing an unsigned value as being greater-than zero.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (dump): Pass proper character pointer type to printf.
        (EditingDelegate::shouldBeginEditingInDOMRange): Ditto.
        (EditingDelegate::shouldEndEditingInDOMRange): Ditto.
        (EditingDelegate::shouldInsertNode): Ditto.
        (EditingDelegate::shouldInsertText): Ditto.
        (EditingDelegate::shouldDeleteDOMRange): Ditto.
        (EditingDelegate::shouldChangeSelectedDOMRange): Ditto.
        (EditingDelegate::shouldApplyStyle): Ditto.
        * DumpRenderTree/win/EventSender.cpp:
        (beginDragWithFilesCallback): Handle possible error case for GlobalAlloc.
        * DumpRenderTree/win/EventSender.h: Add proper declaration for HRESULT to match
        system headers.
        * DumpRenderTree/win/PixelDumpSupportWin.cpp: Handle possible failure
        from CreateDIBSection.
        * DumpRenderTree/win/UIDelegate.cpp: Ensure proper type is passed to printf.
        * TestWebKitAPI/Tests/WTF/MediaTime.cpp: Get rid of workaround for NaN under
        older versions of MSVC we no longer support.
        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Use proper types and API
        for 64-bit builds.
        * TestWebKitAPI/TestsController.cpp: Use NeverDestroyed like a good citizen.
        * TestWebKitAPI/TestsController.h: Ditto.
        * WinLauncher/Common.cpp: Handle possible failure from GetModuleFileName.
        * WinLauncher/WinLauncher.cpp: Make order of operations explicit to avoid
        performing bitwise | before the comparison is done.

2014-10-08  Ada Chan  <adachan@apple.com>

        Add a test for WKPageIsPlayingAudio().
        https://bugs.webkit.org/show_bug.cgi?id=137048

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add file-with-video.html, test.mp4, and WKPageIsPlayingAudio.cpp to the project.
        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::isPlayingAudioDidChangeCallback):
        (TestWebKitAPI::setUpClients):
        (TestWebKitAPI::TEST):
        This test loads a page with a video in it. When the page is loaded, we first check that
        WKPageIsPlayingAudio() returns false for the page. Then we call a method to start the video.
        When the WKPageUIClient::isPlayingAudioDidChange callback gets called, check that WKPageIsPlayingAudio()
        now returns true for the page.
        * TestWebKitAPI/Tests/WebKit2/file-with-video.html: Added.
        * TestWebKitAPI/Tests/WebKit2/test.mp4: Added.
        This is a video copied from LayoutTests/media/content.

2014-10-08  Csaba Osztrogonác  <ossy@webkit.org>

        [webkitpy] Use python-irclib-0.4.8.tar.gz instead of zip in AutoInstaller
        https://bugs.webkit.org/show_bug.cgi?id=137516

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_irc):

2014-10-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies should install libjpeg-turbo on Debian and derivatives.
        https://bugs.webkit.org/show_bug.cgi?id=137520

        Reviewed by Philippe Normand.

        Debian is switching is default JPEG library to libjpeg-turbo <https://wiki.debian.org/LJTTransition#Text>
        For other distributions, we are already installing libjpeg-turbo.
        So, do the same for Debian and derivatives.

        * gtk/install-dependencies: Install libjpeg-dev that depends on the default implementation of libjpeg.

2014-10-08  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] Add back the workaround to replace ZipFile.extractall()
        https://bugs.webkit.org/show_bug.cgi?id=137519

        Reviewed by Csaba Osztrogonác.

        It was removed by <http://trac.webkit.org/changeset/174266>,
        because the comment stated it is a workaround for buggy python
        2.6.1 which shipped on Snow Leopard. But it turned out the bug
        is still valid with python 2.7 shipped on the latest Ubuntu
        (12.04 and 14.04) and OS X 10.9.

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

2014-10-08  Commit Queue  <commit-queue@webkit.org>

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

        It broke EFL layout test totally (Requested by gyuyoung on
        #webkit).

        Reverted changeset:

        "[EFL] Introduce EWebKit_Extension"
        https://bugs.webkit.org/show_bug.cgi?id=134921
        http://trac.webkit.org/changeset/174335

2014-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make forwarding headers generation depend on source code
        https://bugs.webkit.org/show_bug.cgi?id=137394

        Reviewed by Philippe Normand.

        * TestWebKitAPI/CMakeLists.txt: Add missing dependency rule.
        * TestWebKitAPI/PlatformGTK.cmake: Only run
        generate-forwarding-headers.pl when source code changes.
        * WebKitTestRunner/PlatformGTK.cmake: Ditto.

2014-10-07  Tanay C  <tanay.c@samsung.com>

        Remove build warnings in Hashmap API tests
        https://bugs.webkit.org/show_bug.cgi?id=137484

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST): Changed EXPECT_EQ(false, addResult.isNewEntry) to EXPECT_FALSE(addResult.isNewEntry) 

2014-10-07  Jake Nielsen  <jacob_nielsen@apple.com>

        Commit queue doesn't drop obsolete patches sometimes
        https://bugs.webkit.org/show_bug.cgi?id=137460

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        Adds another test patch for use in queues_unittest.py.
        courtesy of Csaba Osztrogonác <ossy@webkit.org>
        (MockBugzilla):
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        Raises a PatchIsNotValid exception in the case of validate() returning
        false.
        (CommitQueueTask.run):
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        Raises a PatchIsNotValid exception in the case of validate() returning
        false.
        (EarlyWarningSystemTask.run):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Defines PatchIsNotValid exception. 
        (PatchIsNotValid):
        (PatchIsNotValid.__init__):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        Remove call to validate() and instead catches the PatchIsNotValid
        exception.
        (AbstractEarlyWarningSystem.review_patch):
        * Scripts/webkitpy/tool/commands/queues.py:
        Adds logic to catch the PatchIsNotValid exception.
        (CommitQueue.process_work_item):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        Adds the test_non_valid_patch test to ensure that invalid patches are
        handled properly, and don't just result in indefinite spinning.
        courtesy of Csaba Osztrogonác <ossy@webkit.org>
        (test_non_valid_patch):

2014-10-07  Daniel Bates  <dabates@apple.com>

        [iOS] Teach run-webkit-tests to honor TestExpectation file for iOS Simulator 64-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=137499

        Reviewed by Simon Fraser.

        Fixes an issue where the TestExpectation file for the iOS Simulator platform was only
        honored when running run-webkit-tests with a 32-bit simulator build of iOS WebKit. We
        should honor the TestExpectation file for the iOS Simulator platform for both 32- and 64-
        bit simulator builds of iOS WebKit.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._generate_all_test_configurations):

2014-10-07  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [GTK] jhbuild modules should build xserver with the --without-dtrace option.
        https://bugs.webkit.org/show_bug.cgi?id=137482

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Added --without-dtrace option to xserver jhbuild.modules config.

2014-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] TLS errors should take precedence over HTTP authentication
        https://bugs.webkit.org/show_bug.cgi?id=137300

        Reviewed by Sergio Villar Senin.

        Add a test case to check that authenticate signal is not emitted
        in case of TLS errors, and the load fails instead.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (webViewAuthenticationCallback):
        (testTLSErrorsHTTPAuth):
        (httpsServerCallback):
        (beforeAll):

2014-10-06  Ryosuke Niwa  <rniwa@webkit.org>

        Make webkit-patch find-users useful
        https://bugs.webkit.org/show_bug.cgi?id=137475

        Reviewed by Alexey Proskuryakov.

        Make find-users use the CommitterList instead of accessing Bugzilla.

        This essentially exposes the same functionality as webkitbot's whois command.

        * Scripts/webkitpy/tool/commands/findusers.py:
        (FindUsers.execute):

2014-10-06  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS8: Crash at -[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]
        https://bugs.webkit.org/show_bug.cgi?id=137289

        Unreviewed build fix.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::getChildrenWithRange):

2014-10-06  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Add commit queue
        https://bugs.webkit.org/show_bug.cgi?id=137462

        Reviewed by Tim Horton.

        Generalizes EWS into "bubble queue", which also includes commit queue and style queue.
        Style queue is still invisible, as it doesn't have an associated platform, and also
        we never have problems with it anyway, so it's not worth watching.

        The UI now allows for adding more bots to the Other column (such as leaks bot).
        To make that actually happen, we'll need to refactor QueueView, allowing for multiple
        sources of data in a cell.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueue.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js.
        (BubbleQueue):
        (BubbleQueue.prototype.get statusPageURL):
        (BubbleQueue.prototype.update):
        (BubbleQueue.prototype.loadDetailedStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js.
        (BubbleQueueServer):
        (BubbleQueueServer.prototype.jsonQueueLengthURL):
        (BubbleQueueServer.prototype.jsonQueueStatusURL):
        (BubbleQueueServer.prototype.queueStatusURL):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueView.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueueView.js.
        (BubbleQueueView):
        (BubbleQueueView.prototype.update.appendQueue):
        (BubbleQueueView.prototype.update):
        (BubbleQueueView.prototype._addQueueHeadingToPopover):
        (BubbleQueueView.prototype._popoverContentForBubbleQueue):
        (BubbleQueueView.prototype._presentPopoverForBubbleQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueueView.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        (.bubble-server-popover .popover-queue-heading .queue-charts-link):
        (.bubble-server-popover .latest-status-no-link):
        (.bubble-server-popover .bot-status-description):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsMain.js:
        (buildAggregateTable):
        (buildQueuesTable):
        Removed dysfunctional support for EWS for now. It will be different.

2014-10-06  Alexey Proskuryakov  <ap@apple.com>

        One more case of incorrect comparison in recordpatchevent.py
        https://bugs.webkit.org/show_bug.cgi?id=137459

        Reviewed by Tim Horton.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/loggers/recordpatchevent.py:
        (RecordPatchEvent.started):

2014-10-06  Alexey Proskuryakov  <ap@apple.com>

        webkit-queues PatchLog is incorrect for patches that took less than a second
        https://bugs.webkit.org/show_bug.cgi?id=137453

        Reviewed by Tim Horton.

        * QueueStatusServer/app.yaml: Updated app version.

        * QueueStatusServer/loggers/recordpatchevent.py: (RecordPatchEvent.stopped):
        Don't bail out for patches that took 0 seconds to process (as frequently happens
        when a patch is obsolete).

2014-10-06  Csaba Osztrogonác  <ossy@webkit.org>

        EWS bubble hover shows wrong timestamps
        https://bugs.webkit.org/show_bug.cgi?id=137252

        Reviewed by Alexey Proskuryakov.

        Add "Z" suffix to timestamps to make sure if it is handled as UTC time.

        * QueueStatusServer/handlers/queuestatusjson.py:
        (QueueStatusJSON.get):
        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._iso_time):

2014-10-06  Mario Sanchez Prada  <mario@webkit.org>

        Unreviewed, updated list of email addresses in contributors.json

        * Scripts/webkitpy/common/config/contributors.json: Added my former
        email address in Igalia, for the sake of completeness.

2014-10-06  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Unreviewed, moved myself to the list of committers.

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

2014-10-05  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Introduce EWebKit_Extension
        https://bugs.webkit.org/show_bug.cgi?id=134921

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Added x option to test extension path.
        (window_create):
        (elm_main):
        * Scripts/webkitpy/common/config/watchlist:
        Added Source/WebKit2/WebProcess/InjectedBundle/API/efl/ into EFLWebKit2PublicAPI.
        * Scripts/webkitpy/style/checker.py:
        Added Source/WebKit2/WebProcess/InjectedBundle/API/efl/ into EFL exceptions.

2014-10-04  Csaba Osztrogonác  <ossy@webkit.org>

        [jhbuild] Simplify platform detection in update-webkit-libs-jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=137390

        Reviewed by Carlos Garcia Campos.

        * Scripts/update-webkit-libs-jhbuild:

2014-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not generate webkit2gtk-tests-resources.gresource unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=137391

        Reviewed by Martin Robinson.

        Add a custom command to only re-generate
        webkit2gtk-tests-resources.gresource when any of its dependencies changes.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:

2014-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] generate-gtkdoc crashes when generating HTML due to encoding issues
        https://bugs.webkit.org/show_bug.cgi?id=135502

        Reviewed by Martin Robinson.

        When writing to stdout/stderr fails due to a UnicodeDecodeError
        exception, try again without encoding the output.

        * gtk/gtkdoc.py:
        (GTKDoc._run_command):

2014-10-03  Alexey Proskuryakov  <ap@apple.com>

        Bugzilla status bubble displays an exception showing attachment 175738
        https://bugs.webkit.org/show_bug.cgi?id=137410

        Reviewed by Tim Horton.

        * QueueStatusServer/app.yaml: Update version.

        * QueueStatusServer/handlers/statusbubble.py: (StatusBubble._build_bubble):
        Don't fail even if expected status message is missing.

        * QueueStatusServer/model/patchlog.py: (PatchLog): Quick unrelated fix - define
        the field in the same way it's defined in QueueStatus table.

2014-10-03  Alexey Proskuryakov  <ap@apple.com>

        Record latest message in PatchLog for quick access
        https://bugs.webkit.org/show_bug.cgi?id=137405

        Fixing a typo.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/releasepatch.py:

2014-10-03  Alexey Proskuryakov  <ap@apple.com>

        Record latest message in PatchLog for quick access
        https://bugs.webkit.org/show_bug.cgi?id=137405

        Reviewed by Ryosuke Niwa.

        It's no SQL...

        * QueueStatusServer/handlers/releasepatch.py:
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/loggers/recordpatchevent.py:
        * QueueStatusServer/model/patchlog.py:

2014-10-02  David Farler  <dfarler@apple.com>

        -asan-blacklist option also renamed to generic -fsanitize-blacklist
        https://bugs.webkit.org/show_bug.cgi?id=137377

        Reviewed by Daniel Bates.

        * asan/asan.xcconfig:
        -asan-blacklist -> -fsanitize-blacklist

        http://llvm.org/viewvc/llvm-project?view=revision&revision=212505

2014-10-03  Roger Fong  <roger_fong@apple.com>

        [Windows] Include batch size argument to layout tests on Windows.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start): 
        This is a speculative fix for the the inconsistent crashes we are seeing on Windows.
        These crashes seem to happen on random tests though generally in a spread out fashion.
        It seems possible that the DRT instance is being clobbered somehow after running too many
        tests in a row so we will try to mitigate this by just forcing DRT to restart periodically.

2014-10-03  Roger Fong  <roger_fong@apple.com>

        [Windows] Settle for 2 chid processes running NRWT on Windows.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes): 3 child processes reintroduces the sporadic crashing, will settle for 2.

2014-10-03  Akos Kiss  <akiss@inf.u-szeged.hu>

        [GTK] Bump up and patch dependencies to allow building for aarch64
        https://bugs.webkit.org/show_bug.cgi?id=137147

        Reviewed by Martin Robinson.

        The currently used versions of pixman, libffi, librsvg, glib,
        glib-networking, fontconfig, libxml2, gst-plugins-base fail to configure
        and/or build for aarch64, so they are bumped up and patched where
        necessary. Wherever possible, the same versions and patches were used as
        for the EFL port bump-up
        (https://bugs.webkit.org/show_bug.cgi?id=135885).

        After the bump-up, a hitherto hidden bug in gst-plugins-good caused a
        regression by crashing http/tests/media/video-redirect.html . A patch
        already in upstream fixes that bug.

        This change does not touch xserver, which also needs bumping up, but 
        will be dealt with later.

        * gtk/jhbuild.modules:
        Specified versions and patches necessary to correctly build for aarch64.
        * gtk/patches/gst-events-arent-gstobjects.patch:
        Added. Patches gst-plugins-good to fix a bug in .mov file demuxing.
        * gtk/patches/gst-prevent-neon-check-in-configure-from-passing-under-aarch64.patch:
        Added. Patches gst-plugins-base to configure correctly for aarch64.
        * gtk/patches/librsvg-2.36.1-bump-up-config.guess-to-support-aarch64.patch:
        Added. Bumps up config.guess and config.sub in librsvg to recognize
        aarch64.
        * gtk/patches/libxml2-2.9.0-dtd.patch:
        Removed. Not necessary for libxml2 v2.9.1 anymore.

2014-09-28  Sam Weinig  <sam@webkit.org>

        Remove RefPtrHashMap
        https://bugs.webkit.org/show_bug.cgi?id=137200

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Add tests for using a HashMap with RefPtr keys, focusing on ensuring that
        a minimum of refcount churn occurs.

2014-10-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove workarounds for versions of Python before 2.7
        https://bugs.webkit.org/show_bug.cgi?id=137338

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._extract_targz):
        (AutoInstaller._unzip):
        (AutoInstaller): Deleted.
        (AutoInstaller._extract_all): Deleted.
        * Scripts/webkitpy/common/webkitunittest.py:
        (TestCase.setUp): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.collapse_macros):
        (TestConfigurationConverter.to_specifiers_list.try_collapsing):
        (TestConfigurationConverter.to_specifiers_list.try_abbreviating):
        (TestConfigurationConverter):
        (TestConfigurationConverter.combinations): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/port/base.py:

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

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

        It broke run-webkit-tests (Requested by ebalazsfalvi on
        #webkit).

        Reverted changeset:

        "Remove workarounds for versions of Python before 2.7"
        https://bugs.webkit.org/show_bug.cgi?id=137338
        http://trac.webkit.org/changeset/174264

2014-10-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove workarounds for versions of Python before 2.7
        https://bugs.webkit.org/show_bug.cgi?id=137338

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._extract_targz):
        (AutoInstaller._unzip):
        (AutoInstaller): Deleted.
        (AutoInstaller._extract_all): Deleted.
        * Scripts/webkitpy/common/webkitunittest.py:
        (TestCase.setUp): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.collapse_macros):
        (TestConfigurationConverter.to_specifiers_list.try_collapsing):
        (TestConfigurationConverter.to_specifiers_list.try_abbreviating):
        (TestConfigurationConverter):
        (TestConfigurationConverter.combinations): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/port/base.py:
        * Scripts/webkitpy/port/driver.py:
        (ContentBlock.__init__):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._reset):

2014-10-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove autoinstaller workaround for python 2.6
        https://bugs.webkit.org/show_bug.cgi?id=137343

        Reviewed by Daniel Bates.

        Reverting <http://trac.webkit.org/changeset/124928>, neither Python
        2.6, nor Snow Leopard is supported anymore, so the workaround is not
        needed anymore.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller.install):
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize):
        (AutoinstallImportHook._install_pep8):
        (AutoinstallImportHook._install_pylint):
        (AutoinstallImportHook._install_buildbot):
        (AutoinstallImportHook._install_coverage):
        (AutoinstallImportHook._install_eliza):
        (AutoinstallImportHook._install_irc):
        (AutoinstallImportHook._install):
        (autoinstall_everything):

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

        Use version number 101000 instead of 10100 for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=137372

        Reviewed by Mark Rowe.

        The version number for OS X Yosemite is 101000.

        * DumpRenderTree/mac/TextInputController.m:

2014-10-02  Alexey Proskuryakov  <ap@apple.com>

        update-work-items should never delete items
        https://bugs.webkit.org/show_bug.cgi?id=137366

        Reviewed by Ryosuke Niwa.

        As we don't just replace the whole list any more, indicate which items are high
        priority, and which are not. Hight priority ones will be prepended to the queue,
        others will be appended.

        This creates a bit of unfairness in that high priority item queue becomes a LIFO.
        But hopefully we will never have many rollouts competing like that.

        * QueueStatusServer/app.yaml: Update version.

        * QueueStatusServer/handlers/updateworkitems.py: Never remove items. Pass high
        priority and regular items separately. Removed some error handling that used to
        end up in returning status 500 - an uncaught exception does that automatically.

        * QueueStatusServer/main.py: Removed unnecessary regexps from URL matching code.

        * QueueStatusServer/model/workitems.py: Added a way to add high priority items.

        * QueueStatusServer/templates/updateworkitems.html: Added a field for high
        priority items.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries._parse_attachment_ids_request_query): Removed an annoying log
        line that complicated testing.

        * Scripts/webkitpy/common/net/statusserver.py: Pass high priority items separately.

        * Scripts/webkitpy/tool/bot/feeders.py: For commit queue, split high and regular
        priority items into separate lists.

        * Scripts/webkitpy/common/net/statusserver_mock.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        Updated tests.

2014-10-02  Brendan Long  <b.long@cablelabs.com>

        Annoying build warnings in WTFString API tests
        https://bugs.webkit.org/show_bug.cgi?id=137360

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST): Change EXPECT_EQ(false, ok) to EXPECT_FALSE(ok) and EXPECT_EQ(true, ok) to EXPECT_TRUE(ok).

2014-10-02  Roger Fong  <roger_fong@apple.com>

        [Windows] The number of processes did not affect the crash inconsistency, increase number of child processes again.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes): Ambitiously try 3 processes the testers are too slow now.

2014-10-02  David Farler  <dfarler@apple.com>

        Move ASan arguments from LLVM (-mllvm) to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=137365

        Reviewed by David Kilzer.

        * asan/asan.xcconfig:
        Remove the -mllvm prefix to the asan-blacklist argument, moving it
        to the clang frontend.

        http://llvm.org/viewvc/llvm-project?view=revision&revision=212505

2014-10-02  Commit Queue  <commit-queue@webkit.org>

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

        While number of failures is reasonable with 2 processes, test
        results seem to be inconsistent between runs (Requested by
        rfong on #webkit).

        Reverted changeset:

        "[Windows] Back to 2 child processes for NRWT on Windows."
        http://trac.webkit.org/changeset/174120

2014-10-02  Jeff Miller  <jeffm@apple.com>

        DumpRenderTree and WebKitTestRunner should use WebKitystemInterfaceYosemite when building on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=137347

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        Use WebKitSystemInterfaceYosemite on OS X 10.10.

        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        Ditto.

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

        [GTK] [JHBuild] Switch sourceware.org mirror to http.

        Unreviewed.

        The ftp access is recently failing to work as expected, and the
        bots fail to download the file.
        The same mirror is available via http and seems to work better.

        * gtk/jhbuild.modules:

2014-10-01  Commit Queue  <commit-queue@webkit.org>

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

        Patch that adds logging causes webkitpy failures (Requested by
        rfong on #webkit).

        Reverted changeset:

        "commitqueuetasks_unittest references a non-existent member
        variable"
        https://bugs.webkit.org/show_bug.cgi?id=137303
        http://trac.webkit.org/changeset/174185

2014-10-01  Jake Nielsen  <jacob_nielsen@apple.com>

        EWS and Commit Queue should know better than to spew 500 failed
        results in the case of extremely red patches.
        https://bugs.webkit.org/show_bug.cgi?id=137324

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        Adds a check for did_exceed_test_failure_limit.
        (AbstractEarlyWarningSystem._failing_tests_message):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        Alters the task mock to respond properly to
        results_from_patch_test_run(patch)
        (AbstractEarlyWarningSystemTest.test_failing_tests_message):
        * Scripts/webkitpy/tool/commands/queues.py:
        Adds a check for did_exceed_test_failure_limit.
        (CommitQueue._failing_tests_message):

2014-10-01  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r174192.

        Revert the unit test fix in r174192 since we reverted r174187
        in r174194 due to correctness issues. See
        <http://webkit.org/b/137329> for more details.

        Reverted changeset:

        "Test fix after r174187"
        http://trac.webkit.org/changeset/174192

2014-10-01  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/137308> WebKit should build on OS X Yosemite for external users

        Reviewed by Dan Bernstein.

        * Scripts/copy-webkitlibraries-to-product-directory: Copy libWebKitSystemInterfaceYosemite.a
        into the build directory. Use LLVMIncludesYosemite.tar.bz2 and LLVMLibrariesYosemite.tar.bz2
        for the LLVM components when on Yosemite.

2014-10-01  Commit Queue  <commit-queue@webkit.org>

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

        webkitpy failures, and thorton says the patch is wrong
        (Requested by dethbakin on #webkit).

        Reverted changeset:

        "[Windows] Increase layout test timeout for Windows following
        r174162."
        http://trac.webkit.org/changeset/174187

2014-10-01  Brent Fulgham  <bfulgham@apple.com>

        Test fix after r174187

        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_default_timeout_ms): Expect the new 50000 ms timeout for Windows tests.

2014-10-01  Roger Fong  <roger_fong@apple.com>

        [Windows] Increase layout test timeout for Windows following r174162.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_timeout_ms):

2014-10-01  Jake Nielsen  <jacob_nielsen@apple.com>

        commitqueuetasks_unittest references a non-existent member variable
        when mock-reporting flaky tests.
        https://bugs.webkit.org/show_bug.cgi?id=137303

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.report_flaky_tests):
        Makes the appropriate name change.
        (test_simple_flaky_test_failure):
        Adds a unit test to make sure that the code is excercised.

2014-10-01  Jake Nielsen  <jacob_nielsen@apple.com>

        EWS is inconclusively spinning forever on a patch that breaks 500+
        tests
        https://bugs.webkit.org/show_bug.cgi?id=137223

        Reviewed by Tim Horton.

        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        Checks to see whether the tests have exceeded the failure limit, and
        only spins off another test if they have not exceeded the limit.
        (PatchAnalysisTask._test_patch):

2014-10-01  Brian J. Burg  <burg@cs.washington.edu>

        Unreviewed, add Katie Madonna as a contributor.

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

2014-10-01  Jake Nielsen  <jacob_nielsen@apple.com>

        commitqueuetasks_unittest does not construct FailingTestCommitQueue
        objects properly in its test cases.
        https://bugs.webkit.org/show_bug.cgi?id=137281

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (FailingTestCommitQueue.test_results):
        Adds an assert to make FailingTestCommitQueue harder to mis-use.
        (test_double_flaky_test_failure):
        Nests the intended test failure strings into one-length lists.
        (test_red_test_failure):
        Nests the intended test failure strings into one-length lists.

2014-10-01  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r172172): Multiple regression tests fail when primary system language is Russian
        https://bugs.webkit.org/show_bug.cgi?id=136987

        Reviewed by Daniel Bates.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues):
        Specify the default encoding for all WebKit developers to get consistent results.

2014-10-01  Alexey Proskuryakov  <ap@apple.com>

        EWS is too eager to say that a patch does not apply to trunk of repository
        https://bugs.webkit.org/show_bug.cgi?id=137290

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Updated app version.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._build_bubbles_for_attachment):
        Rewrote to make more sense.

2014-09-30  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove thirdparty/unittest2 from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=137251

        Reviewed by Brent Fulgham.

        Additionally ordered imports in related webkitpy files and
        removed unnecessary shebangs from unittest files.

        * BuildSlaveSupport/build.webkit.org-config/htdigestparser_unittest.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/commitinfo_unittest.py:
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        * Scripts/webkitpy/common/config/contributionareas_unittest.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/common/config/urls_unittest.py:
        * Scripts/webkitpy/common/editdistance_unittest.py:
        * Scripts/webkitpy/common/find_files_unittest.py:
        * Scripts/webkitpy/common/lru_cache_unittest.py:
        * Scripts/webkitpy/common/memoized_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:
        * Scripts/webkitpy/common/net/irc/ircproxy_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/common/net/statusserver_unittest.py:
        * Scripts/webkitpy/common/net/unittestresults_unittest.py:
        * Scripts/webkitpy/common/newstringio_unittest.py:
        * Scripts/webkitpy/common/prettypatch_unittest.py:
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/common/system/environment_unittest.py:
        * Scripts/webkitpy/common/system/executive.py: Ordered imports.
        * Scripts/webkitpy/common/system/executive_mock.py: Ordered imports.
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/common/system/file_lock_integrationtest.py:
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/common/system/logtesting.py:
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/common/system/outputcapture_unittest.py:
        * Scripts/webkitpy/common/system/outputtee_unittest.py:
        * Scripts/webkitpy/common/system/path_unittest.py:
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        * Scripts/webkitpy/common/system/profiler_unittest.py:
        * Scripts/webkitpy/common/system/stack_utils_unittest.py:
        * Scripts/webkitpy/common/system/user_unittest.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:
        * Scripts/webkitpy/common/thread/messagepump_unittest.py:
        * Scripts/webkitpy/common/thread/threadedmessagequeue_unittest.py:
        * Scripts/webkitpy/common/watchlist/amountchangedpattern_unittest.py:
        * Scripts/webkitpy/common/watchlist/changedlinepattern_unittest.py:
        * Scripts/webkitpy/common/watchlist/filenamepattern_unittest.py:
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        * Scripts/webkitpy/common/watchlist/watchlistrule_unittest.py:
        * Scripts/webkitpy/common/webkitunittest.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_results_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_base_unittest.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        * Scripts/webkitpy/port/base_unittest.py:
        * Scripts/webkitpy/port/builders_unittest.py:
        * Scripts/webkitpy/port/config_unittest.py:
        * Scripts/webkitpy/port/driver_unittest.py:
        * Scripts/webkitpy/port/efl_unittest.py:
        * Scripts/webkitpy/port/factory_unittest.py:
        * Scripts/webkitpy/port/gtk_unittest.py:
        * Scripts/webkitpy/port/http_lock_unittest.py:
        * Scripts/webkitpy/port/image_diff_unittest.py:
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py:
        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py:
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        * Scripts/webkitpy/port/port_testcase.py:
        * Scripts/webkitpy/port/server_process_unittest.py:
        * Scripts/webkitpy/port/westondriver_unittest.py:
        * Scripts/webkitpy/port/win_unittest.py:
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        * Scripts/webkitpy/style/checkers/cmake_unittest.py:
        * Scripts/webkitpy/style/checkers/common_unittest.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        * Scripts/webkitpy/style/checkers/exportfile_unittest.py:
        * Scripts/webkitpy/style/checkers/js_unittest.py:
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py:
        * Scripts/webkitpy/style/checkers/messagesin_unittest.py:
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/text_unittest.py:
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py:
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py:
        * Scripts/webkitpy/style/checkers/xml_unittest.py:
        * Scripts/webkitpy/style/error_handlers_unittest.py:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/style/filter_unittest.py:
        * Scripts/webkitpy/style/main_unittest.py:
        * Scripts/webkitpy/style/optparser_unittest.py:
        * Scripts/webkitpy/style/patchreader_unittest.py:
        * Scripts/webkitpy/test/finder_unittest.py:
        * Scripts/webkitpy/test/main.py: Ordered imports.
        * Scripts/webkitpy/test/main_unittest.py:
        * Scripts/webkitpy/test/printer.py: Ordered imports.
        (Printer.configure):
        * Scripts/webkitpy/test/runner_unittest.py:
        * Scripts/webkitpy/test/skip_unittest.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_irc):
        (AutoinstallImportHook._install_unittest2): Deleted.
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        * Scripts/webkitpy/thirdparty/ordered_dict.py: Removed.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py:
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py:
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/grammar_unittest.py:
        * Scripts/webkitpy/tool/mocktool_unittest.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py:
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py:
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        * Scripts/webkitpy/tool/steps/discardlocalchanges_unittest.py:
        * Scripts/webkitpy/tool/steps/haslanded_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
        * Scripts/webkitpy/tool/steps/update_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2014-09-30  Jake Nielsen  <jacob_nielsen@apple.com>

        LayoutTestResults and ExpectedFailures should know about the
        interrupted flag from the json results file
        https://bugs.webkit.org/show_bug.cgi?id=137229

        Reviewed by Daniel Bates.

        Changes LayoutTestResults to use the interrupted flag instead of
        counting failures.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuilderTest._install_fetch_build._mock_fetch_build):
        (BuilderTest.test_latest_layout_test_results):
        * Scripts/webkitpy/common/net/layouttestresults.py:
        Removes notion of failure_limit_count, and adds
        did_exceed_test_failure_limit.

        (LayoutTestResults.results_from_string):
        (LayoutTestResults.__init__):
        (LayoutTestResults.did_exceed_test_failure_limit):
        (LayoutTestResults): Deleted.
        (LayoutTestResults.set_failure_limit_count): Deleted.
        (LayoutTestResults.failure_limit_count): Deleted.
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        Removes unit test for failure_limit_count logic.

        (LayoutTestResultsTest.test_set_failure_limit_count): Deleted.
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        Instead of providing a class method that returns a list of
        TestResults objects, resultsjsonparser now provides a class
        ParsedJSONResults that serves as an interface between the results.json
        file and the rest of webkitpy.

        (ParsedJSONResults):
        (ParsedJSONResults.__init__):
        (ParsedJSONResults.did_exceed_test_failure_limit):
        (ParsedJSONResults.test_results):
        (ResultsJSONParser): Deleted.
        (ResultsJSONParser.parse_results_json): Deleted.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        Updates the unit test so that it can test the new ResultsJSONParser
        class.

        (ParsedJSONResultsTest):
        (test_basic):
        (ResultsJSONParserTest): Deleted.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        Updates the unit test to instantiate ResultsJSONParser objects rather
        than simple lists of TestResult objects.

        (MockCommitQueue.test_results):
        (FailingTestCommitQueue.test_results):
        (test_flaky_test_failure):
        (test_failed_archive):
        * Scripts/webkitpy/tool/bot/expectedfailures.py:
        Updates ExpectedFailures to use the did_exceed_test_failure_limit
        method rather than counting the number of failed tests.

        (ExpectedFailures._should_trust):
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py:
        Updates MockResults to more closely resemble the updated
        LayoutTestResults class.

        (MockResults.__init__):
        (MockResults.did_exceed_test_failure_limit):
        (ExpectedFailuresTest.test_can_trust_results):
        (ExpectedFailuresTest.test_unexpected_failures_observed):
        (ExpectedFailuresTest.test_unexpected_failures_observed_when_tree_is_hosed):
        (MockResults.failure_limit_count): Deleted.
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        Removes a FIXME regarding the use of the
        NON_INTERACTIVE_FAILURE_LIMIT_COUNT value.

        (LayoutTestResultsReader.results):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        Updates test to not check the now-nonexistant failure_count_limit
        method.

        (test_missing_unit_test_results_path):
        (test_layout_test_results):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        Accounts for name change: ResultsJSONParserTest ->
        ParsedJSONParserTest.

        (RebaselineTestTest.test_gather_baselines):

2014-09-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Rename TEST_THEME_DIR macro
        https://bugs.webkit.org/show_bug.cgi?id=137244

        Reviewed by Csaba Osztrogonác.

        TEST_THEME_DIR is to get a path for default theme though, it has used TEST_ prefix.
        DEFAULT_THEME_DIR is better than it.

        * MiniBrowser/efl/main.c:
        (window_create):
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2014-09-30  Alexey Proskuryakov  <ap@apple.com>

        Windows EWS went purple when it failed to build
        https://bugs.webkit.org/show_bug.cgi?id=137267

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Update the version.

        * QueueStatusServer/model/attachment.py: (Attachment._calculate_queue_positions):
        Make it work for style and win-ews queues.

2014-09-29  Filip Pizlo  <fpizlo@apple.com>

        It should be fun and easy to run every possible JavaScript benchmark from the command line
        https://bugs.webkit.org/show_bug.cgi?id=137245

        Reviewed by Oliver Hunt.
        
        We previously had Tools/Scripts/bencher.  Then we stopped adding things to it because we
        weren't sure about the licensing of things like Kraken and Octane.  Various people ended up
        having their own private scripts for doing benchmark runs, and didn't share them in the open
        source community, because of fears about the shady licensing of the benchmarks suites that
        they were running. The dominant version of this was "run-jsc-benchmarks", which has a lot of
        excellent power - it can run benchmarks through either jsc, DumpRenferTree, or
        WebKitTestRunner; it can run tests on any number of remote machines; and it has inside
        knowledge about how to run *a lot* of test suites. Many of those test suites are not public,
        but some of them are. The non-public tests are exclusively those that were not made by any
        WebKit contributor, but which JSC/WebKit devs found useful for testing.

        This fixes this weirdness by releasing run-jsc-benchmarks. The paths to the test suites
        whose licenses are incompatible with WebKit's (to the extent that they cannot be safely
        checked into WebKit svn at all) can be run by passing the path to them via a configuration
        file. The default configuration file is ~/.run-jsc-benchmarks. The most important benchmark
        suites are Octane version 2 and Kraken version 1.1. We should probably check Octane 2 into
        WebKit eventually because it seems that the license is fine. Kraken, on the other hand, will
        probably never be checked in because there is no license text anywhere in that benchmark.
        A valid ~/.run-jsc-benchmarks file will just be something like:
        
            {
                "OctanePath": "/path/to/Octane2",
                "KrakenPath": "/path/to/Kraken-1.1/tests/kraken-1.1"
            }
        
        If your ~/.run-jsc-benchmarks file omits the directory for any particular test suite, then
        run-jsc-benchmarks will just gracefully avoid running that test suite.
        
        Finally, a word about policy: it is understood that different organizations that do
        development on JSC may find themselves having internal benchmarks that they cannot share
        because of weird licensing. It happens - usually because the organization doing JSC
        development found some test in the wild that is owned by someone else and therefore cannot
        be shared. So, we should consider it acceptable to write patches against run-jsc-benchmarks
        that add support for some new kind of benchmark suite even if the suite is not made public
        as part of the same patch - so long as the patch isn't too invasive. An example of
        non-invasiveness is the DSPJS suite, which is implemented using some new classes (like
        DSPJSAmmoJSRegularBenchmark) and some calls to otherwise reusable functions (like
        emitSelfContainedBenchRunCode). It is obviously super helpful if a benchmark suite can be
        completely open-sourced and committed to the WebKit repo - but the reality is that this
        can't always be done safely.

        * Scripts/bencher: Removed.
        * Scripts/run-jsc-benchmarks: Added.

2014-09-30  Roger Fong  <roger_fong@apple.com>

        [Windows] Add some logging to webkitpy to debug timeout issues with running NRWT using multiple child processes.

        * Scripts/webkitpy/port/drdiver.py:
        (Driver.stop):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.stop):

2014-09-30  Roger Fong  <roger_fong@apple.com>

        [Windows] Back to 2 child processes for NRWT on Windows.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes):
        Changing the number of processes to 1 did not have an effect on the layout test results. 
        It does introduce an issue with one of the workers hanging indefinitely and causing the 
        layout tests to timeout as a whole occasionally, but we should just fix that.

2014-09-30  Alexey Proskuryakov  <ap@apple.com>

        Remove an accidentally committed line..

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble):

2014-09-30  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Switch EWS view to using actual retry count
        https://bugs.webkit.org/show_bug.cgi?id=137240

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js:
        (EWSQueue.prototype.loadDetailedStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueueView.js:
        (EWSQueueView.prototype._popoverContentForEWSQueue):
        Use the new retry_count data member from JSON.

        * QueueStatusServer/app.yaml: Updating the version.

        * QueueStatusServer/handlers/queuestatusjson.py: (QueueStatusJSON._rows_for_work_items):
        Instead of message_count, produce retry_count.

2014-09-30  Alexey Proskuryakov  <ap@apple.com>

        EWS doesn't need to show all the bubbles when a patch fails to apply
        https://bugs.webkit.org/show_bug.cgi?id=137256

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Updated app version.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._build_bubbles_for_attachment):
        (StatusBubble.get):
        * QueueStatusServer/templates/statusbubble.html:
        When some queues fail to apply, and no queues had meaningful output (meaning that
        they will almost certainly fail to apply later), we can show a single bubble
        telling the user just that.

2014-09-30  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [EFL] Bump EFL version to 1.11.2
        https://bugs.webkit.org/show_bug.cgi?id=137118

        Reviewed by Gyuyoung Kim.

        Disable NEON for EFL build because the build system doesn't pass the necessary -mfpu=neon flag to the compiler.
        Tools/efl/patches/ecore.patch: Removed, because this fix is already in EFL.

        * efl/jhbuild.modules:
        * efl/patches/ecore.patch: Removed.

2014-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r173929): [GTK] TestInspector fails after r173929
        https://bugs.webkit.org/show_bug.cgi?id=137247

        Reviewed by Philippe Normand.

        Wait until can-attach property changes before trying to attach the
        inspector after resizing the view.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp:
        (testInspectorDefault):

2014-09-30  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Require Python 2.7 version
        https://bugs.webkit.org/show_bug.cgi?id=137112

        Reviewed by Csaba Osztrogonác.

        * Scripts/ensure-valid-python:
        (checkPythonVersion):
        * Scripts/webkitpy/common/version_check.py:

2014-09-30  Martin Hock  <mhock@apple.com>

        Skip a JSC test after r174036.
        https://bugs.webkit.org/show_bug.cgi?id=137236

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-javascriptcore-tests:

2014-09-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [EFL] Install TestNetscapePlugin apart from the other libs.
        https://bugs.webkit.org/show_bug.cgi?id=137212

        This moves TestNetscapePlugin to a new folder (lib/plugins).
        We should not use the same directory for TestNetscapePlugin and
        the other libraries, because we end up scanning all the .so in the
        lib dir for every test.

        Reviewed by Carlos Garcia Campos.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt: Set LIBRARY_OUTPUT_DIRECTORY to lib/plugins.
        * Scripts/webkitpy/port/efl.py:
        (EflPort.setup_environ_for_server): Update plugin path.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Update plugin path.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Update plugin path.

2014-09-29  Alexey Proskuryakov  <ap@apple.com>

        A small change to EWS bubble text. Explain why there are messages for ineligible patches.

        Rubber-stamped by Tim Horton.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble):

2014-09-29  Alexey Proskuryakov  <ap@apple.com>

        Typo fix, suggested by Tim Horton.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_message_for_provisional_failure):

2014-09-29  Alexey Proskuryakov  <ap@apple.com>

        Improve Bugzilla status bubbles
        https://bugs.webkit.org/show_bug.cgi?id=137232

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Will update again with an actual version when landing.

        * QueueStatusServer/handlers/statusbubble.py: Eliminated yellow color, added
        blue and orange. Significantly extended tooltips. Made bubbles show up even for queues
        that are stuck, as it was only confusing that they disappeared after 99.

        * QueueStatusServer/model/attachment.py: Removed functionality that was only used
        by old bubbles. We need a lot more information to determine color, so the implementation
        can not be here.

        * QueueStatusServer/templates/statusbubble.html: Updated colors in CSS, made bubbles
        always have a link for consistency. Added code to convert timestamps in tooltips
        to local time zone.

2014-09-29  Commit Queue  <commit-queue@webkit.org>

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

        Introduced a crash during page loading tests on Mac (Requested
        by rniwa on #webkit).

        Reverted changeset:

        "Replace OSObjectPtr with RetainPtr/adoptOS"
        https://bugs.webkit.org/show_bug.cgi?id=137158
        http://trac.webkit.org/changeset/174045

2014-09-29  Tim Horton  <timothy_horton@apple.com>

        Add Jake as a contributor.

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

2014-09-29  Roger Fong  <roger_fong@apple.com>

        [Windows] Skip a javascriptcore test following r174036.

        * Scripts/run-javascriptcore-tests:

2014-09-29  Roger Fong  <roger_fong@apple.com>

        [Windows] Reduce number of processes used by NRWT on Windows to 1.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes):
        Reduce number of processes to 1 so we can get a good baseline for what failures
        we should be expecting to see from the Windows bots.

2014-09-29  Darin Adler  <darin@apple.com>

        Tweak and tighten SVG font converter
        https://bugs.webkit.org/show_bug.cgi?id=136956

        Reviewed by Myles Maxfield.

        I was investigating behavior of String::toInt, String::toDouble, and
        String::toFloat for various failure cases, and decided to start some
        unit tests for those functions here.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST): Addded a first small bit of StringToInt and
        StringToDouble testing.

2014-09-29  Philippe Normand  <pnormand@igalia.com>

        [GTK][CMake] TestWebCore target build sometimes fail
        https://bugs.webkit.org/show_bug.cgi?id=137207

        Reviewed by Csaba Osztrogon.

        * TestWebKitAPI/PlatformGTK.cmake: Make sure the forwarding
        headers are generated before the TestWebCore target is built.

2014-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove IntPointGtk.cpp and IntRectGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=137209

        Reviewed by Philippe Normand.

        * TestWebKitAPI/PlatformGTK.cmake: Remove unneeded IntRectGtk.cpp
        from the WebCore test sources.

2014-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow webkit-patch upload to respect the --directory argument with git checkouts
        https://bugs.webkit.org/show_bug.cgi?id=137166

        Reviewed by Darin Adler.

        We simply hadn't plumbed it through.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.__init__):
        (Git.changed_files):

2014-09-26  Sam Weinig  <sam@webkit.org>

        Replace OSObjectPtr with RetainPtr/adoptOS
        https://bugs.webkit.org/show_bug.cgi?id=137158

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/darwin/RetainPtrOSObject.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/darwin/OSObjectPtr.cpp.
        Rename and change test to use RetainPtr. Remove now unneeded part testing WTF::retainOSObject/WTF::releaseOSObject.

2014-09-26  Filip Pizlo  <fpizlo@apple.com>

        Disable function.arguments
        https://bugs.webkit.org/show_bug.cgi?id=137167

        Rubber stamped by Geoffrey Garen
        
        Enable the feature by default during tests.

        * Scripts/run-jsc-stress-tests:

2014-09-26  Beth Dakin  <bdakin@apple.com>

        Many platform/mac-wk2/tiled-drawing/ tests fail when run on a retina device
        https://bugs.webkit.org/show_bug.cgi?id=137089

        Reviewed by Tim Horton.

        This is a little sneaky since updateWindowScaleForTest() should ensure that these 
        tests run at 1x, but that code does not seem to execute at the right time for 
        these tests, so if we just ensure we start out at 1x, that appears to fix these 
        tests and does not break the HiDPI tests either.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2014-09-26  Roger Fong  <roger_fong@apple.com>

        [Windows] Decrease default number of child processes used by Windows.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes):
        Having too many seems to cause many tests to crash or timeout. 
        We may even need to make it have only 1 child process if we’re still seeing problems after this.

2014-09-26  Alexey Proskuryakov  <ap@apple.com>

        Mac EWS bots do not keep logs as promised
        https://bugs.webkit.org/show_bug.cgi?id=137151

        Reviewed by Ryosuke Niwa.

        * EWSTools/start-queue-mac.sh: Actually keep the logs for 14 days.

2014-09-26  Alexey Proskuryakov  <ap@apple.com>

        Get rid of webkit-queues dashboard
        https://bugs.webkit.org/show_bug.cgi?id=137141

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Updated version.

        * QueueStatusServer/templates/dashboard.html: Removed.
        * QueueStatusServer/handlers/dashboard.py: Removed.
        * QueueStatusServer/main.py:
        Kill it!

        * QueueStatusServer/stylesheets/common.css: Copied from Tools/QueueStatusServer/stylesheets/dashboard.css.
        (.status-cell): Deleted.
        (.status-cell:hover): Deleted.
        (.status-cell.pass): Deleted.
        (.status-cell.fail): Deleted.
        (.status-cell.pending): Deleted.
        (.status-cell.error): Deleted.
        * QueueStatusServer/stylesheets/dashboard.css: Removed.
        * QueueStatusServer/templates/activebots.html:
        * QueueStatusServer/templates/patch.html:
        * QueueStatusServer/templates/queuestatus.html:
        * QueueStatusServer/templates/recentstatus.html:
        Renamed dashboard.css to common.css, and removed dashboard-only rules.

2014-09-26  Alexey Proskuryakov  <ap@apple.com>

        Get rid of Retry status in webkit-queues
        https://bugs.webkit.org/show_bug.cgi?id=137135

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/config/messages.py: Removed Retry.

        * QueueStatusServer/handlers/releasepatch.py: This is now straightforward, as it
        no longer needs to check the latest status. It just always both unlocks the patch
        and removes it from WorkItems.

        * QueueStatusServer/handlers/submittoews.py: (SubmitToEWS._should_add_to_ews_queue):
        I don't understand why we even needed to check for retries here, but now that there
        are no retries, that code can go to /dev/null.

        * QueueStatusServer/loggers/recordpatchevent.py:
        (RecordPatchEvent.started):
        (RecordPatchEvent.retrying): Deleted.
        Fixed retry counting, it should work for all queues now.

        * QueueStatusServer/model/queuestatus.py:
        (QueueStatus.is_retry_request): Deleted. These are no more.

        * Scripts/webkitpy/common/net/statusserver_mock.py:
        (MockStatusServer.release_lock):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        Did whatever it took to keep passing the tests. The particular test doesn't seem
        quite right, but whatever.

        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.process_work_item): Instead of posting a retry status, just unlock
        and let others pick up. Also, added explicit returns for clarity.
        (AbstractPatchQueue._did_retry): Deleted.

2014-09-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix the gst-libav build on ARM Thumb2
        https://bugs.webkit.org/show_bug.cgi?id=137022

        Reviewed by Zoltan Herczeg.

        * efl/jhbuild.modules:
        * efl/patches/gst-libav.patch: Added.

2014-09-26  Akos Kiss  <akiss@inf.u-szeged.hu>

        [EFL] Bump up dependencies not to conflict with the GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=137143

        Reviewed by Gyuyoung Kim.

        Tools/efl/install-dependencies and Tools/gtk/install-dependencies keep
        installing and removing different versions of libgnutls-dev, thus
        hindering the development for both ports on the same machine. GTK is
        using the newer version of the package, now bumping up EFL to use the 
        same.

        * efl/install-dependencies:

2014-09-25  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][WK2] Minibrowser : Fix the 'Escape' button issue to exit fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=136854

        Reviewed by Gyuyoung Kim.

        'Escape' key should exit fullscreen first and then should be used to stop page load.

        * MiniBrowser/efl/main.c:
        (on_key_down):

2014-09-25  Dean Jackson  <dino@apple.com>

        Add Said to the contributors list so his name completes in bugzilla.

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

2014-09-25  Alexey Proskuryakov  <ap@apple.com>

        EWS only repeats its cycle every two hours
        https://bugs.webkit.org/show_bug.cgi?id=137129

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Updated version.

        * QueueStatusServer/config/queues.py: Moved timeout from activeworkitems.py to configuration.

        * QueueStatusServer/handlers/releaselock.py: Added. Releases the lock without removing
        the patch from work items.

        * QueueStatusServer/index.yaml: No real change, just let AppEngine have its way with entry order.

        * QueueStatusServer/main.py: Added release-lock.

        * QueueStatusServer/model/activeworkitems.py:
        (ActiveWorkItems.deactivate_expired): Use timeout from configuration.

        * QueueStatusServer/model/workitems.py: Added move_to_end. When we unlock a patch,
        we don't want it to be immediately picked up again, it's better to give other patches
        a chance.

        * QueueStatusServer/templates/releaselock.html: Added. Not sure why all commands have
        these interactive versions, but OK.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py: (AbstractEarlyWarningSystem.review_patch):
        Unlock the patch when a non-final failure occurs (e.g. can't build even without the patch,
        or svn is down).

        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractReviewQueue.process_work_item): Do not try/catch ScriptError around review_patch.
        Style queue never raises these, and EWS already calls _did_fail, before re-throwing,
        meaning that these handlers could never do the right thing. We'd either get a duplicate
        _did_fail, or try to unlock an already unlocked patch.
        (StyleQueue.review_patch): Unlock the patch on transient failure (such as svn failure),
        making it eligible for retry immediately.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer._post_release_lock):
        (StatusServer.release_lock):
        Added a call to release-lock.

2014-09-25  Roger Fong  <roger_fong@apple.com>

        [Windows] Followup to r173972. Don’t set child process to none before reading from stdout.

        * Scripts/webkitpy/common/system/path.py:
        (_CygPath.convert):

2014-09-25  Roger Fong  <roger_fong@apple.com>

        [Windows] Close stdin to force a flush to stdout if no test path is read during layout tests.

        * Scripts/webkitpy/common/system/path.py:
        (_CygPath.convert):

2014-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Gtk] build.sh needs a -- before make options when the build command is cmake --build
        https://bugs.webkit.org/show_bug.cgi?id=136377

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject): Only use the build.sh script if it exists.

2014-09-25  Akos Kiss  <akiss@inf.u-szeged.hu>

        [EFL] Split the list of dependencies to make sure that at least the universally available packages get installed
        https://bugs.webkit.org/show_bug.cgi?id=137117

        Tools/efl/install-dependencies relies on apt-get to install packages.
        Unfortunately, if a package does not exist (e.g., for a given
        architecture) then apt-get install is not able to ignore the missing
        package and install the rest but fails to run entirely (and there
        seems to be no intent to change this behaviour).

        On ARM64, the luajit package is missing and currently it needs manual
        editing of install-dependencies to get the script install as much as it
        can.

        This patch separates the installation of the universally available
        packages from those which might not be available for all architectures.

        Reviewed by Gyuyoung Kim.

        * efl/install-dependencies:

2014-09-25  Csaba Osztrogonác  <ossy@webkit.org>

        Remove WinCE port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=136951

        Reviewed by Alex Christensen.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        * CMakeLists.txt:
        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::CopyMedium):
        * Scripts/build-webkit:
        * Scripts/webkit-build-directory:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (builtDylibPathForName):
        (isAppleWinWebKit):
        (launcherPath):
        (launcherName):
        (shouldRemoveCMakeCache):
        (cmakeBasedPortArguments):
        (cmakeBasedPortName):
        (isCMakeBuild):
        (isWinCE): Deleted.
        (determineIsWinCE): Deleted.
        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform):
        * TestWebKitAPI/config.h:
        * WinCELauncher/CMakeLists.txt: Removed.
        * WinCELauncher/main.cpp: Removed.
        * gtk/manifest.txt:

2014-09-23  David Farler  <dfarler@apple.com>

        [iOS] run-webkit-tests should support minor versions under devices and create a testing device under the right runtime
        https://bugs.webkit.org/show_bug.cgi?id=136895

        Reviewed by David Kilzer.

        Create Device, DeviceType, and Runtime data classes.
        Create Simulator class represent simctl output.

        Wherever possible, use structured data classes anywhere a raw
        identifier or UDID string was used for a cleaner implementation
        and to encapsulate the inherent fragility of scraping simctl output.

        Create a suitably named testing device if one doesn't exist.

        Finally, accurately handle having multiple simulator runtimes (SDKs)
        installed in the active Xcode.app bundle.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        * Scripts/webkitpy/port/driver.py:
        (IOSSimulatorDriver.cmd_line):
        Construct DeviceType and Runtime objects from identifiers passed at the
        command line, still providing sensible defaults for 32- and 64-bit testing.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__):
        (IOSSimulatorPort.setup_test_run):
        (IOSSimulatorPort):
        (IOSSimulatorPort.testing_device):
        Cache the testing device once it is created or found.
        (IOSSimulatorPort.reset_preferences):
        Get the device path from the Device object instead of consructing it
        in the port class.
        (IOSSimulatorPort.simulator_udid): Deleted.
        Get the UDID from the testing_device :: Device object itself.
        * Scripts/webkitpy/xcode/simulator.py:
        Created Device, DeviceType, Runtime, and Simulator classes.
        (get_runtimes): Deleted.
        (get_devices): Deleted.
        (get_device_types): Deleted.
        (get_latest_runtime): Deleted.

2014-09-24  Roger Fong  <roger_fong@apple.com>

        [Windows] Tentative fix for Windows test bots.

        * Scripts/webkitpy/common/system/path.py:
        (_CygPath.convert):

2014-09-24  Alexey Proskuryakov  <ap@apple.com>

        Change more build.webkit.org links to https
        https://bugs.webkit.org/show_bug.cgi?id=137049

        Reviewed by Csaba Osztrogonác.

        Fix appspot, svn.webkit.org and Trac links.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ViewController.js:
        (ViewController.prototype._domForBuildName):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js:
        (EWS):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitTestHistory.js:
        (TestHistory):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2014-09-24  Langó László  <llango.u-szeged@partner.samsung.com>

        Update the list of u-szeged contributors.

        Rubber-stamped by Csaba Osztrogonác <ossy@webkit.org>.

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

2014-09-23  Roger Fong  <roger_fong@apple.com>

        [Windows] More debugging for the Windows bots.

        * Scripts/webkitpy/common/system/path.py:
        (_CygPath):

2014-09-23  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix for r173899, those tabs should be spaces.

        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input):
        (Driver): Deleted.

2014-09-23  Roger Fong  <roger_fong@apple.com>

        [Windows] Add some logging to debug a problem with the Windows bots that causes layout tests to exit early.

        * Scripts/webkitpy/port/driver.py:
        (Driver):

2014-09-23  Jer Noble  <jer.noble@apple.com>

        [Tools] git-commit uses wrong ChangeLog when run from a subdirectory
        https://bugs.webkit.org/show_bug.cgi?id=137031

        Reviewed by Joseph Pecoraro.

        commit-log-editor is run from the top of the Git checkout, even when git-commit is invoked
        from a subdirectory, making the parsed locations of ChangeLog files incorrect. Git provides
        a mapping prefix in the GIT_PREFIX environment variable, so apply this prefix to the parsed
        ChangeLog locations before passing them to createCommitMessage().

        * Scripts/commit-log-editor:

2014-09-23  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should detect manual and reference tests according their filenames
        https://bugs.webkit.org/show_bug.cgi?id=133852

        Reviewed by Bem Jones-Bey.

        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test): Adding checks based on WPT filename rules.
        (TestParser.is_wpt_manualtest): Detecting whether the test is a manual test based on its filename.
        (TestParser):
        (TestParser.potential_ref_filename): Getting the potential reference filename of a test from its filename.
        (TestParser.is_wpt_reftest): Detecting whether the test is a ref test based on its filename.
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        (test_analyze_manual_wpt_test): Adding a test for a "-manual.html" file with testharness.js link in it. 

2014-09-23  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed, add Rebecca Hauck as a contributor.

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

2014-09-23  David Kilzer  <ddkilzer@apple.com>

        Switch build.webkit.org URLs to https

        Reviewed by Lucas Forschler and Alexey Proskuryakov.

        * TestResultServer/app.yaml: Update version to this commit
        revision.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_builder_with_name):
        * Scripts/webkitpy/tool/commands/queries.py:
        (TreeStatus):
        * TestResultServer/generate_builders_json.py:
        (main):
        * TestResultServer/generate_builders_json_unittest.py:
        (GenerateBuildersJsonTest.test_generate_json_data.dummy_fetch_json):
        (GenerateBuildersJsonTest):
        (GenerateBuildersJsonTest.test_generate_json_data):
        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (loadExpectationsLayoutTests):
        * TestResultServer/static-dashboards/timeline_explorer.js:

2014-09-23  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should copy .htaccess files
        https://bugs.webkit.org/show_bug.cgi?id=136850

        Reviewed by Bem Jones-Bey.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.should_skip_file): Helper function to check whether to skip file or not. Added ".htaccess" file specific check.
        (TestImporter):
        (TestImporter.find_importable_tests): Making use of new helper function.

2014-09-23  Alexey Proskuryakov  <ap@apple.com>

        Trying to revive bot watcher's dashboard after HSTS.

        Unreviewed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): It looks like XMLHttpRequest may not like HSTS redirects, let's try to avoid these.

2014-09-23  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Make Tools/BuildSlaveSupport/wait-for-SVN-server.py handle server donwtime
        https://bugs.webkit.org/show_bug.cgi?id=137026

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/wait-for-SVN-server.py:
        (getLatestSVNRevision):
        (waitForSVNRevision):

2014-09-23  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove unlinkZeroFiles from build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=137018

        Reviewed by Csaba Osztrogonác.

        * Scripts/build-webkit:
        (unlinkZeroFiles): Deleted.

2014-09-23  Rohit Kumar  <kumar.rohit@samsung.com>

        [GTK] Minibrowser : Add keyboard support for stop page load
        https://bugs.webkit.org/show_bug.cgi?id=136857

        Reviewed by Philippe Normand.

        Keyboard support to stop page load in GTK Minibrowser using F6 and Escape keys.

        * MiniBrowser/gtk/BrowserWindow.c:
        (stopPageLoad): Callback to stop page load.
        (browser_window_init):

2014-09-22  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][WK2] Minibrowser : Add keyboard support for page reload while ignoring cache
        https://bugs.webkit.org/show_bug.cgi?id=136813

        Reviewed by Gyuyoung Kim.

        Ctrl+r is used for page reload along with F5. Ctrl+Shift+r and Ctrl+F5 is used for page reload while ignoring cache.

        * MiniBrowser/efl/main.c:
        (on_key_down):

2014-09-22  Daniel Bates  <dabates@apple.com>

        [Cocoa] Add UI delegate callback when window.close() is called
        https://bugs.webkit.org/show_bug.cgi?id=137008
        <rdar://problem/17801001>

        Reviewed by Anders Carlsson.

        Add a test to ensure that -[WKUIDelegatePrivate _webViewClose:] is called on window.close()
        for window opened via JavaScript (i.e. window.open()).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/open-and-close-window.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm: Added.

2014-09-22  Youenn Fablet  <youennf@gmail.com>

        W3C importer should import html files within resources folders
        https://bugs.webkit.org/show_bug.cgi?id=127548

        Reviewed by Ryosuke Niwa.
        
        Import HTML files in any folder named "resources" even if file is not detected as a HTML test file 

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests):

2014-09-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/can-show-mime-type fails if evince browser plugin is installed
        https://bugs.webkit.org/show_bug.cgi?id=136998

        Reviewed by Philippe Normand.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewCanShowMIMEType): Remove the check of PDF as
        unsupported MIME type.

2014-09-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKitGTKTranslations rule in watchlist.

        In r145081 GTK+ translations were moved from Source/WebKit/gtk/po/
        to Source/WebCore/platform/gtk/po/ but the rule was not updated.

        * Scripts/webkitpy/common/config/watchlist: Use
        Source/WebCore/platform/gtk/po/ as directory to watch for
        WebKitGTKTranslations rule and add berto and myself to the list of
        watchers.

2014-09-22  Ryuan Choi  <ryuan.choi@gmail.com>

        Fix syntaxError in watchlist since r173594
        https://bugs.webkit.org/show_bug.cgi?id=136996

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/common/config/watchlist: Removed unnecessary comma.

2014-09-20  Sam Weinig  <sam@webkit.org>

        Make possible HashSet<std::unique_ptr<>>
        https://bugs.webkit.org/show_bug.cgi?id=136166

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/CopyMoveCounter.h: Removed.
        * TestWebKitAPI/Counters.cpp: Added.
        * TestWebKitAPI/Counters.h: Copied from Tools/TestWebKitAPI/Tests/WTF/CopyMoveCounter.h.
        Move the CopyMoveCounter helper from CopyMoveCounter.h to Counters.h, and add a ConstructorDestructorCounter
        helper to the mix as well. Add Counters.cpp to allow for the global variables to be used in more than one
        translation unit.
    
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add new files.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        Add tests for using std::unique_ptr and OwnPtr as the key's of a HashMap.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        Add tests for using std::unique_ptr and OwnPtr as the values of a HashSet.

2014-09-21  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        run-webkit-tests should count tests submitted as absolute paths once
        https://bugs.webkit.org/show_bug.cgi?id=136848

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/base.py:
        (Port._expanded_paths): In case of absolute path, do not search for platform specific tests.

2014-09-19  Joseph Pecoraro  <pecoraro@apple.com>

        JSStringRef leak on the leaks bot allocation under selectTextWithCriteriaCallback
        https://bugs.webkit.org/show_bug.cgi?id=136974

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (selectTextWithCriteriaCallback):
        Be sure to release the string if it was allocated.

2014-09-19  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Pending builds don't show up when there is a commit with no comments
        https://bugs.webkit.org/show_bug.cgi?id=136966

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._convertCommitInfoElementToObject): Tolerate these horrible commits.

2014-09-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][EFL] window.scrollTo(x, y) doesn't work when fixed layout is enabled
        https://bugs.webkit.org/show_bug.cgi?id=136917

        Reviewed by Darin Adler.

        Added WKViewScrollTo.cpp and scrollTo.html to test this issue.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewScrollTo.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/efl/scrollTo.html: Added.

2014-09-19  Daniel Bates  <dabates@apple.com>

        Always assume internal SDK when building configuration Production
        https://bugs.webkit.org/show_bug.cgi?id=136925
        <rdar://problem/18362399>

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2014-09-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WTR and DRT didReceiveAuthenticationChallengeInFrame should print messages consistently
        https://bugs.webkit.org/show_bug.cgi?id=136847

        Added protection space host and port logging to WTR didReceiveAuthenticationChallengeInFrame.

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallengeInFrame):

2014-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Missing inspector files in the tarball
        https://bugs.webkit.org/show_bug.cgi?id=136952

        Reviewed by Gustavo Noronha Silva.

        * gtk/manifest.txt: Add
        Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
        to the tarball.

2014-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Webkitgtk 2.5.3: tarball contains APPLE LICENSE file - stating not distributable
        https://bugs.webkit.org/show_bug.cgi?id=136632

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-inspector-gresource-manifest.py: Use an alias for
        the gtk icons.
        * gtk/manifest.txt: Only include the free icons in the tarball.

2014-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] generate-inspector-gresource-manifest.py should receive the list of files from the makefile
        https://bugs.webkit.org/show_bug.cgi?id=136943

        Reviewed by Philippe Normand.

        Update the script to receive the list of files from the command
        line instead of scanning the given directories.

        * gtk/generate-inspector-gresource-manifest.py:
        (get_filenames): Convert filenames to use relative paths.
        (find_all_files_in_directory): Deleted.
        (find_all_files_in_directory.select_file): Deleted.

2014-09-18  Tanay C  <tanay.c@samsung.com>

        [EFL][WK2] Minibrowser : Support Zoom on Control key + scroll
        https://bugs.webkit.org/show_bug.cgi?id=136739

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Add support for zoom on control key + mouse scroll
        (on_mouse_wheel): Modified.

2014-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Dot not allow to create delete-on-destroy GMainLoopSources
        https://bugs.webkit.org/show_bug.cgi?id=136923

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:
        (TestWebKitAPI::TEST): Use the new API that doesn't allow to use
        the source.

2014-09-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix countFailures of RunLLINTCLoopTests and Run32bitJSCTests (II)
        https://bugs.webkit.org/show_bug.cgi?id=136856

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunLLINTCLoopTests.countFailures):
        (Run32bitJSCTests.countFailures):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunLLINTCLoopTestsTest.test_failures):
        (RunLLINTCLoopTestsTest.test_failure):
        (RunLLINTCLoopTestsTest.test_no_failure):
        (Run32bitJSCTestsTest.test_failures):
        (Run32bitJSCTestsTest.test_failure):
        (Run32bitJSCTestsTest.test_no_failure):

2014-09-18  Zan Dobersek  <zdobersek@igalia.com>

        GMainLoopSource is exposed to race conditions
        https://bugs.webkit.org/show_bug.cgi?id=135800

        Reviewed by Carlos Garcia Campos.

        Add unit tests for GMainLoopSource.

        The tests check correct behavior of GMainLoopSource in various conditions --
        from the most simple rescheduling to rescheduling during dispatch, cancelling
        or destroying the GMainLoopSource during dispatch, proper destroy callback
        dispatching etc.

        Scheduling both void (one-time) and bool (repeatable) callbacks is tested.
        State of the GMainLoopSource object (either ready, sheduled or active) is
        thoroughly tested throughout the lifetime of that object.

        Still missing are tests for socket callbacks, which are a bit trickier because
        they rely on a GSocket object. The delete-on-destroy GMainLoopSource objects
        are also not tested thoroughly, simply because it is at the moment impossible
        to test that the objects are actually destroyed when the corresponding source
        is finally deleted.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp: Added.
        (TestWebKitAPI::GMainLoopSourceTest::GMainLoopSourceTest):
        (TestWebKitAPI::GMainLoopSourceTest::~GMainLoopSourceTest):
        (TestWebKitAPI::GMainLoopSourceTest::runLoop):
        (TestWebKitAPI::GMainLoopSourceTest::delayedFinish):
        (TestWebKitAPI::GMainLoopSourceTest::finish):
        (TestWebKitAPI::GMainLoopSourceTest::source):
        (TestWebKitAPI::TEST):

2014-09-17  Ryuan Choi  <ryuan.choi@gmail.com>

        Unreviewed, Update my email in contributors.json

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

2014-09-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r173695.

        Broke building third-party Legacy WebKit apps; will
        investigate offline

        Reverted changeset:

        "[iOS] Make WebCore build with public iOS SDK"
        https://bugs.webkit.org/show_bug.cgi?id=136487
        http://trac.webkit.org/changeset/173695

2014-09-17  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebCore build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=136487

        Reviewed by David Kilzer.

        Substitute <WebCore/MachVMSPI.h> for <mach/mach_vm.h>.

        * DumpRenderTree/mac/CheckedMalloc.cpp:

2014-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView::load-failed-with-tls-errors should receive the failing URI instead of a host
        https://bugs.webkit.org/show_bug.cgi?id=136889

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testLoadFailedWithTLSErrors): Check that LoadFailedWithTLSErrors
        event was added to the events vector.
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (loadFailedCallback): Do not assume the web view URI is the
        failing URI when the load fails before the committed state.
        (loadFailedWithTLSErrorsCallback): Handle the case of load failure
        because of TLS errors can call LoadTrackingTest::loadFailedWithTLSErrors.
        (LoadTrackingTest::LoadTrackingTest): Connect to WebKitWebView::load-failed-with-tls-errors.
        (LoadTrackingTest::loadFailedWithTLSErrors): Add
        LoadFailedWithTLSErrors event to the events vector.
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h:

2014-09-17  Renato Nagy  <rnagy@inf.u-szeged.hu>

        [EFL][GTK] Remove WebKit1 related codes
        https://bugs.webkit.org/show_bug.cgi?id=136853

        Reviewed by Csaba Osztrogonác.

        Gtk and EFL WebKit1 ports no longer exist. Webkit1 related codes were deleted
        from scripts.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Compile32bitJSC):
        (BuildAndTestWebKit2Factory):
        (CompileWebKit1Only): Deleted.
        (CompileWebKit2Only): Deleted.
        (BuildAndTestWebKit1OnlyFactory): Deleted.
        (BuildAndTestWebKit2OnlyFactory): Deleted.
        * Scripts/build-webkit:
        * Scripts/webkitperl/webkitdirs_unittest/checkForArgumentAndRemoveFromArrayRefGettingValue.pl:
        * Scripts/webkitpy/common/config/ports.py:
        (GtkWK2Port.build_webkit_command):
        (EflWK2Port.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_wk2_port):
        * Scripts/webkitpy/port/efl.py:
        (EflPort.build_webkit_command):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._built_libraries_path):
        (GtkPort._search_paths):
        (GtkPort.test_expectations_file_position):
        (GtkPort.build_webkit_command):
        (GtkPort.run_webkit_tests_command):
        (GtkPort.warn_if_bug_missing_in_test_expectations): Deleted.

2014-09-16  Daniel Bates  <dabates@apple.com>

        [iOS] Add iOS SDK name and version suffix to WebKitSystemInterface debug/release product name
        https://bugs.webkit.org/show_bug.cgi?id=136862

        Reviewed by David Kilzer.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Remove hardcoded iOS 8.0
        IPHONEOS_DEPLOYMENT_TARGET to ensure we link against the latest version of WebKitSystemInterface.

2014-09-12  Ryosuke Niwa  <rniwa@webkit.org>

        Mac queue slaves should reboot every so often
        https://bugs.webkit.org/show_bug.cgi?id=136791

        Reviewed by Alexey Proskuryakov.

        Reboot Mac queue slaves every night between 1 A.M. and 6 A.M.

        * EWSTools/start-queue-mac.sh:

2014-09-16  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed gardening, skip one more tests on Windows.

        * Scripts/run-javascriptcore-tests:

2014-09-16  Csaba Osztrogonác  <ossy@webkit.org>

        JSC test gardening
        https://bugs.webkit.org/show_bug.cgi?id=136823

        Reviewed by Geoffrey Garen.

        * Scripts/run-javascriptcore-tests: Skip tests on only the affected platforms.

2014-09-16  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove shouldAbortEarly cruft from master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=136779

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ConfigureBuild.start):
        (RunWebKitTests.start):
        (RunWebKit2Tests.start): Deleted.

2014-09-15  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove ORWT related crufts from webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=136821

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (isPerianInstalled): Deleted.
        (determineIPhoneSimulatorVersion): Deleted.
        (iPhoneSimulatorVersion): Deleted.
        (isSnowLeopard): Deleted.
        (isLion): Deleted.
        (quitIOSSimulator): Deleted.

2014-09-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Skip yet another ecma/Date test that fails only on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=25160

        * Scripts/run-javascriptcore-tests:

2014-09-15  Lucas Forschler  <lforschler@apple.com>

        Add another Apple build slave to the Mountain Lion Debug WK1 queue
        
        Rubber stamped by Matt Hanson.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2014-09-15  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Ecore and Eina are initialized twice in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=136822

        Reviewed by Gyuyoung Kim.

        In TestWebKitAPI/efl/main.cpp, ecore and eina modules are unnecessarily
        initialized as we already does it in PlatformWebView::PlatformWebView
        calling ewk_init(). The reason for that was to ensure testing for example,
        WTF where creating the view is not mandatory.

        Call ewk_init() and ewk_shutdown() in TestWebKitAPI/efl/main.cpp
        in order to properly initalize and release EWebKit.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        * TestWebKitAPI/efl/main.cpp:
        (main):

2014-09-15  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Make it easier to enable/disable GStreamer.
        https://bugs.webkit.org/show_bug.cgi?id=135766

        Reviewed by Brent Fulgham.

        Make it possible to enable/disable GStreamer by editing the new user macro ENABLE_GSTREAMER_WINCAIRO.

        * WinLauncher/WinMain.cpp: Compile fix when GStreamer is enabled.

2014-09-12  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remind about rebaselining generator test results
        https://bugs.webkit.org/show_bug.cgi?id=136759

        Reviewed by Joseph Pecoraro.

        For now, we can implement this as a watchlist message. Add watchlist
        groups and messages for the inspector and web replay generators.

        * Scripts/webkitpy/common/config/watchlist:

2014-09-12  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Overlapping text when status is long
        https://bugs.webkit.org/show_bug.cgi?id=136794

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line): Replaces height with min-height.

2014-09-12  Timothy Hatcher  <timothy@apple.com>

        Make Brian Burg a WebKit reviewer.

        * Scripts/webkitpy/common/config/contributors.json: Move Brian Burg's entry.

2014-09-12  Alexey Proskuryakov  <ap@apple.com>

        Multiple EWS or commit bots can pick up processing of the same patch
        https://bugs.webkit.org/show_bug.cgi?id=136793

        Reviewed by Ryosuke Niwa.

        Change timeout from one hour to two hours. This will let bots finish, and in the
        unlikely event of a bot being frozen, will only delay patch processing restart by
        one hour.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/model/activeworkitems.py: (ActiveWorkItems.deactivate_expired):

2014-09-11  Andy Estes  <aestes@apple.com>

        [WebKit2] WKImageCreateCGImage crashes when passed a null WKImage
        https://bugs.webkit.org/show_bug.cgi?id=136768

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKImageCreateCGImageCrash.cpp: Added.
        (TestWebKitAPI::TEST):

2014-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r173423): CertificateInfo is never sent to the UI process when using shared secondary process model
        https://bugs.webkit.org/show_bug.cgi?id=136669

        Reviewed by Antti Koivisto.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip SSL test.

2014-09-12  Eric Carlson  <eric.carlson@apple.com>

        Strip extraneous AVFoundation and CoreMedia logging
        https://bugs.webkit.org/show_bug.cgi?id=136747

        Reviewed by Jer Noble.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_compare_test): Allow the port to specify patterns to strip from stderr.

        * Scripts/webkitpy/port/base.py:
        (Port.stderr_patterns_to_strip): Base class, empty list

        * Scripts/webkitpy/port/driver.py:
        (DriverOutput.strip_stderror_patterns): Strip the specified patterns from stderr.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.stderr_patterns_to_strip): iOS patterns - there are none.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.stderr_patterns_to_strip): CoreMedia and AVFoundation logging we can ignore.


2014-09-11  Michael Saboff  <msaboff@apple.com>

        lldb_webkit.py:btjs doesn't work with release builds
        https://bugs.webkit.org/show_bug.cgi?id=136760

        Reviewed by Jer Noble.

        If we can't get a result calling JSC::ExecState::describeFrame(), try calling the
        mangled name _ZN3JSC9ExecState13describeFrameEv.  Also cleaned up the handling if
        we can't get a valid result from trying either call.  In that case, we fallback to
        just showing the PC.  Also added check for both entry points.  If neither is found,
        we issue a warning and output the stack trace without JavaScript annotations.

        * lldb/lldb_webkit.py:
        (btjs):

2014-09-11  Rebecca Hauck  <rhauck@adobe.com>

        webkitpy test failures from import-w3c-tests
        https://bugs.webkit.org/show_bug.cgi?id=136752

        Reviewed by Bem Jones-Bey.

        This patch fixes a bug in import-w3c-tests where we were appending
        the wrong set of files to the copy_list. This also updates the tests
        to clear the failures introduced in the patch for bug 135929.

        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (W3CTestConverterTest.test_read_prefixed_property_list):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test):
        (TestParser.support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2014-09-10  Brent Fulgham  <bfulgham@apple.com>

        Blink merge: Speculative fix for windows run-webkit-tests hangs
        https://bugs.webkit.org/show_bug.cgi?id=136727

        Reviewed by Csaba Osztrogonác.

        Merged from Blink (patch by Dirk Pranke):
        <https://chromium.googlesource.com/chromium/blink/+/0cdd98d44a20c3951562ccf8b08b1fefba8dac67%5E%21/#F0>

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_process):

2014-09-11  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Added myself as a committer.

        Unreviewed.

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

2014-09-11  László Langó  <llango.u-szeged@partner.samsung.com>

        [JavaScriptCore] Fix FTL on platform EFL.
        https://bugs.webkit.org/show_bug.cgi?id=133571

        Reviewed by Filip Pizlo.

        * efl/install-dependencies: Revert r169181.
        * efl/jhbuild.modules: Clone and build a custom branch.
        This branch contains some fix for FTL of platform EFL.
        The branch is a fork of llvm r206311.

2014-09-10  Tanay C  <tanay.c@samsung.com>

        [EFL][WK2] Minibrowser : Shift+Scroll navigate to back or forward url's
        https://bugs.webkit.org/show_bug.cgi?id=136698

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Add functionality to support shift + mouse scroll navigation
        (on_mouse_wheel): Added.
        (window_free):
        (window_create):

2014-09-10  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][WK2] Minibrowser : Add tooltip for toolbar buttons in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=136284

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (window_create):

2014-09-10  Rebecca Hauck  <rhauck@adobe.com>

        import-w3c-tests doesn't handle relative paths to support files in ref files correctly
        https://bugs.webkit.org/show_bug.cgi?id=135929

        Reviewed by Bem Jones-Bey.

        The recent refactor of the W3C test repo falsified a bunch of assmumptions that
        were made when this script was originally written with respect to relative paths
        in ref files. This patch updates import-w3c-tests to update paths in ref files if
        they move relative to the test file.


        * Scripts/webkitpy/w3c/test_converter.py:
        (convert_for_webkit):
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.convert_reference_relpaths):
        (_W3CTestConverter.convert_style_data):
        (_W3CTestConverter.convert_attributes_if_needed):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.support_files):

2014-09-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] allow overwriting destination of download
        https://bugs.webkit.org/show_bug.cgi?id=136372

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (downloadLocalFileSuccessfully): Split from testDownloadLocalFile
        (testDownloadLocalFile): Split off downloadLocalFileSuccessfully
        (createFileAtDestination): Added
        (testDownloadOverwriteDestinationAllowed): Added
        (testDownloadOverwriteDestinationDisallowed): Added
        (testDownloadLocalFileError): Use new DownloadErrorTest::ExpectedError
        (testDownloadRemoteFileError): Use new DownloadErrorTest::ExpectedError
        (beforeAll): New tests

2014-08-05  David Farler  <dfarler@apple.com>

        iOS Simulator: run-webkit-tests chokes on unterminated UTF-8 when writing a test result
        https://bugs.webkit.org/show_bug.cgi?id=135551

        Reviewed by Daniel Bates.

        Prevent printing invalid Unicode strings going to stderr.
        Also, make filesystem.py more tolerant about receiving
        Unicode (encoded as UTF-8) when writing to files, in the
        rare case that an NSError description will make it to
        stderr, such as -[LTRelayController createUniqueApp].

        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
        (-[LTRelayController launchSimulator]): Removed.
        (-[LTRelayController createUniqueApp]):
        Don't explicitly try to uninstall the app. It is automatically handled
        when installing an app with the same bundle identifier.
        (-[LTRelayController start]):
        (-[LTRelayController bootDevice]): Removed.
        The device already boots as a part of starting the simulator. Attempting
        to boot a second time may cause spurious stderr output.
        * Scripts/webkitpy/port/driver.py:
        (IOSSimulatorDriver._setup_environ_for_driver):
        Explicitly set DEVELOPER_DIR once so xcode-select isn't called.
        Open the iOS Simulator once instead of the LayoutTestRelay trying
        to do it.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort._get_crash_log):
        Make sure stderr is at least an empty string.
        (IOSSimulatorPort):
        (IOSSimulatorPort.developer_dir):
        New property for setting up DEVELOPER_DIR in the driver environment.

2014-09-09  Dan Bernstein  <mitz@apple.com>

        Clean up the MiniBrowser Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=136684

        Reviewed by Tim Horton.

        * MiniBrowser/Configurations/Base.xcconfig: Enabled warnings recommended by Xcode 6.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Removed explicit linking against
        WebKit2.framework. Upgraded project file version.

2014-09-09  Daniel Bates  <dbates@webkit.org>

        svn-{apply, unapply} fails to apply/unapply SVN 1.7 patch that adds new file with property change
        https://bugs.webkit.org/show_bug.cgi?id=136379

        Reviewed by David Kilzer.

        Fixes an issue where svn-{apply, unapply} fail to apply or unapply, respectively,
        a patch generated using Subversion 1.7.4 (r1295709) that both adds a new file F
        and sets a property on F (say, the executable bit).

        * Scripts/svn-apply:
        (patch): Only add file if the diff has text chunks.
        * Scripts/svn-unapply:
        (patch): Only delete added file if the diff has text chunks.

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

        [GTK] Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip TestSSL:webkit2/WebKitWebView/ssl (fails since r173423).

2014-09-09  Christophe Dumez  <cdumez@apple.com>

        Update my email in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=136671

        Reviewed by Andreas Kling.

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

2014-09-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Enable fixed layout by default
        https://bugs.webkit.org/show_bug.cgi?id=136607

        Reviewed by Csaba Osztrogonác.

        Fixed layout is being used by Tizen platform by default. However, the feature
        has still many defects now. So, we need to enable it by default, then should fix
        those bugs. 

        * MiniBrowser/efl/main.c:

2014-09-08  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove FILTERS flag
        https://bugs.webkit.org/show_bug.cgi?id=136571

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2014-09-08  Alexey Proskuryakov  <ap@apple.com>

        Dashboard metrics should ignore commits that didn't trigger builds
        https://bugs.webkit.org/show_bug.cgi?id=136618

        Reviewed by Darin Adler.

        Commits that didn't trigger builds are ones like ChangeLog updates, patches for
        other platforms etc. It does not make sense to count wait time for these, as it
        can be arbitrarily long.

        The new algorithm is much slower asymptotically, but it's OK, computers are fast.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData): Record changes that triggered the iteration.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        We used to walk the timeline to see which revisions are fully tested, but that's not
        correct. A revision that's only tested by a subset of queues finishes independently
        of another that's tested by another subset. Now, we just search for the answer for
        each revision individually.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsView.js:
        (MetricsView.prototype._update.appendQueueResults): Added worst revision number, which
        the analyzer now reports. Removed best time, which is more confusing than meaningful.

2014-09-08  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove EWebLauncher from webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=136622

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitdirs.pm:
        (launcherName):

2014-09-06  Sam Weinig  <sam@webkit.org>

        XPCPtr should be converted into an all purpose smart pointer for os_objects
        https://bugs.webkit.org/show_bug.cgi?id=136602

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/darwin: Added.
        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtr.cpp: Added.
        Add basic unit tests for OSObjectPtr.

2014-09-06  Saam Barati  <saambarati1@gmail.com>

        Unreviewed. Add myself as a committer.

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

2014-09-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix when SHARED_CORE is on.

        * TestWebKitAPI/PlatformEfl.cmake:

2014-09-05  Lucas Forschler  <lforschler@apple.com>

        <https://webkit.org/b/136586> Add bots to Apple build/test queues
        
        Reviewed by Daniel Bates.

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

2014-09-05  Alexey Proskuryakov  <ap@apple.com>

        Buildbot metrics page gives wrong results after a new bot gets added
        https://bugs.webkit.org/show_bug.cgi?id=136516

        Reviewed by Tim Horton.

        Part 2: Fix elapsed times.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._countTimes): Made lastTestedRevisionByQueue contain undefined values
        until the first build in a queue. This happens to work as needed with _fullyTestedRevisionNumber().

2014-09-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [SOUP] Implement ResourceResponse::platformSuggestedFilename() when USE(SOUP) is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=136562

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner): Remove failure expectations for tests that now pass.

2014-09-04  Alexey Proskuryakov  <ap@apple.com>

        Dashboard metrics page wastes a lot of time sorting iterations
        https://bugs.webkit.org/show_bug.cgi?id=136559

        Reviewed by Tim Horton.

        Also fixes comments here and there, and adds a missing "var".

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData):
        (BuildbotIteration.prototype._updateWithData):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.loadAll):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._countTimes):

2014-09-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip tests failing since r173272.

2014-09-04  Simon Fraser  <simon.fraser@apple.com>

        Add some logging to help diagnose assertions in dumpWebViewAsPixelsAndCompareWithExpected() on bots
        https://bugs.webkit.org/show_bug.cgi?id=136561

        Reviewed by Tim Horton.
        
        Log for calloc() and CGBitmapContextCreate() failures.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext):
        (createBitmapContextFromWebView):

2014-09-04  Andy Estes  <aestes@apple.com>

        Fix the Mac Production build after r173283.

        * WebKitTestRunner/config.h: Reverted to defining WEBCORE_EXPORT for now.

2014-09-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] webkitpy test suite frequently fails to complete
        https://bugs.webkit.org/show_bug.cgi?id=136546

        Reviewed by Daniel Bates.

        Properly convert the ASCII crash log produced by ntsd into
        a unicode string as early as possible so that we handle it
        properly when generating our logs and other test support output.

        We were mixing ASCII/unicode strings under Windows, which was
        causing test system failures when we processed some crash logs.

        Also do a better job of handling garbage pid entries in the
        Cygwin lock files.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_win): The ntsd '.logopen' command
        creates an ASCII file. Decode it as ASCII, not 'utf-8', and
        handle the strings as unicode from that point on.
        * Scripts/webkitpy/port/http_lock.py:
        (HttpLock._current_lock_pid): Add logging and handle case of
        the current_pid failing to cleanly convert to 'int'.
        * Scripts/webkitpy/port/win.py:
        (WinPort): Add 64-bit architecture as a known target for the
        Windows build.

2014-09-04  Andy Estes  <aestes@apple.com>

        Address additional review feedback after landing r173283.

        Reviewed by Daniel Bates.

        * DumpRenderTree/config.h: Removed redundant includes.
        * TestWebKitAPI/config.h: Ditto.
        * WebKitTestRunner/config.h: Ditto.

2014-09-03  Andy Estes  <aestes@apple.com>

        [Cocoa] Some WebKitLegacy headers migrated from WebCore incorrectly contain WEBCORE_EXPORT
        https://bugs.webkit.org/show_bug.cgi?id=136521

        Reviewed by Anders Carlsson.

        * DumpRenderTree/config.h: Included <WebCore/PlatformExportMacros.h> instead of defining WEBCORE_EXPORT.
        * TestWebKitAPI/config.h: Ditto.
        * WebKitTestRunner/config.h: Ditto.

2014-09-04  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Dashboard metrics page aggregation counts performance bots
        https://bugs.webkit.org/show_bug.cgi?id=136539

        Reviewed by Tim Horton.

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

2014-09-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Perl test fix.

        * Scripts/webkitperl/auto-version_unittest/versionStampTests.pl: Correct test to check for
        VersionStamp.exe tool, not just the driver script.

2014-09-04  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove CSS_FILTERS flag
        https://bugs.webkit.org/show_bug.cgi?id=136529

        Reviewed by Dirk Schulze.

        * Scripts/webkitperl/FeatureList.pm:

2014-09-04  Commit Queue  <commit-queue@webkit.org>

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

        Improves the situation but also introduces additional crashes.
        (Requested by zdobersek on #webkit).

        Reverted changeset:

        "GMainLoopSource is exposed to race conditions"
        https://bugs.webkit.org/show_bug.cgi?id=135800
        http://trac.webkit.org/changeset/173201

2014-09-03  Alexey Proskuryakov  <ap@apple.com>

        Buildbot metrics page gives wrong results after a new bot gets added
        https://bugs.webkit.org/show_bug.cgi?id=136516

        Part 1: Fix red/green counters. Dashboard is considered green at a given time
        if all the bots that ever had results before this time are green.

        This doesn't (and cannot) address situations where the bot gets removed and then
        re-added. It also gives wrong results after a bot gets removed, because it doesn't
        know that it was ever displayed on the dashboard.

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._dashboardIsAllGreen):
        (Analyzer.prototype._updateStretchOfRedCounters):
        (Analyzer.prototype._countPercentageOfGreen):
        (Analyzer.prototype._allQueuesAreSuccessful): Deleted.

2014-09-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix.

        * Scripts/webkitperl/auto-version_unittest/versionStampTests.pl: Don't fail
        test if user doesn't have the VersionStamp.exe program.

2014-09-03  Dana Burkart  <dburkart@apple.com>

        Unreviewed. Add myself as a committer.

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

2014-09-03  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard performance popover is unstyled
        https://bugs.webkit.org/show_bug.cgi?id=136499

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        (.performance-popover):
        (.performance-popover .dashboard-link):

2014-09-03  Saam Barati  <saambarati1@gmail.com>

        Create tests for type profiling
        https://bugs.webkit.org/show_bug.cgi?id=136161

        Reviewed by Geoffrey Garen.

        Have run-javascriptcore-tests run the newly created
        tests for the type profiler.

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

2014-09-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Revise test environment for Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=136486

        Reviewed by David Kilzer.

        The various calls to get the Safari path really only have
        meaning on the Mac. Other ports get access to the build
        and test environment separately, so remove the various
        checks in the Safari-specific code to simplify things.

        Remove some 64-bit hacks used on Windows now that the
        various tools know how to find the 64-bit runtime environment.

        * Scripts/run-javascriptcore-tests: 
        * Scripts/webkitdirs.pm:
        (safariPathFromSafariBundle): Revise to expect Mac.
        (installedSafariPath): Ditto.
        (safariPath): Ditto.
        (appleApplicationSupportPath): Get rid of 64-bit Windows hack.
        (setPathForRunningWebKitApp): Get rid of unused SafariPath
        argument for Windows runs.

2014-09-03  Dana Burkart  <dburkart@apple.com>

        Dashboard should show performance bots.
        https://bugs.webkit.org/show_bug.cgi?id=136386

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData.collectPerfTestResults):
        (BuildbotIteration.prototype._parseData):
        Support possible performance failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:
        New QueueView to manage the way we present performance data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue):
        Support new 'performance' and 'performanceTestName' keys.


        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        Add performance column to the main page.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (body):
        Make sure everything fits on 13 inch screens.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:

2014-09-03  Zan Dobersek  <zdobersek@igalia.com>

        GMainLoopSource is exposed to race conditions
        https://bugs.webkit.org/show_bug.cgi?id=135800

        Reviewed by Carlos Garcia Campos.

        Add a unit test for GMainLoopSource that tests different
        types of rescheduling tasks on already-active sources.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp: Added.
        (GMainLoopSourceTest::GMainLoopSourceTest):
        (GMainLoopSourceTest::~GMainLoopSourceTest):
        (GMainLoopSourceTest::runLoop):
        (GMainLoopSourceTest::finish):
        (GMainLoopSourceTest::source):
        (testGMainLoopSourceBasicRescheduling):
        (testGMainLoopSourceReentrantRescheduling):
        (testGMainLoopSourceDifferentThreadRescheduling):
        (beforeAll):
        (afterAll):
        (TestWebKitAPI::GMainLoopSourceTest::GMainLoopSourceTest):
        (TestWebKitAPI::GMainLoopSourceTest::~GMainLoopSourceTest):
        (TestWebKitAPI::GMainLoopSourceTest::runLoop):
        (TestWebKitAPI::GMainLoopSourceTest::finish):
        (TestWebKitAPI::GMainLoopSourceTest::source):
        (TestWebKitAPI::TEST):

2014-09-02  Simon Fraser  <simon.fraser@apple.com>

        Make sure WK1 prefs are initialized in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=136465

        Reviewed by Tim Horton.
        
        Call -didChangeSettings from -awakeFromNib for WK1 windows just as we do
        for WK2 windows, to make sure that WebPreferences are updated (to get
        layer borders to work consistently).

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

2014-09-02  Renato Nagy  <rnagy@inf.u-szeged.hu>

        check-webkit-style should complain about C++ comments in Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=133802

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_platformh_comments):
        (_process_lines):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_platformh_comment):

2014-09-02  Brendan Long  <self@brendanlong.com>

        [Gtk] Make install-dependencies work on Arch Linux
        https://bugs.webkit.org/show_bug.cgi?id=136374

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: Add dependencies for pacman (Arch Linux).

2014-09-01  Brian J. Burg  <burg@cs.washington.edu>

        Provide column numbers to DTrace willExecute/didExecute probes
        https://bugs.webkit.org/show_bug.cgi?id=136434

        Reviewed by Antti Koivisto.

        Create a directory for DTrace scripts. Add an example script that
        shows how to use static probes provided by JavaScriptCore's profiler.

        * Scripts/dtrace/jsc-trace-profiler-events.d: Added.

2014-09-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [JHBuild] Cyclic dependency between cairo and librsvg.
        https://bugs.webkit.org/show_bug.cgi?id=136431

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Disable cairo SVG testsuite.
        Add missing dependencies for librsvg (glib and cairo).

2014-09-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies don't installs dbus-launch that is needed for the API tests.
        https://bugs.webkit.org/show_bug.cgi?id=136425

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: Add dbus-x11 to the list of packages needed for running the tests.

2014-09-01  Ryuan Choi  <ryuan.choi@samsung.com>

        Update my list of email addresses in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=136424

        Reviewed by Gyuyoung Kim.

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

2014-08-30  Filip Pizlo  <fpizlo@apple.com>

        [RJST] eager-no-cjit should really mean eager
        https://bugs.webkit.org/show_bug.cgi?id=136407

        Reviewed by Mark Hahnenberg.
        
        At some point we made NO_CJIT_OPTIONS force threshold settings to something reasonable
        and well-known. But the way we appended options was such that NO_CJIT_OPTIONS came in
        after EAGER_OPTIONS. The whole point of "eager" was to use eager tier-up thresholds. This
        all meant that NO_CJIT_OPTIONS was overriding the eagerness of EAGER_OPTIONS, for the one
        threshold setting that NO_CJIT_OPTIONS was currently setting
        (thresholdForJITAfterWarmUp). The solution is to make sure that we always append
        NO_CJIT_OPTIONS before we append EAGER_OPTIONS.
        
        Luckily, no tests regressed during the time that we lost eager-no-cjit coverage.

        * Scripts/run-jsc-stress-tests:

2014-08-29  Daniel Bates  <dabates@apple.com>

        [iOS] Configure Xcode to build a command line tool for the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=136388

        Reviewed by David Kilzer.

        Add a script, called configure-xcode-for-ios-development, to configure Xcode to
        support building a command line tool for the iOS Simulator. You must run this
        script as root.

        The script uses the xcspec files in the OS X SDK to create xcspec files in the
        iOS Simulator SDK with the product- and package- type definitions to build a
        command line tool, if applicable.

        * Scripts/configure-xcode-for-ios-development: Added.

2014-08-29  Tim Horton  <timothy_horton@apple.com>

        Remove Windows WebKit2 code from TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=136385

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWebView.h:
        (TestWebKitAPI::PlatformWebView::setParentWindowMessageObserver): Deleted.
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::TEST): Deleted.
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp: Removed.

2014-08-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JSC] Some JSC tests are dependent on the machine time zone.
        https://bugs.webkit.org/show_bug.cgi?id=136363

        Reviewed by Filip Pizlo.

        * Scripts/run-javascriptcore-tests: Export TZ environment variable to US/Pacific.
        Unskip the tests that were skipped on r99580.

2014-08-29  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Remove non Coordinated Graphics code path from cmake build system after r142169
        https://bugs.webkit.org/show_bug.cgi?id=135560

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm: Removed TILED_BACKING_STORE guard.

2014-08-28  Daniel Bates  <dabates@apple.com>

        [Win] update-webkit should update auxiliary libs by default

        Reviewed by Dan Bernstein.

        The change set <http://trac.webkit.org/changeset/172795> inadvertently prevented update-webkit
        from updating the Windows auxiliary libs by default. We should make update-webkit update the
        Windows auxiliary libs by default. This will make its behavior match its usage text.

        * Scripts/update-webkit:

2014-08-28  Brian J. Burg  <burg@cs.washington.edu>

        build-webkit --inspector-frontend tries to copy files from old inspector path
        https://bugs.webkit.org/show_bug.cgi?id=136346

        Reviewed by Timothy Hatcher.

        Remove the old code path for copying inspector resources. It doesn't work.
        Complain if this option is passed to CMake-based builds.

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

2014-08-28  Alexey Proskuryakov  <ap@apple.com>

        Dashboard metrics page could show longest stretch of red
        https://bugs.webkit.org/show_bug.cgi?id=136334

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js:
        (Analyzer.prototype._updateStretchOfRedCounters):
        (Analyzer.prototype._countPercentageOfGreen):
        When counting percentage of green, also keep track of how long the page was red.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsView.js:
        (MetricsView.prototype._update.addDivider):
        (MetricsView.prototype._update.appendQueueResults):
        Show it in aggregate queues (can't think of a reason to have it in individual ones).

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Metrics.css:
        Changed to use an explicit divider element between green time and performance groups,
        as there are too many combinations to easily express in CSS.

2014-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_response_get_http_headers to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=136248

        Reviewed by Gustavo Noronha Silva.

        Add new test case for webkit_uri_response_get_http_headers().

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testURIResponseHTTPHeaders):
        (serverCallback):
        (beforeAll):

2014-08-27  Alexey Proskuryakov  <ap@apple.com>

        EWS status link at build.webkit.org/dashboard is incorrect until EWS pop-up is opened
        https://bugs.webkit.org/show_bug.cgi?id=131668

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js:
        (EWSQueue.prototype.loadDetailedStatus): Fixed a typo in assertion.

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Cleanup snapSizeToPixel/snapSizeToDevicePixel.
        https://bugs.webkit.org/show_bug.cgi?id=136264

        Reviewed by Simon Fraser.
        
        1. Align snapSizeToPixel()/snapSizeToDevicePixel() function names with the rest of snapping
        functions. ->snappedIntSize()/snapSizeToDevicePixel().
        2. Operate on LayoutSize/LayoutPoint instead of LayoutUnit/LayoutUnit to reflect functionality.

        Covered by existing tests.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:
        (TestWebKitAPI::TEST): Deleted.

2014-08-27  Alexey Proskuryakov  <ap@apple.com>

        EWS status link at build.webkit.org/dashboard is incorrect until EWS pop-up is opened
        https://bugs.webkit.org/show_bug.cgi?id=131668

        Reviewed by Daniel Bates.

        We used to fetch the URL from EWS detailed status JSON, but there isn't much reason
        to not just hardcode.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js:
        (EWS.prototype.queueStatusURL): Added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js:
        (EWSQueue.prototype.get statusPageURL): Use the above function.
        (EWSQueue.prototype.loadDetailedStatus): Changed assignment to an assertion.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueueView.js:
        (EWSQueueView.prototype.update): While at it, made a popover show up even if there
        are no patches in the queue. The popover has other useful information, such as charts
        link and bot status.

2014-08-27  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=136317
        Dashboard metrics page sometimes shows 0 for best time

        Reviewed by Tim Horton.

        This also affects regular dashboard display in a good way - iterations that failed
        due to infrastructure misbehavior will more reliably show up as yellow and not red.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration): Added a list of steps that we actually care about. It will need to be
        updated if we rename steps.
        (BuildbotIteration.prototype.get productive): Now that computation is more involved,
        do it once.
        (BuildbotIteration.prototype._parseData): Tweak computation of "productive" - builds
        that failed e.g. at downloading built archive step are not productive.

2014-08-27  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        * win/AssembleBuildLogs/AssembleLogs.cmd: Add some missing build logs to the set
        of logs assembled into the final build output.

2014-08-27  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Add a metrics page with overall bot performance results
        https://bugs.webkit.org/show_bug.cgi?id=136196

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/daterangepicker.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/jquery-1.11.1.min.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/jquery.daterangepicker.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/External/moment.min.js: Added.
        A date range picker control with dependencies.
        There are a few modifications from upstream at <https://github.com/longbill/jquery-date-range-picker>:
        - Fixed a bug where selected dates were not at midnight the first time a range was chosen
        (it didn't happen again upon re-opening the picker).
        - Made made style tweaks to match Dashboard UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        Don't create objects that are not needed by the given app, and thus are not loaded at all.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsAnalyzer.js: Added.
        Math to count all the things. Only supports open source tree and trunk at the moment,
        but written with internal tree and branches in mind.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsMain.js: Added.
        Like dashboard Main.js, draws the UI and creates all necessary objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/MetricsView.js: Added.
        A view for table cells.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js:
        (Settings.prototype.toggleSettingsDisplay): Added an event for entering settings.
        Metrics page has individual platforms initially scrolled away form the view, so 
        it needs to scroll down to reveal what's being configured.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        Added Array.prototype.average and Array.prototype.median.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        Made gear icon fixed instead of absolute, so that it's visible on metrics page when
        in settings mode.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Metrics.css:
        Additional style rules.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/metrics.html:
        The metrics page.

2014-08-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove networkinfo watch category in watchlist
        https://bugs.webkit.org/show_bug.cgi?id=136279

        Reviewed by Alexey Proskuryakov.

        Network info was removed. So, it is not needed anymore.

        * Scripts/webkitpy/common/config/watchlist:

2014-08-26  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Poor performance when there are broken builds at initial load time
        https://bugs.webkit.org/show_bug.cgi?id=136281

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        Track and expose whether the itertion is being loaded. Made update() a no-op if
        the iteration is already being loaded.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus): Instead of
        loading everything at once, ask the queue to load a little more. We can always repeat
        if we still don't have enough data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.loadMoreHistoricalIterations): Added a function that loads
        10 more iterations intelligently.

2014-08-26  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard raises an exception when Trac RSS fails to load
        https://bugs.webkit.org/show_bug.cgi?id=136283

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        Don't.

2014-08-26  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard raises an exception after a hidden platform is removed
        https://bugs.webkit.org/show_bug.cgi?id=136282

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (updateHiddenPlatforms): Check that the platform is still valid.

2014-08-26  Matt Lilek  <mrl@apple.com>

        Add WebKit SPI to control the navigator.standalone property
        https://bugs.webkit.org/show_bug.cgi?id=136189

        Reviewed by Andy Estes.

        Add API test for WKPreferences

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

2014-08-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove ENABLE_DRT environment variable to enable SHARED_CORE
        https://bugs.webkit.org/show_bug.cgi?id=136205

        Reviewed by Andrei Bucur.

        EFL port doesn't need to enable SHARED_CORE since r172894. Thus, we don't need to
        use ENABLE_DRT enviroment variable, which enables SHARED_CORE.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2014-08-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Version stamp should include package-level version
        https://bugs.webkit.org/show_bug.cgi?id=136266
        <rdar://problem/18134138>

        Reviewed by David Kilzer.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Add
        tests for the full 3+ digit version.
        * Scripts/webkitperl/auto-version_unittest/versionStampTests.pl:
        Confirm that the final output DLL uses the 3+ digit version.

2014-08-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] WebKit IDL incorrectly passes HWND as OLE_HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=136258
        <rdar://problem/18134138>

        Reviewed by Tim Horton.

        Avoid 32/64-bit truncation by preventing 64-bit HWND (and other)
        values from passing through the 32-bit OLE_HANDLE data type.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::rootElement):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/win/FrameLoadDelegate.h:
        (FrameLoadDelegate::didReceiveIcon):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setWindowIsKey):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::trackCustomPopupMenu):
        (UIDelegate::drawHeaderInRect):
        (UIDelegate::drawFooterInRect):
        (UIDelegate::webViewClose):
        (UIDelegate::webViewFocus):
        (UIDelegate::webViewSetCursor):
        (UIDelegate::drawBackground):
        * DumpRenderTree/win/UIDelegate.h:
        (UIDelegate::webViewFirstResponder):
        (UIDelegate::makeFirstResponder):
        (UIDelegate::contextMenuItemsForElement):
        (UIDelegate::addCustomMenuDrawingData):
        (UIDelegate::cleanUpCustomMenuDrawingData):
        (UIDelegate::webViewLostFocus):
        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp:
        (TestWebKitAPI::WebViewDestructionWithHostWindow::SetUp):
        * WinLauncher/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::drawHeaderInRect):
        (PrintWebUIDelegate::drawFooterInRect):
        * WinLauncher/PrintWebUIDelegate.h:
        (PrintWebUIDelegate::webViewFirstResponder):
        (PrintWebUIDelegate::makeFirstResponder):
        (PrintWebUIDelegate::contextMenuItemsForElement):
        (PrintWebUIDelegate::trackCustomPopupMenu):
        (PrintWebUIDelegate::addCustomMenuDrawingData):
        (PrintWebUIDelegate::cleanUpCustomMenuDrawingData):
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::prepareViews):
        * WinLauncher/WinLauncherWebHost.h:
        (WinLauncherWebHost::didReceiveIcon):

2014-08-26  Daniel Bates  <dabates@apple.com>

        Only define WEBCORE_EXPORT when building DumpRenderTree for Windows and iOS

        Rubber-stamped by Tim Horton.

        The Windows and iOS ports are the only ports that make use of WebCore headers
        in DumpRenderTree.

        * DumpRenderTree/config.h:

2014-08-26  Dan Bernstein  <mitz@apple.com>

        runSvnUpdateAndResolveChangeLogs() doesn’t work when invoked from a script outside Tools/Scripts
        https://bugs.webkit.org/show_bug.cgi?id=136254

        Reviewed by Tim Horton.

        * Scripts/webkitdirs.pm:
        (runSvnUpdateAndResolveChangeLogs): Locate resolve-ChangeLogs relative to the source tree,
        not the invoking script.

2014-08-26  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Utilize espeak as a synthesizer back-end for WebSpeech
        https://bugs.webkit.org/show_bug.cgi?id=136127

        Reviewed by Gyuyoung Kim.

        Add espeak dependency.

        * efl/install-dependencies:

2014-08-25  Alexey Proskuryakov  <ap@apple.com>

        Remove a little more accidentally landed code from r172891.

        iteration.branch also wasn't meant to be landed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData):

2014-08-25  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r172891): Internal dashboard is broken.

        Removing some accidentally landed code - I needed "changes" for another patch, but
        not here, and then I decided to not use it anyway.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData):

2014-08-25  Daniel Bates  <dabates@apple.com>

        Fix the iOS DumpRenderTree build after <http://trac.webkit.org/changeset/172814/>
        (https://bugs.webkit.org/show_bug.cgi?id=136108)

        Use a similar approach as in TestWebKitAPI/config.h and define a stub for the macro define WEBCORE_EXPORT
        so that we can compile DumpRenderTree for iOS.

        * DumpRenderTree/config.h:

2014-08-25  Alexey Proskuryakov  <ap@apple.com>

        Make build.webkit.org/dashboard work with changeset_show_files=location
        https://bugs.webkit.org/show_bug.cgi?id=136237

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._convertCommitInfoElementToObject): Remove location information
        from description before getting title, and also actually parse the location into
        result object when available.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (String.prototype.startsWith): Added.

2014-08-25  Tanay C  <tanay.c@samsung.com>

        [EFL][WK2] Minibrowser : Enhance application to be able to support history list navigation
        https://bugs.webkit.org/show_bug.cgi?id=135795

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Adding functionality for long press history list navigation
        (history_list_hide): Hiding and dereferencing the history list and items
        (on_key_down):
        (on_mouse_down):
        (on_back_button_clicked): Early return for longpress 
        (on_forward_button_clicked): Early return for longpress 
        (list_item_label_get): Populate item labels
        (on_list_item_select): Navigates on selection from history list
        (navigation_button_longpress_process): Populates the history list and displays it
        (on_forward_button_longpress):
        (on_back_button_longpress):
        (window_create): Add the widget for history list

2014-08-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] JHBuild module gst-plugins-base fails to build on x86 with GCC 4.9
        https://bugs.webkit.org/show_bug.cgi?id=136152

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Apply gst-plugins-base-fix-build-gcc-4.9-x86.patch.
        * gtk/patches/gst-plugins-base-fix-build-gcc-4.9-x86.patch: Added.
        Cherry pick upstream patches daa194 and 4e3d101.

2014-08-24  Zan Dobersek  <zdobersek@igalia.com>

        GenericHashTraits::peek() is producing copies of passed-in temporary values
        https://bugs.webkit.org/show_bug.cgi?id=131461

        Reviewed by Darin Adler.

        Add a test case that checks the number of copies and moves of the mapped objects
        when calling HashMap::get(). Exactly one copy of the mapped value should be
        performed when there exists a value that is mapped to the specified key, and
        exactly one move and no copies of the empty value should be performed when there
        isn't any mapped value for the specified key.

        * TestWebKitAPI/Tests/WTF/CopyMoveCounter.h: Added.
        (CopyMoveCounter::TestingScope::TestingScope):
        (CopyMoveCounter::CopyMoveCounter):
        (CopyMoveCounter::operator=):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):

2014-08-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Introduce DEVELOPER_MODE
        https://bugs.webkit.org/show_bug.cgi?id=135884

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitdirs.pm: Turn on DEVELOPER_MODE for the EFL port.
        (generateBuildSystemFromCMakeProject):

2014-08-24  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard unnecessarily loads results of hidden queues
        https://bugs.webkit.org/show_bug.cgi?id=136195

        Reviewed by Tim Horton.

        This patch also makes it possible to avoid any automatic loading, as needed for metrics view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js:
        Don't start an update just because a queue object was created. Periodic updates
        are triggered by views, so it only makes sense to do the same for the initial update.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        Now that Trac object doesn't auto-load, start loading here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js:
        (QueueView): Calling _updateHiddenState right away was wrong, because it accesses
        a data member added by subclasses later. With this.platform being undefined, it
        always looked like this queue was not hidden.
        (QueueView.prototype._updateHiddenState): Start an immediate update, too.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac): Don't load anything here, the client may choose to load a custom date range.
        (Trac.prototype.startPeriodicUpdates): Added a function to start automatic loading.

2014-08-23  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Further improve Trac loading
        https://bugs.webkit.org/show_bug.cgi?id=136174

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._xmlTimelineURL): Passing -1 as "max" resulted in an off by one
        error, the oldest commit within the range wasn't returned. The correct argument for
        "no limit" is 0.
        (Trac.prototype.load): Added a function to load a specific time range.
        (Trac.prototype._loaded): Updated to support loading revisions that are arbitrarily
        positioned with regards to ones that were already known.

2014-08-23  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard: Make it possible to pull historic data from Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=136182

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        Make it possible to create a complete BuildbotIteration object with JSON, not only by
        loading data from the network.

        An iteration has three states:
        1. Just created, it only knows the revision, and whether it's already finished.
        BuildbotIteration constructor used to create these.
        2. A complete JSON report loaded from buildbot. The new constructor form creates these.
        3. Data about tests is fetched.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        Make it possible to pull all data from a buildbot queue. This needs to be better
        optimized eventually, as it's somewhat slow.

2014-08-22  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Remove LevelDB.
        https://bugs.webkit.org/show_bug.cgi?id=136170

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/style/checker.py:

2014-08-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies don't installs Xvfb that is needed for the tests.
        https://bugs.webkit.org/show_bug.cgi?id=136153

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: Add Xvfb package to the list of dependencies necessary for running tests.

2014-08-21  Alex Christensen  <achristensen@webkit.org>

        [Win] Another unreviewed build fix.

        * DumpRenderTree/config.h:
        Defined WEBCORE_EXPORT on Windows.

2014-08-21  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][WK2] Minibrowser : Add stop button to abort page load
        https://bugs.webkit.org/show_bug.cgi?id=136122

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_stop_button_clicked): Callback for stop button press.
        (window_create):

2014-08-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Load the llvmpipe (Mesa) libraries when running the tests with Xvfb.
        https://bugs.webkit.org/show_bug.cgi?id=134070

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Set default _jhbuild_wrapper variable.
        (Port._should_use_jhbuild): Implement generic check.
        * Scripts/webkitpy/port/efl.py: Rename to jhbuild_wrapper variable
        to make it consistent with the other ports.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__): Use the new _should_use_jhbuild() method.
        (GtkPort.setup_environ_for_server): Get the path for llvmpipe_libgl_path by
        querying the jhbuild with printenv. Also check that the path contains
        the libraries we expect. Preload this path only for XvfbDriver.
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver.check_driver): Check for the jhbuild wrapper and use it.
        (XvfbDriver._start): The environment for llvmpipe_libgl_path is now
        configured at setup_environ_for_server()
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver): Get the port default environment.
        (XvfbDriverTest.test_start_no_pixel_tests): The expected log now
        should include the environment that is passed when running Xvfb.
        (XvfbDriverTest.test_start_pixel_tests): Ditto.
        (XvfbDriverTest.test_start_arbitrary_worker_number): Ditto.
        (XvfbDriverTest.test_start_next_worker): Ditto.
        * gtk/jhbuild.modules: Rename checkoutdir to generic "Mesa" to
        prevent future problems when the version is raised. Add also a
        comment with a warning.
        * gtk/jhbuildrc: The path LLVMPIPE_LIBGL_PATH should be the one
        that has the llvm optimized Gallium libGL libraries.

2014-08-21  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Fix countFailures of RunLLINTCLoopTests and Run32bitJSCTests.
        https://bugs.webkit.org/show_bug.cgi?id=136125

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunLLINTCLoopTests.countFailures):
        (Run32bitJSCTests.countFailures):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunLLINTCLoopTestsTest):
        (RunLLINTCLoopTestsTest.assertResults):
        (RunLLINTCLoopTestsTest.test_failures):
        (RunLLINTCLoopTestsTest.test_failure):
        (RunLLINTCLoopTestsTest.test_no_failure):
        (Run32bitJSCTestsTest):
        (Run32bitJSCTestsTest.assertResults):
        (Run32bitJSCTestsTest.test_failures):
        (Run32bitJSCTestsTest.test_failure):
        (Run32bitJSCTestsTest.test_no_failure):

2014-08-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r172814.

        * WebKitTestRunner/config.h: Define WEBCORE_EXPORT.

2014-08-20  Alex Christensen  <achristensen@webkit.org>

        Introducing WEBCORE_EXPORT macro.
        https://bugs.webkit.org/show_bug.cgi?id=136108

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/config.h:
        Added stub definition of WEBCORE_EXPORT defined to nothing to be able to compile with WebCore headers.

2014-08-20  Rebecca Hauck  <rhauck@adobe.com>

        import-w3c-tests doesn't import .svg support files
        https://bugs.webkit.org/show_bug.cgi?id=135928

        Reviewed by Bem Jones-Bey.

        This patch fixes the W3C import script to not treat all
        files with an xml mimetype as convertible tests, which
        was causing SVG support files to not be imported.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests):

2014-08-19  Dan Bernstein  <mitz@apple.com>

        update-webkit should not check for the presence of Apple’s Internal directory
        Last part of https://bugs.webkit.org/show_bug.cgi?id=135815

        Reviewed by Tim Horton.

        * Scripts/update-webkit:

2014-08-19  Zalan Bujtas  <zalan@apple.com>

        Remove ENABLE(SUBPIXEL_LAYOUT).
        https://bugs.webkit.org/show_bug.cgi?id=136077

        Reviewed by Simon Fraser.

        Remove compile time flag SUBPIXEL_LAYOUT. All ports have it enabled for a while now.

        * TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp:

2014-08-19  Akos Kiss  <akiss@inf.u-szeged.hu>

        Let the caller define JSC_timeout for run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=136068

        Reviewed by Csaba Osztrogonác.

        Keep the 60 second timeout for jsc tests as the default setting but
        don't override the value of JSC_timeout if already set.

        * Scripts/run-javascriptcore-tests:

2014-08-19  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Remove obsolete run-javascriptcore-tests result parsing from master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=136039

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunJavaScriptCoreTestsTest.test_no_failure_new_output):
        (RunJavaScriptCoreTestsTest.test_mozilla_failure_old_output):
        (RunJavaScriptCoreTestsTest):
        (RunJavaScriptCoreTestsTest.test_jsc_stress_failure_new_output):
        (RunJavaScriptCoreTestsTest.test_mozilla_failure_new_output): Deleted.
        (test_layout_failure_new_output): Deleted.
        (test_layout_crash_new_output): Deleted.
        (test_mozilla_and_layout_failure_new_output): Deleted.
        (test_jsc_stress_failure_new_output): Deleted.
        (test_js_crashes_and_jsc_stress_failures_new_output): Deleted.

2014-08-19  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard should not request 50 revisions from trac each time
        https://bugs.webkit.org/show_bug.cgi?id=127130

        build.webkit.org/dashboard sometimes fetches a Trac revision in an intermediate state, and never updates later
        https://bugs.webkit.org/show_bug.cgi?id=127131

        Reviewed by Timothy Hatcher.

        Turns out that requesting 50 builds is much slower than requesting by date - even
        if the request ends up returning more than 50 results. There is no way to only
        request updates, but this change brings request time from 6-8 seconds down to
        less than a second.

        This patch generalizes date handling for later use in metrics code. As part of the
        rewrite, I made newly fetched data update author e-mail in previously fetched
        revisions, as it changes after commit queue first lands.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        Updated for event rename. I changed the trac event to not contain the list of new
        commits, as we now sometimes update old commits, and that couldn't be expressed
        in event data. We never used the list anywhere in the first place.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._xmlTimelineURL): Made this function take arbitrary dates. When called
        without arguments, return commits for today and yesterday.
        (Trac.prototype._loaded):
        (Trac.prototype.update): Moved the function for processing loaded results out of
        here for clarity, and also because I'm going to have a separate loading code path
        for metrics.

2014-08-18  Dan Bernstein  <mitz@apple.com>

        Added an update-webkit option to override the ../Internal check.
        Part of https://bugs.webkit.org/show_bug.cgi?id=135815

        Reviewed by Tim Horton.

        * Scripts/update-webkit:
        Added an explicit --internal option to control updating ../Internal, defaulting to whether
        ../Internal exists.
        (runSvnUpdate): Moved to webkitdirs.pm.
        (runGitUpdate): Ditto.
        * Scripts/webkitdirs.pm:
        (runSvnUpdateAndResolveChangeLogs): Moved runSvnUpdate from update-webkit and renamed to this.
        (runGitUpdate): Moved from update-webkit.

2014-08-18  Pratik Solanki  <psolanki@apple.com>

        Make update-webkit more lenient for pure git svn repositories
        https://bugs.webkit.org/show_bug.cgi?id=135805

        Reviewed by Oliver Hunt.

        Make the call to git fetch be non fatal. If you have a pure git svn repository, then the
        call to git fetch will fail and update-webkit will abort. The purpose of r72966 was to
        provide an optimization when you have a git repository setup. We should not fail if the
        git setup does not have svn-remote.svn.fetch set.

        * Scripts/update-webkit:
        (runGitUpdate):

2014-08-18  Simon Fraser  <simon.fraser@apple.com>

        Enable Web Inspector in MiniBrowser WK2 windows
        https://bugs.webkit.org/show_bug.cgi?id=136045

        Reviewed by Tim Horton.
        
        Set the pref to enable developer extras for all WK2 windows.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):

2014-08-18  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        master.cfg should handle special return codes of run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=135974

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTests.getText2):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunAndUploadPerfTestsTest):
        (RunAndUploadPerfTestsTest.assertResults):
        (RunAndUploadPerfTestsTest.test_tests_failed):
        (RunAndUploadPerfTestsTest.test_build_bad_build):
        (RunAndUploadPerfTestsTest.test_build_bad_source_json):
        (RunAndUploadPerfTestsTest.test_build_bad_marge):
        (RunAndUploadPerfTestsTest.test_build_bad_failed_uploading):
        (RunAndUploadPerfTestsTest.test_build_bad_preparation):

2014-08-17  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed change to force rebuild
        (plus drive-by add an accessor I wanted for
        some future tooling).

        * WinLauncher/WinLauncher.h:
        (WinLauncher::webView): Added.

2014-08-16  Mark Hahnenberg  <mhahnenb@gmail.com>

        Update contributors.json for my new email
        https://bugs.webkit.org/show_bug.cgi?id=136021

        Reviewed by Filip Pizlo.

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

2014-08-15  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r172660): WebKit2.TerminateTwice asserts
        https://bugs.webkit.org/show_bug.cgi?id=136012

        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp: Skipped the test in debug mode.

2014-08-15  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix attempt on the CMake based pots since r172665

        * TestWebKitAPI/CMakeLists.txt: Added JavaScriptCore/interpreter to the include list.

2014-08-15  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: rewrite CodeGeneratorInspector to be modular and testable
        https://bugs.webkit.org/show_bug.cgi?id=131596

        Reviewed by Joseph Pecoraro.

        * Scripts/run-inspector-generator-tests: Added.
        (main):
        * Scripts/webkitpy/inspector/__init__.py: Added.
        * Scripts/webkitpy/inspector/main.py: Added.
        (InspectorGeneratorTests):
        (InspectorGeneratorTests.__init__):
        (InspectorGeneratorTests.generate_from_json):
        (InspectorGeneratorTests.write_error_file):
        (InspectorGeneratorTests.detect_changes):
        (InspectorGeneratorTests.run_tests):
        (InspectorGeneratorTests.main):

2014-08-15  Rebecca Hauck  <rhauck@adobe.com>

        run-webkit-tests should skip 'support' directories
        https://bugs.webkit.org/show_bug.cgi?id=135910

        Reviewed by Bem Jones-Bey.
        
        This patch adds the 'support' directory to the list
        of dirs to skip when looking for runnable tests.
        the W3C uses this name for support files, so tests
        imported from the W3C will not work without this change
        or without many edits.

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

2014-08-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Extend auto-version and version-stamp for RC_ProjectBuildVersion
        https://bugs.webkit.org/show_bug.cgi?id=135948
        <rdar://problem/18022221>

        Reviewed by David Kilzer.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Add tests
        for RC_ProjectBuildVersion.

2014-08-05  David Farler  <dfarler@apple.com>

        [iOS] run-webkit-tests runs webkit-build-directory on every test
        https://bugs.webkit.org/show_bug.cgi?id=135409

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.__init__): Cache Mac build directory.
        (IOSSimulatorPort.relay_path): Use cached build directory.
        (IOSSimulatorPort._path_to_image_diff): Use cached build directory.

2014-08-14  Zan Dobersek  <zdobersek@igalia.com>

        Initialize a separate variable (TestWTF_SOURCES) with the list of files
        that are built into the TestWTF executable and move it above the platform-specific
        config file inclusion. This makes it possible to add platform-specific files to that
        list (e.g. GUniquePtr.cpp for the GTK port).

        Rubber-stamped by Carlos Garcia Campos.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:

2014-08-13  Akos Kiss  <akiss@inf.u-szeged.hu>

        [EFL] Bump up and patch dependencies to allow building for aarch64
        https://bugs.webkit.org/show_bug.cgi?id=135885

        Reviewed by Gyuyoung Kim.

        The currently used versions of pixman, libffi, glib, glib-networking,
        and fontconfig fail to configure for aarch64, so they are bumped up to
        the latest stable version.

        Gstreamer-plugins-base configures for aarch64 but incorrectly recogizes
        ARM NEON assembly support, so it is patched with a change that has been
        accepted by upstream.

        * efl/jhbuild.modules:
        * efl/patches/gst-prevent-neon-check-in-configure-from-passing-under-aarch64.patch: Added.

2014-08-13  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/135911> WebKit should build on Yosemite with the public SDK.

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/TextInputController.m: Don't use extern "C" in a non-C++ file.

2014-08-13  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=135819

        Reviewed by Laszlo Gombos.

        * WebKitTestRunner/CMakeLists.txt:
        Added new cpp parameter for the extension of the generated files.

2014-08-13  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Make check-webkit-style run sort-export-file
        https://bugs.webkit.org/show_bug.cgi?id=135877

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/exportfile.py: Added.
        (ExportFileChecker):
        (ExportFileChecker.__init__):
        (ExportFileChecker.check):
        * Scripts/webkitpy/style/checkers/exportfile_unittest.py: Added.
        (handle_style_error):
        (MockErrorHandler):
        (MockErrorHandler.__init__):
        (MockErrorHandler.turn_off_line_filtering):
        (MockErrorHandler.__call__):
        (ExportFileTest):
        (ExportFileTest.setUp):
        (ExportFileTest.tearDown):
        (ExportFileTest.test_sorted):
        (ExportFileTest.test_non_sorted):
        (ExportFileTest.test_parse_error):

2014-08-13  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Sets the persistent storage for cookies in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=135875

        Reviewed by Gyuyoung Kim.

        In case of EWK_COOKIE_ACCEPT_POLICY_ALWAYS, sets the persistent storage
        for non-session cookies can be stored persistently.

        * MiniBrowser/efl/main.c:
        (elm_main):

2014-08-12  Daniel Bates  <dabates@apple.com>

        [iOS] build-webkit should not build WebKitSystemInterface and WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=135845

        Reviewed by Andy Estes.

        Towards building the iOS WebKit port using the public SDK, remove the logic
        added to build-webkit to build projects WebKitSystemInterface and
        WebKitAdditions when building the iOS WebKit port.

        * Scripts/build-webkit:

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

        [GTK] Adds dependency for GnuTLS 3.0+ explicitly in gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=135850

        Reviewed by Philippe Normand.

        After r172433, GTK port requires GnuTLS 3.0+. In this time, libgnutls-dev is 2.x in
        Ubuntu(trusty) and Debian(sid). So added libgnutls28-dev explicitly.

        * gtk/install-dependencies:

2014-08-12  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Subtle-crypto feature off by default and add a new configure flag to enable it
        https://bugs.webkit.org/show_bug.cgi?id=135798

        Reviewed by Philippe Normand.

        * Scripts/webkitperl/FeatureList.pm: Adds new flag --subtle-crypto to
            toggle SUBTLE_CRYPTO feature.

2014-08-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Disable ecore logs about bad fd
        https://bugs.webkit.org/show_bug.cgi?id=135831

        Reviewed by Gyuyoung Kim.

        ecore checks EBADF and prints the warnings.
        But, it looks noise in layout test because it's not webkit issue.
        This patch disables it until we found right solution.

        * efl/jhbuild.modules:
        * efl/patches/ecore_remove_warnings.patch: Added.

2014-08-12  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Minibrowser: Enhance the application to use download directory selector.
        https://bugs.webkit.org/show_bug.cgi?id=135791

        Reviewed by Gyuyoung Kim.

        Currently Minibrowser stores the downloaded files to /tmp directory, add support so that destination folder can be selected by the
        user.

        * MiniBrowser/efl/main.c:
        (on_download_request):

2014-08-11  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Prevent the client from creating ewk_view when EWebkit is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=135606

        Reviewed by Gyuyoung Kim.

        TestWebKitAPI does not initialize EWebkit using ewk_init()
        which is not recommended.

        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::createEcoreEvas):
        Renamed from initEcoreEvas() since it doesn't not initialize
        ecore evas.

        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        Call ewk_init() that initalizes all EFL modules needed by EWebKit
        instead of ecore_evas_init() only.

        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        Call ewk_shutdown() to finalize EWebkit.
        (TestWebKitAPI::initEcoreEvas): Deleted.

2014-08-11  Dan Bernstein  <mitz@apple.com>

        Added an update-webkit option to update the auxiliary libraries or not.
        Part of https://bugs.webkit.org/show_bug.cgi?id=135815

        Reviewed by Tim Horton.

        * Scripts/update-webkit: Added --[no-]auxiliary-libs option, which defaults to yes unless
        an Internal directory exists alongside the WebKit root directory.

2014-08-11  Bem Jones-Bey  <bjonesbe@adobe.com>

        Remove hg changeset from w3c-import.log
        https://bugs.webkit.org/show_bug.cgi?id=135735

        Reviewed by Ryosuke Niwa.

        Since the csswg's test suite is now accessible via github and it is
        possible to push changes by creating github pull requests, the hg
        changeset makes less sense, as many people will just use a clone of
        the git repo. There isn't an obvious thing to replace it with, so
        might as well remove it for now instead of having it just be set to
        UNKNOWN in imports.

        This also adds a pointer to the github repo in the generated comments
        in the w3c-import.log.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__): Remove changeset handling.
        (TestImporter.do_import): Ditto.
        (TestImporter.write_import_log): Ditto.
        (TestImporter.load_changeset): Deleted.

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

        Unreviewed. Fix GTK+ make distcheck.

        * gtk/manifest.txt: Remove Source/WebCore/Resources/inputSpeech.png.

2014-08-08  Simon Fraser  <simon.fraser@apple.com>

        Unbreak webkitpy unit tests by checking for the existence of the image diff template
        file before trying to open it (as the tests do for results.html).

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.write_image_diff_files):

2014-08-08  Simon Fraser  <simon.fraser@apple.com>

        Load the layout test result image diff HTML from a file, rather than having it inline in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=135780

        Reviewed by Dan Bates.
        
        Pull the HTML for the image diff file into a separate file, for easier hackability.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.write_image_diff_files):

2014-08-08  Mark Lam  <mark.lam@apple.com>

        Gardening: fix Windows build after r172259.

        Not reviewed.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::addMockSpeechInputResult): Deleted.
        (TestRunner::setMockSpeechInputDumpRect): Deleted.
        (TestRunner::startSpeechInput): Deleted.

2014-08-08  Joseph Pecoraro  <pecoraro@apple.com>

        make clean does not work in OpenSource, fails in WebKitLibraries
        https://bugs.webkit.org/show_bug.cgi?id=135734

        Reviewed by David Kilzer.

        * Scripts/copy-webkitlibraries-to-product-directory:
        Add a --clean switch that removes possible WebKitSystemInterface
        and LLVM libraries and headers that may have been copied to the
        product directory.

2014-08-08  Joseph Pecoraro  <pecoraro@apple.com>

        commit-log-message has extra blank line at the top of pre-populated message
        https://bugs.webkit.org/show_bug.cgi?id=135744

        Reviewed by Csaba Osztrogonác.

        Do not add a blank leading line in single ChangeLog commit messages.

        * Scripts/commit-log-editor:
        (createCommitMessage):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (test_commit_message_for_one_reviewed_changelog):
        (test_commit_message_for_one_rollout_changelog):

2014-08-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        Have 'Assemble Build Logs' step work properly for DebugSuffix target
        (both 32-bit and 64-bit).

        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:

2014-08-07  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of INPUT_SPEECH
        https://bugs.webkit.org/show_bug.cgi?id=135672

        Reviewed by Andreas Kling.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (addMockSpeechInputResultCallback): Deleted.
        (setMockSpeechInputDumpRectCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addMockSpeechInputResult): Deleted.
        (TestRunner::setMockSpeechInputDumpRect): Deleted.
        (TestRunner::startSpeechInput): Deleted.

2014-08-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        The support directory shouldn't be skipped unconditionally in test import
        https://bugs.webkit.org/show_bug.cgi?id=135660

        Reviewed by Ryosuke Niwa.

        The 'DIRS_TO_SKIP' should only be skipped when in the root directory
        of the test repo, as that's the only time they are special. In
        addition, instead of hardcoding .hg and .git as special, skip all
        directories that begin with '.', just like with files that begin with '.'.
        
        In order to make this work, the root directory must always be
        passed in, so the interface to the script has been changed to take the
        root directory, and if one wants to only import a subset of the tests,
        a new -t option can be used to limit the tests imported.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main): Remove repo_dir command line argument.
        (parse_args): Add -t option and set expected non-option args to 1.
        (TestImporter.__init__): Remove repo_dir.
        (TestImporter.do_import): Handle the varying number of import
            directories.
        (TestImporter.should_keep_subdir): Helper for find_importable_tests to
            determine if a subdirectory should be skipped.
        (TestImporter.find_importable_tests): Filter directories using new
            helper.
        (TestImporter.import_tests): Remove use of repo_dir.
        (TestImporter.setup_destination_directory): Unused, Deleted. 
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg): Update for
            new API.
        (TestImporterTest.test_import_dir_with_no_tests): Ditto.

2014-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use WebKitNavigationAction also for WebKitNavigationPolicyDecision
        https://bugs.webkit.org/show_bug.cgi?id=135695

        Reviewed by Gustavo Noronha Silva.

        Use WebKitNavigationAction API.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp:
        (testNavigationPolicy):

2014-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitUserContentManager/injected-script fails
        https://bugs.webkit.org/show_bug.cgi?id=135696

        Reviewed by Sergio Villar Senin.

        Don't assume the JavaScript result is always a valid pointer. In case of JavaScript
        exception (that happens when testing the script hasn't been injected) the JavaScript
        result is NULL.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        (isScriptInjectedForURLAtPath):

2014-08-07  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Disable IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=135692

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm:

2014-08-06  Dean Jackson  <dino@apple.com>

        ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED is not used anywhere. Remove it.
        https://bugs.webkit.org/show_bug.cgi?id=135675

        Reviewed by Sam Weinig.

        * Scripts/webkitperl/FeatureList.pm:

2014-08-06  David Farler  <dfarler@apple.com>

        Set DSYMUTIL_NUM_THREADS to the number of logical cores
        https://bugs.webkit.org/show_bug.cgi?id=135655

        Reviewed by Mark Rowe.

        * Scripts/webkitdirs.pm:
        (buildXCodeProject): Set before calling xcodebuild.

2014-08-06  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Add support for user scripts to WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=134738

        Reviewed by Carlos Garcia Campos.

        Add support for user scripts, to complement the user style sheet
        support already present in WebKitUserContentManager. Most of the
        moving parts are already present, so this just adds a boxed type
        for user scripts (WebKitUserScript) and the corresponding methods
        to add and remove scripts from the WebKitUserContentManager.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
        Add test case for injected user scripts.
        (isScriptInjectedForURLAtPath):
        (removeOldInjectedContentAndResetLists):
        (testUserContentManagerInjectedStyleSheet):
        (testUserContentManagerInjectedScript):
        (beforeAll):
        (removeOldInjectedStyleSheetsAndResetLists): Deleted.

2014-08-06  Philippe Normand  <pnormand@igalia.com>

        [GTK] run-launcher --gtk still fails
        https://bugs.webkit.org/show_bug.cgi?id=135642

        Reviewed by Carlos Garcia Campos.

        The perl interpreter is confused by the combination of string
        concatenation and a ternary in the same line. Using a separate
        variable to determine the library file extension fixes this issue.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Use an intermediate variable, it's more
        readable and unambiguous.

2014-07-29  Filip Pizlo  <fpizlo@apple.com>

        Merge r170564, r170571, r170604, r170628, r170672, r170680, r170724, r170728, r170729, r170819, r170821, r170836, r170855, r170860, r170890, r170907, r170929, r171052, r171106, r171152, r171153, r171214 from ftlopt.

    2014-06-25  Filip Pizlo  <fpizlo@apple.com>
    
            [ftlopt] If a CodeBlock is jettisoned due to a watchpoint then it should be possible to figure out something about that watchpoint
            https://bugs.webkit.org/show_bug.cgi?id=134333
    
            Reviewed by Geoffrey Garen.
    
            * Scripts/display-profiler-output:
    
2014-08-05  David Farler  <dfarler@apple.com>

        [iOS] Run ImageDiff in the sim bootstrap
        https://bugs.webkit.org/show_bug.cgi?id=135624

        Reviewed by David Kilzer.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.stop):
        (IOSSimulatorImageDiffer):
        (IOSSimulatorImageDiffer._start):
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.diff_image):

2014-08-05  David Farler  <dfarler@apple.com>

        [iOS] run-webkit-tests: defaults for --runtime and --device-type flags
        https://bugs.webkit.org/show_bug.cgi?id=135441

        Reviewed by Tim Horton.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (_set_up_derived_options):
        If using the ios-simulator platform and runtime or device-type
        aren't defined, get the latest runtime from the active Xcode.app
        and pick a default device type based on the desired architecture:
        iPhone 5 for i386 and iPhone 5s for x86_64.
        * Scripts/webkitpy/xcode/__init__.py: Added.
        * Scripts/webkitpy/xcode/simulator.py: Added.

2014-08-05  David Farler  <dfarler@apple.com>

        [iOS] simctl can hang if run quickly after shutting down CoreSimulator services
        https://bugs.webkit.org/show_bug.cgi?id=135626

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run):
        Remove call to simctl shutdown <device> - telling the simulator app to quit
        will shut down all booted devices.

2014-08-05  Alexey Proskuryakov  <ap@apple.com>

        Remove an unused argument from BuildbotQueue.update()
        https://bugs.webkit.org/show_bug.cgi?id=135623

        Reviewed by Timothy Hatcher.

        Also remaned a constant to better match what it means.

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

2014-08-05  Vivek Galatage  <vivek.vg@samsung.com>

        [gtk] Include llvm-dev(el) package to satisfy mesa build configuration
        https://bugs.webkit.org/show_bug.cgi?id=135555

        Reviewed by Philippe Normand.

        Initial setup of gtk on linux requires this package to be installed.
        This is required during the build configuration of mesa through jhbuild.

        * gtk/install-dependencies:

2014-08-05  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix the commit-log-editor after r167243 and add more unit tests
        https://bugs.webkit.org/show_bug.cgi?id=131727

        Reviewed by Csaba Osztrogonác.

        * Scripts/commit-log-editor:
        (createCommitMessage):
        (removeLongestCommonPrefixEndingInNewline):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest):
        (CommitMessageForThisCommitTest.mock_changelog):
        (CommitMessageForThisCommitTest.mock_checkout_for_test):
        (CommitMessageForThisCommitTest.test_commit_message_for_unreviewed_changelogs_with_different_messages):
        (test_commit_message_for_one_reviewed_changelog):
        (test_commit_message_for_changelogs_with_same_messages):
        (test_commit_message_for_changelogs_with_different_messages):
        (test_commit_message_for_one_rollout_changelog):
        (test_commit_message_for_rollout_changelogs_with_different_directories):
        (setUp): Deleted.
        (test_commit_message_for_this_commit): Deleted.

2014-08-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] run-launcher --gtk is broken
        https://bugs.webkit.org/show_bug.cgi?id=135571

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Search for libwebkit2gtk-4.0

2014-08-04  Matt Baker  <mattbaker@apple.com>

        lldb_webkit.py throws exception when generating summary of null StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=129448

        Reviewed by Jer Noble.

        Added checks for null StringImpl and 0 byte ReadMemory calls.

        * lldb/lldb_webkit.py:
        (WTFStringImpl_SummaryProvider):
        (ustring_to_string):
        (lstring_to_string):
        (WTFStringImplProvider.to_string):
        (WTFStringImplProvider.is_initialized):

2014-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not include JavaScriptCore stress tests in release tarballs
        https://bugs.webkit.org/show_bug.cgi?id=135503

        Reviewed by Martin Robinson.

        * gtk/manifest.txt: Exclude Source/JavaScriptCore/tests dir.

2014-07-30  David Farler  <dfarler@apple.com>

        build-webkittestrunner doesn't build the app target for iOS SDKs
        https://bugs.webkit.org/show_bug.cgi?id=135433

        Reviewed by Dan Bernstein.

        * Scripts/build-dumprendertree: Build the app target on iOS.
        * Scripts/build-webkittestrunner: Build the app target on iOS.
        * Scripts/webkitdirs.pm: Add -sdk flags when building for iOS.
        (buildXCodeProject):
        * Scripts/webkitpy/port/ios.py: Use --sdk flags instead of SDKROOT.
        (IOSSimulatorPort._build_driver_flags):

2014-07-30  David Farler  <dfarler@apple.com>

        Remove iOS Perl DumpRenderTree support target
        https://bugs.webkit.org/show_bug.cgi?id=135271

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Remove the target.
        * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport.c: Removed.
        * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Removed.
        * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Changes: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/IPhoneSimulatorNotification.xs: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/MANIFEST: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/README: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/ppport.h: Removed.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/t/IPhoneSimulatorNotification.t: Removed.
        * DumpRenderTree/ios/PerlSupport/Makefile: Removed.

2014-07-30  David Farler  <dfarler@apple.com>

        Remove old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=135374

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests: Removed.

2014-08-02  Dan Bernstein  <mitz@apple.com>

        prepare-ChangeLog --no-write shouldn’t require ChangeLog to exist
        https://bugs.webkit.org/show_bug.cgi?id=135542

        Reviewed by Tim Horton.

        * Scripts/prepare-ChangeLog:
        (main): Pass $writeChangeLogs for the new requireChangeLogToExist parameter of
        findChangeLogs.
        (findChangeLogs): Don’t require a ChangeLog file to exist if unless the
        requireChangeLogToExist argument is true.

2014-08-01  Dan Bernstein  <mitz@apple.com>

        commit-log-editor uses a non-standard message format when git index contains no ChangeLog changes
        https://bugs.webkit.org/show_bug.cgi?id=135527

        Reviewed by Tim Horton.

        * Scripts/commit-log-editor:
        In the case of a git repository when there are no changed ChangeLog files, changed to pass
        the --delimiters option to prepare-ChangeLog, then process each entry in the output using
        commitMessageFromChangeLogEntry.
        (commitMessageFromChangeLogEntry): Factored out from createCommitMessage.
        (sortKey): Factored out from createCommitMessage.
        (createCommitMessage): Changed to use new sortKey and commitMessageFromChangeLogEntry
        subroutines.

        * Scripts/prepare-ChangeLog:
        (main): Parse new --delimiters option.
        (generateNewChangeLogs): When --no-write and --delimiters are both specified, always print
        the label before each change log entry, and a "~" delimiter on a new line after each entry.

2014-08-01  Bear Travis  <betravis@adobe.com>

        [Feature Queries] Enable Feature Queries on EFL/GTK
        https://bugs.webkit.org/show_bug.cgi?id=134902

        Reviewed by Benjamin Poulain.

        Turn the feature on by default for the build script.

        * Scripts/webkitperl/FeatureList.pm:

2014-08-01  Timothy Horton  <timothy_horton@apple.com>

        Build fix for 32-bit after r171926.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:

2014-08-01  Tim Horton  <timothy_horton@apple.com>

        Confusing build fix after r171926.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/SettingsController.m:

2014-08-01  Tim Horton  <timothy_horton@apple.com>

        Make it easer to add switches to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=135499

        Reviewed by Simon Fraser.

        Add a single class to manage a set of persistent, global settings for MiniBrowser.
        Add a new menu that contains items to toggle the aforementioned settings (moving them out of the Debug menu).

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        Add SettingsController.{m, h}.

        * MiniBrowser/mac/AppDelegate.h:
        Move _browserWindowControllers to the implementation.
        Get rid of toggleUseWebKit2ByDefault, because SettingsController now takes care
        of that; instead, we'll receive didChangeSettings.

        * MiniBrowser/mac/AppDelegate.m:
        Move the default URL, default URL preference key, and use-WebKit2-by-default
        preference key into SettingsController.

        (-[BrowserAppDelegate awakeFromNib]):
        Add the dynamically-generated SettingsController menu just to the left of the Debug menu.

        (-[BrowserAppDelegate newWindow:]):
        Ask SettingsController if we should use WebKit2 by default, and what the initial URL to load is.

        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        SettingsController now takes care of reading the default URL preference.
        WK1BrowserWindowController now takes care of enabling the developer extras, via WebPreferences.

        (-[BrowserAppDelegate didChangeSettings]):
        When settings change, update the key equivalents for the new-window menu items, as they
        might have changed (as use-WebKit2-by-default is one of the settings).

        Dispatch settings change notifications to all live BrowserControllers.

        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        (-[BrowserAppDelegate toggleUseWebKit2ByDefault:]): Deleted.
        (-[BrowserAppDelegate _useWebKit2ByDefault]): Deleted.
        (-[BrowserAppDelegate validateMenuItem:]): Deleted.
        All menu item validation for settings is moved into SettingsController.

        * MiniBrowser/mac/BrowserWindowController.h:
        Simplify the BrowserWindowController interface; "toggling" settings will happen inside SettingsController,
        the BrowserWindowController subclasses will be able to a) know when any setting changes, b) query the current setting state.

        * MiniBrowser/mac/MainMenu.xib:
        Remove the settings menu items from the "Debug" menu.

        * MiniBrowser/mac/SettingsController.h: Added.
        * MiniBrowser/mac/SettingsController.m: Added.
        (+[SettingsController shared]):
        (-[SettingsController menu]):

        (-[SettingsController _addItemWithTitle:action:indented:]):
        (-[SettingsController _addHeaderWithTitle:]):
        NSMenuItem-creating helpers.

        (-[SettingsController _populateMenu]):
        Build the menu. Ideally this and the validation step would eventually be made more dynamic.

        (-[SettingsController validateMenuItem:]):
        Validate menu items; since they can be used to toggle the default state of a setting,
        we'll always return YES. However, we will use this opportunity to set the 'checked' state
        of each item.


        (-[SettingsController _toggleBooleanDefault:]):
        Toggle the given boolean default, and notify BrowserAppDelegate that something changed.

        (-[SettingsController toggleUseWebKit2ByDefault:]):
        (-[SettingsController useWebKit2ByDefault]):
        (-[SettingsController toggleUseTransparentWindows:]):
        (-[SettingsController useTransparentWindows]):
        (-[SettingsController toggleUsePaginatedMode:]):
        (-[SettingsController usePaginatedMode]):
        (-[SettingsController toggleUseUISideCompositing:]):
        (-[SettingsController useUISideCompositing]):
        (-[SettingsController toggleShowLayerBorders:]):
        (-[SettingsController layerBordersVisible]):
        (-[SettingsController toggleShowTiledScrollingIndicator:]):
        (-[SettingsController tiledScrollingIndicatorVisible]):
        (-[SettingsController toggleEnableSubPixelCSSOMMetrics:]):
        (-[SettingsController subPixelCSSOMMetricsEnabled]):
        (-[SettingsController defaultURL]):
        Toggle or return the current state of each preference.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController windowWillClose:]):
        (-[WK1BrowserWindowController find:]):
        (-[WK1BrowserWindowController dumpSourceToConsole:]):
        (-[WK1BrowserWindowController didChangeSettings]):
        (-[WK1BrowserWindowController webView:didReceiveTitle:forFrame:]):
        (-[WK1BrowserWindowController isPaginated]): Deleted.
        (-[WK1BrowserWindowController togglePaginationMode:]): Deleted.
        (-[WK1BrowserWindowController toggleTransparentWindow:]): Deleted.
        (-[WK1BrowserWindowController isSubpixelCSSOMElementMetricsEnabled]): Deleted.
        (-[WK1BrowserWindowController toggleSubpixelCSSOMElementMetricsEnabled:]): Deleted.
        (-[WK1BrowserWindowController layerBordersVisible]): Deleted.
        (-[WK1BrowserWindowController toggleLayerBordersVisibility:]): Deleted.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController forceRepaint:]):
        (-[WK2BrowserWindowController windowWillClose:]):
        (-[WK2BrowserWindowController didChangeSettings]):
        (-[WK2BrowserWindowController isPaginated]): Deleted.
        (-[WK2BrowserWindowController togglePaginationMode:]): Deleted.
        (-[WK2BrowserWindowController toggleTransparentWindow:]): Deleted.
        (-[WK2BrowserWindowController isUISideCompositingEnabled]): Deleted.
        (-[WK2BrowserWindowController toggleUISideCompositing:]): Deleted.
        (-[WK2BrowserWindowController layerBordersVisible]): Deleted.
        (-[WK2BrowserWindowController toggleLayerBordersVisibility:]): Deleted.
        (-[WK2BrowserWindowController tiledScrollingIndicatorVisible]): Deleted.
        (-[WK2BrowserWindowController toggleTiledScrollingIndicatorVisibility:]): Deleted.

2014-08-01  Tim Horton  <timothy_horton@apple.com>

        MiniBrowser doesn't support data URLs
        https://bugs.webkit.org/show_bug.cgi?id=135492

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController addProtocolIfNecessary:]):
        Don't add http:// to data: URLs.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        (-[WK2BrowserWindowController updateTextFieldFromURL:]):
        Percent-escape the contents of the address field before trying to make a URL.
        Percent-unescape the URL when displaying it in the address field.
        This is not great, but trivial and good-enough-for-Minibrowser.

2014-07-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] MiniBrower comes to crash when combo box is pressed
        https://bugs.webkit.org/show_bug.cgi?id=135378

        Reviewed by Gyuyoung Kim.

        "clicked" signal of elm_menu is emitted after EwkView calls popup_menu_hide
        and removes Ewk_Popup_Menu instance.

        * MiniBrowser/efl/main.c:
        (on_popup_menu_show):
        (on_popup_menu_discarded): Deleted.

2014-07-31  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use RC_PROJECTBUILDVERSION as build portion of version
        https://bugs.webkit.org/show_bug.cgi?id=135478

        Reviewed by David Kilzer.

        Add new test suite for the version-stamp program.

        * Scripts/webkitperl/auto-version_unittest/versionStampTests.pl: Added.

2014-07-31  Dan Bernstein  <mitz@apple.com>

        Reverted r171893, because it broke http/tests/appcache/different-https-origin-resource-main.html,
        which loads HTTPS content without calling the delegate.

        Rubber-stamped by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2014-07-31  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed typo correction (and build fix).

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]): Use correct
        property name (_fullScreenIsEnabled -> _fullScreenEnabled)

2014-07-31  Brent Fulgham  <bfulgham@apple.com>

        MiniBrowser Should Support Fullscreen Videos in WebKit2 Mode
        https://bugs.webkit.org/show_bug.cgi?id=135482

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]): Activate the Fullscreen
        feature.

2014-07-31  Alexey Proskuryakov  <ap@apple.com>

        [Mac, iOS] Remove -setAllowsAnyHTTPSCertificate calls
        https://bugs.webkit.org/show_bug.cgi?id=135472

        Reviewed by Dan Bernstein.

        We now handle server trust challenges, and don't need such hacks.

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2014-07-31  Alexey Proskuryakov  <ap@apple.com>

        media/track/add-and-remove-track.html and media/media-fragments/TC0001.html are flaky
        on Mac WK2 EWS, asserting under TestRunner::removeAllWebNotificationPermissions
        https://bugs.webkit.org/show_bug.cgi?id=135418

        Reviewed by Anders Carlsson.

        This was only happening in shared web process mode, because WKBundlePostMessage
        has different behavior then. When there is no process, the message is dropped on
        the floor in multiple process mode, but it's stored to be delivered after launch
        in shared process mode.

        So, calling resetStateToConsistentValues() resulted in storing a Reset bundle message
        that was delivered immediately after launch, when there was nothing to reset.

        We don't actually need to reset anything at this point, as the previous call has
        already reset everything UI process side, and web process is brand new. All we need
        is to reattach the page to a process, as invoke() expects one to exist.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::reattachPageToWebProcess):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::invoke):

2014-07-31  Dan Bernstein  <mitz@apple.com>

        [WK2] Regression tests can't load HTTPS pages with NetworkProcess due to self-signed certificate
        https://bugs.webkit.org/show_bug.cgi?id=115282

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::canAuthenticateAgainstProtectionSpaceInFrame): Return true for any
        local host server trust protection space.
        (WTR::TestController::didReceiveAuthenticationChallengeInFrame): Respond with a non-empty
        credential to server trust challenges.

2014-07-31  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [webkitpy] Make diff_text generate correct diff if there is no newline at the end of file
        https://bugs.webkit.org/show_bug.cgi?id=135381

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/port/base.py:
        (Port.diff_text):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_diff_text):

2014-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ make distcheck.

        * gtk/make-dist.py:
        (ensure_version_if_possible): Use 4.0 instead of 3.0 as binary
        version to find the pkg-config file.
        * gtk/manifest.txt: Add missing resource to the tarball.

2014-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] make distcheck is building from sources dir instead of dist dir
        https://bugs.webkit.org/show_bug.cgi?id=135457

        Reviewed by Philippe Normand.

        * gtk/make-dist.py:
        (Distcheck.configure): Use dist_dir as source dir.
        (Distcheck.check): Pass dist_dir to configure().

2014-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not include files that are not in git in the tarball
        https://bugs.webkit.org/show_bug.cgi?id=134804

        Reviewed by Philippe Normand.

        Skip all files in the source tree that are not under version control
        except for files added from the build dir like the documentation.

        * gtk/make-dist.py:
        (Directory.__init__): Initialize the list of files under control version.
        (Directory.list_cms_files): Helper function to list all files
        under the control version for the current source root.
        (Directory.should_skip_file): Return True for files that are not
        under control version only when the source root is also under
        control version.
        (Directory.get_files): Filter the files also using should_skip_file().

2014-07-29  David Farler  <dfarler@apple.com>

        iOS Simulator LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=135269

        Reviewed by David Kilzer.

        * LayoutTestRelay/Configurations/Base.xcconfig: Added.
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig: Added.
        * LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj: Added.
        * LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h: Added.
        * LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m: Added.
        (-[LTPipeRelay inPipePath]):
        (-[LTPipeRelay outPipePath]):
        (-[LTPipeRelay errorPipePath]):
        (-[LTPipeRelay outputStream]):
        (-[LTPipeRelay initWithPrefix:]):
        (-[LTPipeRelay setup]):
        (-[LTPipeRelay tearDown]):
        (-[LTPipeRelay connect]):
        (-[LTPipeRelay disconnect]):
        (-[LTPipeRelay createFIFOs]):
        (-[LTPipeRelay destroyFIFOs]):
        (-[LTPipeRelay relayStream:]):
        (-[LTPipeRelay stream:handleEvent:]):
        * LayoutTestRelay/LayoutTestRelay/LTRelay.h: Added.
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.h: Added.
        * LayoutTestRelay/LayoutTestRelay/LTRelayController.m: Added.
        (-[LTRelayController uniqueAppPath]):
        (-[LTRelayController uniqueAppURL]):
        (-[LTRelayController uniqueAppIdentifier]):
        (-[LTRelayController processName]):
        (-[LTRelayController initWithDevice:productDir:appPath:identifierSuffix:dumpToolArguments:]):
        (-[LTRelayController readFileHandle:]):
        (-[LTRelayController receivedStandardOutputData:]):
        (-[LTRelayController receivedStandardErrorData:]):
        (-[LTRelayController disconnected]):
        (-[LTRelayController connected]):
        (-[LTRelayController crashWithMessage:]):
        (-[LTRelayController launchSimulator]):
        (-[LTRelayController bootDevice]):
        (-[LTRelayController createUniqueApp]):
        (-[LTRelayController killApp]):
        (-[LTRelayController launchApp]):
        (-[LTRelayController start]):
        * LayoutTestRelay/LayoutTestRelay/main.m: Added.
        (usage):
        (getTestingSimDevice):
        (getRequiredStringArgument):
        (getRemainderArguments):
        (main):
        * LayoutTestRelay/Makefile: Added.
        * Tools/Scripts/build-layouttestrelay: Added.

2014-07-29  Brent Fulgham  <bfulgham@apple.com>

        [Win] Modify version numbering scheme to support 5-tuple versions
        https://bugs.webkit.org/show_bug.cgi?id=135400
        <rdar://problem/17849033>

        Reviewed by David Kilzer.

        Update test cases to recognize that we can only support Major
        values from 0-65535, Minor values from 0-64, Tiny values from 0-999,
        Micro values from 0-64, and Nano values from 0-999.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Update
        test expectations for physical limits.

2014-07-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GLib tests fail with recent GTK+ due to runtime warning about deprecated properties
        https://bugs.webkit.org/show_bug.cgi?id=135411

        Reviewed by Sergio Villar Senin.

        Recent versions of GTK+ now warn at runtime when a deprecated
        property or signal is used. A diagnostic mode was added that is
        enabled by default, but that can be disabled by setting
        G_ENABLE_DIAGNOSTIC=0. Runtime warnings are considered test
        failures by gtester, so we need to run the tests with the
        diganostic mode disabled.

        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.cpp:
        (main):

2014-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKitCertificateInfo from WebKit2GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=134830

        Reviewed by Gustavo Noronha Silva.

        Update the SSL test for the API changes.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testLoadFailedWithTLSErrors):

2014-07-24  David Farler  <dfarler@apple.com>

        Add knowledge of the iOS Simulator to webkitpy
        http://bugs.webkit.org/show_bug.cgi?id=133963

        Reviewed by Simon Fraser.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Add --ios-sim*
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        --runtime and --device-type args added.
        * Scripts/webkitpy/port/base.py:
        * Scripts/webkitpy/port/driver.py: Add simulator driver.
        (IOSSimulatorDriver): Added.
        * Scripts/webkitpy/port/factory.py: Add simulator platform.
        * Scripts/webkitpy/port/ios.py: Added.

2014-07-29  Alexey Proskuryakov  <ap@apple.com>

        fast/borders/border-radius-on-subpixel-position-non-hidpi.html fails on Retina machines
        https://bugs.webkit.org/show_bug.cgi?id=135398

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::updateWindowScaleForTest):
        "hidpi-" should be at the start. This allows "hidpi-" in both file and directory names.

        * DumpRenderTree/mac/DumpRenderTree.mm: (changeWindowScaleIfNeeded): Same fix.
        For some reason, I wasn't seeing this test fail on WK1 even without the fix, not
        sure why.

2014-07-29  Alexey Proskuryakov  <ap@apple.com>

        PPT: run-webkit-tests doesn't upload crash logs to bots
        https://bugs.webkit.org/show_bug.cgi?id=135391

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::processDidCrash):
        Not a fix to be proud of, but better than not having it work at all.

2014-07-29  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Remove WebKitWebViewGroup from WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=133729

        Reviewed by Carlos Garcia Campos.

        Removes WebKitWebViewGroup, effectively reverting the changes
        introduced by r149117. The motivation for WebKitWebViewGroup
        was using the user style sheet injection API, which has been
        moved into WebKitUserContentManager, rendering it unneeded.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Remove tests
        for WebKitWebViewGroup.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewSettings):
        Restore the assertions that check that settings objects are
        released. Add test for webkit_web_view_new_with_settings().
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp: Removed.

2014-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Implement webkit_web_view_load_string() in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=134735

        Reviewed by Sergio Villar Senin.

        Add /webkit2/WebKitWebView/load-bytes test case and simplify
        TestDOMXPathNSResolver by using webkit_web_view_load_bytes()
        instead of a soup server just to sent the Content-type header.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMXPathNSResolver.cpp:
        (testWebKitDOMXPathNSResolverNative):
        (testWebKitDOMXPathNSResolverCustom):
        (beforeAll):
        (afterAll):
        (serverCallback): Deleted.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testLoadBytes):
        (beforeAll):
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (LoadTrackingTest::loadBytes):
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::loadBytes):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2014-07-28  Daniel Bates  <dabates@apple.com>

        Add support for running the Clang static analyzer when building WebKit and JSC
        https://bugs.webkit.org/show_bug.cgi?id=134955

        Reviewed by Brent Fulgham.

        * Scripts/build-jsc: Added command line options -[no]-analyze (disabled by default).
        * Scripts/build-webkit: Add --analyze command line option to build-webkit to enable
        running the Clang static analyzer.
        * Scripts/webkitdirs.pm:
        (XcodeStaticAnalyzerOption): Added.

2014-07-24  David Farler  <dfarler@apple.com>

        Allow for multiple DumpRenderTree and WebKitTestRunner instances in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=135272

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Remove hard-coding of FIFO paths.
        (-[DumpRenderTree applicationDidEnterBackground:]): Create background task.
        (DumpRenderTreeMain): Set DumpRenderTree as UIApplication delegate.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: bgTask ivar.
        * Scripts/old-run-webkit-tests: Update FIFO paths for ORWT.
        * WebKitTestRunner/TestController.cpp: Remove hard-coding of FIFO paths.
        * WebKitTestRunner/ios/TestControllerIOS.mm: Move dup2 calls to platformInitialize
        * WebKitTestRunner/ios/mainIOS.mm: bgTask ivar.
        (-[WebKitTestRunnerApp applicationDidEnterBackground:]): Create background task.
        (main): Set WebKitTestRunnerApp as UIApplication delegate.

2014-07-24  David Farler  <dfarler@apple.com>

        ImageDiff builds for the simulator when running iOS layout tests
        https://bugs.webkit.org/show_bug.cgi?id=135270

        Reviewed by Simon Fraser.

        * Scripts/build-imagediff: Added.

2014-07-28  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Followup fix after r171594
        https://bugs.webkit.org/show_bug.cgi?id=135048

        Reviewed by Csaba Osztrogonác.

        * Scripts/sort-export-file: Removed extra newlines from help.

2014-07-25  Anders Carlsson  <andersca@apple.com>

        WKNavigation's properties are either always nil or don't behave as documented
        https://bugs.webkit.org/show_bug.cgi?id=135267
        <rdar://problem/17730536>

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webView:didStartProvisionalNavigation:]):
        (TEST):
        (-[DidFailProvisionalNavigationDelegate webView:didStartProvisionalNavigation:]):
        (-[DidFailProvisionalNavigationDelegate webView:didFailProvisionalNavigation:withError:]):

2014-07-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] install-dependencies needs to install perl-CGI on Fedora
        https://bugs.webkit.org/show_bug.cgi?id=135302

        Reviewed by Martin Robinson.

        * gtk/install-dependencies:
        Add perl-CGI to yum dependencies needed for tests

2014-07-25  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Add --dry-run option to sort-export-file
        https://bugs.webkit.org/show_bug.cgi?id=135048

        Reviewed by Csaba Osztrogonác.

        Added --dry-run option to sort-export-file. Running the script with --dry-run
        option does not sort the export files but creates a list of the files that
        need to be sorted.

        * Scripts/sort-export-file:
        (sawError):

2014-07-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        GTK jhbuild modules needs to build xserver with --disable-local-transport
        https://bugs.webkit.org/show_bug.cgi?id=135262

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules:
        Build X server with --disable-local-transport, since local transport
        is only supported on Solaris, SCO, and System V. Fixes build on
        Fedora.

2014-07-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] build-webkit script fails under jhbuild if ACLOCAL_FLAGS is unset
        https://bugs.webkit.org/show_bug.cgi?id=135065

        Reviewed by Martin Robinson.

        * jhbuild/jhbuild-wrapper:
        (ensure_jhbuild): do not assume jhbuild sets ACLOCAL_FLAGS

2014-07-23  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed iOS build fix after r171355.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        Since all the Tests/WebKit2Cocoa tests are already explicitly skipped on iOS,
        simplify to skipping all the tests in the directory. PlatformUtilities are not
        building on iOS, which means we are missing necessary Util functions.

2014-07-23  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Fix build after r171454
        https://bugs.webkit.org/show_bug.cgi?id=135191

        Reviewed by Csaba Osztrogonác.

        * MiniBrowser/efl/CMakeLists.txt: Add path to new EWebKit2.h location .

2014-07-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Do not generate forwarding header for ewk headers
        https://bugs.webkit.org/show_bug.cgi?id=135147

        Reviewed by Gyuyoung Kim.

        * WebKitTestRunner/EventSenderProxy.h:

2014-07-21  Sam Weinig  <sam@webkit.org>

        [Cocoa] WKScriptMessageHandlers don't seem to function properly after navigating
        https://bugs.webkit.org/show_bug.cgi?id=135148

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm: Added.
        (-[SimpleNavigationDelegate webView:didFinishNavigation:]):
        (-[ScriptMessageHandler userContentController:didReceiveScriptMessage:]):

2014-07-22  Brent Fulgham  <bfulgham@apple.com>

        Correct handling of __VERSION_TEXT__ for 4+-tuple versions
        https://bugs.webkit.org/show_bug.cgi?id=135161
        <rdar://problem/17763546>

        Reviewed by David Kilzer.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl:
        Add additional test cases to catch errors in multiple-tuple
        version string handling.

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Extend exception fuzzing to the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=135076

        Reviewed by Oliver Hunt.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:

2014-07-22  Jochen Eisinger  <jochen@chromium.org>

        Fix my email address in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=135156

        Reviewed by Gyuyoung Kim.

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

2014-07-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Revert
        to older Perl 5.8 syntax for iterating over hashes to allow tests to
        run on Mountain Lion bots.

2014-07-21  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=135137
        build.webkit.org/dashboard: webkitperl failures show up as yellow, not red

        Reviewed by Darin Adler.

        webkitperl results are binary, handle them the same way we handle bindings test results.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds):

2014-07-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Follow-up for r171324.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Cygwin
        perl reports itself as 'cygwin'; native Windows Perl reports as
        'MSWin32'. We need to handle both cases.

2014-07-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r171319.

        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: This test should
        only execute on Windows. It will fail on other platforms, so give it a way to
        successfully exit.

2014-07-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Extend auto-version.pl to support 5-tuple versions
        https://bugs.webkit.org/show_bug.cgi?id=135124
        <rdar://problem/17750334>

        Reviewed by David Kilzer.

        Add test cases for auto-version.pl.

        * Scripts/webkitperl/auto-version_unittest: Added.
        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl: Added.

2014-07-21  Dean Jackson  <dino@apple.com>

        Allow MiniBrowser WK1 to do element fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=135125

        Reviewed by Simon Fraser.

        Allow WK1 windows to go fullscreen using the DOM API.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]): Enable the preference for
        fullscreen.

2014-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Documentation files are added twice to the tarball
        https://bugs.webkit.org/show_bug.cgi?id=135115

        Reviewed by Sergio Villar Senin.

        * gtk/manifest.txt: Remove duplicated rules.

2014-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify make-dist command line arguments
        https://bugs.webkit.org/show_bug.cgi?id=134832

        Reviewed by Martin Robinson.

        Remove --tarball-root and -o command line options and add
        --version, since the version can be used to build both, the
        tarball root and the output filename. When the version it's not
        provided, the pkg-config file is used to get the version. Also
        change the default value of build-dir to the current directory,
        since it's very common to call make-dist.py from the build dir.

        * gtk/make-dist.py:
        (get_tarball_root_and_output_filename_from_arguments):

2014-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reduce the size of the tarball generated by distcheck
        https://bugs.webkit.org/show_bug.cgi?id=134802

        Reviewed by Martin Robinson.

        Add more rules to the manifest to decide what files to add:

          - Do not include platform specific directories of other ports.
          - Do not include port specific cmake files.
          - Do not include Objective-C sources.
          - Do not include .orig and .rej files.
          - Do not include mac specific sandbox files.
          - Only include the resources we actually build.

        * gtk/manifest.txt:

2014-07-20  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Enable mpg123 feature for gst-plugin-bad.
        https://bugs.webkit.org/show_bug.cgi?id=135016

        Reviewed by Laszlo Gombos.

        enable-mpg123 feature is added to jhbuild in order to support playback of mp3 format.

        * efl/install-dependencies:
        * efl/jhbuild.modules:

2014-07-20  Dan Bernstein  <mitz@apple.com>

        Test for <rdar://problems/17742611> -[_WKActivatedElementInfo image] is often empty
        https://bugs.webkit.org/show_bug.cgi?id=135107

        Reviewed by Sam Weinig.

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

2014-07-20  David Kilzer  <ddkilzer@apple.com>

        Checker: Value stored to 'kernResult' is never read (LayoutTestHelper.m:164)
        <http://webkit.org/b/135096>

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (lockDownDiscreteGraphics): Check the return values of
        IOServiceOpen() and IOObjectRelease(), and log if not
        KERN_SUCCESS.

2014-07-19  Anders Carlsson  <andersca@apple.com>

        Update.

        * Scripts/webkitpy/common/config/watchlist:

2014-07-18  Sam Weinig  <sam@webkit.org>

        Revert accidental commit to MiniBrowser to make everything layer backed.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):

2014-07-18  Dana Burkart  <dburkart@apple.com>

        Add a new 'analyze' target to the makefile. This will make use of a new
        'PATH_TO_SCAN_BUILD' which, if set will wrap xcodebuild in the clang
        static analyzer.
        https://bugs.webkit.org/show_bug.cgi?id=135057
        <rdar://problem/10193187>

        Reviewed by David Kilzer.

        * Makefile:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Fix EFL+GTK.

        * Scripts/run-jsc-stress-tests:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Exception fuzzing should work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=135070

        Reviewed by Mark Hahnenberg.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:
        (fail):
        * Scripts/run-jsc-stress-tests:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should be able to run helper-based tests in remote mode
        https://bugs.webkit.org/show_bug.cgi?id=135064

        Reviewed by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests: rename $copy to $doNotMessWithVMPath
        https://bugs.webkit.org/show_bug.cgi?id=135061

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Refactor run-jsc-stress-tests VM copying code to remove some abstractions
        https://bugs.webkit.org/show_bug.cgi?id=135059

        Reviewed by Mark Lam.
        
        This is meant to make it easier for me to extend the copying functionality to copy things other than
        the framework.

        * Scripts/run-jsc-stress-tests:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Fix cloop build.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:

2014-07-18  Renato Nagy  <nagy.renato@stud.u-szeged.hu>

        Fix -v|--verbose option in sort-export-file script.
        https://bugs.webkit.org/show_bug.cgi?id=135043

        Reviewed by Tim Horton.

        -v|--verbose option does not work. Option added to getOptionsResult.

        * Scripts/sort-export-file:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Really remove dependency on ShellQuote.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:

2014-07-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix build for platforms that don't have ShellQuote.
        
        * Scripts/jsc-stress-test-helpers/js-exception-fuzz: Take a single argument that has the whole command string.
        * Scripts/run-jsc-stress-tests: Do the escaping in Ruby.

2014-07-15  Filip Pizlo  <fpizlo@apple.com>

        Need ability to fuzz exception throwing
        https://bugs.webkit.org/show_bug.cgi?id=134945
        <rdar://problem/17722027>

        Reviewed by Sam Weinig.
        
        Adds a new script, js-exception-fuzz, which will run some jsc command-line using
        exception fuzzing. This means that we will force exceptions to be thrown in random
        places to see how the engine reacts. This is now integrated with the various test
        drivers, so run-javascriptcore-tests will run some exception fuzzing tests by
        default.

        * Scripts/jsc-stress-test-helpers/js-exception-fuzz: Added.
        (fail):
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2014-07-17  Sam Weinig  <sam@webkit.org>

        Fix failing API tests.

        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (-[ActiveOffscreenWindow isVisible]):
        Override isVisible to make the NSWindows pretend they are visible.

2014-07-17  Alexey Proskuryakov  <ap@apple.com>

        Disable button animations in regression tests
        https://bugs.webkit.org/show_bug.cgi?id=133647
        <rdar://problem/16677530>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        We already did this for WebKit2, let's do it for WebKit1 too.

2014-07-16  Alexey Proskuryakov  <ap@apple.com>

        A test that hangs at cleanup stage confuses webkitpy hugely
        https://bugs.webkit.org/show_bug.cgi?id=122475
        <rdar://problem/17184354>

        Reviewed by Anders Carlsson.

        Terminate WebContent process if it freezes between tests. Ideally, we should report
        this somehow, but this is better than blaming the wrong test.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::terminateWebContentProcess):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::invoke):

2014-07-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change style check path with EFL WK2's path in checker_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=134967

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checker_unittest.py: Change ewk_view.h path.
        (GlobalVariablesTest.test_path_rules_specifier):

2014-07-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Unreviewed. Added myself to the list of committers.

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

2014-07-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove EFL WK1 directory from the checker.py
        https://bugs.webkit.org/show_bug.cgi?id=134954

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitpy/style/checker.py:

2014-07-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Adding myself to contributors.json breaks a webkitpy test
        https://bugs.webkit.org/show_bug.cgi?id=134958

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois): Be more specific and include also the
        first name when asking for the whois of Xan in the unit test.

2014-07-14  Daniel Bates  <dabates@apple.com>

        check-webkit-style should apply C++ rules to Objective-C++ files
        https://bugs.webkit.org/show_bug.cgi?id=134884

        Reviewed by Joseph Pecoraro.

        Fixes an issue where check-webkit-style doesn't apply applicable C++ rules to
        Objective-C++ files.

        Currently check-webkit-style doesn't apply the following rules to Objective-C++
        files: build/using_std, runtime/max_min_macros, runtime/wtf_move, readability/null.
        Instead, we should teach check-webkit-style to apply these rules because, as
        its name implies, an Objective-C++ file may contain C++ code.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FileState.__init__): Add instance variable _is_objective_cpp to track whether a file has
        extension mm (i.e. an Objective-C++ file).
        (_FileState.is_objective_c_or_objective_cpp): Added; returns true if the file
        has extension m or mm or if the file has extension h and contains Objective-C directives.
        (check_for_null): No change in behavior; don't apply rule to Objective-C++ file.
        (check_identifier_name_in_declaration): Substitute _FileState.is_objective_c_or_objective_cpp() for
        _FileState.is_c_or_objective_c()
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_null_false_zero): Added test case for Objective-C++ file.
        (WebKitStyleTest.test_max_macro): Add test case for Objective-C and Objective-C++ file.
        (WebKitStyleTest.test_min_macro): Ditto.
        (WebKitStyleTest.test_wtf_move): Add test case for Objective-C++ file.

2014-07-14  Anders Carlsson  <andersca@apple.com>

        Make shouldKeepCurrentBackForwardListItemInList part of WKPageLoaderClientV5 to avoid breaking ABI
        https://bugs.webkit.org/show_bug.cgi?id=134889

        Reviewed by Beth Dakin.

        Bump loader version number to 5.

        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2014-07-14  Daniel Bates  <dabates@apple.com>

        Teach check-webkit-style to suggest WTF::move() when it sees std::move()
        https://bugs.webkit.org/show_bug.cgi?id=134620

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_max_min_macros): Fix up comment so that it reads well.
        (check_wtf_move): Added.
        (check_style): Modified to call check_wtf_move().
        (CppChecker): Add category "runtime/wtf_move".
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_move): Added.

2014-07-12  Peter Szanka  <h868064@stud.u-szeged.hu>

        Style checker complains about namespace indentation when there is no namespace
        https://bugs.webkit.org/show_bug.cgi?id=105427

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_namespace_indentation):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_indentation):

        The indentation level depends on the parantheses too, to avoid false warning in case of several statements inside macros.

2014-07-12  Daker Fernandes Pinheiro  <daker.pinheiro@openbossa.org>

        Remove excessive nesting from _EnumState.process_clean_line at cpp style checker
        https://bugs.webkit.org/show_bug.cgi?id=125317

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.process_clean_line):

2014-07-12  Brian Holt  <brian.holt@samsung.com>

        Style Checker should prevent enums in bitfields
        https://bugs.webkit.org/show_bug.cgi?id=57352

        Reviewed by Darin Adler.

        Added check that enums are not used as types for bitfields
        and a unit test.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        (CppStyleTest.test_enum_bitfields):
        (CppStyleTest.test_plain_integral_bitfields):

2014-07-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Pasting rich content does not perform a two-step paste
        https://bugs.webkit.org/show_bug.cgi?id=134795

        Reviewed by Benjamin Poulain.

        Two-step paste requires setting InputViewObeysDOMFocus on the UIWebBrowserView.

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

2014-07-10  Carlos Garcia Campos  <cgarcia@igalia.com> and Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Add a 'distcheck' target
        https://bugs.webkit.org/show_bug.cgi?id=130675

        Reviewed by Gustavo Noronha Silva.

        Add --check option to make-dist script that builds and installs the tarball.

        * gtk/make-dist.py:
        (Distcheck.__init__):
        (Distcheck.extract_tarball): Extratc the tarball.
        (Distcheck.configure): Run cmake.
        (Distcheck.configure.create_dir): Helper function to create a directory.
        (Distcheck.build): Run make.
        (Distcheck.install): Run make install.
        (Distcheck.clean): Clean up the extracted tarball.
        (Distcheck.check): Run all previous methods in order.
        * gtk/manifest.txt: Add missing file.

2014-07-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use the same default options for production builds that previous stable releases
        https://bugs.webkit.org/show_bug.cgi?id=134589

        Reviewed by Martin Robinson.

        Make sure all features enabled in production builds are also
        enabled in developer mode.

        * Scripts/webkitperl/FeatureList.pm: Enable ACCELERATED_2D_CANVAS
        and CSS_FILTERS for the GTK port.

2014-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove uses of 'bash' in build system
        https://bugs.webkit.org/show_bug.cgi?id=134782
        <rdar://problem/17615533>

        Reviewed by Dean Jackson.

        Remove uses of 'bash' by replacing Windows-specific bash scripts
        with Perl equivalents.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPreBuild.cmd:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPreBuild.cmd:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPreBuild.cmd:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibPreBuild.cmd:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherPreBuild.cmd:

2014-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove use of 'grep' in build steps
        https://bugs.webkit.org/show_bug.cgi?id=134770
        <rdar://problem/17608783>

        Reviewed by Tim Horton.

        Replace uses of the grep command in Windows builds with the equivalent
        Perl program.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPreBuild.cmd:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPreBuild.cmd:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPreBuild.cmd:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibPreBuild.cmd:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherPreBuild.cmd:

2014-07-09  Commit Queue  <commit-queue@webkit.org>

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

        This patch is wrong (Requested by philn on #webkit).

        Reverted changeset:

        "[GTK] Gstreamer missing from the install-dependencies script"
        https://bugs.webkit.org/show_bug.cgi?id=134727
        http://trac.webkit.org/changeset/170889

2014-07-08  Brian J. Burg  <burg@cs.washington.edu>

        resolve-ChangeLogs fails when WebKit repository is a git submodule
        https://bugs.webkit.org/show_bug.cgi?id=134734

        Reviewed by David Kilzer.

        When using resolve-ChangeLogs in a WebKit git repository with a
        non-default arrangement of GIT_DIR and GIT_WORK_TREE, incorrect
        paths are computed and the script fails mysteriously.

        We were naively computing GIT_WORK_TREE as being one level above
        GIT_DIR, but this is not the case for submodules or a manually
        configured GIT_WORK_TREE or GIT_DIR location.

        * Scripts/VCSUtils.pm:
        (gitTreeDirectory): Added. Find the equivalent of GIT_WORK_TREE.
        (determineVCSRoot): Calculate the working tree root directly.

2014-07-08  Tim Horton  <timothy_horton@apple.com>

        [WK2] Expose a few drawing/compositing settings on WKPreferences(Private)
        https://bugs.webkit.org/show_bug.cgi?id=134645

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/MainMenu.xib:
        Add menu items for layer borders and the tiled scrolling indicator.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController layerBordersAreVisible]):
        (-[WK1BrowserWindowController toggleLayerBordersVisibility:]):
        Add getters/setters/validators for layer borders.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController layerBordersAreVisible]):
        (-[WK2BrowserWindowController toggleLayerBordersVisibility:]):
        (-[WK2BrowserWindowController tiledScrollingIndicatorIsVisible]):
        (-[WK2BrowserWindowController toggleTiledScrollingIndicatorVisibility:]):
        Add getters/setters/validators for layer borders and the tiled scrolling indicator.

        (-[WK2BrowserWindowController isSubpixelCSSOMElementMetricsEnabled]): Deleted.
        (-[WK2BrowserWindowController toggleSubpixelCSSOMElementMetricsEnabled:]): Deleted.
        Remove the WebKit2 version of the subpixel metrics pref, because it doesn't work, because
        nothing in WebKit2 reads this default, and there is no WebKit2 API for adjusting this preference.

2014-07-08  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Move user style sheet API out of WebKitWebViewGroup
        https://bugs.webkit.org/show_bug.cgi?id=134551

        Reviewed by Carlos Garcia Campos.

        Removes testing user style sheet injection from
        TestWebKitWebViewGroup and moves that into a new
        TestWebKitUserContentManager, adapting the existing tests to the new
        API. Also, it contains a new test case for
        webkit_web_view_new_with_user_content_manager().

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp: Added.
        (UserContentManagerTest::UserContentManagerTest):
        (testWebViewNewWithUserContentManager):
        (isStyleSheetInjectedForURLAtPath):
        (fillURLListFromPaths):
        (removeOldInjectedStyleSheetsAndResetLists):
        (testUserContentManagerInjectedStyleSheet):
        (serverCallback):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp:
        (beforeAll):
        (afterAll):
        (isStyleSheetInjectedForURLAtPath): Deleted.
        (fillURLListFromPaths): Deleted.
        (removeOldInjectedStyleSheetsAndResetLists): Deleted.
        (testWebViewGroupInjectedStyleSheet): Deleted.
        (serverCallback): Deleted.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::WebViewTest):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:

2014-07-08  Ziran Sun  <ziran.sun@samsung.com>

        [GTK] Gstreamer missing from the install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=134727

        Reviewed by Mario Sanchez Prada.

        Added missing gstreamer dependencies for debian based systems.

        * gtk/install-dependencies: Added 2 dependencies for apt-get.

2014-07-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Add myself to the watchlist for text-related files
        https://bugs.webkit.org/show_bug.cgi?id=134707

        Reviewed by Timothy Horton.

        * Scripts/webkitpy/common/config/watchlist:

2014-07-08  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Add option to specify output file location in sunspider.
        https://bugs.webkit.org/show_bug.cgi?id=134339

        Reviewed by Darin Adler.

        * Scripts/run-sunspider:

2014-07-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix.

        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        Make Common.cpp excluded from both 32-bit and 64-bit builds.

2014-07-07  Simon Fraser  <simon.fraser@apple.com>

        Have MiniBrowser log and reload if the Web Content Process crashes
        https://bugs.webkit.org/show_bug.cgi?id=134691

        Reviewed by Tim Horton.
        
        Implement _webViewWebProcessDidCrash, log and reload when the web process
        crashes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webViewWebProcessDidCrash:]):

2014-07-07  Alberto Garcia  <berto@igalia.com>

        update-webkitgtk-libs script fails by unsatisfied dependencies
        https://bugs.webkit.org/show_bug.cgi?id=134547

        Reviewed by Martin Robinson.

        Install libxcb-xfixes0-dev, needed to build Mesa.

        * gtk/install-dependencies:

2014-07-06  Yoav Weiss  <yoav@yoav.ws>

        Turn on img@sizes compile flag
        https://bugs.webkit.org/show_bug.cgi?id=134634

        Reviewed by Benjamin Poulain.

        * Scripts/webkitperl/FeatureList.pm: Turn on the img@sizes feature.

2014-07-06  Hyowon Kim  <hw1008.kim@samsung.com>

        Unreviewed. Adding myself to committers.

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

2014-07-05  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Add libgeoclue-dev to Tools/efl/install-dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=134648

        Reviewed by Gyuyoung Kim.

        As Geoclue is enabled for EFL, libgeoclue-dev is also added to Tools/efl/install-dependencies.

        * efl/install-dependencies:

2014-07-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Support Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=134439

        Reviewed by Antonio Gomes.

        * Scripts/webkitperl/FeatureList.pm: Enable geolocation for EFL port.

2014-07-04  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Enhance the Minibrowser to show selected/highlighted text in search bar, if any.
        https://bugs.webkit.org/show_bug.cgi?id=134485

        Reviewed by Gyuyoung Kim.

        Use script_execute_callback to get selected/highlighted text and show in search bar.

        * MiniBrowser/efl/main.c:
        (script_execute_callback):
        (on_key_down):

2014-07-04  Dan Bernstein  <mitz@apple.com>

        Build fix after r170811.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController reload:]):

2014-07-04  Timothy Horton  <timothy_horton@apple.com>

        Typo in watchlist config means four specific people get Cc'd on everything
        https://bugs.webkit.org/show_bug.cgi?id=134626

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitpy/common/config/watchlist:
        Remove leading pipe, which meant that this rule matched everything!

2014-07-03  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Enhance the Minibrowser to show text search count and close search bar.
        https://bugs.webkit.org/show_bug.cgi?id=134486

        Reviewed by Gyuyoung Kim.

        Use on_search_close_button_clicked() callback to close search bar and on_search_text_found() callback to show search count.

        * MiniBrowser/efl/main.c:
        (search_box_show):
        (search_box_hide):
        (on_search_close_button_clicked):
        (on_search_text_found):
        (window_create):

2014-07-03  Daniel Bates  <dabates@apple.com>

        Add WTF::move()
        https://bugs.webkit.org/show_bug.cgi?id=134500

        Rubber-stamped by Anders Carlsson.

        Substitute WTF::move() for std::move().

        * DumpRenderTree/win/DRTDataObject.cpp:
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added FIXME comments that explain that some of the sub-tests
        aren't actually testing move semantics in tests: MoveAssignmentFromSameType, MoveAssignmentFromSimilarType,
        ConstructionFromSameType, and ConstructionFromSimilarType.
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:

2014-07-03  László Langó  <llango.u-szeged@partner.samsung.com>

        [JavaScriptCore] Add --cmakeargs option to build-jsc.
        https://bugs.webkit.org/show_bug.cgi?id=134590

        Reviewed by Ryosuke Niwa.

        * Scripts/build-jsc:

2014-07-03  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Add option to specify jsc args in run-sunspider.
        https://bugs.webkit.org/show_bug.cgi?id=134341

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-sunspider:

2014-07-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Report and mark flaky test WebKit2Gtk/TestCookieManager:persistent-storage

2014-07-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up unused EFL buildbot information in BuildSlaveSupport and TestResultServer
        https://bugs.webkit.org/show_bug.cgi?id=134581

        Reviewed by Tim Horton.

        Should be removed unused EFL bot info.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js:
        (EWS):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2014-07-02  Alex Christensen  <achristensen@webkit.org>

        Unreviewed.  Moved self to reviewers list.

        * Scripts/webkitpy/common/config/contributors.json:
        Moved self to reviewers list, added WebGL to expertise.

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make dist only works when run from the source directory
        https://bugs.webkit.org/show_bug.cgi?id=134543

        Reviewed by Martin Robinson.

        Since the paths in the manifest are relative to the source dir,
        and the script expects the current working directory to be the
        source directory, resolve all passed in relative paths while
        parsing the arguments and then change the current working
        directory.

        * gtk/make-dist.py:

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] make dist is broken
        https://bugs.webkit.org/show_bug.cgi?id=134542

        Reviewed by Martin Robinson.

        * gtk/make-dist.py: Rename command line options to match what cmake uses.
        * gtk/manifest.txt: Remove WebKit1 references and add WebKitDOM documentation.

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView::create should receive information about the navigation action
        https://bugs.webkit.org/show_bug.cgi?id=133680

        Reviewed by Martin Robinson.

        Add unit test to check the WebKitNavigationAction passed to
        WebKitWebView::create callback.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewCreate): Add WebKitNavigationAction parameter.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewCreateNavigationData):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp:
        (createCallback):

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not add forward declaration of class struct for interfaces
        https://bugs.webkit.org/show_bug.cgi?id=134297

        Reviewed by Martin Robinson.

        Add Iface symbol to documentation instead of Class for interfaces.

        * gtk/webkitdom.py:
        (WebKitDOMDocGeneratorSections.write_section):

2014-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] XPathNSResolver should be exposed as an interface instead of as a class
        https://bugs.webkit.org/show_bug.cgi?id=134028

        Reviewed by Gustavo Noronha Silva.

        Add unit tests to check WebKitDOMXPathNSResolver API when using the
        native one and a user provided one.

        * Scripts/webkitpy/style/checker.py: Add WebKitDOMXPathNSResolver
        to the list of GTK+ public API exceptions.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add new files to compilation.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMXPathNSResolverTest.cpp: Added.
        (webkitXPathNSResolverLookupNamespaceURI):
        (webkitXPathNSResolverDOMXPathNSResolverIfaceInit):
        (webkit_xpath_ns_resolver_init):
        (webkit_xpath_ns_resolver_class_init):
        (WebKitDOMXPathNSResolverTest::create):
        (WebKitDOMXPathNSResolverTest::webPageFromArgs):
        (WebKitDOMXPathNSResolverTest::evaluateFooChildTextAndCheckResult):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverNative):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverCustom):
        (WebKitDOMXPathNSResolverTest::runTest):
        (registerTests):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMXPathNSResolver.cpp: Added.
        (runTest):
        (testWebKitDOMXPathNSResolverNative):
        (testWebKitDOMXPathNSResolverCustom):
        (serverCallback):
        (beforeAll):
        (afterAll):
        * gtk/webkitdom.py:
        (WebKitDOMDocGeneratorSections.write_section): Add
        WebKitDOMXPathNSResolver to the list of interfaces.

2014-07-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break on EFL and GTK ports since r170683
        https://bugs.webkit.org/show_bug.cgi?id=134536

        Unreviewed, build fix.

        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:

2014-07-01  Sam Weinig  <sam@webkit.org>

        [Cocoa][Mac] WKWebView should automatically set topContentInset when beneath a toolbar
        <rdar://problem/17523159>
        https://bugs.webkit.org/show_bug.cgi?id=134496

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        Use the NSFullSizeContentViewWindowMask bit on Yosemite and later to enable toolbar blurring.

2014-07-01  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Add necessary support for building for the Wayland target
        https://bugs.webkit.org/show_bug.cgi?id=134160

        Reviewed by Darin Adler.

        * CMakeLists.txt: Only build the TestNetscapePlugIn target in case
        the X11 windowing target is enabled.

2014-07-01  Chris Fleizach  <cfleizach@apple.com>

        AX: HTML indeterminate IDL attribute not mapped to checkbox value=2
        https://bugs.webkit.org/show_bug.cgi?id=134492

        Reviewed by Andreas Kling.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isIndeterminate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isIndeterminate):

2014-07-01  Daniel Bates  <dabates@apple.com>

        Remove unnecessary calls to std::move()
        https://bugs.webkit.org/show_bug.cgi?id=134493

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):

2014-07-01  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Adding myself to the reviewers list to make commit bot happy.

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

2014-07-01  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        webkit-patch apply-from-bug / apply-attachment should not ask for credentials if none are required
        https://bugs.webkit.org/show_bug.cgi?id=40095

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.fetch_attachment_contents): make a first fetch on bugzilla without authentication. If failing, use authentication (similar to fetch_bug_dictionary).
        (Bugzilla):
        (Bugzilla.bug_id_for_attachment_id): ditto.

2014-07-01  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] Refactor pluralizer in grammar.py
        https://bugs.webkit.org/show_bug.cgi?id=133067

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):
        (Printer.print_workers_and_shards):
        (Printer._print_one_line_summary):
        * Scripts/webkitpy/test/printer.py:
        (Printer.print_result):
        * Scripts/webkitpy/tool/bot/feeders.py:
        (EWSFeeder.feed):
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (FlakyTestReporter._lookup_bug_for_flaky_test):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout._check_diff_failure):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_rollout):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchProcessingCommand._process_patch.execute):
        (ProcessBugsMixin._fetch_list_of_patches_to_process):
        (ProcessURLsMixin._fetch_list_of_patches_to_process):
        * Scripts/webkitpy/tool/commands/queries.py:
        (WhatBroke.execute):
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations._print_nominations):
        (SuggestNominations._print_counts):
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:
        (_make_options):
        (test_basic):
        (test_with_verbose):
        * Scripts/webkitpy/tool/commands/upload.py:
        (PostCommits.execute):
        * Scripts/webkitpy/tool/grammar.py:
        (pluralize):
        * Scripts/webkitpy/tool/grammar_unittest.py:
        (GrammarTest.test_join_with_separators):
        (GrammarTest):
        (GrammarTest.test_plural):
        (GrammarTest.test_pluralize):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (Command.check_arguments_and_execute):
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        (ObsoletePatches.run):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert._message_for_revert):

2014-06-30  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] GSFontAddCGFont is deprecated and we use it in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=134133

        Reviewed by Simon Fraser.

        Replace it with CTFontManagerRegisterGraphicsFont

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFontIOS):

2014-06-30  Michael Saboff  <msaboff@apple.com>

        Add option to run-jsc-stress-testes to filter out tests that use large heaps
        https://bugs.webkit.org/show_bug.cgi?id=134458

        Reviewed by Filip Pizlo.

        Added new --memory-limited to filter out tests that have large heap usage.
        Such tests are either tagged with //@largeHeap or logic is added to their .yaml file.

        * Scripts/run-jsc-stress-tests:

2014-06-30  Myles C. Maxfield  <mmaxfield@apple.com>

        DRT in iOS sim crashes while loading fonts
        https://bugs.webkit.org/show_bug.cgi?id=134451

        Reviewed by Geoffrey Garen.

        The magic linker symbols had the same name, and were therefore being unified
        to a single font file. Then, adding the same file twice was failing.

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

2014-06-30  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove Qt cruft from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=134445

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (QtPort): Deleted.
        (QtPort.build_webkit_command): Deleted.
        (QtPort.run_webkit_tests_command): Deleted.
        (QtWK2Port): Deleted.
        (QtWK2Port.build_webkit_command): Deleted.
        (QtWK2Port.run_webkit_tests_command): Deleted.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest): Deleted.
        (DeprecatedPortTest.test_qt_port): Deleted.
        (DeprecatedPortTest.test_qt_wk2_port): Deleted.

2014-06-29  Yoav Weiss  <yoav@yoav.ws>

        Add support for HTMLImageElement's sizes attribute
        https://bugs.webkit.org/show_bug.cgi?id=133620

        Reviewed by Dean Jackson.

        Added an ENABLE_PICTURE_SIZES compile flag.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-27  Tim Horton  <timothy_horton@apple.com>

        check-webkit-style should check the order of #imports as well as #includes
        https://bugs.webkit.org/show_bug.cgi?id=134428

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        Allow "import" in addition to "include", so that the sort order of headers in ObjC files is checked.

2014-06-27  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Remove efl-wk2 from baseline search path
        https://bugs.webkit.org/show_bug.cgi?id=134391

        Reviewed by Gyuyoung Kim.

        As WebKit1 EFL is removed and platform/efl and platform/efl-wk2 baselines and test expectations files
        are merged efl-wk2 search path should be removed.

        * Scripts/webkitpy/port/base.py:
        (Port.test_expectations_file_postion): Added method to determine port test expectations file position in expectations_dict.
        * Scripts/webkitpy/port/efl.py:
        (EflPort._search_paths): Changed baseline search paths from efl-wk2 -> wk2 -> efl -> generic is changed to: efl -> wk2 -> generic.
        (EflPort.test_expectations_file_postion): Added method to determine EFL port specific test expectation file position.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_expectations_ordering): Changed constant value to one returned from test_expectations_file_postion().
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path): Removed efl-wk2 test case.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory): Changed directory name in assertion from platform/efl-wk2 to platform/efl.

2014-06-26  Dan Bernstein  <mitz@apple.com>

        prepare-ChangeLog outputs (NS_ENUM): entries for Cocoa enums
        https://bugs.webkit.org/show_bug.cgi?id=134387

        Reviewed by Tim Horton.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): Don’t consider {CF,NS}_{ENUM,OPTIONS} as function names.

2014-06-26  Dan Bernstein  <mitz@apple.com>

        prepare-ChangeLog mangles Objective-C selectors for methods with parameter types that contain colons
        https://bugs.webkit.org/show_bug.cgi?id=134383

        Reviewed by Tim Horton.

        * Scripts/prepare-ChangeLog:
        (method_decl_to_selector): Strip out the return type and parameter types before splitting at
        colons.

2014-06-26  Brady Eidson  <beidson@apple.com>

        MiniBrowser should support a preference to override the default URL
        https://bugs.webkit.org/show_bug.cgi?id=134373

        Reviewed by Darin Adler.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationDidFinishLaunching:]): See if there’s a pref
          overriding the default URL, and use it if there is.

2014-06-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix potential buffer overrun in DLLLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134351
        <rdar://problem/17469185>

        Reviewed by Darin Adler.

        * win/DLLLauncher/DLLLauncherMain.cpp: Correct error
        in end-of-buffer calculation.

2014-06-26  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        [EFL] Missing dependency between freetype6 and fontconfig libs.
        https://bugs.webkit.org/show_bug.cgi?id=134190

        Reviewed by Gyuyoung Kim.

        The external dependencies contain the freetype6 and the fontconfig libs.
        The fontconfig lib requires freetype, but the dependency is not set in
        the efl/jhbuild.modules file. So, during building the external libs,
        fontconfig uses the freetype package of the system, while WebKit
        binaries will use freetype from the WebKitBuild/Dependency directory.
        There are more similar dependencies that were not indicated in the
        jhbuild.modules file.

        * efl/jhbuild.modules:
          Added dependencies between libs.

2014-06-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Expose Cache Information to WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134318

        Reviewed by Dean Jackson.

        * WinLauncher/Common.cpp: Update for new dialog.
        * WinLauncher/WinLauncher.cpp: Add support for WebCache
        and WebCoreStatistics.
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc:
        Update for new Cache Dialog.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Link to
        WTF.lib
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Update
        for new Dialog.

2014-06-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening. Use consistent line-endings in file.

        * WinLauncher/WinLauncher.h: Use '\n' EOL marker, not DOS-style
        '\r\n' EOL.

2014-06-25  László Langó  <llango.u-szeged@partner.samsung.com>

        [JavaScriptCore] Make build-jsc output format better.
        https://bugs.webkit.org/show_bug.cgi?id=133547

        Reviewed by Ryosuke Niwa.

        * Scripts/build-jsc: Emit built time information on successful builds.
        (writeCongrats):
        * Scripts/build-webkit: Move formatBuildTime function into webkitdirs.pm.
        (cMakeArgsFromFeatures):
        (formatBuildTime): Deleted.
        * Scripts/webkitdirs.pm:
        (formatBuildTime):

2014-06-25  Chris Fleizach  <cfleizach@apple.com>

        Add an undo group for each dictated utterance in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=134086

        Reviewed by Enrica Casucci.

        Create a method for creating attributed strings with the undo insertion marker.

        * DumpRenderTree/mac/TextInputController.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController stringWithUndoGroupingInsertion:]):

2014-06-25  Michael Saboff  <msaboff@apple.com>

        Provide javascript aware backtrace script for lldb
        https://bugs.webkit.org/show_bug.cgi?id=134276

        Reviewed by Jer Noble.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (btjs): New scripted command to display a backtrace that shows JavaScript frames with details.

2014-06-25  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        REGRESSION (r170426) Broke two python tests
        https://bugs.webkit.org/show_bug.cgi?id=134299

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/port/efl.py:
        (EflPort._search_paths): Added search path for efl-wk2.

2014-06-25  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Remove WebKit1 related code from scripts
        https://bugs.webkit.org/show_bug.cgi?id=134195

        Reviewed by Laszlo Gombos.

        After removing WebKit1 from EFL port, still there is some code left related to DumpRenderTree, 
        EWebLauncher. Also running layout tests does not require adding -2/--webkit-test-runner switch.

        * Scripts/run-launcher: MiniBrowser now runs as default without -2 switch.
        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Remove reference to libewebkit.so
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Script runs WKTR by default.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__): Ditto.
        * Scripts/webkitpy/port/efl.py:
        (EflPort._search_paths): Remove efl-wk2 from baseline search path.
        (EflPort.show_results_html_file): Run MiniBrowser as result viewer.

2014-06-25  Laszlo Gombos  <l.gombos@samsung.com>

        Remove build guard for progress element
        https://bugs.webkit.org/show_bug.cgi?id=134292

        Reviewed by Benjamin Poulain.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-24  Tomas Popela  <tpopela@redhat.com>

        [GTK] Some of DOM bindings macros are misnamed
        https://bugs.webkit.org/show_bug.cgi?id=121543

        Reviewed by Carlos Garcia Campos.

        As we are using WebKitDOM as a namespace we should unify all type macros
        to have WEBKIT_DOM_TYPE prefix instead of WEBKIT_TYPE_DOM. Also add
        more exceptions to decamelize function in GObject bindings generator
        to fix the names of bindings for BR, HR, UL, OL, DL and LI elements.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp:
        * gtk/webkitdom.py:
        (WebKitDOMDocGeneratorSections._dom_class_decamelize):
        (WebKitDOMDocGeneratorSections.write_section):

2014-06-24  Frédéric Wang  <fred.wang@free.fr>

        [EFL] Install Latin Modern Math on the bots
        https://bugs.webkit.org/show_bug.cgi?id=134153

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Switch back to https://github.com/ for the webkitgtk-test-fonts.

2014-06-24  Frédéric Wang  <fred.wang@free.fr>

        [EFL] [GTK] Use Latin Modern Math in the jhbuild environments.
        https://bugs.webkit.org/show_bug.cgi?id=134153

        Reviewed by Martin Robinson.

        * efl/jhbuild.modules: Use webkitgtk-test-fonts.git instead of the zip archive and upgrade to 0.0.5.
        * gtk/jhbuild.modules: Upgrade webkitgtk-test-fonts to 0.0.5.

2014-06-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, update my speciality.

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

2014-06-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up and refactor WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134209

        Reviewed by Tim Thorton.

        Relanding r170339 and r170340 with correct WinLauncher.h file.

        * WinLauncher/Common.cpp: Copied from WinLauncher/WinLauncher.cpp.
        (PrintView):
        (ToggleMenuItem):
        (WndProc):
        (BackButtonProc):
        (ForwardButtonProc):
        (loadURL):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (updateMenuItemForHistoryItem): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (setToDefaultPreferences): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        * WinLauncher/DOMDefaultImpl.cpp: Copied from WinLauncher/DOMDefaultImpl.h.
        (DOMEventListener::Release):
        (WebScriptObject::WebScriptObject): Deleted.
        (WebScriptObject::~WebScriptObject): Deleted.
        (WebScriptObject::throwException): Deleted.
        (WebScriptObject::callWebScriptMethod): Deleted.
        (WebScriptObject::evaluateWebScript): Deleted.
        (WebScriptObject::removeWebScriptKey): Deleted.
        (WebScriptObject::stringRepresentation): Deleted.
        (WebScriptObject::webScriptValueAtIndex): Deleted.
        (WebScriptObject::setWebScriptValueAtIndex): Deleted.
        (WebScriptObject::setException): Deleted.
        (DOMEventListener::throwException): Deleted.
        (DOMEventListener::callWebScriptMethod): Deleted.
        (DOMEventListener::evaluateWebScript): Deleted.
        (DOMEventListener::removeWebScriptKey): Deleted.
        (DOMEventListener::stringRepresentation): Deleted.
        (DOMEventListener::webScriptValueAtIndex): Deleted.
        (DOMEventListener::setWebScriptValueAtIndex): Deleted.
        (DOMEventListener::setException): Deleted.
        (DOMEventListener::handleEvent): Deleted.
        * WinLauncher/DOMDefaultImpl.h:
        (WebScriptObject::QueryInterface): Deleted.
        (WebScriptObject::AddRef): Deleted.
        (WebScriptObject::Release): Deleted.
        (DOMObject::QueryInterface): Deleted.
        (DOMEventListener::QueryInterface): Deleted.
        (DOMEventListener::AddRef): Deleted.
        (DOMEventListener::Release): Deleted.
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::WinLauncher):
        (WinLauncher::init):
        (WinLauncher::prepareViews):
        (WinLauncher::setFrameLoadDelegate):
        (WinLauncher::setUIDelegate):
        (WinLauncher::setAccessibilityDelegate):
        (WinLauncher::mainFrame):
        (WinLauncher::seedInitialDefaultPreferences):
        (WinLauncher::setToDefaultPreferences):
        (updateMenuItemForHistoryItem):
        (WinLauncher::showLastVisitedSites):
        (WinLauncher::launchInspector):
        (WinLauncher::navigateForwardOrBackward):
        (WinLauncher::navigateToHistory):
        (WinLauncher::goBack):
        (WinLauncher::goForward):
        (WinLauncher::loadURL):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.
        * WinLauncher/WinLauncher.h:
        (WinLauncher::standardPreferences):
        (WinLauncher::privatePreferences):
        (WinLauncher::hasWebView):
        (WinLauncher::usesLayeredWebView):
        (WinLauncherWebHost::WinLauncherWebHost): Deleted.
        (WinLauncherWebHost::didStartProvisionalLoadForFrame): Deleted.
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame): Deleted.
        (WinLauncherWebHost::didCommitLoadForFrame): Deleted.
        (WinLauncherWebHost::didReceiveTitle): Deleted.
        (WinLauncherWebHost::didChangeIcons): Deleted.
        (WinLauncherWebHost::didReceiveIcon): Deleted.
        (WinLauncherWebHost::didFailLoadWithError): Deleted.
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame): Deleted.
        (WinLauncherWebHost::willPerformClientRedirectToURL): Deleted.
        (WinLauncherWebHost::didCancelClientRedirectForFrame): Deleted.
        (WinLauncherWebHost::willCloseFrame): Deleted.
        (WinLauncherWebHost::windowScriptObjectAvailable): Deleted.
        (WinLauncherWebHost::didClearWindowObject): Deleted.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:
        * WinLauncher/WinLauncherReplace.h:
        (processCrashReport):
        * WinLauncher/WinLauncherWebHost.cpp: Copied from WinLauncher/WinLauncher.cpp.
        (WinLauncherWebHost::updateAddressBar):
        (WinLauncherWebHost::QueryInterface):
        (WinLauncherWebHost::AddRef):
        (WinLauncherWebHost::Release):
        (WinLauncherWebHost::didFinishLoadForFrame):
        (shouldUseFullDesktop): Deleted.
        (updateMenuItemForHistoryItem): Deleted.
        (showLastVisitedSites): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.
        * WinLauncher/WinLauncherWebHost.h: Copied from WinLauncher/WinLauncher.h.
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didChangeIcons):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        (WinLauncherWebHost::didClearWindowObject):
        * WinLauncher/WinMain.cpp: Copied from WinLauncher/WinLauncher.cpp.
        (wWinMain):
        (MyRegisterClass):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (updateMenuItemForHistoryItem): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] getsectdata() is deprecated and we use it in DRT
        https://bugs.webkit.org/show_bug.cgi?id=134122

        Reviewed by Alexey Proskuryakov.

        Migrate to using magic linker symbols.

        No tests because there should be no behavior change

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

2014-06-24  Javier Fernandez  <jfernandez@igalia.com>

        Name moving. Unreviewed.

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

2014-06-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove EFL WK1 watch category
        https://bugs.webkit.org/show_bug.cgi?id=134231

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/watchlist: Removed EFL WK1 category.

2014-06-24  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Remove some unused code from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=134191

        Reviewed by Chris Fleizach.

        DumpRenderTree's accessibility code could be removed since GTK and EFL has stopped supporting WK1.

        * DumpRenderTree/atk/AccessibilityCallbacks.h: Removed.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp: Removed.
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp: Removed.
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.cpp: Removed.
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.h: Removed.
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp: Removed.

2014-06-23  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Search field is not shown properly on doing ctrl+f on Minibrowser.
        https://bugs.webkit.org/show_bug.cgi?id=134025

        Reviewed by Gyuyoung Kim.

        Use EVAS_HINT_FILL in evas_object_size_hint_align_set() api.

        * MiniBrowser/efl/main.c:
        (window_create):

2014-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Replace RefPtr<Evas_Object> with UniquePtrEfl
        https://bugs.webkit.org/show_bug.cgi?id=134236

        Reviewed by Gyuyoung Kim.

        * ImageDiff/efl/ImageDiff.cpp:
        (calculateDifference):
        (printImageDifferences):
        (readImageFromStdin):
        (main):

2014-06-23  Daniel Bates  <dabates@apple.com>

        Rolling out r170340 and r170339.

        Changeset r170339 broke the Apple Windows Debug and Release builds.

        Reverted changesets:

        "[Win] Build fix after r134209"
        http://trac.webkit.org/changeset/170340

        "[Win] Clean up and refactor WinLauncher"
        https://bugs.webkit.org/show_bug.cgi?id=134209
        http://trac.webkit.org/changeset/170339

2014-06-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r134209

        * WinLauncher/WinMain.cpp: Must include the resources file
        before Common.cpp.

2014-06-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up and refactor WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134209

        Reviewed by Tim Horton.

        Make WinLauncher a class, and move all non-class driver functions
        into "Common.cpp" and "WinMain.cpp". These files are distinct
        to allow some internal tools to reuse the code in 'Common'.

        * WinLauncher/Common.cpp: Added. Consists of code moved from
        'WinLauncher.cpp' that can be reused for other tools.
        (subclassForLayeredWindow):
        (computeFullDesktopFrame):
        (DllMain):
        (getAppDataFolder):
        (setCacheFolder):
        (createCrashReport):
        (AbortProc):
        (getPrinterDC):
        (initDocStruct):
        (PrintView):
        (ToggleMenuItem):
        (WndProc):
        (EditProc):
        (BackButtonProc):
        (ForwardButtonProc):
        (About):
        (loadURL):
        (dllLauncherEntryPoint):
        * WinLauncher/DOMDefaultImpl.cpp: Copied from WinLauncher/DOMDefaultImpl.h.
        (DOMEventListener::Release):
        (WebScriptObject::WebScriptObject): Deleted.
        (WebScriptObject::~WebScriptObject): Deleted.
        (WebScriptObject::throwException): Deleted.
        (WebScriptObject::callWebScriptMethod): Deleted.
        (WebScriptObject::evaluateWebScript): Deleted.
        (WebScriptObject::removeWebScriptKey): Deleted.
        (WebScriptObject::stringRepresentation): Deleted.
        (WebScriptObject::webScriptValueAtIndex): Deleted.
        (WebScriptObject::setWebScriptValueAtIndex): Deleted.
        (WebScriptObject::setException): Deleted.
        (DOMEventListener::throwException): Deleted.
        (DOMEventListener::callWebScriptMethod): Deleted.
        (DOMEventListener::evaluateWebScript): Deleted.
        (DOMEventListener::removeWebScriptKey): Deleted.
        (DOMEventListener::stringRepresentation): Deleted.
        (DOMEventListener::webScriptValueAtIndex): Deleted.
        (DOMEventListener::setWebScriptValueAtIndex): Deleted.
        (DOMEventListener::setException): Deleted.
        (DOMEventListener::handleEvent): Deleted.
        * WinLauncher/DOMDefaultImpl.h:
        (WebScriptObject::QueryInterface): Deleted.
        (WebScriptObject::AddRef): Deleted.
        (WebScriptObject::Release): Deleted.
        (DOMObject::QueryInterface): Deleted.
        (DOMEventListener::QueryInterface): Deleted.
        (DOMEventListener::AddRef): Deleted.
        (DOMEventListener::Release): Deleted.
        * WinLauncher/WinLauncher.cpp: Converted stand-alone implementation
        into a C++ class and removed WinAPI code.
        (WinLauncher::WinLauncher):
        (WinLauncher::init):
        (WinLauncher::prepareViews):
        (WinLauncher::setFrameLoadDelegate):
        (WinLauncher::setUIDelegate):
        (WinLauncher::setAccessibilityDelegate):
        (WinLauncher::mainFrame):
        (WinLauncher::seedInitialDefaultPreferences):
        (WinLauncher::setToDefaultPreferences):
        (updateMenuItemForHistoryItem):
        (WinLauncher::showLastVisitedSites):
        (WinLauncher::launchInspector):
        (WinLauncher::navigateForwardOrBackward):
        (WinLauncher::navigateToHistory):
        (WinLauncher::goBack):
        (WinLauncher::goForward):
        (WinLauncher::loadURL):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.
        * WinLauncher/WinLauncher.h: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:
        * WinLauncher/WinLauncherReplace.h:
        (processCrashReport):
        * WinLauncher/WinLauncherWebHost.cpp: Added.
        (SimpleEventListener::SimpleEventListener):
        (SimpleEventListener::handleEvent):
        (WinLauncherWebHost::updateAddressBar):
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        (WinLauncherWebHost::QueryInterface):
        (WinLauncherWebHost::AddRef):
        (WinLauncherWebHost::Release):
        (WinLauncherWebHost::didFinishLoadForFrame):
        * WinLauncher/WinLauncherWebHost.h: Copied from WinLauncher/WinLauncher.h.
        Moved WinLauncherWebHost implementation from WinLauncher.cpp into
        its own set of files.
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didChangeIcons):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        (WinLauncherWebHost::didClearWindowObject):
        * WinLauncher/WinMain.cpp: Added. This consists of code from
        WinLauncher that is unique to the WinLauncher utility, and is
        not part of the WinLauncher class.
        (wWinMain):
        (MyRegisterClass):

2014-06-23  Simon Fraser  <simon.fraser@apple.com>

        Enable the Web Inspector in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=134148

        Reviewed by Joseph Pecoraro.
        
        Set the pref to enable Web Inspector in both WK1 and WK2 windows.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):

2014-06-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Disable gamepad feature on EFL and GTK ports by default
        https://bugs.webkit.org/show_bug.cgi?id=134169

        Reviewed by Brady Eidson.

        EFL and GTK ports disabled Gamepad feature now. Besides current implementation
        was treated to 'deprecated' status.

        ENABLE_GAMEPAD_DEPRECATED is disabled for now. There is build break on EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-21  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [Inspector][EFL] Can't resume a special break point on EFL inspector
        https://bugs.webkit.org/show_bug.cgi?id=129294

        Reviewed by Gyuyoung Kim.

        Patch our EFL 1.9 with the fix landed in upstream EFL 1.10
        by Ryuan Choi - <https://phab.enlightenment.org/D790>

        * efl/jhbuild.modules:
        * efl/patches/ecore.patch: Added.

2014-06-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Removing PAGE_VISIBILITY_API compile guard.
        https://bugs.webkit.org/show_bug.cgi?id=133844

        Reviewed by Gavin Barraclough.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove DumpRenderTree/efl and EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134138

        Reviewed by Gyuyoung Kim.

        DumpRenderTree/efl and EWebLauncher are not necessary anymore because WebKit1 EFL will be removed.

        * CMakeLists.txt:
        * DumpRenderTree/PlatformEfl.cmake: Removed.
        * DumpRenderTree/efl: Removed entire directory.
        * EWebLauncher: Ditto.
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.cpp: Renamed from Tools/DumpRenderTree/efl/FontManagement.cpp.
        (buildPath):
        (getCoreFontFiles):
        (addFontDirectory):
        (addFontFiles):
        (getCustomBuildDir):
        (getPlatformFontsPath):
        (addFontsToEnvironment):
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.h: Renamed from Tools/DumpRenderTree/efl/FontManagement.h.
        * WebKitTestRunner/PlatformEfl.cmake:

2014-06-20  Zalan Bujtas  <zalan@apple.com>

        Name moving. Unreviewed.

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

2014-06-20  Javier Fernandez  <jfernandez@igalia.com>

        Unreviewed. Adding myself to committers.

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

2014-06-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed. Adding myself to committers.

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

2014-06-20  Tim Horton  <timothy_horton@apple.com>

        Make WebKit2 more accessible in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=134099

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        (-[BrowserAppDelegate toggleUseWebKit2ByDefault:]):
        (-[BrowserAppDelegate _useWebKit2ByDefault]):
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        (-[BrowserAppDelegate validateMenuItem:]):
        * MiniBrowser/mac/MainMenu.xib:
        Add a "Use WebKit2 By Default" menu item to the top of the Debug menu.
        When switched on, Cmd-N will make WebKit2 windows (and the default window will be WebKit2).
        Make the non-default new-window menu item always show up, because people often don't find it
        when you have to press option to have it show up.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithWindow:]):
        
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        Use the cached [menuItem action] like the earlier cases do.

2014-06-20  Daniel Bates  <dabates@apple.com>

        Teach run-{safari, webkit-app} about iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=133986

        Reviewed by David Kilzer.

        Extract the logic from old-run-webkit-tests to install and launch {DumpRenderTree, WebKitTestRunnerApp}.app
        into general-purpose routines in webkitdirs.pm so that they can be used both by script old-run-webkit-tests
        and run-safari.

        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification): Extracted logic to install and launch {DumpRenderTree,
        WebKitTestRunnerApp}.app into webkitdirs::installAndLaunchIOSWebKitAppInSimulator() and modified code
        to call it.
        (openIPhoneSimulator): Deleted; moved logic to webkitdirs::openIOSSimulator().
        (quitIPhoneSimulator): Deleted; moved logic to webkitdirs::quitIOSSimulator().
        * Scripts/run-webkit-app: Modified to call runIOSWebKitApp() when the iOS simulator SDK is used
        (say, by specifying the optional command-line argument --simulator). For now, die() with an error
        when the iOS device SDK is used as we don't support launching an app on the device at this time.
        * Scripts/webkitdirs.pm:
        (xcodeSDKVersion): Added.
        (setupIOSWebKitEnvironment): Added.
        (installedMobileSafariBundle): Added.
        (mobileSafariBundle): Added.
        (plistPathFromBundle): Added.
        (appIdentiferFromBundle): Added.
        (appDisplayNameFromBundle): Added.
        (loadIPhoneSimulatorNotificationIfNeeded): Added.
        (openIOSSimulator): Added.
        (quitIOSSimulator): Added.
        (iosSimulatorDeviceByName): Added.
        (iosSimulatorRuntime): Added.
        (findOrCreateSimulatorForIOSDevice): Added.
        (runIOSWebKitAppInSimulator): Added.
        (installAndLaunchIOSWebKitAppInSimulator): Added.
        (runIOSWebKitApp): Added.
        (runSafari): Modified to call runIOSWebKitAppInSimulator() the iOS simulator SDK is used. For now,
        die() with an error when the iOS device SDK is used as we don't support launching Safari on the
        device at this time.

2014-06-19  Anders Carlsson  <andersca@apple.com>

        Add WTF::Optional class
        https://bugs.webkit.org/show_bug.cgi?id=134083

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Optional.cpp: Added.
        (TestWebKitAPI::TEST):

2014-06-20  Ion Rosca  <rosca@adobe.com>

        Unreviewed. Adding myself to Committers list.

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

2014-06-20  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Add gstreamer as dependecy of EFL after r169785
        https://bugs.webkit.org/show_bug.cgi?id=134066

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2014-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Merge url_utils.c to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=134095

        Reviewed by Csaba Osztrogonác.

        url_utils.c is simple code to share between EWebLauncher and MiniBrowser.
        This patch removes the dependency of url_utils.c from MiniBrowser to drop WebKit1 EFL port.

        * MiniBrowser/efl/CMakeLists.txt:
        Remove the EWebLauncher/ from the includes and url_utils.h from the source lists.
        * MiniBrowser/efl/main.c:
        (has_scheme): Copied from url_utils.c
        (url_from_user_input): Ditto.

2014-06-19  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix webkitpy tests after EFL WK1 buildbot and EWS removal - r170172.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_wk2_port):
        (DeprecatedPortTest.test_efl_port): Deleted.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineExpectations.test_rebaseline_expectations):

2014-06-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][CMAKE] Disable WebKit1 build as a default
        https://bugs.webkit.org/show_bug.cgi?id=134093

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:

2014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter
        https://bugs.webkit.org/show_bug.cgi?id=93002

        Reviewed by Gustavo Noronha Silva.

        Add unit tests to check WebKitDOMNodefilter API used from both
        TreeWalker and NodeIterator.

        * Scripts/webkitpy/style/checker.py: Add exceptions for GTK+
        public headers and add WebKitDOMNodeFilter to the list of exceptions.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add new files to compilation.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp: Added.
        (webkitNodeFilterAcceptNode):
        (webkitNodeFilterDOMNodeFilterIfaceInit):
        (webkit_node_filter_init):
        (webkit_node_filter_class_init):
        (WebKitDOMNodeFilterTest::create):
        (WebKitDOMNodeFilterTest::webPageFromArgs):
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        (WebKitDOMNodeFilterTest::runTest):
        (registerTests):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp: Added.
        (runTest):
        (testWebKitDOMNodeFilterTreeWalker):
        (testWebKitDOMNodeFilterNodeIterator):
        (beforeAll):
        (afterAll):
        * gtk/webkitdom.py:
        (WebKitDOMDocGeneratorSections.__init__):
        (WebKitDOMDocGeneratorSections._symbol_list):
        (WebKitDOMDocGeneratorSections.write_section):

2014-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Limit the amount of API exposed to GObject DOM bindings API
        https://bugs.webkit.org/show_bug.cgi?id=133726

        Reviewed by Gustavo Noronha Silva.

        Don't make fatal finding files without a .symbols file, since now
        only the stable DOM API has .symbols files.

        * gtk/webkitdom.py:
        (get_all_webkitdom_symbol_files):

2014-06-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove efl wk1 buildbot and ews
        https://bugs.webkit.org/show_bug.cgi?id=134089

        Reviewed by Benjamin Poulain.

        EFL WK1 is not supported anymore. Removed all bots for EFL WK1 bots.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (QtWK2Port.run_webkit_tests_command):
        (EflPort): Deleted.
        (EflPort.build_webkit_command): Deleted.
        * Scripts/webkitpy/port/builders.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/loader_unittests.js:

2014-06-19  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style does not understand Obj-C literal syntax for NSDictionary
        <http://webkit.org/b/134061>

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing): Ignore '@' immediately before '{'.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_before_braces): Add unit test for
        '^{' block syntax and '@{' Objective-C liternal NSDitionary
        syntax.

2014-06-18  Tim Horton  <timothy_horton@apple.com>

        All of MiniBrowser's WKWebViews should share a configuration
        https://bugs.webkit.org/show_bug.cgi?id=134017

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        Share a single WKWebViewConfiguration between all of MiniBrowser's views.
        This means that they'll share things like preferences, visited links, etc.
        It also means that we'll properly share processes once we hit the process limit.

2014-06-18  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Bump the GLib and GTK+ dependencies in jhbuild-wayland.modules
        https://bugs.webkit.org/show_bug.cgi?id=133971

        Reviewed by Martin Robinson.

        * gtk/jhbuild-wayland.modules: Bump the GTK+ dependency that's required for
        building for the Wayland target. The latest 3.12 version is required to match
        the xdg_shell protocol version used in Weston 1.5. GLib dependency is bumped
        as well due to GTK+ depending on a newer version.

2014-06-17  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Turn on NOSNIFF in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=134010

        Reviewed by Csaba Osztrogonác.

        r164848 enabled NOSNIFF feature for EFL port but missed to change FeatureList.pm.

        * Scripts/webkitperl/FeatureList.pm: Turn on NOSNIFF for the EFL port.

2014-06-17  Tim Horton  <timothy_horton@apple.com>

        MiniBrowser should show Web Content process pids in the window title
        https://bugs.webkit.org/show_bug.cgi?id=134016

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):

2014-06-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix the handling of resize events after r169505.
        https://bugs.webkit.org/show_bug.cgi?id=133517

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start): Set the resolution of Xvfb to XGA (1024x768).
        The tests css3/viewport-percentage-lengths/viewport-percentage-lengths-*.html
        need at least 900x640 pixels to pass.
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.test_start_no_pixel_tests): Update resolution.
        (XvfbDriverTest.test_start_pixel_tests): Update resolution.
        (XvfbDriverTest.test_start_arbitrary_worker_number): Update resolution.
        (XvfbDriverTest.test_start_next_worker): Update resolution.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView): gtk_widget_size_allocate should
        be requested over the main widget instead of the window.
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame like
        the Mac port.
        (WTR::PlatformWebView::windowFrame): Remove legacy ifdef for GTK2.
        (WTR::PlatformWebView::setWindowFrame): Set the size and position
        of the Window and the web view.

2014-06-17  Matthew Mirman <mmirman@apple.com>

        Unreviewed. Added myself to list of contributors.

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

2014-06-17  Commit Queue  <commit-queue@webkit.org>

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

        Caused 4 webkitpy failures on the bots (Requested by bradee-oh
        on #webkit).

        Reverted changeset:

        "[GTK] Fix the handling of resize events after r169505."
        https://bugs.webkit.org/show_bug.cgi?id=133517
        http://trac.webkit.org/changeset/170058

2014-06-17  Rebecca Hauck  <rhauck@adobe.com>

        Update import-w3c-tests to reflect current W3C test repo directory structure
        https://bugs.webkit.org/show_bug.cgi?id=133460

        Reviewed by Bem Jones-Bey.

        Removed all references to test status, which are no longer reflected in the
        directory names in the W3C CSS test repo.  No tests are required for this 
        change, the existing tests pass.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (TestImporter.__init__):
        (TestImporter.find_importable_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.write_import_log):
        (TestImporter.update_test_status): Deleted.

2014-06-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix the handling of resize events after r169505.
        https://bugs.webkit.org/show_bug.cgi?id=133517

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start): Set the resolution of Xvfb to XGA (1024x768).
        The tests css3/viewport-percentage-lengths/viewport-percentage-lengths-*.html
        need at least 900x640 pixels to pass.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView): gtk_widget_size_allocate should
        be requested over the main widget instead of the window.
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame like
        the Mac port.
        (WTR::PlatformWebView::windowFrame): Remove legacy ifdef for GTK2.
        (WTR::PlatformWebView::setWindowFrame): Set the size and position
        of the Window and the web view.

2014-06-17  Dan Bernstein  <mitz@apple.com>

        String::isolatedCopy doesn’t return an isolated copy when used on an rvalue reference
        https://bugs.webkit.org/show_bug.cgi?id=133968

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST): Added a test that an isolated copy of an rvalue reference doesn’t
        share an impl() with the original.

2014-06-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Skip failing EFL API tests
        https://bugs.webkit.org/show_bug.cgi?id=133981

        Reviewed by Csaba Osztrogonác.

        UserMessage, WillLoad and test_ewk2_view have been failed since r169784.

        * TestWebKitAPI/PlatformEfl.cmake:

2014-06-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Remove workaround for icon display bug in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=133962

        Reviewed by Gyuyoung Kim.

        Since we bumped EFL to 1.9, this workaround is unnecessary.

        * MiniBrowser/efl/main.c:
        (update_view_favicon):

2014-06-16  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Add llvmpipe (Mesa) to the JHBuild moduleset and force it when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=131472

        Reviewed by Martin Robinson.

        This patch reapplies r167510 with fixes to add llvm as a dependency for llvmpipe.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start): Use the LLVMPIPE_LIBGL_PATH to set the LD_LIBRARY_PATH
        when running WebKitTestRunner with the Xvfb driver.
        * gtk/install-dependencies: Add LLVM as a dependency to build llvmpipe.
        * gtk/jhbuild.modules: Add Mesa to the modulelist so that the llvmpipe libGL is build, but not
        installed.
        * gtk/jhbuildrc: Set the LLVMPIPE_LIBGL_PATH environment variable so that the test driver knows
        how to properly set the LD_LIBRARY_PATH variable. We do this because it is much easier to
        calculate the path in the jhbuildrc than in the test driver code. This simplifies things a great
        deal.

2014-06-16  Tanay C  <tanay.c@samsung.com>

        Remove deprecated API warnings in WebKit/Tools/MiniBrowser/efl/main.c
        https://bugs.webkit.org/show_bug.cgi?id=133792

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: replaced the deprecated API's with the latest ones
        (show_file_entry_dialog):
        (window_create):

2014-06-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Missing 'selection-changed' signal when navigating a combo box with keyboard
        https://bugs.webkit.org/show_bug.cgi?id=133512

        Reviewed by Chris Fleizach.

        Added support for connecting to AtkSelection's 'selection-changed'
        signal, and print it out as AXSelectedChildrenChanged in the tests.

        Also removed some dead code, that became useless after r169487.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Updated.

2014-06-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Change ewk_view_settings_get to ewk_page_group_settings_get
        https://bugs.webkit.org/show_bug.cgi?id=133841

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (window_create):

2014-06-15  Dan Bernstein  <mitz@apple.com>

        Set the svn:ignore property on an Xcode project to ignore user and workspace data.

        * jsc-cli/jsc-cli.xcodeproj: Added property svn:ignore.

2014-06-15  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        (callRunJavaScriptBlockAndRelease):
        (runJavaScriptInMainFrame):
        (TEST_F):

2014-06-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Create MSE and EME watchlist
        https://bugs.webkit.org/show_bug.cgi?id=133810

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/common/config/watchlist: Create MSEEME
        definition and add Eric Carlson and myself to it.

2014-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove all deprecated API from GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=133728

        Reviewed by Martin Robinson.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator): Remove all deleted classes from the list.
        (WebKitDOMDocGeneratorSections.__init__): Fix a typo in member initialization.

2014-06-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Fix the view being half offscreen in WebKitTestRunner on iOS
        https://bugs.webkit.org/show_bug.cgi?id=133835

        Reviewed by Tim Horton.
        
        Don't do the _fakeOrigin stuff when -initWithFrame: is calling -setFrame:

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[WebKitTestRunnerWindow initWithFrame:]):
        (-[WebKitTestRunnerWindow setFrame:]):

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

        [GTK] Performance tests should be always ran with WKTR.
        https://bugs.webkit.org/show_bug.cgi?id=133780

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__): Enable webkit_test_runner when port
        is GTK.

2014-06-12  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] REGRESSION: application name is not correctly appended to the UA
        https://bugs.webkit.org/show_bug.cgi?id=133793

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettingsUserAgent):

2014-06-12  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Unsupported browser in www.icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=133403

        Reviewed by Martin Robinson.

        * TestWebKitAPI/Tests/WebCore/gtk/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): removed a test for the NeedsSafariVersion6
        quirk that was removed.

2014-06-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Give WebKitTestRunner a viewport configuration with initial scale=1 for testing
        https://bugs.webkit.org/show_bug.cgi?id=133779

        Reviewed by Benjamin Poulain.
        
        Tell the WebPage to use the testing viewport configuration from the injected bundle.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage): Code cleanup.
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame): Call WKBundlePageSetUseTestingViewportConfiguration()
        on iOS.

2014-06-11  Simon Fraser  <simon.fraser@apple.com>

        WTR cleanup: push per-test viewport configuration into TestController, where platforms can customize it
        https://bugs.webkit.org/show_bug.cgi?id=133770

        Reviewed by Anders Carlsson.
        
        Push the per-test view configuration up to TestController, so that platforms
        can modify the behavior. This also allows platform-specific changes (e.g.
        for threaded scrolling) to made without #ifefs.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        (WTR::shouldUseFixedLayout):
        (WTR::TestController::updateLayoutTypeForTest):
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::TestController::configureViewForTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::sizeWebViewForCurrentTest): Deleted.
        (WTR::changeWindowScaleIfNeeded): Deleted.
        (WTR::shouldUseThreadedScrolling): Deleted.
        (WTR::updateThreadedScrollingForCurrentTest): Deleted.
        (WTR::shouldUseFixedLayout): Deleted.
        (WTR::updateLayoutType): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::pathOrURL):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::shouldMakeViewportFlexible):
        (WTR::TestController::platformConfigureViewForTest):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::shouldUseThreadedScrolling):
        (WTR::TestController::platformConfigureViewForTest):

2014-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Add dependencies packages to efl install-dependencies file
        https://bugs.webkit.org/show_bug.cgi?id=133720

        Reviewed by Csaba Osztrogonác.

        After r169785, EFL port starts to use efl 1.9 ver. EFL port needs to
        install doxygen and libssl-dev because efl 1.9 depends on those libraries.

        * efl/install-dependencies:

2014-06-11  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed. Moving myself to the list of reviewers.

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

2014-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Drop to maintain EFL 32bit release bot
        https://bugs.webkit.org/show_bug.cgi?id=133710

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Removed EFL 32bit bot.

2014-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a different user agent string depending on the site
        https://bugs.webkit.org/show_bug.cgi?id=132681

        Reviewed by Anders Carlsson.

        Add a unit test to check user agent quirks.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/gtk/UserAgentQuirks.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettings): Site specific quirks setting is now enabled
        by default.

2014-06-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, update my list of email addresses in contributors.json.

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

2014-06-10  Simon Fraser  <simon.fraser@apple.com>

        Always switch to an sRGB screen color profile when running tests
        https://bugs.webkit.org/show_bug.cgi?id=133712

        Reviewed by Tim Horton.
        
        Switch the screen color profile to sRGB when running tests, because even ref
        tests need the screen to use the correct color profile.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper):

2014-06-10  Martin Hodovan  <mhodovan@partner.samsung.com>

        [EFL] Bump EFL libraries to 1.9
        https://bugs.webkit.org/show_bug.cgi?id=125479

        Reviewed by Gyuyoung Kim.

        Based on the work of Ryuan Choi <ryuan.choi@samsung.com>
        and László Langó <llango.u-szeged@partner.samsung.com>.

        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * efl/install-dependencies:
        * efl/jhbuild.modules:
        * efl/jhbuildrc:

2014-06-10  David Farler  <dfarler@apple.com>

        old-run-webkit-tests: Create CoreSimulator device on demand and find it by name
        https://bugs.webkit.org/show_bug.cgi?id=133663

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification):
        - Remove obsolete notification keys
        - Key off of mandatory device UDID (a UUID)
        - Create a device on demand via CoreSimulator if necessary
        -- Grab the UDID from the created device plist.
        * Scripts/webkitdirs.pm:
        (iOSSimulatorDevicesPath): Added
        (iOSSimulatorDevices): Added
        (createiOSSimulatorDevice): Added
        (deleteiOSSimulatorDevice): Added

2014-06-10  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK][gtkdoc] remove -Wcast-align
        https://bugs.webkit.org/show_bug.cgi?id=133640

        Apparently gcc warns that GParamSpec is not castable to
        GParamSpecInt64/GParamSpecUInt64/GParamSpecDouble due they are 64bit, even
        though ARM hackers claim that those only need 4byte alignment. As long as gcc
        behaves that way, this warning is not very useful, also they break the Debian
        packaging.

        This patch appends the compiler flag -Wno-align-cast for the gtkdoc
        scanner compilation, thus the compiler ignores the previous
        -Waling-cast flag.

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_generator_for_config):

2014-06-09  Alexey Proskuryakov  <ap@apple.com>

        Disable button animations in regression tests
        https://bugs.webkit.org/show_bug.cgi?id=133647
        <rdar://problem/16677530>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Move scrolling-related tests to tiled-drawing/scrolling subdirectory, and minor cleanup
        https://bugs.webkit.org/show_bug.cgi?id=133650

        Reviewed by Tim Horton.
        
        No point checking for a Windows-style path in Cocoa code.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldUseThreadedScrolling):

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Fix more latched scrolling test flakiness and slowness
        https://bugs.webkit.org/show_bug.cgi?id=133601

        Reviewed by Brent Fulgham.
        
        Latched scrolling tests were flakey for two reasons. First, the EventSender
        wheel events were async from the web to the UI process, and the resulting
        synthetic events also async from the UI to the web process. Make them sync
        for testing.
        
        Secondly, the timer-based scrolling tree commit could result in the scrolling
        tree (specifically the frame node's notion of the scrollable area and content
        size) not being updated before the scrolling thread starts getting wheel events.
        Fix by having WebPage::wheelEventSyncForTesting() commit if necessary.
        
        Finally remove all the now-unnecessary timeouts from the tests.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2014-06-09  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] Add parameter to MiniBrowser to disable web security
        https://bugs.webkit.org/show_bug.cgi?id=121095

        Reviewed by Gyuyoung Kim.

        -w (--web-security) commandline allows to disable/enable web security (enabled by default).
        The reason for this is to test and debug (using, for example, MiniBrowser) scripts accessing
        resources from other domains (cross-domain requests) such as access map location on another server.
        Another possibility is to launch in a webkit browser local file tests that will refer to the links
        in the http website loaded in an iframe. It will not be possible without deactivation of web security.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2014-06-06  Simon Fraser  <simon.fraser@apple.com>

        32-bit build fix.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2014-06-06  Simon Fraser  <simon.fraser@apple.com>

        Fix builds on 10.8; -firstObject isn't declared on NSArray there.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2014-06-06  Simon Fraser  <simon.fraser@apple.com>

        Latched scrolling tests are flakey on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=133578
        <rdar://problem/17180591>

        Reviewed by Brent Fulgham.
        
        The latched scrolling tests rely on synthetic mousewheel events whose coordinates can
        be wrong on machines with more than one screen. This is because we use
        [NSScreen mainScreen] when computing the global coordinates of the events, but
        [NSScreen mainScreen] returns the screen with the key window, not the first screen.
        
        So replace calls to [NSScreen mainScreen] with [[NSScreen screens] firstObject]. Also
        add comments clarifying why the coordinate math works (which is not obvious given
        the events have no target window).
        
        Some scrolling tests also dispatched events outside the 800x600 test window, so
        fix those tests, and add logging that will appear in test output when this happens.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2014-06-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] run-perf-tests should run the tests inside the jhbuild shell.
        https://bugs.webkit.org/show_bug.cgi?id=133533

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/common/multiprocessing_bootstrap.py:
        (run): Remove the jhbuild-wrapper wrapper from here. It should be
        on Scripts/webkitpy/port/gtk.py.
        * Scripts/webkitpy/port/base.py:
        (Port.set_option): Add a set_option(name, value) function to set
        the optparse parameter "name" to the value "value", even if the
        parameter "name" is already initialized.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__): Set the default wrapper to jhbuild-wrapper.
        If another wrapper is specified via the option "-l --wrapper=x",
        then prepend the jhbuild-wrapper to the one specified.

2014-06-04  David Farler  <dfarler@apple.com>

        Build ASan WebKit for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=133489

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        - Add missing ASan LDFLAGS.
        * asan/asan.xcconfig:
        - Split compiler-rt linker flags for OS X and iOS Simulator

2014-06-03  Yoav Weiss  <yoav@yoav.ws>

        Add myself (yoav@yoav.ws) to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=133492

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

2014-06-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r169092 and r169102): Skip failing JSC tests poperly on non-x86 Darwin platforms
        https://bugs.webkit.org/show_bug.cgi?id=133149

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests: Added determineOS to determine the host operating system the script run on.

2014-06-02  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Add a verbose flag to binding tests
        https://bugs.webkit.org/show_bug.cgi?id=122303

        Reviewed by Csaba Osztrogonác.

        This patch will:
        - Add a verbose keyword argument to the BindingsTests constructor,
        - Add --no-verbose option to the run-bindigs-test.
        Verbose mode, which is on by default, prints positive results to stdout as before.
        When the --no-verbose option added to run-bindings-tests, positive results are not printed at all.

        Original patch from Matthew Hanson <matthew_hanson@apple.com>

        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.__init__):
        (BindingsTests.detect_changes):

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DoYouEvenBench 0.17 to Speedometer 1.0 and add a new look.
        https://bugs.webkit.org/show_bug.cgi?id=133455

        Reviewed by Timothy Hatcher.

        Since the perf. dashboard doesn't support following renamed benchmarks,
        keep reporting Speedometer results as DoYouEvenBench results.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict):

2014-05-31  Darin Adler  <darin@apple.com>

        Viewport percentage tests that resize the viewport are flaky
        https://bugs.webkit.org/show_bug.cgi?id=133351

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (sizeWebViewForCurrentTest): Added a call to reset the window origin, which
        happens to be stored in the UI delegate object. This is part of resetting the
        window position.

        * DumpRenderTree/mac/UIDelegate.h: Store the window origin rather than storing
        a frame rectangle. The size is stored in the size of the web view itself.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate resetWindowOrigin]): Added.
        (-[UIDelegate webView:setFrame:]): Changed to set the size of the web view. The
        old version would store the frame, but not resize the web view!
        (-[UIDelegate webViewFrame:]): Get the size from the web view.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::setWindowFrame): Added code to resize the web view.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::resizeTo): Added a comment about missing code to resize
        the window.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame so the
        window gets resized too, not just the web view.
        (WTR::PlatformWebView::setWindowFrame): Added code to set the size of the web view.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame so the
        window gets resized too, not just the web view.
        (WTR::PlatformWebView::setWindowFrame): Added code to set the size of the web view.

2014-05-30  Michael Saboff  <msaboff@apple.com>

        Change run-jsc-stress-tests to not resolve jsc path locally when creating a bundle
        https://bugs.webkit.org/show_bug.cgi?id=133409

        Reviewed by Filip Pizlo.

        Handle creating a tarball the same way as running remote when processing
        paths in prepareBundle.

        * Scripts/run-jsc-stress-tests:

2014-05-30  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Deprecate usage of logAccessibilityEvents() in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=132280

        Reviewed by Chris Fleizach.

        Remove implementation of logAccessibilityEvents() for ATK based
        ports, as this has proved to be a flaky method of checking that
        ATK events are being properly emitted. Instead, it's better to use
        the addNotificationListener() functions and provide a JS callback
        to check that the right events are being emmitted from the tests.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::logAccessibilityEvents): Replaced
        with dummy implementation.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::logAccessibilityEvents): Removed

2014-05-30  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Deprecate usage of logAccessibilityEvents() in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=132280

        Rubber stamped by Carlos Garcia Campos.

        Fix two small issues with previous patch (r169483), that caused some tests to break.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Removed
        duplicated entry.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::setSelectedTextRange): Fix boolean condition.

2014-05-30  Jarek Czekalski  <jarekczek@poczta.onet.pl>

        [ATK] Added new accessibility signal: text-caret-moved.
        Make AccessibilityUIElement.setSelectedTextRange work
        as atk_text_set_caret_offset when given offset == 0.
        https://bugs.webkit.org/show_bug.cgi?id=132527

        Reviewed by Mario Sanchez Prada.

        text-caret-moved signal in accessibilityController is needed to
        implement tests from Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c
        as LayoutTests. Add the signal to the controller.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (setSelectedTextRange): Change return type to bool.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (setSelectedTextRange): Call atk_text_set_caret_offset and return bool.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (axObjectEventListener): Add notification name AXTextCaretMoved, allow
        for extra arguments passed to handler and use it for text-caret-moved offset.
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks):
        Connect callback to new listener for ATK:AtkText:text-caret-moved.
        Refactor so that failures be reported.
        Initialize atk interfaces before trying to connect to them, see
        https://bugzilla.gnome.org/show_bug.cgi?id=729922
        (WTR::AccessibilityNotificationHandler::disconnectAccessibilityCallbacks):
        Simplify code by using a vector in place of dozen variables.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        Comment about not synchronizing with accessibilityController.

2014-05-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add a WebKit2 Performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=132862

        Reviewed by Csaba Osztrogonác.

        This adds a GTK WebKit2 perf bot.

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

2014-05-29  Dan Bernstein  <mitz@apple.com>

        Fixed the WebKitTestRunner build after r169452.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):

2014-05-28  Gwang Yoon Hwang  <yoon@igalia.com>

        Unreviewed. Update my email addresses in contributors.json.

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

2014-05-27  Jon Honeycutt  <jhoneycutt@apple.com>

        Need an API test for bug #133193 (r169315)
        <https://bugs.webkit.org/show_bug.cgi?id=133324>

        This adds an API test that ensures that calling "stop loading" during a
        "did fail provisional load" callback doesn't crash.

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add new files to project.

        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        If the message is the "test done" message, record that.
        (TestWebKitAPI::setInjectedBundleClient):
        Register a function for the "did receive message from injected bundle"
        callback.
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        Assert that we received the message from the injected bundle, and set
        'done' to finish the test.
        (TestWebKitAPI::TEST):
        Create a WebView, register a page loader client for the "did fail
        provisional load" callback, and load a non-existent resource.

        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad_bundle.cpp: Added.
        (TestWebKitAPI::StopLoadingDuringDidFailProvisionalLoadTest::StopLoadingDuringDidFailProvisionalLoadTest):
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrameCallback):
        Tell the StopLoadingDuringDidFailProvisionalLoadTest object that the
        provisional load failed.
        (TestWebKitAPI::StopLoadingDuringDidFailProvisionalLoadTest::didCreatePage):
        Register a page loader client for the "did fail provisional load"
        callback.
        (TestWebKitAPI::StopLoadingDuringDidFailProvisionalLoadTest::didFailProvisionalLoad):
        Call WKBundlePageStopLoading() during the callback. This not crashing
        is what we're ensuring with this test.

2014-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make it possible to build with FTL enabled
        https://bugs.webkit.org/show_bug.cgi?id=133219

        Reviewed by Philippe Normand.

        * gtk/jhbuild-optional.modules: Add llvm from svn and build the
        same revision than mac.

2014-05-27  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r169265): sh: line 0: cd: ../.vm
        https://bugs.webkit.org/show_bug.cgi?id=133242

        Rubber stamped by Oliver Hunt.

        Changed runAndMonitorTestRunnerCommand() to pass mysys as a string instead of an
        array since the command may contain character escapes that don't work with the
        array form of system().

        * Scripts/run-jsc-stress-tests:

2014-05-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Change download url of freetype6
        https://bugs.webkit.org/show_bug.cgi?id=133303

        Reviewed by Csaba Osztrogonác.

        freetype6 tarball isn't downloaded in Korea. So, we need to
        change the url for now.

        * efl/jhbuild.modules:

2014-05-27  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove BLOB guards
        https://bugs.webkit.org/show_bug.cgi?id=132863

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm:

2014-05-27  Alberto Garcia  <berto@igalia.com>

        Remove leftover comment from r165182.

        Rubber stamped by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:

2014-05-26  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [EFL] Add LLVM as optional jhbuild module for FTL developers
        https://bugs.webkit.org/show_bug.cgi?id=133216

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2014-05-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix test failures on python test
        https://bugs.webkit.org/show_bug.cgi?id=133297

        Reviewed by Dirk Schulze.

        2 tests are failing because of unbounded local variable reference in test_importer.py.

        * Scripts/webkitpy/w3c/test_importer.py: Move local variable declaration to top.
        (TestImporter.import_tests):

2014-05-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] GObject DOM bindings API break test fails in the tests bots
        https://bugs.webkit.org/show_bug.cgi?id=133211

        Reviewed by Martin Robinson.

        When generating the built product archive on platform GTK, we need
        to copy also the file gtkdoc-webkitdom.cfg and the directory
        DerivedSources/webkitdom.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2014-05-26  Commit Queue  <commit-queue@webkit.org>

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

        Broke CJK font fallback (Requested by ap on #webkit).

        Reverted changeset:

        "[Mac] WebProcess doesn't follow localization of UI process
        when run as a service"
        https://bugs.webkit.org/show_bug.cgi?id=133126
        http://trac.webkit.org/changeset/169122

2014-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebProcess leaked when closing pages with network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=129684

        Reviewed by Anders Carlsson.

        Enable the test to check that web processes finish when the web
        view is destroyed.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:

2014-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r164632): [GTK] Crash in generate-gtkdoc when rebasing docs
        https://bugs.webkit.org/show_bug.cgi?id=133279

        Reviewed by Philippe Normand.

        generator.saw_warnings is only set by GTKDoc::generate(), so it
        should only be used after generate.

        * gtk/generate-gtkdoc:
        (generate_documentation_for_config): Do not check
        generator.saw_warnings again, simply return the value returned by
        generate_doc() which is generator.saw_warnings. When rebasing,
        returns always False since there aren't warnings.

2014-05-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should catch exceptions coming from HTML/CSS conversion
        https://bugs.webkit.org/show_bug.cgi?id=133176

        Reviewed by Darin Adler.

        Exceptions raised when converting HTML/CSS are caught.
        Files for which conversion failed are still copied to the target directory.
        Each individual conversion failure is logged.
        Total conversion failure number is logged at the end of the import process.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.import_tests):

2014-05-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Allow to run the tests on the native X display.
        https://bugs.webkit.org/show_bug.cgi?id=133157

        Reviewed by Benjamin Poulain.

        This adds a new driver (xorgdriver) that runs the tests on the
        X display referenced by the environment variable DISPLAY.

        This new driver will be activated only if the environment variable
        USE_NATIVE_XDISPLAY is defined. This can be used both for layout
        tests and performance tests.

        This patch also makes the script run-perf-tests to check the
        system dependencies before starting the tests. Previously this
        was not checked, and if the system dependencies were not met,
        the script tried to execute the tests anyway, causing massive
        failures. For example, if you had Xvfb not installed and you
        wanted to use the Xvfb driver (the default on GTK and EFL),
        run-perf-tests would not abort.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Check the system dependencies of
        the driver before starting the tests.
        * Scripts/webkitpy/port/driver.py:
        (Driver): Implement generic check_driver method.
        (Driver.check_driver):
        (Driver.check_driver.implementation):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._driver_class): Check for environment variable
        USE_NATIVE_XDISPLAY to decide if the Xorg driver should be used.
        * Scripts/webkitpy/port/xorgdriver.py: Added.
        (XorgDriver): Implement Xorg driver.
        (XorgDriver.check_driver):
        (XorgDriver._start):

2014-05-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r166798): [GTK] [EFL] kill-old-processes should not kill dbus-daemon
        https://bugs.webkit.org/show_bug.cgi?id=133215

        Reviewed by Csaba Osztrogonác.

        This reverts r166798.

        * BuildSlaveSupport/kill-old-processes:
        (main):

2014-05-26  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Turn on ENABLE_CSS_FILTERS in build script
        https://bugs.webkit.org/show_bug.cgi?id=133278

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm: Add a build script condition missing in r169172.

2014-05-26  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        run-javascriptcore-tests warning fix on non Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=133260

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

2014-05-23  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r169265): sh: line 0: cd: ../.vm
        https://bugs.webkit.org/show_bug.cgi?id=133242

        Rubber stamped by Geoffrey Garen.

        Added missing shell escapes '\' required as part of previous fix.

        * Scripts/run-jsc-stress-tests:

2014-05-23  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the erroneous change committed in r169286.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._run_with_driver):

2014-05-23  Geoffrey Garen  <ggaren@apple.com>

        run-perf-tests should ignore whitespace lines when snarfing test output
        https://bugs.webkit.org/show_bug.cgi?id=133238

        Reviewed by Ryosuke Niwa.

        Required for PerformanceTests/Canvas/terrain.html.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._run_with_driver):
        (PerfTest):

2014-05-23  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r169241) Crash running run-jsc-stress-tests on EFL ARM
        https://bugs.webkit.org/show_bug.cgi?id=133223

        Reviewed by Geoffrey Garen.

        Change runAndMonitorTestRunnerCommand() to convert the *cmd argument to a
        string before calling IO.popen() to work with older versions of ruby.
        Changed the remote path in runShellTestRunner to quote the command
        string we want to run via ssh so that it will work correctly with array
        to string conversion needed for popen.

        * Scripts/run-jsc-stress-tests:

2014-05-23  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Remove 'css-shaders' option from the build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=133212

        Reviewed by Daniel Bates.

        Original CSS shaders removed in r162644.

        * Scripts/webkitperl/FeatureList.pm:

2014-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GObject DOM bindings API break test should fail in the bots when the command fails to run
        https://bugs.webkit.org/show_bug.cgi?id=133209

        Reviewed by Sergio Villar Senin.

        Return FAILURE when the command failed to run.

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

2014-05-23  Alberto Garcia  <berto@igalia.com>

        [GTK] Install libharfbuzz-dev in Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=133210

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies:

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        Add Yusuke Suzuki to the list of contributors (for real)

        Wrong section...

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

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        Add Yusuke Suzuki to the list of contributors

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

2014-05-22  Michael Saboff  <msaboff@apple.com>

        Eliminate n/total progress update from run-jsc-stress-tests output to file
        https://bugs.webkit.org/show_bug.cgi?id=133191

        Reviewed by Geoffrey Garen.

        Changed progressMeter setting to be based on stdout being a tty instead of
        stdin.  Unified the processing of output from the shell runner to match the
        same processing as is used by the makefile runner.  As part of this, the 
        shell runner script was simplified.  It now forwards the output of each
        test_script just like the Makefile and doesn't provide its own progress.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh:
        * Scripts/run-jsc-stress-tests:

2014-05-22  Michael Saboff  <msaboff@apple.com>

        Add option to run-jsc-stress-tests to use installed jsc
        https://bugs.webkit.org/show_bug.cgi?id=133102

        Reviewed by Geoffrey Garen.

        Added --no-copy option to not copy a JavaScriptCore framework, but use the one
        provied with the --jsc option.

        * Scripts/run-jsc-stress-tests:

2014-05-21  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        [EFL] Add include path of compact_unwind_encoding.h if FTL JIT is enabled
        https://bugs.webkit.org/show_bug.cgi?id=132907

        Reviewed by Gyuyoung Kim.

        We need the mach-o/compact_unwind_encoding.h header from libc++abi-dev package
        in JavaScriptCore/ftl/FTLUnwindInfo.cpp when FTL JIT is enabled.

        * efl/install-dependencies:

2014-05-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r169092): It broke run-jsc-stress tests on non Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=133145

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests:

2014-05-20  Alexey Proskuryakov  <ap@apple.com>

        [Mac] WebProcess doesn't follow localization of UI process when run as a service
        https://bugs.webkit.org/show_bug.cgi?id=133126
        <rdar://problem/13396515>
        <rdar://problem/16561084>

        Reviewed by Sam Weinig and Tim Horton.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): It was too late to override language
        here, and it's not necessary any more. Keeping the code for older OS versions in
        case it did have effect in some code paths.

2014-05-19  David Farler  <dfarler@apple.com>

        Move WebKitTestRunner to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=133081

        Reviewed by Daniel Bates.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::WorkQueueManager::processWorkQueue):
        (WTR::WorkQueueManager::enqueue):
        * WebKitTestRunner/WorkQueueManager.h:

2014-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebPage::send-request always pass a valid pointer for redirected response
        https://bugs.webkit.org/show_bug.cgi?id=133119

        Reviewed by Sergio Villar Senin.

        Check that redirect response parameter of
        WebKitWebPage::send-request signal is NULL when not redirecting
        and a valid WebKitURIResponse object when redirecting.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebResourceSendRequest):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (sendRequestCallback):

2014-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] Several WebKit2GTK+ unit tests are no longer built
        https://bugs.webkit.org/show_bug.cgi?id=133117

        Reviewed by Philippe Normand.

        Bring back missing tests to the build.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:

2014-05-19  Filip Pizlo  <fpizlo@apple.com>

        Take care of some ARM64 test failures
        https://bugs.webkit.org/show_bug.cgi?id=133090

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests: Make it easier to conditionally skip things.

2014-05-19  David Kilzer  <ddkilzer@apple.com>

        [iOS] REGRESSION (r168910): webkitdirs.pm: Be more forgiving when parsing --sdk, --device and --sim
        <http://webkit.org/b/133089>

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (determineXcodeSDK): If both '--sdk SDKROOT' and '--sim' are
        specified on the command line, we would remove the '--sdk'
        arguments, but leave '--sim', potentially passing it along to
        xcodebuild causing a build failure.  This happens when
        'old-run-webkit-tests --release --sim' invokes
        build-dumprendertree when DumpRenderTree hasn't been built yet.

2014-05-19  David Farler  <dfarler@apple.com>

        Dashboard: OpenSource revision key changed from WebKitOpenSource to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=133086

        Reviewed by Daniel Bates.

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

2014-05-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r169042): Fix run-api-tests on Mountain Lion
        <http://webkit.org/b/132954>

        * Scripts/webkitdirs.pm:
        (sharedCommandLineOptionsUsage): Remove the prototype for the
        subroutine.  Older perls don't like the "+@" syntax.

2014-05-19  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        run-javascriptcore-tests should sort the list of failing stress tests
        https://bugs.webkit.org/show_bug.cgi?id=132989

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-javascriptcore-tests:

2014-05-19  David Kilzer  <ddkilzer@apple.com>

        webkitdirs.pm: Add setupMacWebKitEnvironment() to set __XPC_DYLD_FRAMEWORK_PATH consistently
        <http://webkit.org/b/132954>

        Reviewed by Darin Adler.

        Extract code into setupMacWebKitEnvironment() for setting up
        common environment variables so it may be shared.  Sets
        __XPC_DYLD_FRAMEWORK_PATH consistently and adds support for
        using guardmalloc to some scripts.

        Also adds support for parsing shared (common) command-line
        switches, initially just -g|--guard-malloc.

        * Scripts/bisect-builds: Add -g|--guard-malloc support by using
        sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
        (mountAndRunNightly): Call setupMacWebKitEnvironment().  Use a
        local copy of %ENV when launching Safari so we don't have to
        restore variables.

        * Scripts/run-api-tests: Add -g|--guard-malloc support by using
        sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
        Check result of GetOptions() to catch invalid command-line
        switches.
        (runTest): Use a local copy of %ENV when running tests so we
        don't have to restore variables.
        (prepareEnvironmentForRunningTestTool): Call
        setupMacWebKitEnvironment().

        * Scripts/run-pageloadtest: Add -g|--guard-malloc support by
        using sharedCommandLineOptions() and
        sharedCommandLineOptionsUsage().  Call
        setupMacWebKitEnvironment().

        * Scripts/webkitdirs.pm:
        (sharedCommandLineOptions): Return array of common switches to
        pass to Getopt::Long::GetOptions().
        (sharedCommandLineOptionsUsage): Return formatted string of
        common switches for printing usage help text.
        (setUpGuardMallocIfNeeded): Support using '-g' for enabling
        guardmalloc.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Ditto.
        (setupMacWebKitEnvironment): Extracted from runMacWebKitApp()
        and changed not to clobber DYLD_FRAMEWORK_PATH if already set.
        (runMacWebKitApp): Call setupMacWebKitEnvironment().  Use a
        local copy of %ENV when launching Safari so we don't have to
        restore variables.
        (execMacWebKitAppForDebugging): Call
        setupMacWebKitEnvironment().

2014-05-18  Rik Cabanier  <cabanier@adobe.com>

        support for navigator.hardwareConcurrency
        https://bugs.webkit.org/show_bug.cgi?id=132588

        Reviewed by Filip Pizlo.

        * Scripts/webkitperl/FeatureList.pm:

2014-05-18  Anders Carlsson  <andersca@apple.com>

        Implement Navigations for all methods declared returning one
        https://bugs.webkit.org/show_bug.cgi?id=133048
        <rdar://problem/16830064>

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        Import WebKit.h.
        
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:didStartProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didFailProvisionalNavigation:withError:]):
        (-[WK2BrowserWindowController webView:didCommitNavigation:]):
        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
        (-[WK2BrowserWindowController webView:didFailNavigation:withError:]):
        Print out the navigations.

2014-05-17  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Add subpixelCSSOMElementMetricsEnabled to WK1 WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=133029

        Reviewed by Simon Fraser.

        Added a menu item to toggle subpixelCSSOMElementMetricsEnabled's value. However
        toggling it on a WK2 window needs restart.
        Adding dynamic toggle to WK2 requires a WebPreferences SPI. It's not worth cluttering
        the WebPreferences just to support this temporary toggle.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController isSubpixelCSSOMElementMetricsEnabled]):
        (-[WK1BrowserWindowController toggleSubpixelCSSOMElementMetricsEnabled:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController isSubpixelCSSOMElementMetricsEnabled]):
        (-[WK2BrowserWindowController toggleSubpixelCSSOMElementMetricsEnabled:]):

2014-05-17  Anders Carlsson  <andersca@apple.com>

        Replace WKContextSetDatabaseDirectory with two WKContextConfiguration parameters
        https://bugs.webkit.org/show_bug.cgi?id=133033
        <rdar://problem/16830143>

        Reviewed by Sam Weinig.

        Set up the WebSQL and IndexedDB directories.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2014-05-16  Martin Hock  <mhock@apple.com>

        MemoryCache::addImageToCache should return the result of add().
        https://bugs.webkit.org/show_bug.cgi?id=132928
        <rdar://problem/16651547>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/MemoryCacheAddImageToCacheIOS.mm: Added.
        (TestWebKitAPI::TEST):

2014-05-15  David Farler  <dfarler@apple.com>

        old-run-webkit-tests: allow specifying a simulator app path
        https://bugs.webkit.org/show_bug.cgi?id=132975

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (openIPhoneSimulator):
        Add new --simulator-app command line parameter for specifying the
        absolute path to the simulator app to launch before starting a
        session.

2014-05-16  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] In case of multiple bug rollout, all bugs should be reopened, not only the oldest one
        https://bugs.webkit.org/show_bug.cgi?id=131363

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_create_rollout_multiple_revision_with_one_resolved):
        (test_create_rollout_multiple_resolved):
        (test_rollout_two_revisions):
        (test_rollout_multiple_revisions):
        (test_rollout_multiple_revisions_with_a_missing_bug_id):
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.run):
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        (ReopenBugAfterRollout.run):

2014-05-16  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2] Change the remaining framework includes from WebKit2 to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=132956

        Reviewed by Sam Weinig.

        * MiniBrowser/MiniBrowserWebProcessPlugIn.h:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        * TestWebKitAPI/JavaScriptTest.cpp:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewRestoreZoomAndScrollBackForward.cpp:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications.mm:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/ReloadPageAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResizeWindowAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        * TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm:
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm:
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor_Bundle.mm:
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        * TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        * WebKitTestRunner/GeolocationProviderMock.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/GCController.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/WebNotificationProvider.cpp:
        * WebKitTestRunner/WebNotificationProvider.h:
        * WebKitTestRunner/WorkQueueManager.cpp:
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        * WebKitTestRunner/config.h:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2014-05-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Skip failing unit tests
        https://bugs.webkit.org/show_bug.cgi?id=132979

        Reviewed by Daniel Bates.

        * TestWebKitAPI/PlatformEfl.cmake: Skip failing unit tests for now.

2014-05-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Support TestWebKitAPI in the iOS Simulator
        <http://webkit.org/b/129535>
        <rdar://problem/16203529>

        Reviewed by Daniel Bates.

        * Scripts/run-api-tests:
        (runTest):
        (listAllTests):
        - Extract common arguments into local variable.
        - Use xcrun to find the sim tool in order to invoke
        TestWebKitAPI properly in the iOS Simulator. 

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Set --device or --sim as
        appropriate to fix buildTestTool() in run-api-tests.

2014-05-15  Tim Horton  <timothy_horton@apple.com>

        Fix a logging typo in copy-webkitlibraries-to-product-directory

        Reviewed by Dean Jackson.

        * Scripts/copy-webkitlibraries-to-product-directory:

2014-05-15  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI: URLExtras.mm should be a shared test for iOS and Mac
        <http://webkit.org/b/132959>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
        Cocoa directory to project and move URLExtras.mm into it.
        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm: Renamed from Tools/TestWebKitAPI/Tests/mac/URLExtras.mm.

2014-05-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Compile all installed resources as GResources
        https://bugs.webkit.org/show_bug.cgi?id=131099

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Removed now unneeded
        AUDIO_RESOURCES_PATH env var.

2014-05-14  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove CSS_STICKY_POSITION guards
        https://bugs.webkit.org/show_bug.cgi?id=132676

        Reviewed by Simon Fraser.

        * Scripts/webkitperl/FeatureList.pm:

2014-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] InputMethodFilter unit test is not built
        https://bugs.webkit.org/show_bug.cgi?id=132686

        Reviewed by Philippe Normand.

        Bring back InputMethodFilter test to the build and compile it into
        a single binary TestWebCore with the other WebCore tests. Also
        move it from TestWebKitAPI/gtk/ to TestWebKitAPI/Tests/WebCore/gtk/.

        * Scripts/run-gtk-tests:
        (TestRunner): Remove WebCoreGtk from the list of test directories.
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/gtk/InputMethodFilter.cpp: Renamed from Tools/TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp.

2014-05-14  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        [EFL] Make XVFBDriver optional
        https://bugs.webkit.org/show_bug.cgi?id=131036

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitpy/port/efl.py:
        (EflPort._driver_class):

2014-05-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Flakiness dashboard contains outdated list of bots on builders.jsonp
        https://bugs.webkit.org/show_bug.cgi?id=132874

        Reviewed by Darin Adler.

        * TestResultServer/static-dashboards/builders.jsonp: Regenerate this
        file by changing to the directory Tools/TestResultServer and executing
        the script generate_builders_json.py

2014-05-11  Anders Carlsson  <andersca@apple.com>

        Replace WKContextSetLocalStorageDirectory with a context configuration getter/setter
        https://bugs.webkit.org/show_bug.cgi?id=132809

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Set the local storage directory using WKContextConfigurationSetLocalStorageDirectory.

2014-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] JavaScriptCore API tests are not built anymore
        https://bugs.webkit.org/show_bug.cgi?id=132739

        Reviewed Anders Carlsson.

        * TestWebKitAPI/CMakeLists.txt: Add missing includes required by
        the JSC unit tests.
        * TestWebKitAPI/PlatformGTK.cmake: Bring back JavaScriptCore unit tests.

2014-05-11  Anders Carlsson  <andersca@apple.com>

        Add a WKContextConfigurationRef object and make the injected bundle path part of the configuration
        https://bugs.webkit.org/show_bug.cgi?id=132806

        Reviewed by Beth Dakin.

        Migrate to WKContextConfiguration.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2014-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] WebKit2 C API tests are not longer built in the same binary
        https://bugs.webkit.org/show_bug.cgi?id=132685

        Reviewed by Martin Robinson.

        Use a single TestWebKit2 binary for all WebKit2 C API tests.

        * TestWebKitAPI/PlatformGTK.cmake:

2014-05-09  Benjamin Poulain  <benjamin@webkit.org>

        [iOS] Switch geolocation to an explicit authorization query model
        https://bugs.webkit.org/show_bug.cgi?id=132717

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider initializeGeolocationForWebView:listener:]):
        (-[MockGeolocationProvider cancelWarmUpForWebView:]): Deleted.

2014-05-09  David Farler  <dfarler@apple.com>

        com.apple.iphonesimulator.startSession needs to pass "RuntimeIdentifier"
        https://bugs.webkit.org/show_bug.cgi?id=132718

        Reviewed by David Kilzer.

        The simulator may not be able to look up runtimes by SDK paths
        and instead will map SDK versions to runtimes instead. In
        com.apple.iphonesimulator.startSession notifications,
        'runtimeIdentifier' (SDK version string) is preferred over
        'sdkRoot' (SDK path) anyway. Include the 'runtimeIdentifier' key
        when creating a new DRT or WKTR simulator session.

        IPhoneSimulatorNotification.pm filters out keys for this
        notification's userInfo with a hard-coded list. There's no harm
        in including extra key-value pairs in an NSNotification userInfo
        dictionary anyway and the simulator may again change its
        userInfo schema for this notification.

        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm:
        (postStartSessionNotification):
        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification):

2014-05-09  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * Scripts/build-webkit:
        WebKit2 should always be built for OS X and iOS.

2014-05-09  Anders Carlsson  <andersca@apple.com>

        Follow-up build fix.

        * Scripts/build-webkit:
        WebKit2 should no longer be built before WebKit.

2014-05-09  Anders Carlsson  <andersca@apple.com>

        Rename WebKit2.framework to WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132743
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Scripts/check-for-inappropriate-files-in-framework:
        Use PRODUCT_NAME instead of PROJECT_NAME when matching frameworks.
        Change WebKit2 to WebKit.

        * Scripts/check-for-webkit-framework-include-consistency:
        Change WebKit to WebKitLegacy.

2014-05-09  Manuel Rego Casasnovas  <rego@igalia.com>

        Remove GTK+ WK1 EWS from build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=132732

        Reviewed by Alexey Proskuryakov.

        GTK+ WK1 EWS was removed in r166427, so it shouldn't appear in the dashboard.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js:
        (EWS): Remove GTK+ WK1 EWS.

2014-05-09  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Add new u-szeged contributors.

        Reviewed by Csaba Osztrogonác.

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

2014-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] run-gtk-tests doesn't set the right injected bundle path
        https://bugs.webkit.org/show_bug.cgi?id=132736

        Reviewed by Philippe Normand.

        There are two problems, the path returned by common.library_build_path() is wrong when
        common.binary_build_path() has previously been called, and the test is still looking for
        the .la instead of .so

        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp:
        (TestWebKitAPI::Util::createInjectedBundlePath): Use .so instead
        of .la as extension of the injected bundle library.
        * gtk/common.py:
        (binary_build_path): Remove unused global variable and add a new
        one for binary_build_dir instead of sharing the same global
        variable for library_build_path and binary_build_path.

2014-05-08  Praveen R Jadhav  <praveen.j@samsung.com>

        [EFL] Enable MEDIA_STREAM for EFL port
        https://bugs.webkit.org/show_bug.cgi?id=132648

        Reviewed by Gyuyoung Kim.

        Script modified to enable MEDIA_STREAM for EFL build.

        * Scripts/webkitperl/FeatureList.pm: 

2014-05-08  David Farler  <dfarler@apple.com>

        old-run-webkit-tests: update strings for simulator devices and app name
        https://bugs.webkit.org/show_bug.cgi?id=132687

        Reviewed by Darin Adler.

        iPhone Retina (4-inch) -> iPhone 5
        iPhone Retina (4-inch 64-bit) -> iPhone 5s

        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification):
        (openIPhoneSimulator):
        (quitIPhoneSimulator):
        quit iOS Simulator, not iPhone Simulator.

2014-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r168471): Update the builder names on the scheduler list.
        https://bugs.webkit.org/show_bug.cgi?id=132699

        Reviewed by Martin Robinson.

        On r168471 I missed to update the builder names for the GTK build
        bots on the AnyBranchScheduler type scheduler list of bots.

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

2014-05-08  Brady Eidson  <beidson@apple.com>

        "shouldKeepCurrentBackForwardListItemInList" API should pass clientInfo to the callback
        <rdar://problem/16855357> and https://bugs.webkit.org/show_bug.cgi?id=132692

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::shouldKeepCurrentBackForwardListItemInList):

2014-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r168471): Duplicate builddirs broke the build master.
        https://bugs.webkit.org/show_bug.cgi?id=132688

        Reviewed by Carlos Garcia Campos.

        Rename the builddirs of the new GTK bots introduced on r168471 to
        be unique. Otherwise the master will break.

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

2014-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] webkitdom script assumes mkdir only fails because the directory already exists
        https://bugs.webkit.org/show_bug.cgi?id=132674

        Reviewed by Philippe Normand.

        Only ignore mkdir failure when exception is raised because the
        file already exists and it's a directory.

        * gtk/webkitdom.py:
        (write_doc_files):

2014-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WK2][GTK] Split the 64-bit GTK buildbots in Build and Test.
        https://bugs.webkit.org/show_bug.cgi?id=131358

        Reviewed by Carlos Garcia Campos.

        Current 64-bit GTK build bots (Release and Debug) not only test
        the build, but run all tests. Split each one of the bots in
        BuildOnly and TestWebKit2.

        This will allow us to have a better overview of the status of
        the GTK port.

        Original patch from Sergio Villar Senin <svillar@igalia.com>

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):
        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        * TestResultServer/static-dashboards/loader_unittests.js:

2014-05-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][WK2] Scale factor and scroll position is not being restored properly in a back/forward load
        https://bugs.webkit.org/show_bug.cgi?id=126022

        Reviewed by Benjamin Poulain.

        Original author : Thiago de Barros Lacerda, and finished by Gyuyoung Kim.

        Added an unit test case to check if scroll position and scale are restored properly.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewRestoreZoomAndScrollBackForward.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didChangeContentsPosition):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/backforward1.html: Added.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/backforward2.html: Added.

2014-05-07  Simon Fraser  <simon.fraser@apple.com>

        WebKit1 is flashy when compositing layers come and go
        https://bugs.webkit.org/show_bug.cgi?id=132655
        <rdar://problem/16830981&16788846>

        Reviewed by Sam Weinig.
        
        Revert the change from r166117.

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

2014-05-07  Chris Fleizach  <cfleizach@apple.com>

        AX: AXSelectTextWithCriteria should support capitalize/lowercase/uppercase
        https://bugs.webkit.org/show_bug.cgi?id=132622

        Reviewed by Mario Sanchez Prada.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (selectTextWithCriteriaCallback):
        (isEqualCallback):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (selectTextParameterizedAttributeForCriteria):
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::selectTextParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

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

        [SOUP] TLSErrors do not cause page load to fail when not ignored
        https://bugs.webkit.org/show_bug.cgi?id=121548

        Reviewed by Sergio Villar Senin.

        Add unit tests to check that the load fails with TLS errors in
        case of a redirection.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testTLSErrorsRedirect):
        (httpsServerCallback):
        (beforeAll):

2014-05-07  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove runtime feature
        https://bugs.webkit.org/show_bug.cgi?id=132382

        Reviewed by Benjamin Poulain.

        Remove cssGridLayoutEnabled setting usage.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2014-05-06  David Kilzer  <ddkilzer@apple.com>

        Add Makefile targets for copying static libraries (LLVM and WKSI)
        <http://webkit.org/b/132619>

        Reviewed by Mark Rowe.

        * Scripts/copy-webkitlibraries-to-product-directory: Set a
        sensible default for product directory if not specified on
        either the command-line or in the environment (by Xcode) by
        calling productDir() in webkitdirs.pm.

2014-05-06  Brady Eidson  <beidson@apple.com>

        Add WK2 SPI to prevent the previous back/forward item from remaining in the list
        <rdar://problem/16248710> and https://bugs.webkit.org/show_bug.cgi?id=132636

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp: Added.
        (TestWebKitAPI::itemURLLastComponentIsString):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::willGoToBackForwardListItem):
        (TestWebKitAPI::shouldKeepCurrentBackForwardListItemInList):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/simple2.html: Added.
        * TestWebKitAPI/Tests/WebKit2/simple3.html: Added.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Update for new client layout.

2014-05-06  Darin Adler  <darin@apple.com>

        Try to fix iOS build.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (-[APITestDelegateIPhone initWithTestRunner:utf8Data:baseURL:]):
        Updated since I changed testRunner into a pointer instead of a reference.
        Updated argument names to avoid conflict with field names.
        (-[APITestDelegateIPhone run]): Ditto.
        (-[APITestDelegateIPhone _cleanUp]): Ditto.

2014-05-06  Commit Queue  <commit-queue@webkit.org>

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

        Broke the build (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK][CMake] Unable to do make install"
        https://bugs.webkit.org/show_bug.cgi?id=130188
        http://trac.webkit.org/changeset/168304

2014-05-04  Darin Adler  <darin@apple.com>

        RetainPtr: Use adoptCF function instead of AdoptCF constructor argument
        https://bugs.webkit.org/show_bug.cgi?id=80222

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (-[APITestDelegateIPhone initWithTestRunner:utf8Data:baseURL:]): Updated to
        do more work here so we don't use RetainPtr local variables.
        (-[APITestDelegateIPhone dealloc]): Added.
        (-[APITestDelegateIPhone run]): Added an early exit if the web view is already
        created. Updated for changes to member names and types.
        (-[APITestDelegateIPhone _cleanUp]): Added code to set webView to nil and
        updated for changes to member names and types. Changed to two word spelling.
        (-[APITestDelegateIPhone webView:didFailLoadWithError:forFrame:]): Updated
        name of _cleanUp method.
        (-[APITestDelegateIPhone webView:didFailProvisionalLoadWithError:forFrame:]):
        Ditto.
        (-[APITestDelegateIPhone webView:didFinishLoadForFrame:]): Ditto.

2014-05-05  Benjamin Poulain  <benjamin@webkit.org>

        Clean up Image Document and tweak the layout and viewport
        https://bugs.webkit.org/show_bug.cgi?id=132552

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        Update the default settings to have something consistent with WebKit2.

2014-05-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Unable to do make install
        https://bugs.webkit.org/show_bug.cgi?id=130188

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject): Always build gtkdoc-no-html for WebKitGTK+. This
        will give an early signal that a change has broken the documentation.

2014-05-05  Pratik Solanki  <psolanki@apple.com>

        Update framework locations in package-root
        https://bugs.webkit.org/show_bug.cgi?id=132571

        Reviewed by Simon Fraser.

        * Scripts/package-root:

2014-05-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Refactor favicon database APIs
        https://bugs.webkit.org/show_bug.cgi?id=132519

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Use ewk_favicon_database_icon_get instead of ewk_view_favicon_get.
        (update_view_favicon):
        (on_icon_changed_cb):
        (window_free):
        (on_url_changed):
        (window_create):
        (on_view_favicon_changed): Deleted.

2014-05-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/132505> Make it possible to tell copy-webkitlibraries-to-product-directory which OS X version to copy for

        Reviewed by Dan Bernstein.

        * Scripts/copy-webkitlibraries-to-product-directory: Add an --osx-version argument and use the passed value
        when determining which LLVM archive to extract.

2014-05-02  Jeremy Jones  <jeremyj@apple.com>

        Add Jeremy as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=132492

        Reviewed by Jer Noble.

        Add myself as a committer.

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

2014-05-02  Jeremy Jones  <jeremyj@apple.com>

        Add Jeremy as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=132492

        Reviewed by Jer Noble.

        Add Jeremy Jones to the committers file.

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

2014-05-02  Brian J. Burg  <burg@cs.washington.edu>

        Hard to figure out how to run a single test with run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=116332

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-api-tests: add two examples to the help message.

2014-05-02  Simon Fraser  <simon.fraser@apple.com>

        Fix several memory leaks found by code inspection
        https://bugs.webkit.org/show_bug.cgi?id=132472

        Reviewed by Geoffrey Garen.
        
        Fix memory leaks.

        * TestWebKitAPI/Tests/mac/WillSendSubmitEvent.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

2014-05-02  Filip Pizlo  <fpizlo@apple.com>

        DFGAbstractInterpreter should not claim Int52 arithmetic creates Int52s
        https://bugs.webkit.org/show_bug.cgi?id=132446

        Reviewed by Mark Hahnenberg.
        
        Test the FTL by default now that it's enabled by default.

        * Scripts/run-javascriptcore-tests:

2014-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK1] Drop ewk_view_setting_tiled_backingstore APIs
        https://bugs.webkit.org/show_bug.cgi?id=132240

        Reviewed by Anders Carlsson.

        Removed ewk_view_setting_tiled_backingstore related code.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (shouldUseTiledBackingStore): Deleted.
        * EWebLauncher/main.c:
        (windowCreate):
        (parseUserArguments):

2014-05-01  Anders Carlsson  <andersca@apple.com>

        window.testRunner.keepWebHistory() should update the UI process state
        https://bugs.webkit.org/show_bug.cgi?id=132440

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetAddsVisitedLinks):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::keepWebHistory):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2014-05-01  David Kilzer  <ddkilzer@apple.com>

        Really remove ENABLE_PLUGIN_PROXY_FOR_VIDEO
        <http://webkit.org/b/132432>

        Reviewed by Tim Horton.

        * Scripts/webkitperl/FeatureList.pm: Remove support for
        --plugin-proxy-for-video switch.

2014-04-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Kernel sysctl interface hw.activecpu don't exists on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=132286

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests: Redirect stderr to null when
        calling sysctl over hw.activecpu

2014-04-30  Anders Carlsson  <andersca@apple.com>

        Move the legacy WebKit API into WebKitLegacy.framework and move it inside WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132399
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Scripts/check-for-webkit-framework-include-consistency:
        Allos WAK headers in WebKitLegacy as well as WebKit.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        Update header imports.

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Add test URL to crash reports for the UI process, clean up project
        https://bugs.webkit.org/show_bug.cgi?id=131954

        Reviewed by Darin Adler.
        
        WebKitTestRunner was adding application-specific information to crash reports
        to log the test path, but only in the web process. Fix it to also do this
        for the UI process, for both iOS and OS X.
        
        Moved InjectedBundlePageMac.mm to InjectedBundlePageCocoa.mm and compile it for
        both iOS and OS X.
        
        Factored crash reprorter-related code into CrashReporterInfo, and call it from
        a new TestController::platformWillRunTest() function on Mac and iOS.
        
        Also remove Xcode-added unit test junk from the project.

        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm: Copied from Tools/WebKitTestRunner/InjectedBundle/ios/InjectedBundlePageIOS.mm.
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::url):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerAppTests/WebKitTestRunnerAppTests-Info.plist: Removed.
        * WebKitTestRunner/WebKitTestRunnerAppTests/WebKitTestRunnerAppTests.m: Removed.
        * WebKitTestRunner/WebKitTestRunnerAppTests/en.lproj/InfoPlist.strings: Removed.
        * WebKitTestRunner/cocoa/CrashReporterInfo.h: Renamed from Tools/WebKitTestRunner/InjectedBundle/ios/InjectedBundlePageIOS.mm.
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm: Renamed from Tools/WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm.
        (WTR::testPathFromURL):
        (WTR::setCrashReportApplicationSpecificInformationToURL):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformWillRunTest):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformWillRunTest):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformWillRunTest):
        (WTR::TestController::setHidden):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformWillRunTest):

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        Fix DRT assertion about mock scrollbars, which doesn't apply to iOS.

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (prepareConsistentTestingEnvironment):

2014-04-30  Anders Carlsson  <andersca@apple.com>

        check-for-inappropriate-macros-in-external-headers should get the product name, not the project name
        https://bugs.webkit.org/show_bug.cgi?id=132397

        Reviewed by Dan Bernstein.

        * Scripts/check-for-inappropriate-macros-in-external-headers:

2014-04-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Make it easier to run CMake for downstreams
        https://bugs.webkit.org/show_bug.cgi?id=132370

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Pass -DDEVELOPER_MODE when building
        the GTK+ port.

2014-04-29  Stephanie Lewis  <slewis@apple.com>

        <rdar://problem/16765765> Use JSON::PP in perl scripts instead of JSON.
        
        Rubber stamped by Jessie Berlin.

        JSON.pm was removed from our tools setup.

        * Scripts/generate-coverage-data:

2014-04-29  Filip Pizlo  <fpizlo@apple.com>

        Use LLVM as a backend for the fourth-tier DFG JIT (a.k.a. the FTL JIT)
        https://bugs.webkit.org/show_bug.cgi?id=112840

        Rubber stamped by Geoffrey Garen.

        * Scripts/build-jsc: Enable it on Mac.
        * Scripts/build-webkit: Enable it on Mac.
        * Scripts/export-llvm-build: Make it slightly easier to export the build if you've done a "make install".

2014-04-28  Sam Weinig  <sam@webkit.org>

        REGRESSION (r167751): svn-create-patch is very slow
        https://bugs.webkit.org/show_bug.cgi?id=132300

        Reviewed by Alexey Proskuryakov.

        * Scripts/svn-create-patch:
        Change default behavior of svn-create-patch to no longer run the style checker. It can still be run
        by calling `svn-create-patch --style`.

2014-04-29  Enrique Ocaña González  <eocanha@igalia.com>

        Generate Eclipse project + ninja build for GTK+ if Eclipse in available in the PATH
        https://bugs.webkit.org/show_bug.cgi?id=132190

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitdirs.pm:
        (canUseEclipse): Test if Eclipse is in the path. This is the same method used to test
            if ninja is in the path.
        (generateBuildSystemFromCMakeProject): Use the eclipse generator if possible, fallback
            to the previous ninja generator if not.

2014-04-29  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        check-webkit-style should understand --git-index
        https://bugs.webkit.org/show_bug.cgi?id=125364

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.create_patch): The command now supports the --cached option.
        * Scripts/webkitpy/style/main.py:
        (CheckWebKitStyle.main): Passing the --git-index option.
        * Scripts/webkitpy/style/optparser.py:
        (CommandOptionValues.__init__): The git-index option is switched off by default.
        (CommandOptionValues.__eq__): Equality check for the new option.
        (ArgumentParser._create_option_parser):Adding the --git-index option
        (ArgumentParser.parse):
        * Scripts/webkitpy/style/optparser_unittest.py: New tests for the --git-index option
        (CommandOptionValuesTest.test_init): 
        (CommandOptionValuesTest.test_eq):

2014-04-28  Michael Saboff  <msaboff@apple.com>

        Crash in platform/mac/accessibility/table-visible-rows.html
        https://bugs.webkit.org/show_bug.cgi?id=132146

        Reviewed by Filip Pizlo.

        Instead of creating a local JSValueRef array on the stack and passing that to
        JSObjectMakeArray(), changed to create an empty JSArray and then populate the
        values using the JSObjectSetPropertyAtIndex() API.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (elementsForRangeCallback):
        (convertElementsToObjectArray):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (originsArrayToJS):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::stringArrayToJS):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertElementsToObjectArray):

2014-04-28  Filip Pizlo  <fpizlo@apple.com>

        Make sure that the coverage of our tests doesn't change much if we change the thresholds now and in the future, but making
        "no-cjit" runs force the old-school threshold.

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2014-04-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies should also install ruby-json and ruby-highline
        https://bugs.webkit.org/show_bug.cgi?id=132292

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: Install ruby json and highline packages.

2014-04-27  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Remove indexedDB's dependency on leveldb and disable indexedDB
        https://bugs.webkit.org/show_bug.cgi?id=132176

        Reviewed by Gyuyoung Kim.

        EFL port will use sqlite to support indexedDB. So, this patch removes levelDB dependency
        and turn off indexedDB feature until the sqlite implementation is introduced.

        * Scripts/webkitperl/FeatureList.pm:

2014-04-25  James Craig  <jcraig@apple.com>

        Set prepare-Changelog flag so that it no longer runs check-webkit-style by default
        https://bugs.webkit.org/show_bug.cgi?id=132209

        Reviewed by Daniel Bates.

        Set default to --no-style to avoid additional spew from false positives in check-webkit-style.
        Run check-webkit-style before generating changelogs to avoid additional spurious errors.

        * Scripts/prepare-ChangeLog:
        (main): 

2014-04-25  Michael Saboff  <msaboff@apple.com>

        Crash in platform/mac/accessibility/table-visible-rows.html
        https://bugs.webkit.org/show_bug.cgi?id=132146

        Reviewed by Mark Lam.

        Changed to use a local JSValueRef array temporary instead of a
        std::make_unique<JSValueRef[]> when making an array of JSValues so that the temporary
        JSValues are visited during garbage collection when the stack is scanned.  Otherwise,
        the temporary values could be collected.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (convertElementsToObjectArray):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertElementsToObjectArray):

2014-04-24  Eduardo Lima Mitev  <elima@igalia.com>

        Unreviewed GTK gardening

        * Scripts/run-gtk-tests: Skips one flaky accesibility test in WK2API suite
        (TestRunner):

2014-04-24  László Langó  <llango.u-szeged@partner.samsung.com>

        prepare-ChangeLog reports as deleted methods that has not been removed.
        https://bugs.webkit.org/show_bug.cgi?id=131733

        Reviewed by Ryosuke Niwa.

        * Scripts/prepare-ChangeLog:
        (originalFile): Set merge base to origin/master by default.

2014-04-23  James Craig  <jcraig@apple.com>

        prepare-Changelog and svn-create-patch should optionally run check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=131115

        Reviewed by Daniel Bates.

        Added [--[no-]style] param to run check-webkit-style as part of prepare-Changelog and svn-create-patch.

        * Scripts/commit-log-editor: Added --no-style.
        * Scripts/prepare-ChangeLog: Primary patch.
        (main): Primary patch.
        (createPatchCommand): Added --no-style.
        * Scripts/svn-create-patch: Primary patch.
        * Scripts/webkit-tools-completion.sh: Added --style and --no-style.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Added --no-style.
        (SVN.create_patch): Added --no-style.

2014-04-23  Anders Carlsson  <andersca@apple.com>

        Try to fix iOS build.

        * DumpRenderTree/mac/DumpRenderTree.mm:

2014-04-23  Alexey Proskuryakov  <ap@apple.com>

        Eliminate internals.setMockScrollbarsEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=132085

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues):
        No need to reset the preference, there is no way it can change.

2014-04-23  James Craig  <jcraig@apple.com>

        Unreviewed. Moving myself from Contributors to Committers list.

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

2014-04-23  Tim Horton  <timothy_horton@apple.com>

        Mock scrollbars don't always work in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=132082

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment):
        Set the mock scrollbar setting before creating the WebView, as this setting
        cannot be dynamically changed, so any scrollbars that are created during
        WebView initialization and are not replaced before snapshotting will end
        up being platform scrollbars instead of mock ones.
        WebKitTestRunner already sets this preference before creating WKViews,
        so we're just matching its behavior.

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

        [GTK] ShadowRoot API was removed in r164131
        https://bugs.webkit.org/show_bug.cgi?id=132059

        Reviewed by Gustavo Noronha Silva.

        Add WebKitDOMShadowRoot to the list of deleted classes to generate
        the API docs.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator):

2014-04-23  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] run-webkit-tests script is failing to invoke run-launcher
        https://bugs.webkit.org/show_bug.cgi?id=132051

        Reviewed by Philippe Normand.

        After the WK1 support was dropped, if run-webkit-tests is executed
        without --no-show-results parameter, the launcher is being called
        using a -2 parameter that is it causing the run-launcher to break.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.show_results_html_file):

2014-04-22  Tim Horton  <timothy_horton@apple.com>

        DumpRenderTree generates black snapshots on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=132029
        <rdar://problem/16679363>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        DRT checks with the WebView to determine whether it can use the window's
        backing store directly or (because of compositing) needs to take a WindowServer
        snapshot. However, on some platforms and in some situations, the window can
        be layer backed without the WebView necessarily currently being composited.
        We should check with the window in addition to the WebView before going
        ahead and using its backing store.

2014-04-22  Tim Horton  <timothy_horton@apple.com>

        DumpRenderTree generates white snapshots on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=132026
        <rdar://problem/16679363>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Link DRT against QuartzCore.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        Force CoreAnimation to synchronously update layers in a more explicit
        way that doesn't depend on AppKit behavior. This is very similar to what
        WebKitTestRunner does (indirectly) during its force repaint.

2014-04-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support Python 2.7 in Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=132023

        Reviewed by Michael Saboff.

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Remove check for Python 2.7, since
        it now works properly.

2014-04-22  Filip Pizlo  <fpizlo@apple.com>

        Switch the LLVMForJSC target to using the LLVM in /usr/local rather than /usr/local/LLVMForJavaScriptCore on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130867
        <rdar://problem/16432456> 

        Reviewed by Mark Hahnenberg.

        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-04-22  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Fails to build documentation when output is redirected
        https://bugs.webkit.org/show_bug.cgi?id=131178

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc: set the output for stdout and stderr to UTF-8
        explicitly to avoid encoding issues when they are redirected.

2014-04-22  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] YCM choose a newer compile_commands.json in between Release or Debug
        https://bugs.webkit.org/show_bug.cgi?id=131911

        Reviewed by Martin Robinson.

        common.get_build_path returns release path even though Debug configuration
        is newer than Release. So YouCompleteMe is used to refer old build setup inadvertently.

        * gtk/ycm_extra_conf.py:
        (get_build_path): Compare modified time of Release and Debug. And return a recent modified path.
        (FlagsForFile):

2014-04-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        Correct a typo that prevented tests from working properly.

2014-04-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Should have the ability to output composited contents during layout testing
        https://bugs.webkit.org/show_bug.cgi?id=131864

        Reviewed by Philippe Normand.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Add a path that paints the widget contents
        to an image surface. We run the main loop a bit to match the implementation from WebKit1 and EFL.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Use the new UI-process path on GTK+.

2014-04-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the tests.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[DidFailProvisionalNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        Add policy handler to override the new default of denying loads that NSURLConnection cannot handle.

2014-04-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed test gardening, make no-eager runs run everything except eager (as opposed to
        being the same as a "quick run", which is meant for genuinely slow tests).

        * Scripts/run-jsc-stress-tests:

2014-04-21  Darin Adler  <darin@apple.com>

        Add HashSet::takeAny
        https://bugs.webkit.org/show_bug.cgi?id=131928

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp: Added a test for takeAny.

2014-04-20  Dan Bernstein  <mitz@apple.com>

        Fixed a test timing out after r167572.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webView:didFinishNavigation:]): Renamed from
        -webView:didFinishLoadingNavigation:.

2014-04-20  Commit Queue  <commit-queue@webkit.org>

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

        broke GTK Debug bot (Requested by philn on #webkit).

        Reverted changeset:

        "[GTK] Add llvmpipe (Mesa) to the JHBuild moduleset and force
        it when running layout tests"
        https://bugs.webkit.org/show_bug.cgi?id=131472
        http://trac.webkit.org/changeset/167510

2014-04-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add llvmpipe (Mesa) to the JHBuild moduleset and force it when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=131472

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Use the LLVMPIPE_LIBGL_PATH to set the LD_LIBRARY_PATH
        when running WebKitTestRunner with run-webkit-tests.
        * gtk/jhbuild.modules: Add Mesa to the modulelist so that the llvmpipe libGL is build, but not
        installed.
        * gtk/jhbuildrc: Set the LLVMPIPE_LIBGL_PATH environment variable so that the test driver knows
        how to properly set the LD_LIBRARY_PATH variable. We do this because it is much easier to
        calculate the path in the jhbuildrc than in the test driver code. This simplifies things a great
        deal.

2014-04-18  Alexey Proskuryakov  <ap@apple.com>

        DownloadDecideDestinationCrash API test uses an incorrect value for path
        https://bugs.webkit.org/show_bug.cgi?id=131845
        <rdar://problem/15925560>

        Reviewed by Enrica Casucci.

        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):

2014-04-17  Alexey Proskuryakov  <ap@apple.com>

        [Mac] AttributedStringTest API tests fail with async text input
        https://bugs.webkit.org/show_bug.cgi?id=131833

        Reviewed by Enrica Casucci.

        Don't run sync NSTextInputClient tests where we don't implement these calls.

        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::AttributedStringTest_CustomFont::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_CustomFont::runSyncTest):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::runSyncTest):
        (TestWebKitAPI::AttributedStringTest_CustomFont::runTest): Deleted.
        (TestWebKitAPI::AttributedStringTest_Strikethrough::runTest): Deleted.

2014-04-18  Philippe Normand  <pnormand@igalia.com>

        Remove NETWORK_INFO support
        https://bugs.webkit.org/show_bug.cgi?id=131841

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2014-04-17  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] YouCompleteMe doesn't work for cmake build system.
        https://bugs.webkit.org/show_bug.cgi?id=131591

        Reviewed by Martin Robinson.

        Add cmake build system support for YouCompleteMe. It should work regardless of
        using make or ninja. In addition, autotools related code is removed since it's
        not used anymore in WebKit.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        * gtk/ycm_extra_conf.py:
        (transform_relative_paths_to_absolute_paths):
        (FlagsForFile):

2014-04-17  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[ConvertResponseToDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2014-04-17  Anders Carlsson  <andersca@apple.com>

        Remove unused API enums
        https://bugs.webkit.org/show_bug.cgi?id=131836

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:decidePolicyForNavigationResponse:decisionHandler:]):

2014-04-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] A few final cleanups to the DataObject classes.
        https://bugs.webkit.org/show_bug.cgi?id=131784

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::clearData): Use 'last()' method.
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoStack::pop): Use 'takeLast()' method.

2014-04-17  Andres Gomez  <agomez@igalia.com>

        [Win] cygwin to keep installing curl 7.33.0-1 and subversion 1.7.14-1
        https://bugs.webkit.org/show_bug.cgi?id=131365

        Reviewed by Brent Fulgham.

        The cygwin installer is now downloading the wanted versions for
        the local installation given to the setup wizard.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2014-04-17  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Make run-webkit-tests always use WKTR
        https://bugs.webkit.org/show_bug.cgi?id=131737

        Reviewed by Darin Adler.

        Now that the GTK+ port only has support for WebKit2, instruct
        run-webkit-tests to always use WKTR. This avoids needing to pass
        flag "-2" every time.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: 
        (_set_up_derived_options): Always set webkit_test_runner when
        the platform is GTK+.

2014-04-17  Brendan Long  <b.long@cablelabs.com>

        [Gtk] Install ninja-build in Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=131760

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: Install ninja-build when it's available.

2014-04-16  peavo@outlook.com  <peavo@outlook.com>

        [Win] run-javascriptcore-tests fails to run.
        https://bugs.webkit.org/show_bug.cgi?id=131761

        Reviewed by Brent Fulgham.

        * Scripts/build-jsc: For now, don't try to build bmalloc on Windows.

2014-04-16  Andres Gomez  <agomez@igalia.com>

        [Win] Pass default parameters to cygwin setup wizard
        https://bugs.webkit.org/show_bug.cgi?id=131361

        Reviewed by Brent Fulgham.

        Added some parameters to the cygwin setup wizard so the user
        doesn't really have to do any interaction.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

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

        [Win] Eliminate use of deleteAllValues in Windows Files
        https://bugs.webkit.org/show_bug.cgi?id=131631

        Reviewed by Darin Adler.

        Switch to std::unique_ptr for memory lifetime. Get rid of
        deleteAllValues now that it is no longer needed. Use ranged
        for loops where possible.

        * DumpRenderTree/win/DRTDataObject.cpp:
        (WCEnumFormatEtc::WCEnumFormatEtc):
        (DRTDataObject::~DRTDataObject):
        (DRTDataObject::GetData):
        (DRTDataObject::QueryGetData):
        (DRTDataObject::SetData):
        (DRTDataObject::clearData):
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoObject::DRTUndoObject):
        (DRTUndoObject::~DRTUndoObject):
        (DRTUndoStack::~DRTUndoStack):
        (DRTUndoStack::clear):
        (DRTUndoStack::pop):
        (DRTUndoManager::DRTUndoManager):
        (DRTUndoManager::redo):
        (DRTUndoManager::undo):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        * DumpRenderTree/win/UIDelegate.h:

2014-04-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed GTK gardening.

        Update list of skipped unit tests:

          Skip test: WebKit2Gtk/TestWebKitWebView:/webkit2/WebKitWebView/page-visibility

          Unskip tests: WebKit2/TestWebKit2:WebKit2.ResizeReversePaginatedWebView
          and WebKit2/TestWebKit2:WebKit2.ScrollPinningBehaviors

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

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        check-webkit-style doesn't check code style in .mm or .m files
        https://bugs.webkit.org/show_bug.cgi?id=131708

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.test_cpp_paths):
        (CheckerDispatcherDispatchTest.test_text_paths):
        Check .mm and .m files as C++.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        Add an override for our ordinary "missing spaces around =" for @synthesize,
        which should look like "@synthesize propertyName=_varName;"

        Add an override for "missing space before {" for blocks' "^{".

        Don't follow the "extra space before [" rule for Objective-C, because
        it breaks this rule in a multitude of ways because of method calls.

        (check_braces):
        Don't complain about { not being on the end of the previous line if
        the previous line starts with "- (" or "+ (", which would indicate a
        Objective-C method definition.

2014-04-16  Darin Adler  <darin@apple.com>

        Make Vector::takeLast work with move-only types (and optimize for types where move is faster)
        https://bugs.webkit.org/show_bug.cgi?id=131735

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WTF/Vector.cpp: Added a test for Vector::takeLast with move only types.
        Fixed invocations of EXPECT macros so the expected value is on the left, and the test result
        is on the right. This can be confusing since our JavaScript test framework does it the opposite
        way, but gtest works better this way.

2014-04-15  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Fix problems with the pixel dump.
        https://bugs.webkit.org/show_bug.cgi?id=131265

        Reviewed by Gyuyoung Kim.

        Painting and compositing paths of WebKit-EFL were totally modified from r166768.
        However pixel dump codes still call deprecated functions like ewk_view_paint(),
        which causes that nothing is drawn.

        This patch adds new member functions to AcceleratedCompositingContext to support pixel dump.
        One of new functions is AcceleratedCompositingContext::extractImageData(),
        which replaces deprecated function calls. Besides the extractImageData() is invoked by
        ewk_view_screenshot_contents_get() in order to take the visible content displayed on the EFL webview.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView): Add to call DumpRenderTreeSupportEfl::forcePaint().

2014-04-15  Filip Pizlo  <fpizlo@apple.com>

        Update LLVM export scrpt to handle the build directory being different from the
        source directory.

        Rubber stamped by Geoffrey Garen.

        * Scripts/export-llvm-build:

2014-04-15  Ryosuke Niwa  <rniwa@webkit.org>

        Update the hyperlink to waterfall views of perf bots on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=131695

        Reviewed by Antti Koivisto.

        Updated.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2014-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reduce the binary size by compressing the text based web inspector resources
        https://bugs.webkit.org/show_bug.cgi?id=121545

        Reviewed by Gustavo Noronha Silva.

        Compress text based files when compiling inspector resources. It
        reduces the binary size in 3MB.

        * gtk/generate-inspector-gresource-manifest.py:
        (find_all_files_in_directory):
        (is_compressible):

2014-04-14  Alexey Proskuryakov  <ap@apple.com>

        Remove Gtk WebKit1 tester.

        Gtk WebKit1 port no longer exists, and dashboard was trying to load its tester
        results over and over as fast as it could.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2014-04-14  Alexey Proskuryakov  <ap@apple.com>

        Wrong link for webkitpy tests results in dashboard popover
        https://bugs.webkit.org/show_bug.cgi?id=131664

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds):
        Use a correct link.

2014-04-14  Alexey Proskuryakov  <ap@apple.com>

        Update webkitpy regression test result that started to fail after http://trac.webkit.org/r167243

        I'm not sure whether the changes are desirable, but am not suspicious enough to roll out.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest):

2014-04-14  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        Fix commit-log-editor bug revealed by r165447
        https://bugs.webkit.org/show_bug.cgi?id=130676

        Reviewed by Csaba Osztrogonác.

        * Scripts/commit-log-editor:
        (createCommitMessage): Omitting empty Source/JavaScriptCore:... blocks.
        Add \n before the first block too, because the longest common prefix now ends with only one newline.
        (removeLongestCommonPrefixEndingInNewline): The longest common prefix ends with only one newline,
        now the last block of the common prefix isn't duplicated below. Changing the function name accordingly.

2014-04-13  Darin Adler  <darin@apple.com>

        userVisibleString should not try to "encode" host names
        https://bugs.webkit.org/show_bug.cgi?id=131587
        rdar://problem/14686849

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added URLExtras.mm.

        * TestWebKitAPI/Tests/mac/URLExtras.mm: Added. A few tests for WebCoreNSURLExtras.
        Coverage is tiny at this point; we could add a lot more cases!

2014-04-13  Jaehun Lim  <ljaehun.lim@samsung.com>

        Use #include instead of #import
        https://bugs.webkit.org/show_bug.cgi?id=131604

        Reviewed by Darin Adler.

        Fix "warning: #import is a deprecated GCC extension [-Wdeprecated]".

        * TestWebKitAPI/Tests/WTF/StringView.cpp:

2014-04-12  Filip Pizlo  <fpizlo@apple.com>

        Make slow-stress tests run faster by running fewer VM variants.

        Rubber stamped by Geoffrey Garen.

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

2014-04-10  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Add missing WTF unit tests
        https://bugs.webkit.org/show_bug.cgi?id=131459

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt: Add a few missing source files
        that should be compiled into the TestWTF binary.

2014-04-10  Brendan Long  <b.long@cablelabs.com>

        [Gtk] run-launcher doesn't work by default
        https://bugs.webkit.org/show_bug.cgi?id=131494

        Reviewed by Philippe Normand.

        * Scripts/run-launcher: Always use MiniBrowser for WebKitGTK.
        * Scripts/webkitdirs.pm:
        (launcherName): Same.
        * Scripts/webkitpy/style/checker.py: Remove reference to GtkLauncher.
        * gtk/common.py:
        (get_build_path.is_valid_build_directory): Same.
        * gtk/manifest.txt: Same.

2014-04-09  Commit Queue  <commit-queue@webkit.org>

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

        Caused 300+ failures on Mavericks WK1 tester (Requested by ap
        on #webkit).

        Reverted changeset:

        "Remove "System Font" from whitelisted DRT fonts and char
        width calculations"
        https://bugs.webkit.org/show_bug.cgi?id=131411
        http://trac.webkit.org/changeset/167046

2014-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove "System Font" from whitelisted DRT fonts and char width calculations
        https://bugs.webkit.org/show_bug.cgi?id=131411

        Reviewed by Tim Horton.

        Covered by existing tests.

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

2014-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        systemHiddenFontFamilySet in DRT is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=131414

        Reviewed by Tim Horton.

        It doesn't seem to affect test results on my machine.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (drt_NSFontManager_availableFonts):
        (systemHiddenFontFamilySet): Deleted.

2014-04-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix: Don't double-release BSTR.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Remove unneeded call to SysFreeString now that we are
        using _bstr_t for this variable.

2014-04-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Various DumpRenderTree Fixes.
        https://bugs.webkit.org/show_bug.cgi?id=131446.

        Reviewed by Tim Horton.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::title): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::helpText): Ditto.
        (AccessibilityUIElement::intValue): Ditto.
        (AccessibilityUIElement::isPressActionSupported): Ditto.
        (AccessibilityUIElement::accessibilityValue): Ditto.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (DRTDesktopNotificationPresenter::AddRef): Ditto.
        (DRTDesktopNotificationPresenter::Release): Ditto.
        (DRTDesktopNotificationPresenter::showDesktopNotification): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (DRTDesktopNotificationPresenter::cancelDesktopNotification): Ditto.
        (DRTDesktopNotificationPresenter::notificationDestroyed): Ditto.
        (DRTDesktopNotificationPresenter::checkNotificationPermission): Ditto.
        (DRTDesktopNotificationPresenter::requestNotificationPermission): Ditto.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFrameScrollPosition): Ditto.
        (dumpFramesAsText): Ditto.
        (compareHistoryItems): Ditto.
        (dumpHistoryItem): Ditto.
        (dump): Ditto.
        (resetDefaultsToConsistentValues): Ditto.
        (resetWebViewToConsistentStateBeforeTesting): Ditto.
        (runTest): Ditto.
        (createWebViewAndOffscreenWindow): Ditto.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (EditingDelegate::AddRef): Ditto.
        (EditingDelegate::Release): Ditto.
        (dumpPath): Switch to _bstr_t. Use JSStringCreateWithBSTR
        (EditingDelegate::shouldBeginEditingInDOMRange): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (EditingDelegate::shouldEndEditingInDOMRange): Ditto.
        (EditingDelegate::shouldInsertNode): Ditto.
        (EditingDelegate::shouldInsertText): Ditto.
        (EditingDelegate::shouldDeleteDOMRange): Ditto.
        (EditingDelegate::shouldChangeSelectedDOMRange): Ditto.
        (EditingDelegate::shouldApplyStyle): Ditto.
        (EditingDelegate::shouldChangeTypingStyle): Ditto.
        (EditingDelegate::doPlatformCommand): Ditto.
        (EditingDelegate::webViewDidBeginEditing): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (EditingDelegate::webViewDidChange): Ditto.
        (EditingDelegate::webViewDidEndEditing): Ditto.
        (EditingDelegate::webViewDidChangeTypingStyle): Ditto.
        (EditingDelegate::webViewDidChangeSelection): Ditto.
        (EditingDelegate::checkSpellingOfString): Ditto.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (descriptionSuitableForTestResult): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (FrameLoadDelegate::FrameLoadDelegate): Ditto.
        (FrameLoadDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (FrameLoadDelegate::AddRef): Ditto.
        (FrameLoadDelegate::Release): Ditto.
        (FrameLoadDelegate::didStartProvisionalLoadForFrame): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (FrameLoadDelegate::didReceiveServerRedirectForProvisionalLoadForFrame): Ditto.
        (FrameLoadDelegate::didFailProvisionalLoadWithError): Ditto.
        (FrameLoadDelegate::didCommitLoadForFrame): Ditto.
        (FrameLoadDelegate::didReceiveTitle): Ditto.
        (FrameLoadDelegate::didChangeIcons): Ditto.
        (delegatesWithDelayedWork): Ditto.
        (FrameLoadDelegate::didFinishLoadForFrame): Ditto.
        (FrameLoadDelegate::didFailLoadWithError): Ditto.
        (FrameLoadDelegate::willPerformClientRedirectToURL): Ditto.
        (FrameLoadDelegate::didCancelClientRedirectForFrame): Ditto.
        (FrameLoadDelegate::willCloseFrame): Ditto.
        (FrameLoadDelegate::didFinishDocumentLoadForFrame): Ditto.
        (FrameLoadDelegate::didHandleOnloadEventsForFrame): Ditto.
        (FrameLoadDelegate::didFirstVisuallyNonEmptyLayoutInFrame): Ditto.
        (FrameLoadDelegate::didDisplayInsecureContent): Ditto.
        (FrameLoadDelegate::didRunInsecureContent): Ditto.
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        (HistoryDelegate::didNavigateWithNavigationData): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (HistoryDelegate::updateHistoryTitle): Ditto.
        (HistoryDelegate::populateVisitedLinksForWebView): Ditto.
        * DumpRenderTree/win/PolicyDelegate.cpp:
        (dumpPath):
        (PolicyDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (PolicyDelegate::AddRef): Ditto.
        (PolicyDelegate::Release): Ditto.
        (PolicyDelegate::decidePolicyForNavigationAction): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (PolicyDelegate::unableToImplementPolicyWithError): Ditto.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (ResourceLoadDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (ResourceLoadDelegate::AddRef): Ditto.
        (ResourceLoadDelegate::Release): Ditto.
        (ResourceLoadDelegate::identifierForInitialRequest): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (ResourceLoadDelegate::removeIdentifierForRequest): Ditto.
        (ResourceLoadDelegate::willSendRequest): Ditto.
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge): Ditto.
        (ResourceLoadDelegate::didReceiveResponse): Ditto.
        (ResourceLoadDelegate::didFinishLoadingFromDataSource): Ditto.
        (ResourceLoadDelegate::didFailLoadingWithError): Ditto.
        * DumpRenderTree/win/TestRunnerWin.cpp: Ditto.
        (TestRunner::queueLoad): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (TestRunner::setUserStyleSheetLocation): Ditto.
        (TestRunner::execCommand): Ditto.
        (TestRunner::overridePreference): Ditto.
        (TestRunner::evaluateScriptInIsolatedWorld): Ditto.
        * DumpRenderTree/win/TextInputControllerWin.cpp: Ditto.
        (TextInputController::setMarkedText): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (TextInputController::insertText): Ditto.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (UIDelegate::AddRef): Ditto.
        (UIDelegate::Release): Ditto.
        (UIDelegate::hasCustomMenuImplementation): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (UIDelegate::trackCustomPopupMenu): Ditto.
        (UIDelegate::registerUndoWithTarget): Ditto.
        (UIDelegate::removeAllActionsWithTarget): Ditto.
        (UIDelegate::setActionTitle): Ditto.
        (UIDelegate::undo): Ditto.
        (UIDelegate::redo): Ditto.
        (UIDelegate::canUndo): Ditto.
        (UIDelegate::canRedo): Ditto.
        (UIDelegate::printFrame): Ditto.
        (UIDelegate::ftpDirectoryTemplatePath): Ditto.
        (UIDelegate::webViewHeaderHeight): Ditto.
        (UIDelegate::webViewFooterHeight): Ditto.
        (UIDelegate::drawHeaderInRect): Ditto.
        (UIDelegate::drawFooterInRect): Ditto.
        (UIDelegate::webViewPrintingMarginRect): Ditto.
        (UIDelegate::canRunModal): Ditto.
        (UIDelegate::createModalDialog): Ditto.
        (UIDelegate::runModal): Ditto.
        (UIDelegate::isMenuBarVisible): Ditto.
        (UIDelegate::setMenuBarVisible): Ditto.
        (UIDelegate::runDatabaseSizeLimitPrompt): Ditto.
        (UIDelegate::paintCustomScrollbar): Ditto.
        (UIDelegate::paintCustomScrollCorner): Ditto.
        (UIDelegate::setFrame): Ditto.
        (UIDelegate::webViewFrame): Ditto.
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Ditto.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Ditto.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Ditto.
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage): Ditto.
        (UIDelegate::webViewAddMessageToConsole): Ditto.
        (UIDelegate::doDragDrop): Ditto.
        (UIDelegate::webViewGetDlgCode): Ditto.
        (UIDelegate::createWebViewWithRequest): Ditto.
        (UIDelegate::webViewClose): Ditto.
        (UIDelegate::webViewFocus): Ditto.
        (UIDelegate::webViewUnfocus): Ditto.
        (UIDelegate::webViewPainted): Ditto.
        (UIDelegate::exceededDatabaseQuota): Ditto.
        (UIDelegate::embeddedViewWithArguments): Ditto.
        (UIDelegate::webViewClosing): Ditto.
        (UIDelegate::webViewSetCursor): Ditto.
        (UIDelegate::webViewDidInvalidate): Ditto.
        (UIDelegate::setStatusText): Ditto.
        (UIDelegate::desktopNotificationsDelegate): Ditto.
        (UIDelegate::drawBackground): Ditto.
        (UIDelegate::decidePolicyForGeolocationRequest): Ditto.
        (UIDelegate::didPressMissingPluginButton): Ditto.
        * DumpRenderTree/win/WorkQueueItemWin.cpp: Ditto.
        (LoadItem::invoke):  Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (LoadHTMLStringItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.

2014-04-09  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Stylechecker: False positive on inline asm code.
        https://bugs.webkit.org/show_bug.cgi?id=130570

        Reviewed by Csaba Osztrogonác.

        Disable stylechecking in asm blocks.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (process_line):
        (_InlineASMState):
        (_InlineASMState.__init__):
        (_InlineASMState.process_line):
        (_InlineASMState.isInside):
        (_process_lines):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move WebKit1 unit tests resources used by WebKit2 unit tests to WebKit2 resources dir
        https://bugs.webkit.org/show_bug.cgi?id=131029

        Reviewed by Philippe Normand.

        Add blank.ico and test.pdf to resources dir of WebKit2Gtk unit
        tests and remove the getWebKit1TestResoucesDir() method.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testDownloadLocalFile): Use Test::getResourcesDir().
        (testDownloadLocalFileError): Ditto.
        (serverCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (serverCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (httpServerCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        (serverCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/blank.ico: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/test.pdf: Added.
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::getWebKit1TestResoucesDir): Deleted.

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        [WK2] HTTP authentication regression tests fail
        https://bugs.webkit.org/show_bug.cgi?id=81627
        <rdar://problem/11079296>

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Added canAuthenticateAgainstProtectionSpaceInFrame
        to pageLoaderClient structure.
        (WTR::TestController::canAuthenticateAgainstProtectionSpaceInFrame): Return true
        for password based authentication (we do get server trust challenges on some tests,
        which WKTR can't handle).
        When this client call is not implemented or returns false, didReceiveAuthenticationChallengeInFrame
        calls won't be made, at least on CFNetwork based platforms.
        (WTR::TestController::didReceiveAuthenticationChallengeInFrame): Changed the output
        to omit <unknown>. The resource is always unknown with WK2, and it doesn't really
        make sense to associate auth requests with individual resources - there can be
        multiple resources loading at once from the same protection space, so WebKit1 API
        that had a resource identifier was inherently racy.

2014-04-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Change font path for DumpRenderTree and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=131427

        Reviewed by Gyuyoung Kim.

        Since r166973, font path was changed.

        * DumpRenderTree/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformEfl.cmake:

2014-04-08  Geoffrey Garen  <ggaren@apple.com>

        Fix the build-jsc build
        https://bugs.webkit.org/show_bug.cgi?id=131410

        Reviewed by Michael Saboff.

        * Scripts/build-jsc: Make sure to build bmalloc before WTF, since
        WTF depends on it.

2014-04-08  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove WebKit1 unit tests
        https://bugs.webkit.org/show_bug.cgi?id=131359

        Reviewed by Anders Carlsson.

        Remove all WebKit1 GTK+ unit tests, in preparation for removing the WebKit1 port
        entirely. We also remove the list of skipped WebKi1 tests from run-gtk-tests, as
        they were inadvertently left in http://trac.webkit.org/changeset/166504.

        * CMakeLists.txt: No longer load the WebKit1 unit test CMakeLists.txt file.
        * Scripts/run-gtk-tests: Remove skipped WebKit1 unit tests.
        * TestWebKitAPI/Tests/WebKitGtk/CMakeLists.txt: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/blank.ico: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.html: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.ogg: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.pdf: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.txt: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.h: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testatk.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testatkroles.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdomnode.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdownload.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testglobals.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testloading.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebframe.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebresource.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebview.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwindow.c: Removed.

2014-04-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed gardening (Take 2): Prevent users from attempting
        to build with known invalid cURL. 

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Check for 7.34.0 (the broken version), not
        7.33.0 (the known good version).

2014-04-08  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove DumpRenderTree and GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=131373

        Reviewed by Andreas Kling.

        Remove the GTK+ port of DumpRenderTree and GtkLauncher. These tools are
        no longer necessary now that WebKit1 GTK+ will be removed.

        * CMakeLists.txt:
        * DumpRenderTree/PlatformGTK.cmake: Removed.
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp: Removed.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Removed.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Removed.
        * DumpRenderTree/gtk/EditingCallbacks.cpp: Removed.
        * DumpRenderTree/gtk/EditingCallbacks.h: Removed.
        * DumpRenderTree/gtk/EventSender.cpp: Removed.
        * DumpRenderTree/gtk/EventSender.h: Removed.
        * DumpRenderTree/gtk/GCControllerGtk.cpp: Removed.
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Removed.
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp: Removed.
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.h: Removed.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Removed.
        * DumpRenderTree/gtk/TextInputController.cpp: Removed.
        * DumpRenderTree/gtk/TextInputController.h: Removed.
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Removed.
        * GtkLauncher/CMakeLists.txt: Removed.
        * GtkLauncher/LauncherInspectorWindow.c: Removed.
        * GtkLauncher/LauncherInspectorWindow.h: Removed.
        * GtkLauncher/main.c: Removed.
        * GtkLauncher/simple.svg: Removed.
        * GtkLauncher/text.html: Removed.
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/gtk/fonts/AHEM____.TTF: Renamed from Tools/DumpRenderTree/gtk/fonts/AHEM____.TTF.
        * WebKitTestRunner/gtk/fonts/FontWithNoValidEncoding.fon: Renamed from Tools/DumpRenderTree/gtk/fonts/FontWithNoValidEncoding.fon.
        * WebKitTestRunner/gtk/fonts/fonts.conf: Renamed from Tools/DumpRenderTree/gtk/fonts/fonts.conf.

2014-04-08  Mark Rowe  <mrowe@apple.com>

        XPC services launched by Safari have wrong DYLD_FRAMEWORK_PATH set when launched via run-safari / debug-safari
        <https://webkit.org/b/131388> / <rdar://problem/16291687>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (runMacWebKitApp): Set __XPC_DYLD_FRAMEWORK_PATH to the absolute path to the built products directory.
        (execMacWebKitAppForDebugging): Ditto.

2014-04-08  Geoffrey Garen  <ggaren@apple.com>

        Build bmalloc on iOS too
        https://bugs.webkit.org/show_bug.cgi?id=131381

        Reviewed by Andreas Kling.

        * Scripts/build-webkit:

2014-04-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed gardening: Prevent users from attempting
        to build with known invalid cURL.

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Block build attempts with bad
        Cygwin tool set.

2014-04-07  Geoffrey Garen  <ggaren@apple.com>

        Build bmalloc on Mac
        https://bugs.webkit.org/show_bug.cgi?id=131333

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: Add the bmalloc target if we're on Mac.
        (Note: Just testing Mac is not good enough because in this
        script 'Mac' means 'Mac or iOS'.)

2014-03-30  Filip Pizlo  <fpizlo@apple.com>

        Move slow JSRegress tests out of the way so that they don't show up in run-jsc-benchmarks runs and also skip tests that are extremely long-running
        https://bugs.webkit.org/show_bug.cgi?id=130951

        Reviewed by Geoffrey Garen.

        * Scripts/run-javascriptcore-tests:

2014-04-06  Darin Adler  <darin@apple.com>

        Rework CSS calc logic, fixing some reference count mistakes in Length
        https://bugs.webkit.org/show_bug.cgi?id=131280

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added CalculationValue.cpp.
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp: Added.

2014-04-04  Brian J. Burg  <burg@cs.washington.edu>

        Enable WEB_REPLAY for PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=130700

        Reviewed by Timothy Hatcher.

        * Scripts/webkitperl/FeatureList.pm: Set the default for WEB_REPLAY for OS X engineering builds.

2014-04-05  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [CMake] Include X11's include dirs in TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=131270

        Reviewed by Martin Robinson.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt: Include X11_INCLUDE_DIR since
        TestNetscapePlugin includes WebCore code that includes X headers.

2014-04-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r166529): Fix build after renaming TileCache to LegacyTileCache
        <http://webkit.org/b/130986>

        * Scripts/check-for-inappropriate-objc-class-names: Add 'Legacy'
        prefix to TileCache class names in exception list.

2014-04-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] kill-old-processes should kill dbus-daemon processes
        https://bugs.webkit.org/show_bug.cgi?id=127352

        Reviewed by Martin Robinson.

        * BuildSlaveSupport/kill-old-processes:
        (main):

2014-04-04  Andres Gomez  <agomez@igalia.com>

        [Win] Update obsolete packages in cygwin
        https://bugs.webkit.org/show_bug.cgi?id=126264

        Reviewed by Brent Fulgham.

        Removed "apache" and "minires" as the first has been replaced by
        "lighttpd" and the second is now integrated into
        "cygwin". Replaced the transitional and now obsolete "gcc" package
        with "gcc-g++" and ensure that "python" stays at version "2.6.8"
        since the newer version available is "2.7.3" which breaks the
        build due to some funniness with environment variable handling.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2014-04-03  Joseph Pecoraro  <pecoraro@apple.com>

        check-webkit-style: Improve warnings on Objective-C @property syntax
        https://bugs.webkit.org/show_bug.cgi?id=131200

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_in_objective_c_properties):

2014-04-03  Santosh Mahto  <santoshbit2007@gmail.com>

        Unreviewed. Moving my name to commiter section

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

2014-04-03  Santosh Mahto  <santoshbit2007@gmail.com>

        Unreviewed. Add myself as a committer.

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

2014-04-03  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL][WK2] Replacing zoom functionality of MiniBrowser from scale_set to page_zoom_set.
        https://bugs.webkit.org/show_bug.cgi?id=130391

        Reviewed by Gyuyoung Kim.

        Change the implementation of the zoom functionality from ewk_view_scale_set
        to ewk_view_page_zoom_set.

        * MiniBrowser/efl/main.c:

2014-04-03  Manuel Rego Casasnovas  <rego@igalia.com>

        [webkitpy] perf profiler does not understand --call-graph argument
        https://bugs.webkit.org/show_bug.cgi?id=131132

        Reviewed by Ryosuke Niwa.

        New versions of perf profiler have changed the argument from --call-graph to -g.

        * Scripts/webkitpy/common/system/profiler.py:
        (Perf.wrapper_arguments): Use -g instead of --call-graph.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_profiler_as_wrapper): Update test accordingly.

2014-04-03  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Add EFL WK2 performance bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=131034

        Fix after r166707, use "Perf" instead of "perf" for consistency.

        Reviewed by Csaba Osztrogonác.

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

2014-04-03  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Add EFL WK2 performance bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=131034

        Reviewed by Csaba Osztrogonác.

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

2014-04-02  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK1] Use Evas_Touch_Point_State instead of Ewk_Touch_Point_Type
        https://bugs.webkit.org/show_bug.cgi?id=131151

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/efl/EventSender.cpp: Replace Ewk_Touch_Point_Type to Evas_Touch_Point_State.
        (TouchEventInfo::TouchEventInfo):
        (sendTouchEvent):
        (addTouchPointCallback):
        (updateTouchPointCallback):
        (cancelTouchPointCallback):
        (releaseTouchPointCallback):

2014-04-02  David Kilzer  <ddkilzer@apple.com>

        filter-build-webkit: Ignore xcodebuild warnings when compiling with newer builds of clang
        <http://webkit.org/b/131045>

        Reviewed by Daniel Bates.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine): Ignore DVTAssertions related to new builds
        of clang, plus debug data for all DVTAssertions.

2014-04-01  Dean Jackson  <dino@apple.com>

        Load Media Controls js/css from bundle
        https://bugs.webkit.org/show_bug.cgi?id=131086

        Reviewed by Eric Carlson.

        We're now putting CSS files into the bundle, so remove the test for them.

        * Scripts/check-for-inappropriate-files-in-framework:

2014-04-02  Martin Hock  <mhock@apple.com>

        Unify private browsing with sessions.
        https://bugs.webkit.org/show_bug.cgi?id=130099

        Reviewed by Alexey Proskuryakov.

        Add an API test for ephemeral sessions similar to PrivateBrowsingPushStateNoHistoryCallback.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::didNavigateWithNavigationData):
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp: Also test to make sure private browsing can be disabled.
        (TestWebKitAPI::didNavigateWithoutNavigationData):
        (TestWebKitAPI::didNavigateWithNavigationData):
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        (TestWebKitAPI::TEST):

2014-04-02  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(r165704): [GTK] Inspector resources not correctly generated
        https://bugs.webkit.org/show_bug.cgi?id=130343

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-inspector-gresource-manifest.py: Instead of hard-coding the file list, accept a list
        of directories on the command line and look for all appropriate files in those directories for the
        GResource archive. Also make archive paths relative to those directories.
        (find_all_files_in_directory): This helper looks for all the appropriate files in a given directory.
        (find_all_files_in_directory.select_file): Whether or not to add the file to the archive.

2014-04-02  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] Avoid multiple "Preparing rollout for bug" log messages
        https://bugs.webkit.org/show_bug.cgi?id=131106

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractRolloutPrepCommand._prepare_state):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_prepare_rollout):
        (test_create_rollout):
        (test_create_rollout_resolved):
        (test_rollout):

2014-04-02  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL] Add option to use separate web process for new window in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130190

        Reviewed by Gyuyoung Kim.

        New created window (CTRL + n) will be open in separated web process.
        This option is enabled by adding a flag (S/separate-process) with launching
        MiniBrowser.

        * MiniBrowser/efl/main.c:
        (elm_main):

2014-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move NEWS file to a new location
        https://bugs.webkit.org/show_bug.cgi?id=130901

        Reviewed by Brent Fulgham.

        * gtk/manifest.txt: Update the NEWS file path.

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):

2014-04-01  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test gardening.

        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_path): Handle the Debug case so we don't get webkitpy-test failures on our test bots.

2014-04-01  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions] Remove exclusions parsing support
        https://bugs.webkit.org/show_bug.cgi?id=131046

        Reviewed by David Hyatt.

        * Scripts/webkitperl/FeatureList.pm:

2014-04-01  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Remove last reference to GTK+ WK1 EWS
        https://bugs.webkit.org/show_bug.cgi?id=131058

        Reviewed by Martin Robinson.

        In r166427 WK1 GTK+ bots and EWS where removed, but this file was missing.

        * QueueStatusServer/config/queues.py: Remove reference to GTK+ WK1 EWS.

2014-04-01  Lucas Forschler  <lforschler@apple.com>

        Add a 32bit JSC builder/tester.
        https://bugs.webkit.org/show_bug.cgi?id=131054
        
        Reviewed by Michael Saboff.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Compile32bitJSC):
        (Run32bitJSCTests):
        (Run32bitJSCTests.countFailures):
        (BuildAndTest32bitJSCFactory):
        (BuildAndTest32bitJSCFactory.__init__):

2014-04-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] No longer build WebKit1 gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=130970

        Reviewed by Anders Carlsson.

        * gtk/common.py:
        (gtk_version_of_pkg_config_file): Deleted.
        * gtk/generate-gtkdoc:
        (get_gtkdoc_module_paths): We no longer need to worry about GTK+ 2, since it
        was only applicable for WebKit1.
        (get_generator_for_config): No longer look for the WebKit1 configuration file.

2014-04-01  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Running minibrowser with url crashes in debug build
        https://bugs.webkit.org/show_bug.cgi?id=130492

        Reviewed by Martin Robinson.

        Update "uri-scheme" test not to use invalid URIs in it, so we
        don't get a mistmatch when comparing the original URI stored in
        the test class with the one returned by the WebKitWebView.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextURIScheme): Update the test.

2014-04-01  Mihai Tica  <mitica@adobe.com>

        Unreviewed: Add myself as a commiter to the contributors list.

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

2014-03-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Extract the control of page background out of color_set
        https://bugs.webkit.org/show_bug.cgi?id=127539

        Reviewed by Gyuyoung Kim.

        Added an option(C) to change background color.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2014-03-31  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on the EFL port with latest EFL libraries since r166149

        * ImageDiff/PlatformEfl.cmake: Added ECORE_IMF_INCLUDE_DIRS to include dirs

2014-03-31  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test correction after r166530.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): No need to change preference for all tests. We set the proper
        fine-grained setting for swipe tests. This prevents existing tests from breaking.

2014-03-31  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Remove the trigger for webkit1 tests on the gtk-linux-64-release bot
        https://bugs.webkit.org/show_bug.cgi?id=130987

        r166427 removed the WebKit1 GTK+ bots, so we don't longer need to
        trigger the webkit1 bot tests on the gtk-linux-64-release bot.

        Reviewed by Martin Robinson.

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

2014-03-31  Dean Jackson  <dino@apple.com>

        Remove WEB_ANIMATIONS
        https://bugs.webkit.org/show_bug.cgi?id=130989

        Reviewed by Simon Fraser.

        Remove this feature flag until we plan to implement.

        * Scripts/webkitperl/FeatureList.pm:

2014-03-31  Brent Fulgham  <bfulgham@apple.com>

        Reduced Latched Scroll Test Flakiness
        https://bugs.webkit.org/show_bug.cgi?id=130983

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Test user should have 'high resolution' scrolling.
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]): Generate mouse wheel events
        with high resolution flags turned on.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Ditto.

2014-03-31  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        run-webkit-tests should have a --no-timeout option
        https://bugs.webkit.org/show_bug.cgi?id=128286

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_test): Renaming _run_test_with_timeout()
        (Worker._run_test_with_or_without_timeout): Renaming _run_test_with_timeout(), because tests can now run without timeout.
        (Worker._run_test_in_another_thread): Passing the --no-timeout option to the driver
        (Worker._run_test_in_this_thread):
        (Worker._run_test_with_timeout): Deleted.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Added the --no-timeout option

2014-03-31  Samuel White  <samuel_white@apple.com>

        AX: Need ability to get line range for text marker.
        https://bugs.webkit.org/show_bug.cgi?id=130906

        Reviewed by Chris Fleizach.

        Added a new function in DRT and TestRunner to test that AXLineTextMarkerRangeForTextMarker works as expected.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (lineTextMarkerRangeForTextMarkerCallback):
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):

2014-03-31  Filip Pizlo  <fpizlo@apple.com>

        More validation for FTL inline caches
        https://bugs.webkit.org/show_bug.cgi?id=130948

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

2014-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not run WebKit1 unit tests by default
        https://bugs.webkit.org/show_bug.cgi?id=130968

        Reviewed by Martin Robinson.

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

2014-03-31  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove scripts code only applicable to autotools
        https://bugs.webkit.org/show_bug.cgi?id=130841

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build): Update file list to reflect GTK+ CMake port.
        * Scripts/webkitpy/common/config/watchlist: Remove the GTK+ build watchlist.
        * Scripts/webkitpy/style/checker.py: The GNUmakefile doesn't exist any longer.
        * gtk/find-make-dist-errors: Removed.
        * gtk/generate-feature-defines-files: Removed.
        * gtk/manifest.txt: No longer need to consider autotools files.

2014-03-30  Andy Estes  <aestes@apple.com>

        Fix two failing layout tests on Mountain Lion after r166466.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _downloadDidStart:]):

2014-03-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an originatingWebView property to _WKDownload
        https://bugs.webkit.org/show_bug.cgi?id=130945

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _downloadDidStart:]):
        (-[OriginatingWebViewDownloadDelegate initWithWebView:]):
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
        (TEST):

2014-03-28  Filip Pizlo  <fpizlo@apple.com>

        Land the stackmap register liveness glue with the uses of the liveness disabled
        https://bugs.webkit.org/show_bug.cgi?id=130924

        Reviewed by Oliver Hunt.

        * Scripts/run-jsc-stress-tests:

2014-03-29  Alexey Proskuryakov  <ap@apple.com>

        Update WebKit1.StringTruncator for Mountain Lion.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm: Looks like one subtest was failing
        due to different font metrics on 10.8.

2014-03-28  Darin Adler  <darin@apple.com>

        Fix recently-introduced off-by-one error in centerTruncateToBuffer
        https://bugs.webkit.org/show_bug.cgi?id=130889

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added StringTruncator.mm.
        * TestWebKitAPI/Tests/mac/StringTruncator.mm: Added. One test for each of the
        WebStringTruncator methods; should be good for a start. These are dependent on the
        metrics of Helvetica 12, but I am hoping that will be consistent across OS X machines.

2014-03-28  Martin Hock  <mhock@apple.com>

        Unreviewed. Add myself as a committer.

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

2014-03-28  Martin Robinson  <mrobinson@igalia.com>

        Remove WebKit1 GTK+ bots
        https://bugs.webkit.org/show_bug.cgi?id=130904

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove references to GTK+ WebKit1 test bot and ensure
        all bots are testing WebKit2 only.
        * Scripts/webkitpy/common/config/ews.json: Remove references to GTK+ WK1 EWS.
        * Scripts/webkitpy/common/config/ports.py: Remove references to GTK+ WK1 bots.
        * Scripts/webkitpy/common/config/ports_unittest.py: Ditto.
        * Scripts/webkitpy/port/builders.py: Ditto.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Ditto.
        * TestResultServer/static-dashboards/builders.jsonp: Ditto.

2014-03-28  Timothy Hatcher  <timothy@apple.com>

        Remove Brian Burg's apple.com email address.

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

2014-03-28  David Kilzer  <ddkilzer@apple.com>

        bisect-builds should print Trac 'changeset' URL if only one build is detected
        <http://webkit.org/b/130903>

        Reviewed by Dan Bernstein.

        * Scripts/bisect-builds:
        (printTracLink): Print a direct link to the Trac 'changeset'
        URL if there is only one revision in the range.

2014-03-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Bump glib version from 2.36 to 2.38 
        https://bugs.webkit.org/show_bug.cgi?id=130886

        Reviewed by Csaba Osztrogonác.

        There is a build break on EFL port when using glib 2.36 ver. To fix it,
        we need to bump glib version up to 2.38 as gtk port.

        * efl/jhbuild.modules:

2014-03-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        <https://webkit.org/b/42704> WebKitTestRunner needs to print history delegate information

        Provide an implementation of WKContextHistoryClient that logs when called for tests in
        the globalhistory directory.

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize): Set the history client.
        (WTR::TestController::resetStateToConsistentValues): Disable logging of history client callbacks.
        (WTR::TestController::didNavigateWithNavigationData): Log information about the navigation. Some portions
        of the output are hard-coded to match WebKit1's results for now since they're fixed in our existing tests
        and we don't yet have API to access the data in question.
        (WTR::TestController::didPerformClientRedirect):
        (WTR::TestController::didPerformServerRedirect):
        (WTR::TestController::didUpdateHistoryTitle):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldLogHistoryClientCallbacks):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldLogHistoryClientCallbacks): Log history client callbacks for tests in a globalhistory directory.
        (WTR::TestInvocation::invoke):

2014-03-27  Filip Pizlo  <fpizlo@apple.com>

        Revert http://trac.webkit.org/changeset/166386 because it broke builds.

        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-03-27  Filip Pizlo  <fpizlo@apple.com>

        Switch the LLVMForJSC target to using the LLVM in /usr/local rather than /usr/local/LLVMForJavaScriptCore on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130867
        <rdar://problem/16432456> 

        Reviewed by Mark Hahnenberg.

        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadClient::didFail() and DownloadClient::didCancel()
        https://bugs.webkit.org/show_bug.cgi?id=130805

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _downloadDidFinish:]):
        (runTest):
        (TEST):
        (-[FailingDownloadDelegate _downloadDidFinish:]):
        (-[FailingDownloadDelegate _download:didFailWithError:]):
        (-[FailingDownloadDelegate _downloadDidCancel:]):
        (-[CancelledDownloadDelegate _downloadDidStart:]):
        (-[CancelledDownloadDelegate _downloadDidFinish:]):
        (-[CancelledDownloadDelegate _download:didFailWithError:]):
        (-[CancelledDownloadDelegate _downloadDidCancel:]):
        (-[DownloadDelegate initWithSourceURL:]): Deleted.
        (-[DownloadDelegate sourceURL]): Deleted.
        (runTestWithNavigationDelegate): Deleted.

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Change MiniBrowser to hold on to window controllers instead of windows
        https://bugs.webkit.org/show_bug.cgi?id=130797

        Reviewed by Oliver Hunt.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate browserWindowWillClose:]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        (-[BrowserAppDelegate frontmostBrowserWindowController]):

2014-03-26  Commit Queue  <commit-queue@webkit.org>

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

        Broke some window.opener tests for WK2 Mavericks (Requested by
        brrian__ on #webkit).

        Reverted changeset:

        "Web Replay: resource unique identifiers should be unique-per-
        frame, not globally"
        https://bugs.webkit.org/show_bug.cgi?id=130632
        http://trac.webkit.org/changeset/166264

2014-03-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove shape-inside support
        https://bugs.webkit.org/show_bug.cgi?id=130698

        Reviewed by David Hyatt.

        * Scripts/webkitperl/FeatureList.pm:

2014-02-27  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-03-26  Tomas Popela  <tpopela@redhat.com>

        run-launcher is Perl script so use elsif and not elif
        https://bugs.webkit.org/show_bug.cgi?id=130771

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-launcher:

2014-03-26  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Utilize new AtkValue interface coming in ATK 2.11.92
        https://bugs.webkit.org/show_bug.cgi?id=130575

        Reviewed by Mario Sanchez Prada.

        Change ATK version to 2.11.92. Adjust current implementation.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2014-03-12  Philippe Normand  <pnormand@igalia.com>

        [GTK] The gnumake package is no longer needed in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=130121

        Reviewed by Martin Robinson.

        For GTK build-webkit now relies on cmake and ninja/gnumake. Even
        for a debug build cmake/system-gnumake worked just fine for me.

        * gtk/jhbuild.modules: Removed gnumake.
        * gtk/patches/make-3.82-arg-list-length.patch: Removed.
        * gtk/patches/make-3.82-parallel-build.patch: Removed.

2014-03-25  Andy Estes  <aestes@apple.com>

        Fix a failing API test on Mountain Lion and remove temporary debug logging.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveData:]):
        (-[DownloadDelegate _downloadDidFinish:]):

2014-03-25  Brian Burg  <bburg@apple.com>

        Web Replay: resource unique identifiers should be unique-per-frame, not globally
        https://bugs.webkit.org/show_bug.cgi?id=130623

        Reviewed by Timothy Hatcher.

        The resource loader callback dumping routines assumed that resource identifiers
        were globally unique. Its map of resource identifiers to URLs must also track the
        frame associated with the resource.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpResourceURL): Additionally take a WKBundleFrameRef argument, and use the
        opaque pointer as part of the key for assignedUrlsCache. The frame pointer is
        stable as long as the frame is valid.
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        (WTR::InjectedBundlePage::didFinishLoadForResource):
        (WTR::InjectedBundlePage::didFailLoadForResource):

2014-03-25  Andy Estes  <aestes@apple.com>

        Fix one API test expectation failure on Mountain Lion, and add additional logging to help diagnose another.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _download:didReceiveData:]):

2014-03-25  Andy Estes  <aestes@apple.com>

        Add some debug logging to an API test that's failing on Mountain Lion.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _downloadDidFinish:]):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add goBack: and goForward: IBActions and move stopLoading: to a new WKIBActions category on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130732

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):

2014-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * DumpRenderTree/config.h: Remove references to the autotools configure file.
        * GNUmakefile.am: Removed.
        * GtkLauncher/GNUmakefile.am: Removed.
        * GtkLauncher/main.c: Remove references to the autotools configure file.
        * MiniBrowser/gtk/BrowserDownloadsBar.c: Ditto.
        * MiniBrowser/gtk/BrowserSearchBar.c: Ditto.
        * MiniBrowser/gtk/BrowserWindow.c: Ditto.
        * MiniBrowser/gtk/GNUmakefile.am: Removed.
        * MiniBrowser/gtk/main.c: Remove references to the autotools configure file.
        * Scripts/build-webkit: No longer handle autotools.
        * Scripts/run-gtk-tests: Ditto.
        (TestRunner._setup_testing_environment):
        * Scripts/run-launcher: Ditto.
        * Scripts/webkitdirs.pm: Ditto.
        * Scripts/webkitpy/common/config/contributionareas.py: Remove autotools as a contribution area.
        * Scripts/webkitpy/common/config/contributors.json: Ditto.
        * Scripts/webkitpy/port/gtk.py: No longer handle autotools.
        * Scripts/webkitpy/style/checker.py:
        * TestWebKitAPI/GNUmakefile.am: Removed.
        * TestWebKitAPI/config.h: Remove references to the autotools configure file.
        * WebKitTestRunner/GNUmakefile.am: Removed.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Ditto.
        * gtk/GNUmakefile.am: Removed.
        * gtk/common.py: Remove checks for the autotools build.
        * gtk/symbols.filter: Renamed from Source/autotools/symbols.filter.

2014-03-25  László Langó  <llango.u-szeged@partner.samsung.com>

        prepare-ChangeLog throws false positive warnings for modified files.
        https://bugs.webkit.org/show_bug.cgi?id=130687

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (originalFile): Ignore git commit paremeter.
        We don't need this to get the unmodified file.
        (extractLineRangeBeforeChange):
        Simplify the if statement. Follow-up after r166189.

2014-03-25  Gabor Rapcsanyi  <rgabor@webkit.org>

        [EFL] Add ARM64 build support
        https://bugs.webkit.org/show_bug.cgi?id=130506

        Rubber stamped by Gyuyoung Kim.

        * Scripts/webkitdirs.pm:
        (isARM): Detect aarch64 as ARM.

2014-03-25  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] Improve _parse_bug_description to recognize more descriptions
        https://bugs.webkit.org/show_bug.cgi?id=130137

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry._parse_bug_description):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_log_entries_from_changelog):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_commit_info_for_revision):

2014-03-24  Andy Estes  <aestes@apple.com>

        Fix the iOS build of TestWebKitAPI.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/PlatformUtilities.h:

2014-03-24  László Langó  <llango.u-szeged@partner.samsung.com>

        Fix prepare-ChangeLog after r166156.
        https://bugs.webkit.org/show_bug.cgi?id=130674

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (extractLineRangeBeforeChange):

2014-03-24  Andy Estes  <aestes@apple.com>

        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=129322

        Reviewed by Anders Carlsson.

        Add an API test suite for _WKDownload.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm: Added.
        (-[DownloadDelegate initWithSourceURL:]):
        (-[DownloadDelegate sourceURL]):
        (-[DownloadDelegate _downloadDidStart:]):
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _download:didReceiveData:]):
        (-[DownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[DownloadDelegate _downloadDidFinish:]):
        (TEST):
        (runTestWithNavigationDelegate):
        (-[DownloadNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[ConvertResponseToDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2014-03-24  Joseph Pecoraro  <pecoraro@apple.com>

        filter-build-webkit: reduce unfiltered output
        https://bugs.webkit.org/show_bug.cgi?id=130485

        Reviewed by Brent Fulgham.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):

2014-03-24  László Langó  <llango.u-szeged@partner.samsung.com>

        prepare-ChangeLog should list functions that have been removed too.
        https://bugs.webkit.org/show_bug.cgi?id=130508

        Reviewed by Darin Adler.

        The prepare-ChangeLog does not list the deleted functions in the Changelog.
        We have to read the functions and the line ranges of them from the source
        before the change, then search for overlaps between them and the changed
        line ranges from diff.

        * Scripts/prepare-ChangeLog:
        (originalFile): Get original source command.
        (generateFunctionLists): Collect deleted functions too.
        (generateFunctionListsByRanges): Duplicated code is moved to a separate subroutine.
        (extractLineRangeBeforeChange): Extract line ranges from the original source to get
        deleted functions ranges too.
        (extractLineRange): Renamed to extractLineRangeAfterChange.

2014-03-23  Hyowon Kim  <hw1008.kim@samsung.com>

        Move all EFL typedefs into EflTypedefs.h.
        https://bugs.webkit.org/show_bug.cgi?id=130511

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/PlatformWebView.h: Remove EFL typedefs.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
        * WebKitTestRunner/PlatformWebView.h: Ditto.

2014-03-21  Simon Fraser  <simon.fraser@apple.com>

        Don't flush compositing layers within FrameView::willPaintContents()
        https://bugs.webkit.org/show_bug.cgi?id=130627
        <rdar://problem/16368869>

        Reviewed by Sam Weinig.
        
        Fix DRT to correctly render tests with layers now that FrameView::paintContents
        does not flush.
        
        Move the -[WebView displayIfNeeded] from -[FrameLoadDelegate webView:didFinishLoadForFrame:]
        into an explicit function called before dumping. 
        
        Then explicitly call _flushCompositingChanges to ensure that GraphicsLayer changes
        are flushed to CA. They will be pushed to the window by snapshotting.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Fix weird path to IOKit.framework.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (updateDisplay):
        (dump):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]): Fix parameter name.
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]): Remove display call.

2014-03-21  David Kilzer  <ddkilzer@apple.com>

        fix-blink-patch: tool to fix up renamed directory paths in Blink
        <http://webkit.org/b/130609>

        Reviewed by Ryosuke Niwa.

        Usage: cat blink.patch | fix-blink-patch | svn-apply

        * Scripts/fix-blink-patch: Added.

2014-03-21  Darin Adler  <darin@apple.com>

        Remove use of deprecatedCharacters in WebKit API tests
        https://bugs.webkit.org/show_bug.cgi?id=130602

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::expectBuilderContent): Use characters8/16 instead of deprecatedCharacters.
        (TestWebKitAPI::expectEmpty): Use characters8.
        (TestWebKitAPI::TEST): Use characters8 instead of deprecatedCharacters in most cases.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        Removed the test that is entirely about 16-bit conversion since that's basically a test of
        the deprecatedCharacters function itself, which we are about to delete.

2014-03-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] Fix has_valid_reviewer()
        https://bugs.webkit.org/show_bug.cgi?id=130589

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry.has_valid_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_has_valid_reviewer):
        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList._reviewer_only):
        (CommitterList.committer_by_name):
        (CommitterList.reviewer_by_email):
        (CommitterList):
        (CommitterList.reviewer_by_name):

2014-03-21  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        Add cache support for jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=130588

        Reviewed by Csaba Osztrogonác.

        * jhbuild/jhbuildrc_common.py:
        (init): Jhbuild can now save the dependencies locally, if the JHBUILD_MIRROR environment variable is set.

2014-03-21  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [CMake] Add support for MAX_CPU_LOAD translated to -l in ninja and make
        https://bugs.webkit.org/show_bug.cgi?id=130504

        Reviewed by Martin Robinson.

        * Scripts/build-webkit: Add the maxCPULoad() to the makeArgs in
        CMake if not specified.
        * Scripts/webkitdirs.pm:
        (determineMaxCPULoad): Read MAX_CPU_LOAD as maxCPULoad.
        (maxCPULoad): determineMaxCPULoad and return maxCPULoad.

2014-03-21  Andreas Kling  <akling@apple.com>

        RetainPtr API test should use CFArray instead of CFString for testing.
        <rdar://problem/16384899>

        Unreviewed bot fix.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp:
        (TestWebKitAPI::TEST):

2014-03-20  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for EFL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129853

        Reviewed by Gyuyoung Kim.

        EflUniquePtr is a template alias of std::unique_ptr
        with a custom deleter for each Efl Objects, which is motivated by GUniquePtr.
        This patch replaces uses of OwnPtr and PassOwnPtr for Efl objects with EflUniquePtr.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (main):
        * ImageDiff/efl/ImageDiff.cpp:
        (initEfl):
        (main):

2014-03-20  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed buildfix after r165983 for non Cocoa platforms

        Renamed WKPreferencesPrivate.h to WKPreferencesRefPrivate.h

        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * WebKitTestRunner/TestController.cpp:

2014-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][CMake] Add support for building with Clang
        https://bugs.webkit.org/show_bug.cgi?id=130260

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt: When building with Clang TestWebKitAPI should be
        built with GTEST_HAS_TR1_TUPLE defined to 0 to avoid build failures occuring in the
        included GTest framework headers.
        * gtk/generate-gtkdoc:
        (prepare_environment_for_gtkdoc_generation): Don't modify the CFLAGS env anymore
        in case of using Clang since that is now set by the CMake rule.

2014-03-19  Simon Fraser  <simon.fraser@apple.com>

        Expose text and page zoom in WK2 SPI, and hook them up in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130476

        Reviewed by Anders Carlsson.
        
        Hook up page/text zoom in MiniBrowser, make reload work, remove some logging.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        Remove log.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController reload:]):
        Hook up reload.
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
        (-[WK2BrowserWindowController canZoomIn]):
        (-[WK2BrowserWindowController canZoomOut]):

2014-03-19  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (OS X 10.9.2): PageVisibilityStateWithWindowChanges.WebKit2 API test fails
        https://bugs.webkit.org/show_bug.cgi?id=130463

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm: Disable the test.

2014-03-18  Samuel White  <samuel_white@apple.com>

        AX: Not able to use arrow keys to read text with VoiceOver before selection is set someplace (anyplace).
        https://bugs.webkit.org/show_bug.cgi?id=130250

        Reviewed by Chris Fleizach.

        Added ability to toggle enhanced accessibility on and off to support tests that require it.

        * DumpRenderTree/AccessibilityController.cpp:
        (enableEnhancedAccessibilityCallback):
        (getEnhancedAccessibilityEnabledCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::enableEnhancedAccessibility):
        (WTR::AccessibilityController::enhancedAccessibilityEnabled):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:

2014-03-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, add some contributors, and fix Nadav's entry (he's not really a reviewer
        yet).

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

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove stale ReportMemoryUsagePlugin
        https://bugs.webkit.org/show_bug.cgi?id=130405

        Reviewed by Andreas Kling.

        This clang plugin looks like it was used for the old Inspector memory
        instrumentation that was removed. So the tool can be removed.

        * clang/ReportMemoryUsagePlugin/CMakeLists.txt: Removed.
        * clang/ReportMemoryUsagePlugin/Makefile: Removed.
        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp: Removed.
        * clang/ReportMemoryUsagePlugin/tests/Source/WebCore/Test.cpp: Removed.

2014-03-18  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        webkit-patch land shouldn't add a reviewer for unreviewed build fixes
        https://bugs.webkit.org/show_bug.cgi?id=130220

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.set_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_set_reviewer):

2014-03-17  Filip Pizlo  <fpizlo@apple.com>

        More FTL enabling.

        Rubber stamped by Dan Bernstein.

        * Tools/Scripts/build-webkit:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Renable pagination mode in WK2 MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130374

        Reviewed by Anders Carlsson.
        
        Put the implementation of togglePaginationMode: back, and correctly
        enable the menu item.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController isPaginated]):
        (-[WK2BrowserWindowController togglePaginationMode:]):

2014-03-18  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Add --reset option to Tools/Scripts/set-webkit-configuration script
        https://bugs.webkit.org/show_bug.cgi?id=130401

        Reviewed by Csaba Osztrogonác.

        * Scripts/set-webkit-configuration:

2014-03-18  Alberto Garcia  <berto@igalia.com>

        [GTK] [CMake] build-webkit-options.txt is not generated during a fresh build
        https://bugs.webkit.org/show_bug.cgi?id=130388

        Reviewed by Sergio Villar Senin.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): make sure that the build directory
        exists before attempting to create a file in it.

2014-03-18  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] fontconfig-2.8.0 is not compliant with C++11 leading to a build break
        https://bugs.webkit.org/show_bug.cgi?id=130336

        Reviewed by Gyuyoung Kim.

        Compilation with gcc 4.8.x results in 'invalid suffix on literal; C++11
        requires a space between literal and string macro [-Wliteral-suffix]'
        warning treated as error.

        This patch applies a solution from r162448 to the EFL port.

        * efl/patches/fontconfig-C-11-requires-a-space-between-literal-and-identifier.patch: Added.
        * efl/jhbuild.modules: Added appropriate patch section.

2014-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        webkitpy test rebaseline.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_default_args):

2014-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        --profile should imply --test-runner-count=1 in run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=130375

        Reviewed by Benjamin Poulain.

        Use the test runner count of 1 when --profile is specified but not --test-runner-count.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Use -1 as the default value.
        (PerfTestsRunner._collect_tests): If --test-runner-count is set (i.e. it's a positive value),
        then use that value. Otherwise, if it's never set and --profile is present, test-runner-count
        should be 1.

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Address some style nits.

        * MiniBrowser/mac/WK2BrowserWindowController.m:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Add transparent window support back into MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130363

        Reviewed by Anders Carlsson.
        
        Re-enable transparent window support for WK2.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController toggleTransparentWindow:]):

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Fix the 32-bit build; make the open panel make a WK1 window.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate openDocument:]):

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Convert MiniBrowser to use WKWebView API
        https://bugs.webkit.org/show_bug.cgi?id=130061

        Reviewed by Anders Carlsson.
        
        Convert the MiniBrowser WK2 window to use WebKit2 API as much
        as possible.
        
        Some functionality was removed temporarily:
            - text zoom, page zoom
            - reload
            - pagination mode
            - transparent window
            - dumping source
            - window.open support
            - beforeUnload panel
            - find in page

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        (-[BrowserAppDelegate openDocument:]):
        * MiniBrowser/mac/WK2BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController fetch:]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController reload:]):
        (-[WK2BrowserWindowController goBack:]):
        (-[WK2BrowserWindowController goForward:]):
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController dumpSourceToConsole:]):
        (-[WK2BrowserWindowController togglePaginationMode:]):
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):
        (-[WK2BrowserWindowController windowShouldClose:]):
        (-[WK2BrowserWindowController applicationTerminating]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
        (-[WK2BrowserWindowController toggleTransparentWindow:]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
        (-[WK2BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController find:]):
        (-[WK2BrowserWindowController webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[WK2BrowserWindowController webView:didStartProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didFailProvisionalNavigation:withError:]):
        (-[WK2BrowserWindowController webView:didCommitNavigation:]):
        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
        (-[WK2BrowserWindowController webView:didFailNavigation:withError:]):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Use RunLoop objects through references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=130313

        Reviewed by Andreas Kling.

        Adjust the code accordingly now that RunLoop::current() and RunLoop::main()
        return RunLoop reference instead of a pointer.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp:
        (loadedCallback):
        (clickedCallback):

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        sort-export-file --help doesn't work (missing 'use')
        https://bugs.webkit.org/show_bug.cgi?id=130338

        Reviewed by Anders Carlsson.

        * Scripts/sort-export-file:
        Add a missing 'use', and fix a typo in an error message.

2014-03-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Ensure that HAVE_GTK_UNIX_PRINTING is defined when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=130155

        Reviewed by Philippe Normand.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add GTK_UNIX_PRINT flags to the build.

2014-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser fails to load injected bundle lib
        https://bugs.webkit.org/show_bug.cgi?id=130332

        Reviewed by Anders Carlsson.

        This is because WEBKIT_INJECTED_BUNDLE_PATH env var is set too late.

        * MiniBrowser/gtk/main.c:
        (main): Make sure WEBKIT_INJECTED_BUNDLE_PATH is set before a web
        process is spawn.

2014-03-16  Kim Byung Jun  <bj1987.kim@samsung.com>

        [EFL] Enable TOUCH_SLIDER macro
        https://bugs.webkit.org/show_bug.cgi?id=130185

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2014-03-16  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][CMake] Build with -fno-rtti
        https://bugs.webkit.org/show_bug.cgi?id=130261

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt: Build TestWebKitAPI with GTEST_HAS_RTTI macro
        defined to 0 to prevent typeid use in included GTest headers.

2014-03-16  Brian Burg  <bburg@apple.com>

        Web Inspector: vended backend commands file should be generated as part of the build
        https://bugs.webkit.org/show_bug.cgi?id=130110

        Reviewed by Timothy Hatcher.

        * Scripts/build-webkit: build WebInspectorUI after WebCore but before WebKit.

2014-03-16  Diego Pino García  <dpino@igalia.com>

        [GTK] Minibrowser: Add shortcuts for reloading page and reloading page ignoring cache
        https://bugs.webkit.org/show_bug.cgi?id=128999

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadPage):
        (reloadPageIgnoringCache):
        (browser_window_init):

2014-03-15  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Improve ninja detection in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=129902

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm:
        (canUseNinja): Use which instead of trying to invoke ninja directly. This also allows
        us to look for ninja-build as well.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>
        
        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build-launcher-app:
        * BuildSlaveSupport/build-launcher-dmg:
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/GCController.cpp:
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/JavaScriptThreading.cpp:
        * DumpRenderTree/JavaScriptThreading.h:
        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/WorkQueue.h:
        * DumpRenderTree/WorkQueueItem.h:
        * DumpRenderTree/atk/AccessibilityCallbacks.h:
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/efl/EditingCallbacks.cpp:
        * DumpRenderTree/efl/EditingCallbacks.h:
        * DumpRenderTree/efl/EventSender.cpp:
        * DumpRenderTree/efl/EventSender.h:
        * DumpRenderTree/efl/GCControllerEfl.cpp:
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        * DumpRenderTree/gtk/EditingCallbacks.h:
        * DumpRenderTree/gtk/EventSender.cpp:
        * DumpRenderTree/gtk/EventSender.h:
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp:
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.h:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/gtk/TextInputController.cpp:
        * DumpRenderTree/gtk/TextInputController.h:
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL:
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/AppleScriptController.h:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/CheckedMalloc.cpp:
        * DumpRenderTree/mac/CheckedMalloc.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.h:
        * DumpRenderTree/mac/EditingDelegate.mm:
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/GCControllerMac.mm:
        * DumpRenderTree/mac/MockWebNotificationProvider.h:
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        * DumpRenderTree/mac/NavigationController.h:
        * DumpRenderTree/mac/NavigationController.m:
        * DumpRenderTree/mac/ObjCController.h:
        * DumpRenderTree/mac/ObjCController.m:
        * DumpRenderTree/mac/ObjCPlugin.h:
        * DumpRenderTree/mac/ObjCPlugin.m:
        * DumpRenderTree/mac/ObjCPluginFunction.h:
        * DumpRenderTree/mac/ObjCPluginFunction.m:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        * DumpRenderTree/mac/ResourceLoadDelegate.h:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/mac/TextInputController.h:
        * DumpRenderTree/mac/TextInputController.m:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.cpp:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/DraggingInfo.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/EventSender.h:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/GCControllerWin.cpp:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        * DumpRenderTree/win/HistoryDelegate.h:
        * DumpRenderTree/win/MD5.cpp:
        * DumpRenderTree/win/MD5.h:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        * DumpRenderTree/win/PolicyDelegate.cpp:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/win/TextInputController.cpp:
        * DumpRenderTree/win/TextInputController.h:
        * DumpRenderTree/win/TextInputControllerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        * EWebLauncher/main.c:
        * GtkLauncher/main.c:
        * ImageDiff/efl/ImageDiff.cpp:
        * ImageDiff/gtk/ImageDiff.cpp:
        * MiniBrowser/gtk/main.c:
        * Scripts/SpacingHeuristics.pm:
        * Scripts/VCSUtils.pm:
        * Scripts/bisect-builds:
        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/check-dom-results:
        * Scripts/check-for-exit-time-destructors:
        * Scripts/check-for-global-initializers:
        * Scripts/commit-log-editor:
        * Scripts/compare-timing-files:
        * Scripts/debug-minibrowser:
        * Scripts/debug-safari:
        * Scripts/do-file-rename:
        * Scripts/find-extra-includes:
        * Scripts/generate-coverage-data:
        * Scripts/make-script-test-wrappers:
        * Scripts/malloc-tree:
        * Scripts/old-run-webkit-tests:
        * Scripts/parse-malloc-history:
        * Scripts/report-include-statistics:
        * Scripts/resolve-ChangeLogs:
        * Scripts/run-bindings-tests:
        * Scripts/run-iexploder-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc:
        * Scripts/run-launcher:
        * Scripts/run-leaks:
        * Scripts/run-mangleme-tests:
        * Scripts/run-minibrowser:
        * Scripts/run-pageloadtest:
        * Scripts/run-regexp-tests:
        * Scripts/run-safari:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-app:
        * Scripts/sampstat:
        * Scripts/set-webkit-configuration:
        * Scripts/sort-Xcode-project-file:
        * Scripts/sort-export-file:
        * Scripts/split-file-by-class:
        * Scripts/sunspider-compare-results:
        * Scripts/svn-apply:
        * Scripts/svn-create-patch:
        * Scripts/svn-unapply:
        * Scripts/test-webkit-scripts:
        * Scripts/update-javascriptcore-test-results:
        * Scripts/update-webkit:
        * Scripts/update-webkit-auxiliary-libs:
        * Scripts/update-webkit-dependency:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/update-webkit-support-libs:
        * Scripts/update-webkit-wincairo-libs:
        * Scripts/webkit-build-directory:
        * Scripts/webkitdirs.pm:
        (installedSafariPath):
        * Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/bindings/main.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp:
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.h:
        * WebKitTestRunner/PixelDumpSupport.cpp:
        * WebKitTestRunner/PixelDumpSupport.h:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WinLauncher/WinLauncher.cpp:
        * WinLauncher/WinLauncher.h:
        * WinLauncher/stdafx.cpp:
        * WinLauncher/stdafx.h:

2014-03-14  Filip Pizlo  <fpizlo@apple.com>

        Sometimes we need to be explicit about the SDK when running ranlib on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=130265

        Reviewed by Michael Saboff.

        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-03-14  Landry Breuil  <landry@openbsd.org>

        Recognize openbsd/netbsd and am64 archs in Tools/Scripts.
        Also allow to set MAKE in the environment.
        https://bugs.webkit.org/show_bug.cgi?id=129991

        Reviewed by Andreas Kling.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (determineNumberOfCPUs):
        (isBSD):
        (buildAutotoolsProject):
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo.is_openbsd):
        (PlatformInfo):
        (PlatformInfo.is_netbsd):
        (PlatformInfo._determine_os_name):

2014-03-14  Dean Jackson  <dino@apple.com>

        Remove libWebKitSystemInterfaceLion.a
        https://bugs.webkit.org/show_bug.cgi?id=130254

        Reviewed by Geoffrey Garen and Andreas Kling.

        No need to copy the Lion libraries into the build.

        * Scripts/copy-webkitlibraries-to-product-directory:

2014-03-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][MiniBrowser] Revise help messages of command line parameters
        https://bugs.webkit.org/show_bug.cgi?id=130222

        Reviewed by Csaba Osztrogonác.

        Correct the default value description and make help messages to be consistent.

        * MiniBrowser/efl/main.c:

2014-03-12  Sergio Villar Senin  <svillar@igalia.com>

        Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=129612

        Reviewed by Darin Adler.

        For new code use static NeverDestroyed<T> instead.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreadsMutex):
        (javaScriptThreads):
        * DumpRenderTree/efl/EventSender.cpp:
        (touchPointList):
        (delayedEventQueue):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (delegatesWithDelayedWork):
        * Scripts/check-for-exit-time-destructors:
        * TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (testsMap):

2014-03-13  Sanghyup Lee  <sh53.lee@samsung.com>

        [EFL][WK2] Fix compilation warning in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=130132

        Reviewed by Csaba Osztrogonác.

        Replace mktemp() with mkstemp() to fix compilation warning in MiniBrowser.

        * MiniBrowser/efl/main.c:
        (on_download_request):

2014-03-13  Filip Pizlo  <fpizlo@apple.com>

        FTL should support IsBlah
        https://bugs.webkit.org/show_bug.cgi?id=130202

        Reviewed by Geoffrey Garen.
        
        Running existing JSRegress tests with noInline gives us coverage for these
        changes. Chances are, this will also give coverage for other interesting things
        as well.

        * Scripts/run-jsc-stress-tests:

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * DumpRenderTree/TestRunner.cpp:
        (evaluateInWebInspectorCallback):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::evaluateInWebInspector):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::evaluateInWebInspector):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::evaluateInWebInspector):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::evaluateInWebInspector):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::evaluateInWebInspector):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2014-03-13  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        [GTK] build-webkit shouldn't show error message when ninja isn't installed
        https://bugs.webkit.org/show_bug.cgi?id=130129

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (canUseNinja): Redirecting stderr to /dev/null

2014-03-13  Andres Gomez  <agomez@igalia.com>

        [GTK] "Tools/jhbuild/jhbuild-wrapper --gtk" build fails even after running Tools/gtk/install-dependencies due to missing proper libxml2 python bindings
        https://bugs.webkit.org/show_bug.cgi?id=130092

        Reviewed by Csaba Osztrogonác.

        Added "python-dev" as dependency for deb based distros. It is
        already present for rpm based distros. This dependency will allow
        libxml2 to generate its python bindings, needed by gtk-doc.

        * gtk/install-dependencies:

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ cmake build after r165488.

        * MiniBrowser/gtk/CMakeLists.txt: Add CMAKE_BINARY_DIR to include dirs.

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][CMAKE] Remove compile warnings about GTK+ deprecated API
        https://bugs.webkit.org/show_bug.cgi?id=130014

        Reviewed by Martin Robinson.

        Include cmake or autotools config header.

        * MiniBrowser/gtk/BrowserDownloadsBar.c:
        * MiniBrowser/gtk/BrowserSearchBar.c:
        * MiniBrowser/gtk/BrowserWindow.c:
        * MiniBrowser/gtk/main.c:

2014-03-12  Commit Queue  <commit-queue@webkit.org>

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

        Didn't really fix the issue and broke another bot (Requested
        by mrobinson on #webkit).

        Reverted changeset:

        "[CMake] Newer versions of CMake cannot find older versions of
        Freetype"
        https://bugs.webkit.org/show_bug.cgi?id=130107
        http://trac.webkit.org/changeset/165471

2014-03-11  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to build WebKit with FTL on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130116

        Reviewed by Dan Bernstein.

        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-03-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove use of QTSDK
        https://bugs.webkit.org/show_bug.cgi?id=130049

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Remove QuickTime code.
        * win/AssembleBuildLogs/AssembleLogs.cmd: Don't grab logs from
        building QTMovieWin.

2014-03-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMAKE] Too verbose build output
        https://bugs.webkit.org/show_bug.cgi?id=130076

        Reviewed by Carlos Garcia Campos.

        Instead of building with cmake --build which isn't smart about pretty printing and
        colors, we build with a script which calls the proper build command.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject): For GTK+ call the script that we generate during
        the CMake configuration pass.

2014-03-11  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Newer versions of CMake cannot find older versions of Freetype
        https://bugs.webkit.org/show_bug.cgi?id=130107

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuildrc: Work around a bug in newer CMakes by giving the FREETYPE_DIR hint
        to CMake during jhbuild initialization.

2014-03-12  Zalan Bujtas  <zalan@apple.com>

        Add hiDPI support for compositing content in DumpRenderTree/WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=129961

        Reviewed by Simon Fraser.

        Now scaled content can go through the window capturing mechanism too for compositing content.
        AppleMagnifiedMode is redundant.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (runTest):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::didInitializeClients):
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        (WTR::PlatformWebView::forceWindowFramesChanged):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

2014-03-12  Anton Obzhirov  <a.obzhirov@samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-03-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on the EFL port when used lower version of ATK

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::y): Fixed typo.

2014-03-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Some images are blank in the rebaseline server UI
        https://bugs.webkit.org/show_bug.cgi?id=130104

        Reviewed by Tim Horton.

        Let the server check for images in the 'retries' directory
        if it can't find an image otherwise.

        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (RebaselineHTTPRequestHandler.test_result):

2014-03-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK][CMake] --update-gtk has no effect
        https://bugs.webkit.org/show_bug.cgi?id=130088

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit): call update-webkitgtk-libs if --update-gtk has been passed
        as an argument.

2014-03-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Add "System Font" to the list of whitelisted DRT fonts
        https://bugs.webkit.org/show_bug.cgi?id=130046

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:

2014-03-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] The jhbuild environment should set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_PATH
        https://bugs.webkit.org/show_bug.cgi?id=130064

        Reviewed by Philippe Normand.

        * efl/jhbuildrc: Remove duplicated code.
        * gtk/jhbuildrc: Remove duplicated code.
        * jhbuild/jhbuildrc_common.py:
        (init): Move duplicated code from jhbuildrc's and extend setting CMake environment variables to
        GTK+. We always set the CMAKE_LIBRARY_PATH, which should be harmless for EFL 32-bit systems.
        and is apparently necessary for GTK+.

2014-03-11  László Langó  <llango.u-szeged@partner.samsung.com>

        check-webkit-style failed to complain about missing braces
        https://bugs.webkit.org/show_bug.cgi?id=34189

        Reviewed by Ryosuke Niwa.

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

2014-03-11  László Langó  <llango.u-szeged@partner.samsung.com>

        Remove Qt cruft from style checker.
        https://bugs.webkit.org/show_bug.cgi?id=130085

        Reviewed by Csaba Osztrogonác.

        There is no 'foreach' keyword in c++. That was a Qt feature
        added in: http://trac.webkit.org/changeset/46113
        Qt was removed from WebKit, so we should remove the checks
        of this keyword from check-webkit-style scripts.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call):
        (check_spacing):
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_mismatching_spaces_in_parens):
        (CppStyleTest.test_spacing_for_fncall):
        (WebKitStyleTest.test_braces):

2014-03-11  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        [GTK] update-webkitgtk-libs needs itstool
        https://bugs.webkit.org/show_bug.cgi?id=130082

        After http://trac.webkit.org/changeset/165110 WebKitGTK+ uses gtk-doc 1.20.
        itstool is a dependency of building gtk-doc from version 1.19, so it should
        be added to Tools/gtk/install-dependencies script, too.

        Reviewed by Philippe Normand.

        * gtk/install-dependencies:

2014-03-11  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        webkitbot rollout ChangeLogs should be nicer
        https://bugs.webkit.org/show_bug.cgi?id=122654

        Reviewed by Csaba Osztrogonác.

        Added bug urls and descriptions of rolled out patches to the rollout changelog
        if they are present in the original changelog. Additionally removed the list of
        changed files and functions.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.update_with_unreviewed_message): Cut off the list of modified files.
        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout._changelog_data_for_revision): Store bug description.
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_commit_info_for_revision):
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        (CommitInfo.bug_description): Added.
        (CommitInfo.to_json):
        * Scripts/webkitpy/common/checkout/commitinfo_unittest.py:
        (CommitInfoTest.test_commit_info_creation):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractRolloutPrepCommand._prepare_state): Store bug ids and descriptions of rolled
        out patches for creating rollout changelog.
        (CreateRollout._prepare_state): Remove obsolete comments and code, the bug id that
        caused the regression is stored in state["bug_blocked"] now.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_prepare_rollout):
        (test_create_rollout_multiple_revision):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert._message_for_revert): Add bug urls and descriptions of
        rolled out patches to the changelog.
        (PrepareChangeLogForRevert.run):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (UpdateChangeLogsForRevertTest):
        (test_message_for_revert):
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        (ReopenBugAfterRollout.run):

2014-03-11  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Adjust WKTR/DRT to use new API from ATK 2.11.90
        https://bugs.webkit.org/show_bug.cgi?id=130021

        Reviewed by Mario Sanchez Prada.

        Replace deprecated functions to use new API from ATK 2.11.90.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):

2014-03-11  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-posinset and aria-setsize through object attributes
        https://bugs.webkit.org/show_bug.cgi?id=130011

        Reviewed by Chris Fleizach.

        Added missing implementation of numberAttributeValue both to WKTR and DRT.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::numberAttributeValue):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::numberAttributeValue):

2014-03-10  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        Some bad Windows code was committed at some point that prevents the Apple Windows port
        from finding its runtime dependencies reliably.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (appleApplicationSupportDirectory): Restored this function.
        (modifyPath): Update to use appleApplicationSupportDirectory function.

2014-03-10  Zoltan Horvath  <zoltan@webkit.org>

        Let the user define the full address of the performance-site-server for uploading results
        https://bugs.webkit.org/show_bug.cgi?id=129819

        Reviewed by Ryosuke Niwa.

        Currently perftestsrunner.py assumes that the server uses https protocol all the time, which
        can be confusing. It's more straightforward, if you need to define explicitly the server's full
        address along with the protocol, when you're using this parameter. I added HTTPS as the default
        protocol for now, in order to avoid breaking the perf bots.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_upload_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_upload_json):

2014-03-10  Brent Fulgham  <bfulgham@apple.com>

        [Win] Pass environment to Pre-Build, Pre-Link, and Post-Build Stages.
        https://bugs.webkit.org/show_bug.cgi?id=130023

        Reviewed by Dean Jackson.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj: Add missing
        /SAFESEH flag to DLL launcher process.

2014-03-09  Martin Robinson  <mrobinson@igalia.com>

        RunGtkWebKitGObjectDOMBindingsAPIBreakTests should be added to the BuildAndTestFactory not the TestFactory
        https://bugs.webkit.org/show_bug.cgi?id=129980

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add RunGtkWebKitGObjectDOMBindingsAPIBreakTests to the correct factory.

2014-03-09  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the WebView source-mode WebKit1 test
        https://bugs.webkit.org/show_bug.cgi?id=129976

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGtk/testwebview.c: Remove the source-mode test.

2014-03-08  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed build fix for GTKbuild after the switch to CMake

        * gtk/common.py:
        (is_cmake_build): Like r165284, we need to assume CMake by default, since the
        test-only bot doesn't have any build files.

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] built-product-archive does not handle GTK+ CMake build
        https://bugs.webkit.org/show_bug.cgi?id=129941

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): Fix the build by adding support to built-product-archive for
        the CMake build.

2014-03-07  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] Include CMake into install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=129909

        Reviewed by Martin Robinson.

        As since r165267 buid-webkit uses CMake by default, the dependency
        with 'cmake' package should be introduced.

        * gtk/install-dependencies: Ditto.

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(165267): Broke a webkitpy unit tests
        https://bugs.webkit.org/show_bug.cgi?id=129904

        Reviewed by Jon Honeycutt.

        * Scripts/webkitpy/port/gtk.py: Flip the default test to assume CMake by default.
        (GtkPort._is_cmake_build):

2014-03-07  Andres Gomez  <agomez@igalia.com>

        [GTK] webkit-patch setup-git-clone fails even after running Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=129893

        Reviewed by Martin Robinson.

        Added "git-svn" as dependency for deb based distros and,
        additionally, "subversion" for rpm based distros.

        * gtk/install-dependencies:

2014-03-07  Roger Fong  <roger_fong@apple.com>

        Remove dummy setSystemWebGLLoadPolicy client method.
        https://bugs.webkit.org/show_bug.cgi?id=129873.

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2014-03-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests doesn't eagerly report test failures when using the shell runner
        https://bugs.webkit.org/show_bug.cgi?id=129886

        Reviewed by Mark Lam.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: Added a "verbose" mode to the shell runner.
        If we're in verbose mode, then we don't redirect any output when running each test. If we're not
        in verbose mode then we redirect stdout to /dev/null and allow any stderr output through.
        * Scripts/run-jsc-stress-tests: Redirect any sort of error output to stderr so that it will 
        make it through when in non-verbose mode.

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] buid-webkit should use CMake by default
        https://bugs.webkit.org/show_bug.cgi?id=129855

        Reviewed by Carlos Garcia Campos.

        Make the CMake build the default GTK+ build when using build-webkit. This will
        ensure that all bots are using CMake. We do this by swapping --gtk and --gtkcmake,
        so that we have --gtk and --gtkautotools.

        * Scripts/webkitdirs.pm: Swap --gtkcmake/--gtk for --gtk/--gtkautotools.
        * Scripts/webkitpy/port/gtk.py: Ditto.

2014-03-06  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Build with ninja when it is available
        https://bugs.webkit.org/show_bug.cgi?id=129805

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (canUseNinja): Added this helper which tries to execute Ninja, in an effort to determine
        if it's available on the system.
        (cmakeGeneratedBuildfile): Return the path to the generated build file. Only Unix support ATM.
        (generateBuildSystemFromCMakeProject): For GTK+ compile with Ninja when possible.

2014-03-06  Filip Pizlo  <fpizlo@apple.com>

        If the FTL is build-time enabled then it should be run-time enabled.

        Rubber stamped by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

2014-03-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        detectFailures in run-jsc-stress-tests can report everything was ok if too many tests fail
        https://bugs.webkit.org/show_bug.cgi?id=129837

        Reviewed by Michael Saboff.

        ls test_fail_* can fail if there are too many files that match. We then swallow that error, which makes everything seem ok.
        The fix is to use find instead of ls like we do in shell-runner.sh.

        * Scripts/run-jsc-stress-tests:

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        filter-build-webkit should not strip .o
        https://bugs.webkit.org/show_bug.cgi?id=129614

        Reviewed by Dean Jackson.

        This makes it much easier to jump from the failing output at
        the end back up to the compile errors earlier in the output.

        * Scripts/filter-build-webkit:

2014-03-06  Anders Carlsson  <andersca@apple.com>

        Build WebKit2 before building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=129831
        <rdar://problem/15920020>

        Reviewed by Dan Bernstein.

        * Scripts/build-webkit:
        Always build WebKit2 and make sure to build it before WebKit when building on Mac.

2014-03-06  ChangSeok Oh  <changseok.oh@collabora.com>

        make-3.82 fails to build on ARM/Linux
        https://bugs.webkit.org/show_bug.cgi?id=107926

        Reviewed by Martin Robinson.

        Some ARM/Linux systems don't support PAGE_SIZE macro so that it causes a build failure.
        The related bug reporting is here. https://lists.debian.org/debian-kernel/2014/02/msg00274.html
        To avoid this, I propose to use sysconf(_SC_PAGESIZE) instead of PAGE_SIZE
        where it is not defined. See more details, http://linux.die.net/man/2/getpagesize

        * gtk/patches/make-3.82-arg-list-length.patch:

2014-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Close the page when the view is disposed instead of when finalized
        https://bugs.webkit.org/show_bug.cgi?id=129783

        Reviewed by Sergio Villar Senin.

        Add test case but disabled for now because it's affetected by bug #129684.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        (testProcessPerWebView):

2014-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser crashes when opening several urls passed as command line options
        https://bugs.webkit.org/show_bug.cgi?id=129738

        Reviewed by Sergio Villar Senin.

        The problem is that we are calling g_object_unref() for the
        WebKitWebSettings everytime we set it to a WebKitWebView, but the
        view only increases the reference counter when the settings is not
        the same it currently has. We should release our reference once.

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

2014-03-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Tarball is created with wrong tarball paths
        https://bugs.webkit.org/show_bug.cgi?id=129496

        Reviewed by Daniel Bates.

        * gtk/make-dist.py:
        (Manifest.__init__): I inadvertently inverted the logic of these checks when
        landing the original patch with some suggestions from the reviewer. With the
        checks corrected, the tarball path is constructed properly.

2014-03-05  Jae Hyun Park  <jaepark@webkit.org>

        Unreviewed. Update my email in contributors.json

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

2014-03-05  Dean Jackson  <dino@apple.com>

        [WebGL] Use WKSI to see what the system policy for WebGL is
        https://bugs.webkit.org/show_bug.cgi?id=129722
        <rdar://problem/15790542>

        Reviewed by Tim Horton.

        Dummy entry for setSystemWebGLLoadPolicy.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2014-03-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Generate documentation for the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=126211

        Reviewed by Carlos Garcia Campos.

        * gtk/GNUmakefile.am: No longer generation sections and SGML files in the makefile.
        * gtk/generate-gtkdoc: Call the code from webkitdom.py to generate sections and SGML files.
        * gtk/generate-webkitdom-doc-files: Removed.
        * gtk/webkitdom.py: Moved WebKit GObject DOM bindings doc generation code here, so
        that it can be called by generate-gtkdoc.

2014-03-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] build-webkit should rerun cmake if the Makefile is missing
        https://bugs.webkit.org/show_bug.cgi?id=129380

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Check for the existence of the Makefile before
        skipping CMake execution.

2014-03-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] The jhbuild environment should have the latest stable release of gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=129651

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Add gtk-doc to the list of modules.

2014-03-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Give the WebKit GObject DOM bindings API break detection it's own buildbot bubble
        https://bugs.webkit.org/show_bug.cgi?id=129637

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkWebKitGObjectDOMBindingsAPIBreakTests): Added this test runner.
        (RunGtkWebKitGObjectDOMBindingsAPIBreakTests.commandComplete): Run the breakage test command and scan the output.
        (RunGtkWebKitGObjectDOMBindingsAPIBreakTests.evaluateCommand): Return failure if there is missing API (an API break).
        New API typically just requires a rebaseline and isn't necessarily a faiulre.
        (TestFactory.__init__): Add the test for GTK+.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Add a unit test for the new bubble.

2014-03-05  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose missing functionalities of AtkTableCell to AT
        https://bugs.webkit.org/show_bug.cgi?id=129492

        Reviewed by Mario Sanchez Prada.

        Reducing some code by using new API of AtkTableCell.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2014-03-04  Alex Christensen  <achristensen@webkit.org>

        Preparing to run layout tests on Wincairo.
        https://bugs.webkit.org/show_bug.cgi?id=129709

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (setPathForRunningWebKitApp):
        Add GStreamer directory for WinCairo running layout tests.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (modifyPath):
        Added the WinCairo bin32 or bin64 directory for running WinLauncher.

2014-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Simplify the GObject DOM bindings API break check into one step
        https://bugs.webkit.org/show_bug.cgi?id=129571

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Add the API break check to 'make check.'
        * gtk/check-for-webkitdom-api-breaks: Added. A combination of the two removed scripts.
        * gtk/check-gdom-symbols: Removed.
        * gtk/webkitdom.py: Added.
        (header_name_list_from_gtkdoc_config_file): Gets the names of all headers from the gtkdoc config file.
        (get_all_webkitdom_symbol_files): Find the symbol files from the names.

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

        Add Jeremy Jones to the contributors list as a contributor.

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

2014-03-03  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Unreviewed. Update contact email.
        https://bugs.webkit.org/show_bug.cgi?id=129610

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

2014-03-02  Brian Burg  <bburg@apple.com>

        Web Inspector model tests load wrong inspector page under WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=129460

        Reviewed by Dan Bernstein.

        Don't unconditionally open the inspector before running an inspector test.
        Instead, the test should request that the inspector open when it's ready.

        This change was lost during a rebase, but is the same change made to
        DumpRenderTree.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): 

2014-03-02  Darin Adler  <darin@apple.com>

        Split TextIteratorBehavior into a separate header
        https://bugs.webkit.org/show_bug.cgi?id=129578

        Reviewed by Sam Weinig.

        * Scripts/sort-export-file: Added special cases to the script so you can just paste link errors
        from WebKit in and the script will add them in as unconditional exports. This makes the "add"
        task easy, but the remove is still a bit of a pain.

2014-03-02  Darin Adler  <darin@apple.com>

        Sort Mac platform export files so they merge better
        https://bugs.webkit.org/show_bug.cgi?id=129581

        Reviewed by Sam Weinig.

        * Scripts/sort-export-file: Added. Quickly whipped together script that sorts
        Mac export files in a "canonical" order for this project.

2014-02-28  Zalan Bujtas  <zalan@apple.com>

        Add hiDPI support to DumpRenderTree/WebKitTestRunner without the need of reloading the test case.
        https://bugs.webkit.org/show_bug.cgi?id=129438

        Reviewed by Simon Fraser.

        'hidpi-' prefixed test cases now trigger 2x scale factor on the testing
        offscreen window. It makes testing subpixel rendering and positioning possible.

        Both the offscreen window's and WebKit's scaling are set accordingly.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): cleanup
        (destroyWebViewAndOffscreenWindow): cleanup
        (dumpRenderTree):
        (changeWindowScaleIfNeeded):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]): cleanup
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::changeWindowScaleIfNeeded):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

2014-02-28  Anders Carlsson  <andersca@apple.com>

        Remove logging.

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController browsingContextController:decidePolicyForNavigationAction:decisionHandler:]):

2014-02-28  Daniel Bates  <dabates@apple.com>

        [iOS] DumpRenderTree Perl Support may build against wrong SDK and toolchain
        https://bugs.webkit.org/show_bug.cgi?id=129163

        Reviewed by David Kilzer.

        Fixes an issue where DumpRenderTree Perl Support may build with the specified
        iOS Simulator SDK and toolchain instead of using the OS X SDK and toolchain.
        This issue manifests itself in a build failure when building the IPhoneSimulatorNotification
        bundle.

        Currently we build DumpRenderTree Perl Support with respect to the variable SDKROOT,
        which is specified either explicitly when building with MAKE(1) or implicitly by
        build-{dumprendertree, webkit}. Instead we should always build Perl Support using
        the OS X SDK and toolchain since the built products are only applicable to OS X.

        * DumpRenderTree/ios/PerlSupport/Makefile:

2014-02-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164859.
        http://trac.webkit.org/changeset/164859
        https://bugs.webkit.org/show_bug.cgi?id=129483

        caused WK1 crashes (DumpRenderTree) (Requested by zalan on
        #webkit).

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (dumpRenderTree):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow frameRespectingFakeOrigin]):

2014-02-28  Zalan Bujtas  <zalan@apple.com>

        Add hiDPI support to DumpRenderTree/WebKitTestRunner without the need of reloading the test case.
        https://bugs.webkit.org/show_bug.cgi?id=129438

        Reviewed by Simon Fraser.

        'hidpi-' prefixed test cases now trigger 2x scale factor on the testing
        offscreen window. It makes testing subpixel rendering and positioning possible.

        Both the offscreen window's and WebKit's scaling are set accordingly.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): unrelated cleanup.
        (destroyWebViewAndOffscreenWindow): unrelated cleanup.
        (dumpRenderTree):
        (changeOffscreenWindowScaleIfNeeded):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]): cleanup.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::changeOffscreenWindowScaleIfNeeded):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeOffscreenWindowScaleIfNeeded):

2014-02-27  Brian Burg  <bburg@apple.com>

        Web Inspector: model tests should use a special Test.html inspector page
        https://bugs.webkit.org/show_bug.cgi?id=129190

        Reviewed by Timothy Hatcher.

        Remove code that immediately opens the Web Inspector based on the file path of the test.
        Instead, the test page should request that the inspector open inside its `test()` method.

        This change is necessary because otherwise, the inspector would be opened too early for
        InspectorController::isUnderTest to get set in time, so the normal Web Inspector page
        will get loaded instead of the minimal test page.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (createTestRunner):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2014-02-27  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        check-webkit-style indentation false alarm in WebKit/win/WebNodeHighlight.cpp
        https://bugs.webkit.org/show_bug.cgi?id=127076

        Reviewed by Anders Carlsson.

        Avoid match for :: as start of a member initialization list. Modify expression to match
        after a colon either non-colon character or end of line.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2014-02-27  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Unreviewed. Update my email addresses in contributors.json.

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

2014-02-27  Alberto Garcia  <berto@igalia.com>

        [gtk-doc] UnicodeEncodeError: 'ascii' codec can't encode character
        https://bugs.webkit.org/show_bug.cgi?id=128927

        Reviewed by Philippe Normand.

        Encode manually the data for sys.{stdout,stderr}.write.

        * gtk/gtkdoc.py:
        (GTKDoc._run_command):

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add myself to watchlists

        * Scripts/webkitpy/common/config/watchlist: Add myself to
        watchlists.

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed, rolling out r164790.
        http://trac.webkit.org/changeset/164790

        Revert r164790 because of erroneous commit log

        * Scripts/webkitpy/common/config/watchlist:

2014-02-27  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Utilize AtkTableCell to expose directly AccessibilityTableCell to AT
        https://bugs.webkit.org/show_bug.cgi?id=129250

        Reviewed by Mario Sanchez Prada.

        Changing version of ATK to 2.11.90, because it introduces AtkTableCell interface.
        Implementing methods so that we could test column/row headers represented as an array of cells.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::columnHeaders):
        (AccessibilityUIElement::rowHeaders):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp: Adding empty stubs, to not break compilation.
        (AccessibilityUIElement::columnHeaders):
        (AccessibilityUIElement::rowHeaders):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rowHeaders):
        (WTR::AccessibilityUIElement::columnHeaders):
        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add myself to watchlists

        * Scripts/webkitpy/common/config/watchlist: Add myself to
        watchlists.

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add myself as a committer.

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

2014-02-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add Víctor Jáquez and myself to watchlists

        * Scripts/webkitpy/common/config/watchlist: Add Víctor Jáquez and
        myself to watchlists.

2014-02-26  Julien Brianceau  <jbriance@cisco.com>

        Unreviewed. Add myself as a committer.

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

2014-02-26  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Unreviewed. Moved myself to the list of committers.

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

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Reduplicate common.top_level_path in scripts
        https://bugs.webkit.org/show_bug.cgi?id=129291

        Reviewed by Philippe Normand.

        Duplicate common.top_level_path and avoid polluting many scripts with awkward system
        path manipulation and weird dependencies on the jhbuild infrastructure.

        * Scripts/run-gtk-tests: Use common again.
        (TestRunner._setup_testing_environment): Ditto.
        * gtk/check-gdom-symbols: Ditto.
        * gtk/common.py:
        (top_level_path): Re-add top_level_path..
        (get_build_path): Use the builtin top_level_path again.
        * gtk/find-make-dist-errors: Use common again.
        (get_missing_headers): Ditto.
        * gtk/generate-inspector-gresource-manifest.py: Ditto.

2014-02-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        runscript: line 42: /bin/ls: Argument list too long
        https://bugs.webkit.org/show_bug.cgi?id=129376

        Reviewed by Michael Saboff.

        The "test_script_*" can expand to more things than can be passed as arguments on the command line. 
        We should use find instead, which generates the list of files rather than expanding them all on 
        the command line and spitting them back out.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: 

2014-02-26  Martin Robinson  <mrobinson@igalia.com>

        ENABLE_PROMISES is improperly specified as ENABLE_PROMISE in Features.pm
        https://bugs.webkit.org/show_bug.cgi?id=129377

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm: Properly specify the promises feature as ENABLE_PROMISES.

2014-02-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Re-enable gtk-doc in EWS
        https://bugs.webkit.org/show_bug.cgi?id=128369

        Reviewed by Carlos Garcia Campos.

        Enable again gtk-doc generation in EWS once bug #128417 has been fixed.

        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command): Add --disable-gtk-doc arg.
        (GtkWK2Port.build_webkit_command): Ditto.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port): Ditto.
        (DeprecatedPortTest.test_gtk_wk2_port): Ditto.

2014-02-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc can fail with WebKit1 or WebKit2 only builds
        https://bugs.webkit.org/show_bug.cgi?id=129319

        Reviewed by Carlos Garcia Campos.

        * gtk/generate-gtkdoc:
        (get_generator_for_config): Properly handle the situation where the pkgconfig file is missing.

2014-02-25  Mihai Maerean  <mmaerean@adobe.com>

        Unreviewed. Add myself as a committer.

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

2014-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add ENABLE flag
        https://bugs.webkit.org/show_bug.cgi?id=129153

        Reviewed by Simon Fraser.

        Added ENABLE_CSS_GRID_LAYOUT feature flag. It's on by default for
        all ports for developer builds.

        * Scripts/webkitperl/FeatureList.pm:

2014-02-25  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        Added myself as a committer.

        Unreviewed.

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

2014-02-25  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Unreviewed. Moved myself to the list of committers.

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

2014-02-25  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Move myself to the committers list.

        Unreviewed.

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

2014-02-25  László Langó  <llango.u-szeged@partner.samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-02-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164639.
        http://trac.webkit.org/changeset/164639
        https://bugs.webkit.org/show_bug.cgi?id=129302

        gtk-doc still have problems in EWS (Requested by rego on
        #webkit).

        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command):
        (GtkWK2Port.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest.test_gtk_wk2_port):

2014-02-25  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Re-enable gtk-doc in EWS
        https://bugs.webkit.org/show_bug.cgi?id=128369

        Reviewed by Carlos Garcia Campos.

        Enable again gtk-doc generation in EWS once bug #128417 has been fixed.

        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command): Add --disable-gtk-doc arg.
        (GtkWK2Port.build_webkit_command): Ditto.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port): Ditto.
        (DeprecatedPortTest.test_gtk_wk2_port): Ditto.

2014-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark view source mode methods as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=128920

        Reviewed by Martin Robinson.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (beforeAll): Remove view mode test.

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should not generate documentation for source files for unbuilt source files
        https://bugs.webkit.org/show_bug.cgi?id=128417

        Reviewed by Carlos Garcia Campos.

        * gtk/GNUmakefile.am: Make the documentation process depend on the configuration files.
        * gtk/generate-gtkdoc: Switch from using hard-coded configurations to reading them from
        a makefile. This allows accepting a header list from the build system, which can be used
        to dynamically build a list of ignored files. We can ignore any source file that doesn't
        have a corresponding header file on the header list. 
        * gtk/gtkdoc.py: Now accept a headers parameter, which can be used instead of passing just
        source directories to gtkdoc-scan.

2014-02-24  Anders Carlsson  <andersca@apple.com>

        Add a DefaultVisitedLinkProvider and route visited link actions through it
        https://bugs.webkit.org/show_bug.cgi?id=129285

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        Set a shared history so we'll get visited link tracking.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        Set a group name.

2014-02-24  Dan Bernstein  <mitz@apple.com>

        iOS build fix after r164577.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):

2014-02-24  David Kilzer  <ddkilzer@apple.com>

        [ASan] Remove methods from ignore list that no longer cause crashes
        <http://webkit.org/b/129257>

        Reviewed by Anders Carlsson.

        * asan/webkit-asan-ignore.txt: Remove old methods.

2014-02-24  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Extract common parts from jhbuildrc files.
        https://bugs.webkit.org/show_bug.cgi?id=125986

        Reviewed by Csaba Osztrogonác.

        Co-authored with Peter Szanka <h868064@stud.u-szeged.hu>.

        * Scripts/run-gtk-tests:
        (TestRunner._setup_testing_environment):
        * efl/common.py: Removed.
        * efl/jhbuildrc:
        * gtk/check-gdom-symbols:
        * gtk/common.py:
        (binary_build_path):
        (get_build_path):
        * gtk/find-make-dist-errors:
        (get_missing_headers):
        * gtk/generate-gtkdoc:
        (get_webkit2_options):
        (get_webkit1_options.src_path):
        (get_webkit1_options):
        (get_webkitdom_options.src_path):
        (get_webkitdom_options):
        * gtk/generate-inspector-gresource-manifest.py:
        * gtk/jhbuildrc:
        * jhbuild/jhbuildrc_common.py: Added.
        (script_path):
        (top_level_path):
        (init):

2014-02-24  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed. Fix code indentation and spacing.

        * Scripts/webkitpy/style/checkers/js.py:
        (SingleQuoteChecker.check):

2014-02-24  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Wrong selected element at a given index in a list box.
        https://bugs.webkit.org/show_bug.cgi?id=129039

        Reviewed by Chris Fleizach.

        Added missing implementation and proposed some new function for testing selection
        in a list boxes.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedChildAtIndexCallback):
        (removeSelectionAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::setSelectedChildAtIndex):
        (AccessibilityUIElement::removeSelectionAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex):

2014-02-23  Diego Pino García  <dpino@igalia.com>

        [GTK] Fix build after Web Inspector code reorganization (r164543)
        https://bugs.webkit.org/show_bug.cgi?id=129231

        Reviewed by Dean Jackson.

        * gtk/generate-inspector-gresource-manifest.py:
        Modify paths to Web Inspector code.

2014-02-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should use argparse
        https://bugs.webkit.org/show_bug.cgi?id=128418

        Reviewed by Carlos Garcia Campos.

        * gtk/generate-gtkdoc: Get all arguments from argparse, pass then as parameters
        to all functions, and guard the main routine with a __name__ == __main__ check.

2014-02-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Many plugin tests fail when running WebKit1 layout tests
        https://bugs.webkit.org/show_bug.cgi?id=129191

        Reviewed by Anders Carlsson.

        * DumpRenderTree/PlatformGTK.cmake: Properly specify the library build directory
        for the GTK+ DumpRenderTree build. We could manually construct this path, but the
        name of the directory is "lib" and not "libs". Instead we should use the CMake
        variable specifically assigned to this task.

2014-02-23  David Kilzer  <ddkilzer@apple.com>

        [ASan] Add JSC::DFG::prepareOSREntry() to ignore list
        <http://webkit.org/b/129209>

        Reviewed by Geoffrey Garen.

        * asan/webkit-asan-ignore.txt: Add DFG::prepareOSREntry() to the
        ignore list to make ASan builds usable again.  Follow-up
        investigation is tracked by <rdar://problem/16055903>.

2014-02-20  David Farler  <dfarler@apple.com>

        Make old-run-webkit-tests work with iOS Simulator WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=128622

        Reviewed by Simon Fraser.

        With this change, we now have layout tests running in both DumpRenderTree
        and WebKitTestRunner, with WebKit and WebKit2 used respectively in the iOS
        simulator.

        * Scripts/old-run-webkit-tests:
        In general, make any specific reference to DumpRenderTree
        able to refer to WebKitTestRunner wherever possible:
        - Rename functions to remove DRT-specific naming.
        - Name FIFOs after the tool that is being used.
        -- Clean up FIFO creation code
        Other necessary changes:
        - Allow use of an ios-sim-wk2 platform.
        - Clean up platform hierarchy creation where the simulator platform behavior differed.
        * WebKitTestRunner/TestController.cpp:
        Open FIFOs to get dumps out of the simulator as we do in DumpRenderTree.
        (WTR::TestController::TestController):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Copy the injected bundle into the app bundle.

2014-02-21  Joseph Pecoraro  <pecoraro@apple.com>

        run-webkit-httpd fails to find httpd configuation file.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitperl/httpd.pm:
        (getHTTPDConfigPathForTestDirectory):

2014-02-21  Eric Carlson  <eric.carlson@apple.com>

        Fix TimeRanges layering violations
        https://bugs.webkit.org/show_bug.cgi?id=128717

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/TimeRanges.cpp: TimeRanges* -> TimeRanges&.
        (TestWebKitAPI::TEST):

2014-02-21  Diego Pino García  <dpino@igalia.com>

        Web Inspector: update check-webkit-style to flag single quotes in WebInspectorUI projects
        https://bugs.webkit.org/show_bug.cgi?id=128422

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/style/checkers/js.py:
        (JSChecker.__init__):
        (JSChecker.check):
        (SingleQuoteChecker):
        (SingleQuoteChecker.__init__):
        (SingleQuoteChecker.check):
        * Scripts/webkitpy/style/checkers/js_unittest.py:
        (JSTestCase.assertError.error_for_test):
        (JSTestCase.assertError):
        (JSTestCase.test_no_error):
        (JSTestCase.test_error):

== Rolled over to ChangeLog-2014-02-20 ==
