2013-09-13  Filip Pizlo  <fpizlo@apple.com>

        DFG AI assumes that ToThis can never return non-object if it is passed an object, and operationToThis will get the wrong value of isStrictMode() if there's inlining
        https://bugs.webkit.org/show_bug.cgi?id=121330

        Reviewed by Mark Hahnenberg and Oliver Hunt.

        We should run tests even if they don't have expected files yet.
        
        * Scripts/run-layout-jsc:

2014-01-08  Alberto Garcia  <berto@igalia.com>

        Fix some compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=126635

        Reviewed by Csaba Osztrogonác.

        * GtkLauncher/main.c:
        (createWindow): This function is not supposed to receive any
        parameter, yet we are passing one.

2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web process sometimes crashes when printing in synchronous mode
        https://bugs.webkit.org/show_bug.cgi?id=126979

        Reviewed by Gustavo Noronha Silva.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip
        /webkit2/WebKitPrintOperation/close-after-print.

2014-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UI process crashes when the web process crashes while printing
        https://bugs.webkit.org/show_bug.cgi?id=126977

        Reviewed by Gustavo Noronha Silva.

        Add new test case to check that closing the window right after
        printing works. It's skipped for now, because this patch only
        fixes the UI process crash, but not the web process one.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip
        /webkit2/WebKitPrintOperation/close-after-print.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        (testPrintOperationPrintPrinter):
        (findPrintToFilePrinter):
        (testPrintOperationPrint):
        (testPrintOperationErrors):
        (testPrintOperationCloseAfterPrint):
        (beforeAll):

2014-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Partial file left on disk after a download fails or is cancelled in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=126686

        Reviewed by Martin Robinson.

        Test that partial files are not left on disk after a download has
        been cancelled after the destination has been decided. To make
        sure the download is cancelled after the destination has been
        decided and before the operation finishes, we cancel the download
        in the destination decided callback, and we use an infinite
        resource that writes chunks to the response body and never
        completes the body.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (addContentDispositionHTTPHeaderToResponse): Helper function to
        add the Content-Disposition to the response headers.
        (writeNextChunkIdle): Write next chunk to response body.
        (writeNextChunk): Write next chunk in an idle to avoid flooding
        the network with the inifnite resource.
        (serverCallback): Add an inifinite resource.
        (testDownloadRemoteFileError): Check that partial file is not
        present after the download has been cancelled.

2014-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move all GTK/GObject unit tests to Tools/TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=126342

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Include the new unit tests subdirectories.
        * Scripts/run-gtk-tests: Update to refer to the new build locations.
        * Scripts/webkitpy/style/checker.py: Update the style checker.
        * Scripts/webkitpy/style/checker_unittest.py:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/DOMNodeTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/FrameTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/InspectorTestServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/InspectorTestServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/LoadTrackingTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/LoadTrackingTest.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestAuthentication.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMDOMWindow.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestDOMNode.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestFrame.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestInspectorServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMain.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestMain.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMain.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestPrinting.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestUIClient.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFindController.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitVersion.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitVersion.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebViewGroup.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestBus.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestBus.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestServer.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTestRunner.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTestRunner.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebViewTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebViewTest.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/link-title.js: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/link-title.js.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/test-cert.pem: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/test-key.pem: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/webkit2gtk-tests.gresource.xml.
        * TestWebKitAPI/Tests/WebKitGtk/CMakeLists.txt: Added.
        * TestWebKitAPI/Tests/WebKitGtk/resources/blank.ico: Renamed from Source/WebKit/gtk/tests/resources/blank.ico.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.html: Renamed from Source/WebKit/gtk/tests/resources/test.html.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.ogg: Renamed from Source/WebKit/gtk/tests/resources/test.ogg.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.pdf: Renamed from Source/WebKit/gtk/tests/resources/test.pdf.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.txt: Renamed from Source/WebKit/gtk/tests/resources/test.txt.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.c: Renamed from Source/WebKit/gtk/tests/test_utils.c.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.h: Renamed from Source/WebKit/gtk/tests/test_utils.h.
        * TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c: Renamed from Source/WebKit/gtk/tests/testapplicationcache.c.
        * TestWebKitAPI/Tests/WebKitGtk/testatk.c: Renamed from Source/WebKit/gtk/tests/testatk.c.
        * TestWebKitAPI/Tests/WebKitGtk/testatkroles.c: Renamed from Source/WebKit/gtk/tests/testatkroles.c.
        * TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c: Renamed from Source/WebKit/gtk/tests/testcontextmenu.c.
        * TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c: Renamed from Source/WebKit/gtk/tests/testcopyandpaste.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c: Renamed from Source/WebKit/gtk/tests/testdomdocument.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c: Renamed from Source/WebKit/gtk/tests/testdomdomwindow.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdomnode.c: Renamed from Source/WebKit/gtk/tests/testdomnode.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdownload.c: Renamed from Source/WebKit/gtk/tests/testdownload.c.
        * TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c: Renamed from Source/WebKit/gtk/tests/testfavicondatabase.c.
        * TestWebKitAPI/Tests/WebKitGtk/testglobals.c: Renamed from Source/WebKit/gtk/tests/testglobals.c.
        * TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c: Renamed from Source/WebKit/gtk/tests/testhittestresult.c.
        * TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c: Renamed from Source/WebKit/gtk/tests/testhttpbackend.c.
        * TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c: Renamed from Source/WebKit/gtk/tests/testkeyevents.c.
        * TestWebKitAPI/Tests/WebKitGtk/testloading.c: Renamed from Source/WebKit/gtk/tests/testloading.c.
        * TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c: Renamed from Source/WebKit/gtk/tests/testmimehandling.c.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c: Renamed from Source/WebKit/gtk/tests/testnetworkrequest.c.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c: Renamed from Source/WebKit/gtk/tests/testnetworkresponse.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c: Renamed from Source/WebKit/gtk/tests/testwebbackforwardlist.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c: Renamed from Source/WebKit/gtk/tests/testwebdatasource.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebframe.c: Renamed from Source/WebKit/gtk/tests/testwebframe.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c: Renamed from Source/WebKit/gtk/tests/testwebhistoryitem.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c: Renamed from Source/WebKit/gtk/tests/testwebinspector.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c: Renamed from Source/WebKit/gtk/tests/testwebplugindatabase.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebresource.c: Renamed from Source/WebKit/gtk/tests/testwebresource.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c: Renamed from Source/WebKit/gtk/tests/testwebsettings.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebview.c: Renamed from Source/WebKit/gtk/tests/testwebview.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwindow.c: Renamed from Source/WebKit/gtk/tests/testwindow.c.

2013-12-06  Lukasz Gajowy  <l.gajowy@samsung.com>

        [ATK] Missing aria roles mappings
        https://bugs.webkit.org/show_bug.cgi?id=117729

        Reviewed by Mario Sanchez Prada.

        Added new mappings to AccessibilityUIElementAtk.cpp.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Split WebKit2APITests/TestWebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=126284

        Reviewed by Philippe Normand.

        Skip only WebKitWebView/mouse-target and all TestAuthentication
        tests that are timing out when running under xvfb.

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

2013-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests option --skipped=ignore doesn't work when the entire suite is skipped
        https://bugs.webkit.org/show_bug.cgi?id=121218

        Reviewed by Philippe Normand.

        Skipping the entire suite was added to skip tests when they can't
        be run because of the environment, for example to skip the a11y
        tests when the at-spi daemons fail to start. This is no longer
        true for all the cases, so we can disable the tests that are
        impossible to run instead of skipping them.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Initialize the skipped tests list.
        (TestRunner._setup_testing_environment): Add
        TestWebKitAccessibility path to the list of disabled tests when
        at-spi daemon fail to start.
        (TestRunner._should_run_test_program): Check first if the test
        program is disabled and then whether it's skipped honoring the
        skipped command line option.

2013-09-04  Mario Sanchez Prada  <mario.prada@samsung.com>

        REGRESSION (r132328): /WebKit2APITests/TestWebKitAccessibility unit test is failing
        https://bugs.webkit.org/show_bug.cgi?id=100408

        Unreviewed gardening. Unskip TestWebKitAccessibility after
        manually checking that it's running properly in the bot.

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

2013-09-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Test /webkit/atk/getTextInParagraphAndBodyModerate fails
        https://bugs.webkit.org/show_bug.cgi?id=105538

        Reviewed by Chris Fleizach.

        Unskip passing test getTextInParagraphAndBodyModerate.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip pasing test.

2013-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests should always run glib tests with -k option
        https://bugs.webkit.org/show_bug.cgi?id=126132

        Reviewed by Philippe Normand.

        With -k command line option, gtester continues running all other
        test cases after a failure.

        * Scripts/run-gtk-tests:
        (TestRunner._run_test_glib): Use -k option when runing glib tests
        to not stop on failure.

2013-10-25  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] [WebKit2] CanHandleRequest API test fails
        https://bugs.webkit.org/show_bug.cgi?id=88453

        Reviewed by Martin Robinson.

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

2013-11-07  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Gtk] Disable LTO when building cairo
        https://bugs.webkit.org/show_bug.cgi?id=123954

        Reviewed by Martin Robinson.

        Cairo always uses LTO, when it detects compiler support.
        LTO is buggy in many/all versions of GCC and shouldn't be enabled by
        default. This patch disables LTO when building cairo library.
        - See: https://bugs.freedesktop.org/show_bug.cgi?id=60852

        With gcc 4.7.3, for example, the build fails with the following message:
        'lto1: fatal error: LTO_tags out of range: Range is 0 to 361, value is 15872'

        * gtk/jhbuild.modules:

2013-08-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Http tests fails on Debian with Apache 2.4
        https://bugs.webkit.org/show_bug.cgi?id=120352

        Reviewed by Andreas Kling.

        Select httpd.conf file for debian based on version, matching Fedora behavior.

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

2013-09-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Move to the new web inspector
        https://bugs.webkit.org/show_bug.cgi?id=120647

        Reviewed by Carlos Garcia Campos.

        * GtkLauncher/main.c:
        (main): no longer set WEBKIT_INSPECTOR_PATH.
        * MiniBrowser/gtk/main.c:
        (main): ditto.
        * Scripts/old-run-webkit-tests:
        (openDumpTool): ditto.
        * Scripts/run-gtk-tests: ditto.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): ditto.

2013-09-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Remove Gail dependency from build system for GTK3
        https://bugs.webkit.org/show_bug.cgi?id=119673

        Reviewed by Gustavo Noronha Silva.

        * EWSTools/ubuntu-ews-packages: Removed libgail-dev package.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Do not load the 'gail' module anymore.
        * TestWebKitAPI/GNUmakefile.am: Removed GAIL_LIBS.

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] WebKitGTK+ is linking against libxslt in too many places
        https://bugs.webkit.org/show_bug.cgi?id=121356

        Reviewed by Martin Robinson.

        TestWebCore, WebKitTestRunner and MiniBrowser don't use libxslt,
        so we don't need to link against it.

        * MiniBrowser/gtk/GNUmakefile.am:
        * TestWebKitAPI/GNUmakefile.am:
        * WebKitTestRunner/GNUmakefile.am:

2013-09-14  Ross Burton  <ross.burton@intel.com>

        Uses gtk-doc tools even when --disable-gtk-doc passed
        https://bugs.webkit.org/show_bug.cgi?id=91239

        Reviewed by Martin Robinson.

        Don't run generate-gtkdoc on install if gtk-doc is disabled.

        * GNUmakefile.am:

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] Fails to compile if the build directory is in a different partition
        https://bugs.webkit.org/show_bug.cgi?id=121296

        Reviewed by Martin Robinson.

        Instead of using os.symlink() to install the gtk-doc templates,
        use os.link() first and fall back to os.symlink() if it fails.

        * gtk/gtkdoc.py:
        (GTKDoc._copy_doc_files_to_output_dir.copy_file_replacing_existing):

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] Fails to compile if the build directory is in a different partition
        https://bugs.webkit.org/show_bug.cgi?id=121296

        Reviewed by Carlos Garcia Campos.

        Use symlinks instead of hard links to support building on a
        different file system.

        * gtk/gtkdoc.py:
        (GTKDoc._copy_doc_files_to_output_dir.copy_file_replacing_existing):

2013-08-29  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        [GTK] Should enable WebGL by default on MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=120420

        Reviewed by Gustavo Noronha Silva.

        Enable WebGL by default on MiniBrowser.

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

2013-09-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add support for the Wayland build target
        https://bugs.webkit.org/show_bug.cgi?id=120627

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Define the additional macros also if building the Wayland target.

2013-09-04  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        [GStreamer] cannot play live streams
        https://bugs.webkit.org/show_bug.cgi?id=116831

        Reviewed by Philippe Normand.

        Fix timeout issues with rtspsrc/udpsrc gstreamer elements.

        * gtk/jhbuild.modules:
        * gtk/patches/rtspsrc-timeout-on-udpsrc-is-in-nanoseconds.patch: Added.
        * gtk/patches/udpsrc-improve-timeouts.patch: Added.
        Changed gstreamer jhbuild modules to use tarball repos (required to add patches)
        and added 2 patches to gst-plugins-good to fix timeout issues with rtsp streams.
        Both patches are applied upstream and can be removed once a new gstreamer release
        is out (up to 1.0.10 the patches are not included) and we bump the requirements.

2013-08-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r154601.

        * TestWebKitAPI/GNUmakefile.am: Remove mac specific file from
        compilation added by mistake in r154601.

2013-08-26  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner needs to protect the user's pasteboard contents while running
        https://bugs.webkit.org/show_bug.cgi?id=81419
        <rdar://problem/11066794>

        Reviewed by Darin Adler.

        Mostly a copy/paste of DRT code.

        Tested manually by making sure that editing/pasteboard/copy-image-with-alt-text.html
        doesn't interfere with my clipboard while being run in a loop.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/PoseAsClass.h: Added.
        * WebKitTestRunner/mac/PoseAsClass.mm: Added.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm: Added.

2013-08-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r154640.
        http://trac.webkit.org/changeset/154640
        https://bugs.webkit.org/show_bug.cgi?id=120329

        Caused flaky crashes on a lot of editing tests (Requested by
        rniwa on #webkit).

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/PoseAsClass.h: Removed.
        * WebKitTestRunner/mac/PoseAsClass.mm: Removed.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h: Removed.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm: Removed.

2013-08-26  Dan Bernstein  <mitz@apple.com>

        Automatic bug reports case pain
        https://bugs.webkit.org/show_bug.cgi?id=120330

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/tool/commands/download.py: Made the following changes to the Description
        of bugs filed by the bot: changed “the sheriff-bot” to “webkitbot”, changed “case pain” to
        “fail”, and removed “"Only you can prevent forest fires." -- Smokey the Bear”.

2013-08-23  Andy Estes  <aestes@apple.com>

        Fix issues found by the Clang Static Analyzer
        https://bugs.webkit.org/show_bug.cgi?id=120230

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (-[LocalPasteboard initWithName:]): Called [super init] first so that we
        don't later use ivars from the wrong self.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (-[APITestDelegate initWithCompletionCondition:]): Ditto.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (TestWebKitAPI::TEST): Don't leak WKProcessGroups,
        WKBrowsingContextGroups, and WKViews.

2013-08-26  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner needs to protect the user's pasteboard contents while running
        https://bugs.webkit.org/show_bug.cgi?id=81419
        <rdar://problem/11066794>

        Reviewed by Darin Adler.

        Mostly a copy/paste of DRT code.

        Tested manually by making sure that editing/pasteboard/copy-image-with-alt-text.html
        doesn't interfere with my clipboard while being run in a loop.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/PoseAsClass.h: Added.
        * WebKitTestRunner/mac/PoseAsClass.mm: Added.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm: Added.

2013-08-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Include most of the WebKit2 unit tests into the build and testing
        https://bugs.webkit.org/show_bug.cgi?id=120307

        Reviewed by Philippe Normand.

        There are still various unit test source files that are not being included into
        the build. This patch includes most of these, only leaving out tests that do not
        compile or test features that are not supported by the GTK port.

        * Scripts/run-gtk-tests: Skip four newly-added tests that are failing or timing out.
        (TestRunner):
        * TestWebKitAPI/GNUmakefile.am:

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to run tests without Xvfb in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=120298

        Reviewed by Philippe Normand.

        Add --no-xvfb command line option to run tests in the current
        display.

        * Scripts/run-gtk-tests:
        (TestRunner._run_xvfb): Return early if option --no-xvfb has been
        passed.
        (TestRunner._setup_testing_environment): Use helper function
        _run_xvfb to start Xvfb if needed.
        (TestRunner._tear_down_testing_environment): Check Xvfb is
        actually running before trying to terminate it.

2013-08-26  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Adding Gabor Abraham to contributors.json.

        Reviewed by Csaba Osztrogonác.

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

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for passing test directories to run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=120296

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner._get_tests_from_dir): Helper function to return all
        unit tests found in a given directory.
        (TestRunner._get_tests): Check the given tests passed in the
        command line, so that if a directory is found the tests contained
        in the directory are added to the list of tests to run.

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Improve the stop/reload button implementation in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=120292

        Reviewed by Philippe Normand.

        - Use an instance member of BrowserWindow for the button widget
          instead of a global variable.
        - Use notify::is-loading to monitor the WebView load instead of
          the estimated-load-progress property.
        - Use webkit_web_view_is_loading() to check whether the view
          is loading to change the button icon instead of a string
          comparison of the gtk stock icon id.
        - Use the right casts to fix compile warning.

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadOrStopCallback):
        (webViewLoadProgressChanged):
        (webViewIsLoadingChanged):
        (browser_window_init):
        (browserWindowConstructed):

2013-08-26  Arunprasad Rajkumar  <arurajku@cisco.com>

        [Qt] Remove the fix in QWebPage::javaScriptConsoleMessage introduced by (r61433)
        https://bugs.webkit.org/show_bug.cgi?id=119791

        Reviewed by Jocelyn Turcotte.
        
        Load empty url to send onunload event to currently running page. onunload event is 
        mandatory for LayoutTests/plugins/open-and-close-window-with-plugin.html and
        LayoutTests/plugins/geturlnotify-during-document-teardown.html.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebPage::~WebPage):

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Silence MiniBrowser compile warnings due to recent GTK+ deprecations
        https://bugs.webkit.org/show_bug.cgi?id=120290

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/GNUmakefile.am: Add
        -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_6 compile option.

2013-08-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WillLoad test files to the TestWebKitAPI/TestWebKit2 program
        https://bugs.webkit.org/show_bug.cgi?id=120288

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/GNUmakefile.am: Add the WillLoad.cpp build target that should be compiled
        into the TestWebKit2 program. The InjectedBundle counterpart file is added to the build as well.
        These unit tests are at the moment failing in debug configurations, so it would be nice to
        have the GTK builds report these failures as well.

2013-08-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] EWebLauncher is executed as full screen with device pixel ratio
        https://bugs.webkit.org/show_bug.cgi?id=120282

        Reviewed by Gyuyoung Kim.

        * EWebLauncher/main.c:
        Use double instead of float for device_pixel_ratio which is passed to ECORE_GETOPT_VALUE_DOUBLE.

2013-08-25  Zan Dobersek  <zdobersek@igalia.com>

        [gdb] Remove the pretty printer for KURLGooglePrivate
        https://bugs.webkit.org/show_bug.cgi?id=120263

        Reviewed by Benjamin Poulain.

        Remove the pretty printer for the WebCore::KURLGooglePrivate structure that
        was usable inside the gdb debugger. The structure was remove from the codebase
        along with the GoogleURL backend for KURL.

        * gdb/webkit.py:
        (JSCJSStringPrinter.to_string):
        (add_pretty_printers):

2013-08-24  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix build-webkit --ftl-jit in the case that you have your own llvm directory. We need to
        prune 'libgtest' and friends from the llvm build, since WebKit builds its own and none of the llvm
        libraries depend on libgtest anyway.

        * Scripts/copy-webkitlibraries-to-product-directory:

2013-08-24  Darin Adler  <darin@apple.com>

        RetainPtr lacks move constructor for case when argument is a RetainPtr of a different type
        https://bugs.webkit.org/show_bug.cgi?id=120255

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added four tests covering move assignment and construction.

2013-08-24  Anders Carlsson  <andersca@apple.com>

        Don't treat NSLocalizedDescriptionKey and NSLocalizedRecoverySuggestionErrorKey as NSLocalized macros
        https://bugs.webkit.org/show_bug.cgi?id=120249

        Reviewed by Andreas Kling.

        * Scripts/extract-localizable-strings:

2013-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose WebKitFrame in WebKit2GTK+ web extensions API
        https://bugs.webkit.org/show_bug.cgi?id=119743

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add
        willDestroyFrame.

2013-08-23  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Move TestWebKitAPI_LIBRARIES before platform specific cmake include
        https://bugs.webkit.org/show_bug.cgi?id=120220

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt:

2013-08-22  Filip Pizlo  <fpizlo@apple.com>

        build-jsc --ftl-jit should work
        https://bugs.webkit.org/show_bug.cgi?id=120194

        Reviewed by Oliver Hunt.

        * Scripts/build-jsc: Need to pass the feature flag to xcodebuild

2013-08-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r153534.
        http://trac.webkit.org/changeset/153534
        https://bugs.webkit.org/show_bug.cgi?id=120216

        Too many tests failing just WinEWS bots (Requested by rfong on
        #webkit).

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

2013-08-23  Alex Christensen  <alex.christensen@flexsim.com>

        Unreviewed.  Added my webkit.org email address.

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

2013-08-23  Peter Gal  <galpeter@inf.u-szeged.hu>

        [WTR] Should dump as text when the mimetype is text/plain
        https://bugs.webkit.org/show_bug.cgi?id=118306

        Reviewed by Christophe Dumez.

        Check for the text/plain mimetype and if true then mark it as
        text dump.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):

2013-08-22  Filip Pizlo  <fpizlo@apple.com>

        Update LLVM binary drops and scripts to the latest version from SVN
        https://bugs.webkit.org/show_bug.cgi?id=120184

        Reviewed by Mark Hahnenberg.

        * ReducedFTL/build.sh:
        * Scripts/configure-llvm: Added.
        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/export-llvm-build:

2013-08-22  Andy Estes  <aestes@apple.com>

        <https://webkit.org/b/120180> Fix issues with OTHER_LDFLAGS in various .xcconfig files

        Reviewed by David Kilzer.

        * TestWebKitAPI/Configurations/Base.xcconfig: Removed the definition of
        OTHER_CPLUSPLUSFLAGS since -ftemplate-depth=256 is already set in
        DebugRelease.xcconfig and TestWebKitAPI isn't built in Production.

2013-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        NRWT: Add the ability to upload test results to new test results server
        https://bugs.webkit.org/show_bug.cgi?id=120146

        Reviewed by Andreas Kling.
        
        For the upcoming replacement for webkit-test-results.appspot.com, new-run-webkit-tests needs to use a new JSON format
        that contains the full summary of the test run including information about passed tests.

        Add this ability to NRWT so that I can start testing this feature. This patch adds the following optoins to NRWT:
        --build-slave
        --got-revision
        --results-server-host

        The last option is somewhat ambigious with --test-results-server but we're intending to deprecate the old server
        so we should be able to delete --test-results-server in time.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        (Manager._upload_json_files):
        (Manager):
        (Manager.upload_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results):
        (SummarizedResultsTest.test_summarized_results_wontfix):
        (SummarizedResultsTest):
        (SummarizedResultsTest.test_summarized_results_include_passes):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        WKR build fix. Somehow tool.bugs.quips() doesn't work in WKR so work around that.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2013-08-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] DRT bug revealed/caused by r154300
        https://bugs.webkit.org/show_bug.cgi?id=120151

        Reviewed by Simon Hausmann.

        Since QtInstance had an implementation of getOwnPropertySlot and not getOwnPropertyDescriptor,
        the behavior of getOwnPropertyDescriptor changed when it got implemented using getOwnPropertySlot
        in r154300.

        DRT relied on getOwnPropertyDescriptor returning undefined for JS set properties to distinguish
        between native Qt methods and JSC bound methods. This patch changes the check to see if the 
        property is writable since the Qt methods are ReadOnly.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::initJSObjects):

2013-08-21  Joseph Pecoraro  <pecoraro@apple.com>

        <https://webkit.org/b/120134> [Tools] lldb_webkit.py helpers is incorrectly printing 8bit Strings

        Reviewed by Benjamin Poulain.

        WTFString moved the is8bit bit by one in r152201.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.is_8bit):

2013-08-21  Tim Horton  <timothy_horton@apple.com>

        Revert http://trac.webkit.org/changeset/154022, as it failed to update
        a variety of scripts that depended on the old format.

        See https://bugs.webkit.org/show_bug.cgi?id=120131 for one such example.

        * Scripts/prepare-ChangeLog:
        (main):
        (generateNewChangeLogs):

2013-08-21  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed gardening: WebInspector should always be enabled for WinLauncher.

        * WinLauncher/WinLauncher.cpp:
        (setToDefaultPreferences): Activate Developer Extras on Release (as well as Debug) builds.

2013-08-21  Zan Dobersek  <zdobersek@igalia.com>

        <https://webkit.org/b/120116> [GTK] Fix a typo in ActivateFontsGtk.cpp

        Reviewed by Andreas Kling.

        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeFontConfigSetting): Fix a typo - inititialize -> initialize.
        (WTR::activateFonts): Ditto.

2013-08-21  Brian Holt  <brian.holt@samsung.com>

        [GTK] Suppress irrelevant or known leaks for Valgrind
        https://bugs.webkit.org/show_bug.cgi?id=119448

        Reviewed by Martin Robinson.

        Add a suppressions file to suppress known leaks for Valgrind.
        Valgrind also takes longer when using suppressions and
        times out unless the driver timeout is increased.

        * Scripts/valgrind/suppressions.txt: Added.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.driver_stop_timeout):
        (GtkPort.setup_environ_for_server):

2013-08-20  Alex Christensen  <achristensen@apple.com>

        [Windows] Linking fix for Win64.

        Rubberstamped by Brent Fulgham.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain): Corrected 64-bit linker symbol for dllLauncherEntryPoint.

2013-08-20  Brent Fulgham  <bfulgham@apple.com>

        <https://webkit.org/b/120090> Report better error messages from WinLauncher/DRT

        Reviewed by Tim Horton.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (getLastErrorString): New method to convert GetLastError to text.
        (wWinMain): Use new error formatter to provide useful diagnostic text to user.

2013-08-19  Gustavo Noronha Silva  <gns@gnome.org>

        <https://webkit.org/b/120048> [GTK] Add stubs for APIs that went missing in the DOM bindings

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checker.py: add the bindings custom implementation files to be exempt
        from naming/enum_casing rules, since it needs to provide GObject-style APIs.

2013-08-20  Anton Obzhirov  <a.obzhirov@samsung.com>

        <https://webkit.org/b/120009> [GTK] Stop button should be added to MiniBrowser

        Reviewed by Martin Robinson.

        Added stop button in MiniBrowser

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadOrStopCallback): Callback to handle stop or reload button click.
        (webViewLoadProgressChanged): Update reload or stop button icon.
        (browser_window_init): Save button pointer for further icon updates.

2013-08-20  Simon Pena  <simon.pena@samsung.com>

        <https://webkit.org/b/117584> [GTK][WK1] http/tests/loading/unfinished-load-back-to-cached-page-callbacks.html is failing

        Reviewed by Alexey Proskuryakov.

        Update DumpRenderTree to handle the WEBKIT_LOAD_FAILED status,
        printing didFailLoadWithError.

        Behave like other ports, and handle WEBKIT_LOAD_FAILED status in
        DumpRenderTree, printing didFailLoadWithError.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webFrameLoadStatusNotified):

2013-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        <https://webkit.org/b/120049> Delete code for Snow Leopard

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/mac/CheckedMalloc.cpp:
        (protectionOfRegion):
        (makeLargeMallocFailSilently):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (testPathFromURL):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        * DumpRenderTree/mac/LayoutTestHelper.m:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm:
        (WTR::testPathFromURL):
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):

2013-08-19  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=119915
        REGRESSION(r154144): ASSERTION FAILED: m_history->provisionalItem() == m_requestedHistoryItem.get()

        Reviewed by Darin Adler.

        The issue was that we ended up having no CFNetwork cache in the testing session due
        to an incorrect cache model. There is a number of things not implemented when it
        comes to dynamically changing cache model as attempted by WebKitTestRunner, but
        the easiest way to get this going is to initialize it to correct value upfront.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::initialize):

2013-08-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGRESSION(r154275): webkitpy tests failing
        https://bugs.webkit.org/show_bug.cgi?id=120010

        Reviewed by Jocelyn Turcotte.

        Update unit-tests to tests the new search-path structure,
        but reverting the architecture search path addition.

        * Scripts/webkitpy/port/qt.py:
        (QtPort):
        (QtPort.__init__):
        (QtPort._generate_all_test_configurations):
        (QtPort.qt_architecture):
        * Scripts/webkitpy/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest._assert_expectations_files):
        (QtPortTest._qt_version):

2013-08-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Keep the qt-5.0-wk2 search path until the expectation migration is completed

        Unreviewed meta gardening.

        We need to keep using the qt-5.0-wk2 path until it is fully migrated.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._search_paths):

2013-08-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Restructure Qt test expectations

        Unreviewed meta gardening.

        Removed 5.0 name from WK1 and WK2 results and made it possible to set
        expectations by both Qt version and mayor architectures.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._wk2_port_name):
        (QtPort.__init__):
        (QtPort.qt_version):
        (QtPort.architecture):
        (QtPort._search_paths):
        (QtPort._port_specific_expectations_files):

2013-08-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] DRT is not using the same preferences as the Mac build.
        https://bugs.webkit.org/show_bug.cgi?id=119822

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Process Windows message queue using CFRunLoop to allow
        dispatch routines to run properly.
        (dllLauncherEntryPoint): Wrap CG-specific setup code in a macro
        to prevent problems on WinCairo port.

2013-08-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] URL printing code in DRT doesn't match WTR or Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=119583

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Revise URL output to match Mac DRT by emiting last path
        component if the URL does not contain the expected base URL.

2013-08-16  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/119852> Frame::scriptController() should return a reference

        Reviewed by Andreas Kling.

        m_script is never NULL so we can just return a reference. Also remove some pointless null
        checks as a result of doing this.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        [WK2] NetworkProcess should use a temporary storage session for test
        https://bugs.webkit.org/show_bug.cgi?id=119855

        Reviewed by Darin Adler.

        Use a new API that takes care of both WebProcess and NetworkProcess.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2013-08-15  Bem Jones-Bey  <bjonesbe@adobe.com>

        <https://webkit.org/b/119850> Speed up test importing by doing all the regex matching in a single pass

        Reviewed by Dirk Pranke.

        This is a port from Blink of
        https://src.chromium.org/viewvc/blink?revision=155647&view=revision
        originally by Dirk Pranke.

        From the original commit:

        This gives something like a 15x speedup over compiling and matching
        one property at a time and doing multiple passes over the file.

        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.__init__):
        (W3CTestConverter.convert_prefixed_properties):
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):

2013-08-15  Dan Bernstein  <mitz@apple.com>

        <https://webkit.org/b/119856> Improve extract-localizable-strings messages

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: When the strings file disagrees with the source code,
        added a message that points to the source code. Removed some unnecessary repetition of what
        is already in the file.

2013-08-15  Andy Estes  <aestes@apple.com>

        <https://webkit.org/b/119853> REGRESSION (r139343): WebKit crashes when canceling a load inside webView:resource:didFinishLoadingFromDataSource:

        Reviewed by Brady Eidson.

        Wrote an API test that verifies -[WebView stopLoading:] can be called
        inside webView:resource:didFinishLoadingFromDataSource: without crashing.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidFinishLoading.mm: Added.
        (-[StopLoadingFromDidFinishLoadingDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (TestWebKitAPI::TEST):

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        Adding Myles Maxfield to contributors.json.

        Oops, wrong section, fixing.

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

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        Adding Myles Maxfield to contributors.json.

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

2013-08-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Do not check specifically for version 5.0
        https://bugs.webkit.org/show_bug.cgi?id=119846

        Reviewed by Jocelyn Turcotte.

        For Qt 5.x we should always use both wk1 and wk2 basepath results.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._search_paths):

2013-08-15  Simon Pena  <simon.pena@samsung.com>

        <https://webkit.org/b/119584> [Gtk] URL printing code in DumpRenderTree doesn't match WTR or Mac DRT

        Reviewed by Gustavo Noronha Silva.

        Following a similar approach as in r153977, return a path string
        that is relative to main frame URL or just file name if the
        resource is not in the same directory subtree, and replace empty
        strings with "(null)".

        Update pathFromSoupURI so it behaves more closely to the other
        ports, and remove the unused code after we no longer print
        <unknown> in certain cases. Also move
        soupURIToStringPreservingPassword to DumpRenderTreeGtk so it can
        be used both in TestRunnerGtk and in DumpRenderTree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (soupURIToStringPreservingPassword): Moved from TestRunnerGtk so
        we can print Soup URIs with the password, since soup_uri_to_string
        doesn't preserve them.
        (pathFromSoupURI): Updated following EFL implementation in
        r153977, and return a WTFString instead of a CString.
        (convertSoupMessageToURLPath): Return "(null)" instead of empty
        strings, and handle the new return type of pathFromSoupURI.
        (convertWebResourceToURLPath): Use a GOwnPtr to hold the Soup URI
        reference, and handle the new return type of pathFromSoupURI.
        (descriptionSuitableForTestResult): Remove unused code.
        (didFinishLoading): Use convertResourceToURLPath.
        (didFailLoadingWithError): Use convertResourceToURLPath.
        (authenticationCallback): Display the URL of the authentication
        challenge.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Declare
        soupURIToStringPreservingPassword.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Remove
        soupURIToStringPreservingPassword.

2013-08-14  Tim Horton  <timothy_horton@apple.com>

        Un-inline dataLog dumpers for IntSize and IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=119697

        Reviewed by Sam Weinig.

        * TestWebKitAPI/GNUmakefile.am:

2013-08-14  Ryosuke Niwa  <rniwa@webkit.org>

        Flakiness dashboard build fix.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processTestRunsForBuilder):

2013-08-14  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=116987

        Reviewed by Philippe Normand.

        * TestWebKitAPI/CMakeLists.txt: Move the library listings to before the inclusion of the
        platform-specific file, so that GTK+ can override them.
        * TestWebKitAPI/PlatformGTK.cmake: Added.

2013-08-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Simplify Setting WebKit Debugging Options in WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=119775

        This bug updates the WinLauncher program with a few useful menu
        options to toggle certain debugging and development features of
        WebKit.

        Reviewed by Tim Horton.

        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Clean up preference objects on exit.
        (ToggleMenuItem): New function.
        (LaunchInspector): New function.
        (WndProc): Add handler for new menu items. Also properly terminate
        CFRunLoop operation on program exit.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Add new
        menu items.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Add
        resource folder to search path.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Update
        for new menu items.

2013-08-14  Ryosuke Niwa  <rniwa@webkit.org>

        Add a hyperlink from build.webkit.org to the flakiness dashboard.

        Rubbers-tamped by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-08-14  Benjamin Dupont   <bdupont@nds.com>

        [Qt] Activate visibility API layout tests
        https://bugs.webkit.org/show_bug.cgi?id=119790

        Reviewed by Allan Sandfeld Jensen.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):

2013-08-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] WK does not link properly against libxslt
        https://bugs.webkit.org/show_bug.cgi?id=119688

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/GNUmakefile.am: Added LIBXSLT_LIBS to
        MiniBrowser.
        * WebKitTestRunner/GNUmakefile.am: Added LIBXSLT_LIBS to WTR.

2013-08-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] fast/dom/attr-style-too-lazy.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=119763

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:setStatusText:]): Don't dump anything when not running
        a test, it would just semi-randomly leak to the next one.
        (-[UIDelegate webView:didPressMissingPluginButton:]): Added same check here, just
        for good measure.

2013-08-13  Tim Horton  <timothy_horton@apple.com>

        [mac] Give MiniBrowser a reasonable bundle identifier
        https://bugs.webkit.org/show_bug.cgi?id=119773

        Rubber-stamped by Simon Fraser.

        Give MiniBrowser the bundle identifier org.webkit.MiniBrowser.

        * MiniBrowser/mac/Info.plist:
        * MiniBrowser/mac/WebBundle/Info.plist:

2013-08-13  Dean Jackson  <dino@apple.com>

        <https://webkit.org/b/119766> Make bug url more human friendly in ChangeLog

        Reviewed by Mark Rowe.

        Have prepare-ChangeLog produce webkit.org/b/id style
        URLs rather than exposing the inner workings of our
        cgi. I was going to use the term "Future Proofing"
        but that seems excessive :)

        * Scripts/prepare-ChangeLog:
        (main): Generate a more human readable form.
        (generateNewChangeLogs): Use it when printing out the ChangeLog entry.

2013-08-13  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Simplify call to reverseFind()
        https://bugs.webkit.org/show_bug.cgi?id=119746

        Reviewed by Christophe Dumez.

        Follow-up to r153977.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (pathSuitableForTestResult): Instead of defining a static variable
        that's only used in a single place, pass '/' to reverseFind() directly.

2013-08-13  Alberto Garcia  <berto@igalia.com>

        [GTK] Closing inspector window crashes wk
        https://bugs.webkit.org/show_bug.cgi?id=110865

        Reviewed by Carlos Garcia Campos.

        Disconnect all signal handlers if the inspector window is
        destroyed.

        * GtkLauncher/LauncherInspectorWindow.c:
        (inspectorWindowDestroyed):
        (launcherInspectorWindowNew):

2013-08-12  Dan Bernstein  <mitz@apple.com>

        extract-localizable-strings output is not suited for parsing by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=119728

        Reviewed by Darin Adler.

        Added spaces where needed after “path:line:” to allow Xcode to recognize the file reference,
        removed “ERROR” since messages that refer to a line in a file are shown as error by default,
        added “warning: ” in messages that aren’t errors (i.e. don’t prevent the script from exiting
        with 0).

        * Scripts/extract-localizable-strings:

2013-08-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK1] URL printing code in DumpRenderTree doesn't match WTR or Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=119585

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (pathSuitableForTestResult):
        Return path string that's relative to main frame URL, or just file name if
        the resource is not in the same directory subtree.
        Referenced WebKitTestRunner code in r153852.
        (descriptionSuitableForTestResult):
        (DumpRenderTreeChrome::onFrameRedirectRequested):
        (DumpRenderTreeChrome::onNewResourceRequest): Followed changes of r153903.

2013-08-12  Dan Bernstein  <mitz@apple.com>

        extract-localizable-strings doesn't know how to verify an existing strings file
        https://bugs.webkit.org/show_bug.cgi?id=119704

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: Added an --exceptions option for specifying the
        exceptions file, changing the way “no exceptions file” is expressed from passing “-” as the
        exceptions file name to omitting the --exceptions option. Added a --skip option, changing
        the way directories to skip are specified from prefixing the directory with a “-” to
        specifying it with --skip.
        Finally, added a --verify option. When specified, the strings file is not written to, but
        instead read in and checked for consistency with the comments, keys and values derived from
        the source files and the exceptions file. Missing keys, unused keys, mismatching values and
        mismatching comments are reported as errors.
        * Scripts/update-webkit-localizable-strings: Updated for the new way of specifying
        directories to skip and no exceptions file.

2013-08-12  Alexey Proskuryakov  <ap@apple.com>

        http/tests/security/sandboxed-iframe-invalid.html is flaky on Mac
        https://bugs.webkit.org/show_bug.cgi?id=85522

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]): Don't print console messages
        when already done with a test. We already had this check in all UI delegate functions,
        except for -webView:addMessageToConsole:withSource: somehow.

2013-08-12  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=119693
        [Mac] security/contentSecurityPolicy/connect-src-websocket-blocked.html is flaky
        because of connect-src-websocket-allowed.html

        Reviewed by Darin Adler.

        Starting a load of about:blank and immediately stopping it cancels outstanding
        resource loads, but the page has to transition to committed state to have timers
        or WebSockets stopped too.

        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest): Use a synchronous load to
        ensure that transition to committed state happens before we start the next test.

2013-08-12  Beth Dakin  <bdakin@apple.com>

        The LayoutMilestones didLayout callback should only fire for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=119457

        Reviewed by Sam Weinig.

        Now that the didLayout callback only fires for the main frame, we want to make 
        sure it will fire even when all of the content is in a subframe.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp: Added.
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/all-content-in-one-iframe.html: Added.

2013-08-12  Beth Dakin  <bdakin@apple.com>

        Remove didNewFirstVisuallyNonEmptyLayout from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=119658

        Reviewed by Darin Adler.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-08-12  Seokju Kwon  <seokju@webkit.org>

        Remove glu's libtest rule from checker.py
        https://bugs.webkit.org/show_bug.cgi?id=119674

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py: It is no longer used after r148032.

2013-08-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Change my primary mail address.

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

2013-08-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Misses mod_ssl and php in the list of packages required for tests for yum
        https://bugs.webkit.org/show_bug.cgi?id=115751

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: add mod_ssl and php to the packages installed for tests
        with yum.

2013-08-09  Beth Dakin  <bdakin@apple.com>

        AX: Not able to use arrow keys to read text in a WK2 app
        https://bugs.webkit.org/show_bug.cgi?id=119605
        -and corresponding-
        <rdar://problem/14281275>

        Reviewed by Darin Adler.

        New test verifies that didNotHandleKeyEvent will be called when there is nothing 
        to scroll. 
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didNotHandleKeyEventCallback):
        (TestWebKitAPI::TEST):

2013-08-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for KeyboardEvent.location attribute
        https://bugs.webkit.org/show_bug.cgi?id=119326

        Reviewed by Benjamin Poulain.

        Rename the deprecated 'keyLocation' to 'location' in Mac's DRT code.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        (-[EventSendingController keyDownWrapper:withModifiers:withLocation:]):
        (-[EventSendingController scheduleAsynchronousKeyDown:withModifiers:withLocation:]):
        (-[EventSendingController handleEvent:]):
        (-[EventSendingController fireKeyboardEventsToElement:]):

2013-08-09  Alexey Proskuryakov  <ap@apple.com>

        <unknown> is often dumped instead of path in test output
        https://bugs.webkit.org/show_bug.cgi?id=119590

        Reviewed by Anders Carlsson.

        There were two reasons for <unknown>:
        1. When delegate logging is enabled via a testRunner call, that obviously happens
        after main resource load starts, so we don't record its URL.
        2. Authentication delegate logging relied on URL recording, but it's only turned on
        when enabling resource loading delegate logging, not auth one.

        URL recording was made conditional in <http://trac.webkit.org/r19316>, which was
        landed without posted rationale and unreviewed. Just undoing that change now.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didInitiateLoadForResource):

2013-08-08  Alex Christensen  <achristensen@apple.com>

        Windows build fixes.

        Rubberstamped by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        Removed /SAFESEH link option which doesn't work with x64.

2013-08-08  Daniel Bates  <dabates@apple.com>

        Add iOS support to run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=119602

        Reviewed by Joseph Pecoraro.

        Make run-javascriptcore-tests work for iOS WebKit.

        * Scripts/run-javascriptcore-tests:

2013-08-08  Alexey Proskuryakov  <ap@apple.com>

        [WK2] loader/go-back-cached-main-resource.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116491

        Reviewed by Tim Horton.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        Added FIXMEs about making path printing normalization more compatible.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm: (-[NSURL _drt_descriptionSuitableForTestResult]):
        Return last path component in cases where we used to return a full path, which is
        never desirable. Added a null check to basePath to prevent potentially getting
        an Objective C exception.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult): Changed to use path for main test window, not
        for a currently loading one (which is different for tests that use multiple windows).
        Changed to return "(null)" for empty URLs to match WK1 output. Changed to return
        last path component as last fallback.
        (WTR::dumpRequestDescriptionSuitableForTestResult): We no longer need to pass main
        frame URL here, and it was potentially a wrong frame.
        (WTR::dumpResponseDescriptionSuitableForTestResult): Ditto.
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame): Ditto.
        (WTR::InjectedBundlePage::didInitiateLoadForResource): Ditto.
        (WTR::InjectedBundlePage::willSendRequestForFrame): Ditto.
        (WTR::InjectedBundlePage::didReceiveResponseForResource): Ditto.

2013-08-08  Alex Christensen  <achristensen@apple.com>

        WTR::pathSuitableForTestResult should behave the same as _drt_descriptionSuitableForTestResult so we can unskip tests.
        https://bugs.webkit.org/show_bug.cgi?id=116125

        Reviewed by Tim Horton. Tweaked and re-landed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult):
        Changed string operations to match _drt_descriptionSuitableForTestResult.
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        Pass the main frame's URL to pathSuitableForTestResult.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Added WKBundlePageRef to willPerformClientRedirectForFrame.

2013-08-07  Simon Fraser  <simon.fraser@apple.com>

        Allow the DumpRenderTree runloop to be idle while waiting for a test to complete
        https://bugs.webkit.org/show_bug.cgi?id=119317

        Reviewed by Tim Horton.
        
        The change in r55200 made DumpRenderTree spin a busy-loop while waiting for
        the test to complete, which is not power friendly. Although DRT instances
        are generally busy anyway, not sitting in a busy loop should free up some CPU
        cycles for other instances of DRT.
        
        Editing tests continue to pass. All Java tests are skipped and were not
        tested, but when run fail similarly with and without the patch.

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

2013-08-07  Daniel Bates  <dabates@apple.com>

        Clean up: Simplifying the printing of the command line arguments passed to jsDriver.pl
        <https://bugs.webkit.org/show_bug.cgi?id=119558>

        Reviewed by Martin Robinson.

        Currently we build the command line to execute jsDriver.pl twice so as to both
        print it to standard output and actually execute it. We should only build up
        this command line once. Moreover, we should print to standard output the actual
        command line that we are going to use including the GTK- and EFL-specific call
        to /Tools/jhbuild/jhbuild-wrapper.

        * Scripts/run-javascriptcore-tests:

2013-08-07  Mario Sanchez Prada  <mario.prada@samsung.com>

        [EFL] REGRESSION after r153432: some accessibility tests crash.
        https://bugs.webkit.org/show_bug.cgi?id=119333

        Reviewed by Darin Adler.

        Use a RefPtr to store a reference to the parent element of
        an AccessibilityUIElement instead of the raw pointer, so we
        never derefence a function from an invalid pointer.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributesOfElement): Use a RefPtr instead of a raw pointer.

2013-08-07  Cosmin Truta  <ctruta@blackberry.com>

        Unreviewed. Add myself as a committer.

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

2013-08-04  Sam Weinig  <sam@webkit.org>

        Remove support for HTML5 MicroData
        https://bugs.webkit.org/show_bug.cgi?id=119480

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-07-23  David Farler  <dfarler@apple.com>

        Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=117762

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * Scripts/check-for-weak-vtables-and-externals:
        Ignore ___asan externals, these are populated by compiler-rt.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * WebKitLauncher/Configurations/Base.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * WebKitLauncher/Configurations/WebKitNightlyEnabler.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * asan/asan.xcconfig: Added.
        * asan/webkit-asan-ignore.txt: Added.

2013-08-05  Brian Holt  <brian.holt@samsung.com>

        [GTK] Implement leak checking with valgrind
        https://bugs.webkit.org/show_bug.cgi?id=118785

        Reviewed by Dirk Pranke.

        Launch the DRT under Valgrind to generate xml files with details
        of leaks found.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort.default_timeout_ms): Allow extra time to run under
        Valgrind.
        (GtkPort.setup_environ_for_server): Pass Valgrind instructions
        using environment variables.

2013-08-02  Mario Sanchez Prada  <mario.prada@samsung.com>

        [EFL] REGRESSION after r153432: some accessibility tests crash.
        https://bugs.webkit.org/show_bug.cgi?id=119333

        Reviewed by Gustavo Noronha Silva.

        Add missing null-check to avoid dereferencing a non-existent parent.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributesOfElement): Ditto.

2013-08-02  Patrick Gansterer  <paroga@webkit.org>

        Add --rmdir option to git svn dcommit
        https://bugs.webkit.org/show_bug.cgi?id=119398

        Reviewed by Ryosuke Niwa.

        Add this option tells git-svn to remove empty directories
        from the svn tree so they do not leave over there.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.push_local_commits_to_server):

2013-08-01  Brent Fulgham  <bfulgham@apple.com>

        [Windows] WebKit1 Fullscreen Video Play is Broken
        https://bugs.webkit.org/show_bug.cgi?id=119415

        Reviewed by Jer Noble.

        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Activate full screen mode via
        IWebPreferencesInternal interface.

2013-08-01  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Add an alternative address to show my affiliation in team.html.

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

2013-08-01  Bem Jones-Bey  <bjonesbe@adobe.com>

        Duplicate property names can cause test to fail
        https://bugs.webkit.org/show_bug.cgi?id=119399

        Reviewed by Dirk Pranke.

        This problem was noticed when porting the patch for
        http://wkb.ug/119357 to Blink: a test would fail because the converted
        and test property lists weren't the same length, but they contained
        all of the same property names. It looks like this is actually caused
        by a bug in converting the HTML, which is being currently rewritten.
        In the meantime, as long as this compares the number of unique
        properties, it makes the test more robust.

        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (verify_prefixed_properties):

2013-08-01  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed. Adding my expertise.

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

2013-08-01  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Add myself as a committer. Yoo-hoo! \o/

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

2013-08-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r153518.
        http://trac.webkit.org/changeset/153518
        https://bugs.webkit.org/show_bug.cgi?id=119386

        The Jhbuild dep bump of GTK+ is not actually required by
        layout testing, is causing pango dep problems (Requested by
        zdobersek on #webkit).

        * gtk/jhbuild.modules:

2013-08-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add myself as a committer.

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

2013-08-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-07-31  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-08-01  Alberto Garcia  <berto@igalia.com>

        Unreviewed. Add myself as a committer.

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

2013-07-31  Seokju Kwon  <seokju@webkit.org>

        Unreviewed. Add myself as a committer.

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

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        W3C test import script prefixes some properties that it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=119357

        Reviewed by Dirk Pranke.

        Some prefixed properties also have unprefixed implemetations, but when
        the implementations aren't identical, they aren't declared in
        CSSPropertyNames.in on the same line. This fixes the import script so
        that it catches all instances of prefixed properties that have an
        unprefixed variant, and does not add the prefix in those cases.

        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.read_webkit_prefixed_css_property_list): Read all of
        the properties on every line and record if they are prefixed or not.
        Use this information to only return prefixed properties that do not
        have any unprefixed variant. The prefixed property list has also
        changed to not include the '-webkit-' prefix, making it much easier to
        do the comparison, and removing the need to remove the prefix later.
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties): This no
        longer needs to remove the '-webkit-' prefix, but needs to add it in
        the case where a property that needs a prefix is found.
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (W3CTestConverterTest.test_read_prefixed_property_list): Remove assert
        for '-webkit-' prefix, as it is no longer included in the properties
        in the prefixed property list.

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Update location of w3c shapes tests to reflect new import location
        https://bugs.webkit.org/show_bug.cgi?id=118156

        Reviewed by Dirk Pranke.

        Partial imports should not be imported to the same place as the full
        import, so this adds an option to allow importing to a different
        location than the default. In doing that, I found that imports from
        contributor directories didn't seem to be working correctly, so I
        updated the import to be smarter about both contributor directories
        and the test status directories. It should now be more likely that the
        script guesses the root directory properly.

        * Scripts/webkitpy/w3c/test_importer.py: Remove comment about the
            script not working with the full set of contributors, as that is
            no longer true, and I didn't see a good way to keep that behavior.
            Also update documentation to properly explain what happens when a
            contributor dir is imported.
        (main): Attempt to find the proper repo dir by looking at the
            directory above the "test status" in the given path, this is still
            not exactly right, but is less error prone than just trimming.
        (parse_args): Add -d option to set the import directory.
        (TestImporter.__init__): Stop appending the subdirs to the
            destination_directory because it was making things more complex
            and isn't really needed.
        (TestImporter.update_test_status): Remove hardcoded strings and use
            the TEST_STATUS constants instead.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg): Add
            support for new option.
        (TestImporterTest.test_import_dir_with_no_tests): Ditto.

2013-07-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Winlauncher shouldn't look for Safari Install Directory
        https://bugs.webkit.org/show_bug.cgi?id=119351

        Reviewed by Darin Adler.

        * win/DLLLauncher/DLLLauncherMain.cpp: Don't check registry for
        the Safari install location. Instead, use the proper support
        library path for the build architecture.

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Update scripts to reference contributors.json instead of committers.py in messaging
        https://bugs.webkit.org/show_bug.cgi?id=119342

        Reviewed by Ryosuke Niwa.

        Change the scripts to point people to contributors.json instead of
        committers.py since the latter no longer contains the list of
        contributors.

        * Scripts/webkitpy/common/config/committervalidator.py:
        (CommitterValidator._contributors_json_path):
        (CommitterValidator._flag_permission_rejection_message):
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        (CommitterValidatorTest.test_flag_permission_rejection_message):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._commit_queue_flag):
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._validate):
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        (WatchListParserTest.test_cc_rule_with_invalid_email):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        (ValidateReviewer.run):

2013-07-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Re-enable WinEWS tests following r153527.

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

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed: Adding myself to the committers' list.

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

2013-07-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Build WebKit with C++11
        https://bugs.webkit.org/show_bug.cgi?id=119337

        Reviewed by Csaba Osztrogonác.

        Enable building with C++11.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/unix/default_post.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-07-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] ASSERTS trigger in release builds
        https://bugs.webkit.org/show_bug.cgi?id=119336

        Reviewed by Jocelyn Turcotte.

        Ensure the qmake also defaults to release if no configuration is known.

        * qmake/mkspecs/features/default_post.prf:

2013-07-31  Zan Dobersek  <zdobersek@igalia.com>

        [texmap][GStreamer][GTK] composited video shows tearing
        https://bugs.webkit.org/show_bug.cgi?id=118253

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Bump the Jhbuild versions of the Gdk-Pixbuf and GTK+ packages to 2.27.3 and 3.8.2, respectively.
        The first is required by the second, and the GTK+ bump introduces proper display framerate synchronization that removes
        screen tearing when enabling accelerated compositing and performing graphically heavy operations like viewing HD videos.

2013-07-30  Ruth Fong  <ruth_fong@apple.com>

        Unreviewed: Adding myself to the committers' list.

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

2013-07-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed, add my new email to contributors.json.

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

2013-07-30  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] REGRESSION after r153439: layout tests do not run.
        https://bugs.webkit.org/show_bug.cgi?id=119240

        Reviewed by Christophe Dumez.

        Changed attribute name from check_xvfb to check_driver.

        * Scripts/webkitpy/port/efl.py:
        (EflPort.check_sys_deps):

2013-07-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152860.
        http://trac.webkit.org/changeset/152860
        https://bugs.webkit.org/show_bug.cgi?id=119227

        Disable WinEWS tests until tests stop crashing (Requested by
        rfong on #webkit).

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

2013-07-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WestonDriver, use it when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=119100

        Reviewed by Dirk Pranke.

        Introduce the WestonDriver, a Driver-implementing class that sets up an instance of Weston, the Wayland compositor,
        and sets up an environment that enables the test runner to run inside it.

        The design very much mimics the XvfbDriver class. It is currently used by the GTK port when the WAYLAND_DISPLAY
        environment variable is set, that is when NRWT is being run under a Wayland display.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Also copy the XDG_RUNTIME_DIR env from the original environment for Linux-using ports.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort):
        (GtkPort._driver_class): Make the method memoized - the display type is not going to change during the testing, so we
        should only check once for the presence of the WAYLAND_DISPLAY env and determine the proper driver class to use based on that.
        (GtkPort.check_sys_deps): Call the static check_driver method on the class as returned by the _driver_class method
        instead of hard-coding the XvfbDriver class in the check.
        * Scripts/webkitpy/port/westondriver.py: Added.
        (WestonDriver):
        (WestonDriver.check_driver): Similarly to XvfbDriver, this checks for existance of the weston executable.
        (WestonDriver.__init__): Again, like in XvfbDriver, we use a small delay between launching the Weston display and launching the driver.
        (WestonDriver._start): Sets up the driver-specific temporary directory, launches the Weston display, sets up the environment for the
        driver and then launches the driver in said environment, using the driver's Weston display.
        (WestonDriver.stop): Cleans up the Weston instance and the temporary directory.
        (WestonDriver._ensure_driver_tmpdir_subdirectory): A helper function that creates a subdirectory in the driver's temporary directory
        and returns the absolute path to it.
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver.check_driver): Renamed from check_xvfb.
        (XvfbDriver._start): Access the FileSystem object through the Port's Host object, instead of the Port's private member.

2013-07-29  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Implement attributesOfChildren() for AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118967

        Reviewed by Gustavo Noronha Silva.

        Implemented AccessibilityUIElement::attributesOfChildren() both
        in DumpRenderTree and the WebKitTestRunner.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::attributesOfChildren): Implemented.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::attributesOfChildren): Implemented.

2013-07-29  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Implement allAttributes() for AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118966

        Reviewed by Gustavo Noronha Silva.

        Implemented AccessibilityUIElement::allAttributes() both in
        DumpRenderTree and the WebKitTestRunner.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (getAtkAttributeSetAsString): Moved up in the file, and refactored
        to use StringBuilder and return a String instead of a gchar*.
        (roleToString): Changed not to return the "AXRole: " prefix, so
        we can use it as well from attributesOfElement().
        (attributesOfElement): New function to dump attributes for an object.
        (AccessibilityUIElement::allAttributes): Call attributesOfElement().
        (AccessibilityUIElement::role): Updated to prefix "AXRole: ".

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (getAtkAttributeSetAsString): Refactored to use StringBuilder and return
        a String instead of a gchar*.

        (WTF::roleToString): Changed not to return the "AXRole: " prefix,
        so we can use it as well from attributesOfElement().
        (WTF::attributesOfElement): New function to dump attributes for an object.
        (WTR::AccessibilityUIElement::allAttributes): Call attributesOfElement().
        (WTR::AccessibilityUIElement::role): Updated to prefix "AXRole: ".

2013-07-29  Daniel Bates  <dabates@apple.com>

        Add support infrastructure for iOS WebKit port
        https://bugs.webkit.org/show_bug.cgi?id=119168

        Reviewed by Ryosuke Niwa.

        Implement support infrastructure towards building iOS WebKit.

        * Scripts/webkitdirs.pm:
        (xcodeSDKPlatformName): Added.
        (determineConfigurationProductDir):
        (builtDylibPathForName):
        (willUseIOSDeviceSDKWhenBuilding): Added.
        (willUseIOSSimulatorSDKWhenBuilding): Added.
        (isIOSWebKit): Added.
        (copyInspectorFrontendFiles):

2013-07-29  Sergio Correia  <sergio.correia@openbossa.org>

        CoordinatedGraphics: Add API to get and set the active state of a WebView
        https://bugs.webkit.org/show_bug.cgi?id=119067

        Reviewed by Noam Rosenthal.

        Added API tests for WKViewIsActive and WKViewSetIsActive.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::webProcessCrashed):
        (TestWebKitAPI::webProcessRelaunched):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive_Bundle.cpp:
        Bundle added to allow crashing the WebProcess and testing the active state of a view
        under such condition.
        (TestWebKitAPI::WKViewIsActiveSetIsActiveTest::WKViewIsActiveSetIsActiveTest):
        (TestWebKitAPI::WKViewIsActiveSetIsActiveTest::didReceiveMessage):

2013-07-29  Zan Dobersek  <zdobersek@igalia.com>

        [Automake] Remove references to non-existent *_CFLAGS and *_LIBS variables
        https://bugs.webkit.org/show_bug.cgi?id=119212

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Remove references to GLOBALDEPS_(CFLAGS|LIBS) and CLUTTER_(CFLAGS|LIBS)
        variables that are not defined during the configuration process.
        * TestWebKitAPI/GNUmakefile.am: Ditto.
        * WebKitTestRunner/GNUmakefile.am: Ditto.

2013-07-28  Andy Estes  <aestes@apple.com>

        Include <stdio.h> to declare perror()
        https://bugs.webkit.org/show_bug.cgi?id=119198

        Reviewed by Andreas Kling.

        Silences an implicit declaration warning.

        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport.c:

2013-07-27  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Bump required version of EFL to 1.7
        https://bugs.webkit.org/show_bug.cgi?id=119144

        Reviewed by Christophe Dumez.

        * MiniBrowser/efl/CMakeLists.txt: Bumped EFL to 1.7

2013-07-26  Filip Pizlo  <fpizlo@apple.com>

        WKTR should know about the JSC extensions to testRunner
        https://bugs.webkit.org/show_bug.cgi?id=119154

        Reviewed by Mark Hahnenberg and Geoffrey Garen.
        
        This makes some fast/js tests pass.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::numberOfDFGCompiles):
        (WTR::TestRunner::neverInlineFunction):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2013-07-25  Mark Rowe  <mrowe@apple.com>

        Fix build of DumpRenderTree and WebKitTestRunner when building against an SDK.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Fix framework search path when building against an SDK.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto. Also fix where our scripts look for WebCore.framework
        so they pull the version out of the SDK.

2013-07-25  Anders Carlsson  <andersca@apple.com>

        Localizable.strings generated by extract-localizable-strings should be UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=119106

        Reviewed by Mark Rowe.

        Output strings as UTF-8.

        * Scripts/extract-localizable-strings:

2013-07-25  Sam Weinig  <sam@webkit.org>

        -[WebHTMLView attributedSubstringForProposedRange:actualRange:] does not include strikethrough attribute in the returned attributed string
        https://bugs.webkit.org/show_bug.cgi?id=119099
        <rdar://problem/13439291>

        Reviewed by Enrica Casucci.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::attributedString):
        (TestWebKitAPI::AttributedStringTest_CustomFont::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_CustomFont::url):
        (TestWebKitAPI::AttributedStringTest_CustomFont::runTest):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::url):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::runTest):
        * TestWebKitAPI/Tests/mac/attributedStringStrikethrough.html: Added.
        Add tests for attributed strings with strikethrough.  Refactor the attributed string tests
        to make adding more easier in the future.

2013-07-20  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: FTL should be able to generate LLVM IR that uses an intrinsic for OSR exit
        https://bugs.webkit.org/show_bug.cgi?id=118948

        Reviewed by Sam Weinig.
        
        - Make ReducedFTL capable of dealing with code that uses the fake OSR exit intrinsic,
          by exporting it as a function.
        
        - Make combineModules.rb idempotent. Sometimes it's convenient to run a file through
          it even if you know that you've already done so. See processIRDump.sh.
        
        - Add a script, processIRDump.sh, that takes the output of --dumpLLVMIR=true and
          runs it through ReducedFTL automatically. You typically want to say something like:
          
          jsc --dumpLLVMIR=true <program(s)> > jsc-output.txt
          ./processIRDump.sh --timing < jsc-output.txt

        * ReducedFTL/ReducedFTL.c:
        (webkit_osr_exit):
        * ReducedFTL/combineModules.rb:
        * ReducedFTL/processIRDump.sh: Added.

2013-07-20  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: We should use the no-asserts build of LLVM if that's what the user configured
        https://bugs.webkit.org/show_bug.cgi?id=118947

        Reviewed by Dan Bernstein.

        * Scripts/copy-webkitlibraries-to-product-directory:

2013-07-16  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: We should have a reduced FTL LLVM pipeline tool in the repository
        https://bugs.webkit.org/show_bug.cgi?id=118647

        Rubber stamped by Geoffrey Garen and Mark Hahnenberg.

        Add a tool that takes in an LLVM bitcode file and JITs it in exactly the same
        way that the FTL would.
        
        Also add a tool that combines multiple LLVM modules generated by FTL into a
        single module.

        * ReducedFTL: Added.
        * ReducedFTL/ReducedFTL.c: Added.
        (usage):
        (currentTime):
        (MemorySection):
        (mmAllocateCodeSection):
        (mmAllocateDataSection):
        (mmApplyPermissions):
        (mmDestroy):
        (symbolLookupCallback):
        (main):
        * ReducedFTL/build.sh: Added.
        * ReducedFTL/combineModules.rb: Added.

2013-06-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix minor goof in profiling output layout. We weren't accounting
        for the "/" that is printed between engine counts.

        * Scripts/display-profiler-output:

2013-05-28  Filip Pizlo  <fpizlo@apple.com>

        testRunner should have a way of disabling inlining of functions
        https://bugs.webkit.org/show_bug.cgi?id=116875

        Reviewed by Mark Hahnenberg.

        * DumpRenderTree/TestRunner.cpp:
        (neverInlineFunction):
        (TestRunner::staticFunctions):

2013-05-27  Filip Pizlo  <fpizlo@apple.com>

        testRunner should be able to tell you if a function is DFG compiled
        https://bugs.webkit.org/show_bug.cgi?id=116847

        Reviewed by Mark Hahnenberg.

        * DumpRenderTree/TestRunner.cpp:
        (numberOfDFGCompiles):
        (TestRunner::staticFunctions):

2013-05-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: display-profiler-output should make it even easier to diff the compilation story between two different runs
        https://bugs.webkit.org/show_bug.cgi?id=116556

        Reviewed by Oliver Hunt.
        
        This adds three new capabilities:
        
        - 'display' now accepts negative compilation indices, and allows specifying
          wildcard hashes combined with combination indices. Previously you could say
          'display <hash>', 'display <hash>-<index>-<engine>', or 'display *'. The
          latter would display every compilation. This improves this so that you can
          say 'display *-<index>-<engine>'. It also makes it so that you can give a
          negative index, which allows you to say things like 'display blah--1-dfg',
          which displays just the last DFG compilation. Also you can say
          'display *--1-dfg', which displays the last DFG compilation for each code
          block. I realize that this is kind of ugly, but gosh is it practical.
        
        - You can now say 'sort hash', which will henceforth sort all of the output
          by code hash rather than by the time when it was compiled. This means that
          if you're doing 'dispay *--1-dfg' and then want to diff the results against
          something else, you can ensure that this doesn't get confused just by
          changes in compilation order.
        
        - You can now say 'counts off', which will henceforth disable the display of
          execution counts from 'bytecode' and 'display'. This is also useful for
          diffs, since if you're trying to figure out why two compilations are
          different, they probably have radically different counts. 'counts off' gets
          this out of the output so that it doesn't confuse your diff.
        
        Note that to use this effectively you should also have a script that scrubs
        pointers from text so that the diff doesn't get confused by pointers. I'll
        post my elimptr script to the bug. Maybe at some point I'll integrate that
        into display-profiler-output.
        
        Put together this is pretty awesome. I was able to do the following:
        
        (echo "counts off" && echo "sort hash" && echo "d *--1-dfg") | Tools/Scripts/display-profiler-output richards-serial.profile | elimptr > richards-serial.asm
        (echo "counts off" && echo "sort hash" && echo "d *--1-dfg") | Tools/Scripts/display-profiler-output richards-concurrent.profile | elimptr > richards-concurrent.asm
        diff -u richards-serial.asm richards-concurrent.asm
        
        And this immediately told me that the reason why richards is slower in the
        concurrent compilation case is just that we end up compiling *tons* more
        functions, most of which are trivially inlineable. Basically, concurrent
        compilation breaks our previous heuristics for delaying compilation of
        inlineables just enough that they never trigger compilation. We should fix
        that in a separate bug.

        * Scripts/display-profiler-output:

2013-04-30  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Use hw.availcpu instead of hw.ncpu, and configure LLVM with --enable-zlib=no

        Rubber stamped by Mark Rowe.

        * Scripts/copy-webkitlibraries-to-product-directory:

2013-07-16  Oliver Hunt <oliver@apple.com>

        Merge dfgFourthTier r148853

    2013-04-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: tandem WebKit and LLVM builds should ./configure LLVM if needed
        https://bugs.webkit.org/show_bug.cgi?id=114933

        Reviewed by Andy Estes.
        
        This makes it easy to get set up for tandem LLVM builds.

        * Scripts/copy-webkitlibraries-to-product-directory:

2013-07-16  Oliver Hunt <oliver@apple.com>

        Merge dfgFourthTier r148850

    2013-04-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: WebKit's build system should relink JavaScriptCore if LLVM's libraries changed but its headers didn't
        https://bugs.webkit.org/show_bug.cgi?id=114926

        Reviewed by Geoffrey Garen.
        
        If the LLVM libraries change, then touch a phony header, which will force relink
        of JavaScriptCore.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):

2013-07-16  Oliver Hunt <oliver@apple.com>

        Merge dfgFourthTier r148848

    2013-04-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: developing LLVM in tandem with WebKit should be fun and easy
        https://bugs.webkit.org/show_bug.cgi?id=114925

        Reviewed by Geoffrey Garen.
        
        This enables building LLVM along with WebKit, so that build-jsc and build-webkit
        will also optionally build LLVM and quickly symlink LLVM's built products into
        the right places.
        
        Most WebKit and JSC hackers will want to rely on the checked-in already-built
        versions of LLVM in WebKitLibraries. But developing both systems in tandem is an
        increasingly common use-case for me, and it may become a common use case for a
        handful of others. Currently, this is really painful: you first have to build
        LLVM, then you have to export-llvm-build (which takes a while), and then you
        have to make sure that your LLVM_LIBRARY_PACKAGE and LLVM_INCLUDE_PACKAGE
        variables are set to point to the thing you exported. The whole process loses
        track of dependencies very quickly: making a tiny change in LLVM requires
        packaging, and then unpackaging, a large number of potentially large headers and
        static libraries. Not only is this slow but it then causes the WebKit build
        system to rebuild anything that transitively includes any LLVM header, which is
        now quite a few files. While this sort of use pattern is still worthwhile if
        you're trying to package a binary drop and test it, it's not great if you're
        just trying to do experimental development that involves making small changes
        in both trees.
        
        This change fixes this use case while keeping the old use cases intact. You can
        do tandem development using one of two modes:
        
        Your own LLVM directory: just set LLVM_SOURCE_PATH to the *absolute* path of
        the LLVM directory you're using. Once this is done, any invocation of a WebKit
        build via build-jsc or build-webkit will also build LLVM, and then quickly
        symlink things into place without perturbing dependency tracking.
        
        Internal LLVM directory: if you check out llvm into a directory called 'llvm'
        right off of the WebKit source tree, then the build system will automatically
        use this.
        
        Here's how this takes care of dependencies:
        
        Headers: the include/llvm and include/llvm-c directories are symlinked into
        $productsDir/usr/local/include. And then everything just works.
        
        Libraries: the build system detects, by reading LLVM's Makefile.config, which
        mode LLVM is built in (like Release+Asserts or Debug+Asserts) and symlinks
        the .a files into $productsDir/<thingy>. It will ranlib those libraries only
        if they have changed, by checking both the modification time and also whether
        the last time we had a symlink, that symlink was from the same directory.
        This helps if you switch to an *older* LLVM build (using LLVM_SOURCE_PATH)
        but that build wasn't yet ranlib'd.
        
        One problem that this does not yet solve is that xcodebuild will not relink
        JavaScriptCore if the only thing that changed was the libraries. I will work
        on this problem separately: https://bugs.webkit.org/show_bug.cgi?id=114926.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        (fileContains):
        (fileContentsEquals):

2013-04-15  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Update LLVM-related build scripts to copy generated headers as well
        https://bugs.webkit.org/show_bug.cgi?id=114551

        Reviewed by Oliver Hunt.
        
        Also added the ability to use something other than bzip2 compression, since although
        it is great for checking things into the tree, it increases turn-around times when
        experimenting.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        * Scripts/export-llvm-build:

2013-04-03  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Include LLVM headers with surrounding #pragmas instead of using my #define
        https://bugs.webkit.org/show_bug.cgi?id=113921

        Reviewed by Oliver Hunt.

        The LLVM community wants us to continue including all of LLVM's C++ headers. Change
        the export script to do this.
        
        * Scripts/export-llvm-build:

2013-03-29  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Check in a known-good build of LLVM into WebKitLibraries, and have a story for updating it
        https://bugs.webkit.org/show_bug.cgi?id=113452

        Rubber stamped by Mark Hahnenberg.

        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/export-llvm-build:

2013-03-29  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: FTL JIT should be able run some simple function
        https://bugs.webkit.org/show_bug.cgi?id=113481

        Reviewed by Geoffrey Garen.
        
        Give the scripts the ability to find an LLVM build and use it.
        
        Also added a script, export-llvm-build, that allows you to take your
        own build of LLVM and package it for use by WebKit's build system.
        
        The build system treats a "build" of LLVM as a pair of .tar.bz2's,
        one for the library archives and one for the headers. It then unpacks
        them into your built products directory in a mannner that is mostly
        analogous to how WebKitSystemInterface works.

        * Scripts/build-jsc:
        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        (dittoHeaders):
        * Scripts/export-llvm-build: Added.

2013-07-24  Anders Carlsson  <andersca@apple.com>

        Crash when calling WKPageGetProcessIdentifier after aborted process launch
        https://bugs.webkit.org/show_bug.cgi?id=119069
        <rdar://problem/14494064>

        Reviewed by Andreas Kling.

        Add a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):

2013-07-24  Zan Dobersek  <zdobersek@igalia.com>

        Make KURL::hasPath private
        https://bugs.webkit.org/show_bug.cgi?id=118279

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/KURL.cpp:
        (TestWebKitAPI::TEST_F): Remove references to KURL::hasPath the method is now private and thus not accessible for testing.

2013-07-24  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] TestInspectorServer unit test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=105866

        Reviewed by Gustavo Noronha Silva.

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

2013-07-24  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] [WK2] Handle wheel event with delta zero
        https://bugs.webkit.org/show_bug.cgi?id=118973

        Reviewed by Gustavo Noronha Silva.

        Added handling of zero mouse scroll deltas in EventSenderProxy similar
        to WK1 and Qt/EFL ports.

        fast/events/platform-wheelevent-with-delta-zero-crash.html is no longer
        failing on WK2.

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

2013-07-23  Andreas Kling  <akling@apple.com>

        REGRESSION(r150867): FrameView auto-sizing + delegate denied image load may cause StyleResolver to re-enter itself.
        <rdar://problem/14324895>
        <http://webkit.org/b/119023>

        Reviewed by Simon Fraser.

        Add a test for this rather specific problem.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp: Added.
        (TestWebKitAPI::DenyWillSendRequestTest::DenyWillSendRequestTest):
        (TestWebKitAPI::DenyWillSendRequestTest::willSendRequestForFrame):
        (TestWebKitAPI::DenyWillSendRequestTest::didCreatePage):

2013-07-23  Tim Horton  <timothy_horton@apple.com>

        Add a test for plug-in unavailability indicator obscurity detection
        https://bugs.webkit.org/show_bug.cgi?id=119007

        Reviewed by Anders Carlsson.

        Expose the ability to block plug-ins via pluginLoadPolicy to testRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setBlockAllPlugins):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        Add testRunner.setBlockAllPlugins function (and corresponding message to
        forward it through to TestController).

        * WebKitTestRunner/TestController.cpp:
        Initialize m_shouldBlockAllPlugins to false (and drive-by initialize m_handlesAuthenticationChallenges).

        (WTR::TestController::createWebViewWithOptions):
        Register our pluginLoadPolicy callback.

        (WTR::TestController::resetStateToConsistentValues):
        Reset m_shouldBlockAllPlugins to false.

        (WTR::TestController::pluginLoadPolicy):
        Return the existing plugin load policy, unless setBlockAllPlugins(true)
        was called, in which case we reject all plugins with kWKPluginLoadPolicyBlocked.

        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setBlockAllPlugins):

2013-07-21  Andreas Kling  <akling@apple.com>

        KURL creates duplicate strings when completing data: URIs.
        <http://webkit.org/b/118952>
        <rdar://problem/14504480>

        Reviewed by Anders Carlsson.

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

2013-07-19  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver not detecting misspelled words don't work in all cases
        https://bugs.webkit.org/show_bug.cgi?id=118924

        Reviewed by Tim Horton.

        Make the misspelled detection dependent on both types of attributes being present.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):

2013-07-19  Alex Christensen  <achristensen@apple.com>

        Improved code coverage generation.
        https://bugs.webkit.org/show_bug.cgi?id=118926

        Reviewed by Tim Horton.

        * Scripts/build-webkit: Removed exception preventing ANGLE code coverage support.
        * Scripts/generate-coverage-data: Added --no-build to run-javascriptcore-tests call.
        (generateReport): Moved report generation to a subroutine.

2013-07-19  Stephanie Lewis  <slewis@apple.com>

        <rdar://problem/14499595> pagination wk2 api test failing on ML (118928)

        Unreviewed.

        Rebaseline pagination test after http://trac.webkit.org/changeset/152911

        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::didLayout):

2013-07-19  Daniel Bates  <dabates@apple.com>

        Make Perl tools work when using git bisect with Git branch build setup
        https://bugs.webkit.org/show_bug.cgi?id=118512

        Reviewed by Martin Robinson.

        The various Perl tools (run-webkit-app, {debug, run}-safari, et cetera) don't work
        during a git bisect session with a Git branch build setup (i.e. git config
        core.webKitBranchBuild true). Specifically, the tools cannot find the branch-
        specific build of WebKit because they cannot determine the branch Git is on (since
        git bisect puts Git into a detached HEAD state). We should teach our tooling to
        parse the file .git/BISECT_START (created by git bisect start) for the name of the
        branch Git was on when we began a git bisect session. Then the tools can determine
        the path to the built WebKit.

        * Scripts/VCSUtils.pm:
        (gitDirectory): Added.
        (gitBisectStartBranch): Added.
        (gitBranch): Modified to call gitBisectStartBranch() when we have a detached
        HEAD (e.g. running git bisect).
        (determineVCSRoot): Modified to call gitDirectory() to determine the path to
        the .git directory in the Git checkout.

2013-07-19  Alex Christensen  <achristensen@apple.com>

        Added x64 configuration to Visual Studio build.
        https://bugs.webkit.org/show_bug.cgi?id=118888

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj.filters:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/record-memory/record-memory.vcxproj:

2013-07-19  Martin Robinson  <mrobinson@igalia.com>

        Add a couple people to the MathML watchlist
        https://bugs.webkit.org/show_bug.cgi?id=118909

        Reviewed by Andreas Kling.

        Add a couple people to the MathML watchlist and add Kalyan's other
        email address to fix style checker warnings about the watchlist
        contents.

        * Scripts/webkitpy/common/config/contributors.json: Add Frédéric to the
        list of contributors and add Kalyan's second email address.
        * Scripts/webkitpy/common/config/watchlist: Add myself and Frédéric to the MathML
        watchlist.

2013-07-19  Simon Pena  <simon.pena@samsung.com>

        [GTK] Fix regression in DumpRenderTree introduced in r152782 by checking if uri is valid
        https://bugs.webkit.org/show_bug.cgi?id=118895

        Reviewed by Philippe Normand.

        In r152782 an uri is used to create an string representation without checking first if it
        is valid. That fails later when the string is used to check for existing redirections. This
        patch ensures that the uri is valid before using it.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): Ensure an uri is valid before using it.

2013-07-18  Timothy Hatcher  <timothy@apple.com>

        Add extract-localizable-js-strings and use it for WebInspectorUI.

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

        Reviewed by Joseph Pecoraro.

        * Scripts/extract-localizable-js-strings: Added.
        * Scripts/extract-localizable-strings: Drive-by-fix: disable deprecated warnings about "goto".
        * Scripts/update-webkit-localizable-strings: Use extract-localizable-js-strings for
        the WebInspectorUI project.

2013-07-18  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build correction #2 after r152861.

        * WinLauncher/WinLauncher.cpp: Declare proper linkage.

2013-07-18  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build correction after r152861.

        * WinLauncher/WinLauncher.cpp: Don't reference private header.

2013-07-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support in-band text tracks.
        https://bugs.webkit.org/show_bug.cgi?id=103770

        Reviewed by Eric Carlson.

        Update WinLauncher to run in a CFRunLoop (rather than a hand-written Windows event loop) so that
        libdispatch and CFRunLoop elements are services during the run loop.

        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Use CFRunLoopRun (rather than a Windows message loop) if running with
        a CoreFoundation (or CFLite) support library.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCF.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCFLite.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Add references to WinLauncherCF.props
        and WinLauncherCFLite.props.

2013-07-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Test enabling WinEWS tests now that queue is at a good state and NRWT with multiple processes is enabled.

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

2013-07-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r132678): Tests that use SSL or port 8080 time out when run using old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=118854
        <rdar://problem/14081339>

        Reviewed by David Kilzer.

        Following <http://trac.webkit.org/changeset/132678> (https://bugs.webkit.org/show_bug.cgi?id=98602)
        Apache no longer listens to ports 8443 (SSL) and 8080. So, tests that use these ports time out when
        run using old-run-webkit-tests. We need to update old-run-webkit-tests to explicitly tell Apache to
        listen on these ports so that we can run tests that use port 8443 and 8080.

        * Scripts/old-run-webkit-tests:
        (configureAndOpenHTTPDIfNeeded):

2013-07-17  Tim Horton  <timothy_horton@apple.com>

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        Match new WKPageLoaderClient entry.

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152701, r152703, r152739, r152754,
        and r152756.
        http://trac.webkit.org/changeset/152701
        http://trac.webkit.org/changeset/152703
        http://trac.webkit.org/changeset/152739
        http://trac.webkit.org/changeset/152754
        http://trac.webkit.org/changeset/152756
        https://bugs.webkit.org/show_bug.cgi?id=118821

        this was a buggy fix and we're going to try something
        different (Requested by thorton on #webkit).

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r151535.
        http://trac.webkit.org/changeset/151535
        https://bugs.webkit.org/show_bug.cgi?id=118804

        Re-disable WinEWS tests (Requested by rfong on #webkit).

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

2013-07-17  Simon Pena  <simon.pena@samsung.com>

        [GTK] Make DRT obbey testRunner's addURLToRedirect
        https://bugs.webkit.org/show_bug.cgi?id=118239

        Reviewed by Gustavo Noronha Silva.

        Support testRunner's addURLToRedirect in GTK's DRT, so it redirects
        to the proper URI when indicated.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback):

2013-07-17  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        Add a new find-resolved-bugs command to webkit-patch.
        https://bugs.webkit.org/show_bug.cgi?id=118060

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintBaselines._platform_for_path):
        (FindResolvedBugs):
        (FindResolvedBugs.execute):

2013-07-16  Balazs Kelemen  <kbalazs@webkit.org>

        [CMake] Undefined references should be detected at build time
        https://bugs.webkit.org/show_bug.cgi?id=110236

        Reviewed by Christophe Dumez.

        Add library dependencies that were not defined explicitly before.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:

2013-07-16  Kwang Yul Seo  <skyul@company100.net>

        check-webkit-style: "using namespace foo;" should be flagged as an error only in headers
        https://bugs.webkit.org/show_bug.cgi?id=118755

        Reviewed by Ryosuke Niwa.

        Fix r152719 to check "using namespace foo;" only in headers.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_using_namespace):
        (check_style):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_using_namespace):

2013-07-16  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Get rid of multiple inheritance support from the bindings generators
        https://bugs.webkit.org/show_bug.cgi?id=118353

        Reviewed by Kentaro Hara.

        Update CodeGeneratorTestRunner.pm to use domInterface->parent instead of
        deprecated domInterface->parents.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_parentInterface):

2013-07-16  Brian Holt  <brian.holt@samsung.com>

        check-webkit-style: "using namespace foo;" should be flagged as an error in headers
        https://bugs.webkit.org/show_bug.cgi?id=57241

        Reviewed by Ryosuke Niwa.

        Added check for "using namespace foo" and unit test.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_using_namespace):
        (check_style):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_using_namespace):

2013-07-16  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] fast/events/platform-wheelevent-with-delta-zero-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=110222

        Reviewed by Gustavo Noronha Silva.

        Added handling of zero mouse scroll deltas in EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseScrollByCallback):

2013-07-16  Brian Holt  <brian.holt@samsung.com>

        webkitpy: replace urllib with urllib2 for downloading additional modules
        https://bugs.webkit.org/show_bug.cgi?id=118671

        Reviewed by Ryosuke Niwa.

        Urllib2 is available whereever urllib is, but has better proxy support.

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

2013-07-16  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Adds support for aria-haspopup property.
        https://bugs.webkit.org/show_bug.cgi?id=117834

        Reviewed by Christophe Dumez.

        Adds implementation for testing aria-haspopup property.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (getAttributeSetValueForId):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::hasPopup):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::getAttributeSetValueForId):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::hasPopup):

2013-07-16  Michael Brüning  <michael.bruning@digia.com>

        [Qt] Replace Nokia references.
        https://bugs.webkit.org/show_bug.cgi?id=118728

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::LauncherApplication):

2013-07-15  Tim Horton  <timothy_horton@apple.com>

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        Match new WKPageLoaderClient entry.

2013-07-15  Chris Fleizach  <cfleizach@apple.com>

        Update James Craig's email address.

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

2013-07-15  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL] Add fallback for TestWebKitAPI if opengl is not available.
        https://bugs.webkit.org/show_bug.cgi?id=118583

        Reviewed by Christophe Dumez.

        There're many fails on efl webkit2 API test if opengl is not available.
        So, add fallback to non-opengl evas engine.

        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::initEcoreEvas):

2013-07-15  Brian Holt  <brian.holt@samsung.com>

        check-webkit-style: Ignore false positive: Instance of 'Popen' has no 'pid' member
        https://bugs.webkit.org/show_bug.cgi?id=118592

        Reviewed by Martin Robinson.

        Added a suppression for pylint false positives and a unit test.

        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        (PythonCheckerTest):
        (PythonCheckerTest.test_pylint_false_positives):
        (PythonCheckerTest.test_pylint_false_positives._mock_handle_style_error):
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py: Added.
        (test_popen):

2013-07-15  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Increase the JHBuild version of GStreamer to 1.0.7
        https://bugs.webkit.org/show_bug.cgi?id=115166

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Bumping GStreamer version up to 1.0.8.

2013-07-12  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed. Add an email address and update my domain of experts.

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

2013-07-12  Emanuele Aina  <emanuele.aina@collabora.com>

        [jhbuild] Avoid restarting from scratch failed initial checkouts
        https://bugs.webkit.org/show_bug.cgi?id=118603

        Reviewed by Martin Robinson.

        If the initial checkout is interrupted midway (eg. because the internet
        connection went down) config files do not get generated and that causes
        the next checkout to start from scratch (the missing files cause the
        script to delete the build root and the downloaded sources).

        By generating the files before invoking jhbuild, subsequent runs are able
        to start where the previous run left.

        * Scripts/update-webkit-libs-jhbuild:
        (saveJhbuildMd5): invoke it before runJhbuild().

2013-07-12  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Remove single-worker restriction on tests.

        * Scripts/webkitpy/port/win.py: Remove restriction of one worker.

2013-07-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152599.
        http://trac.webkit.org/changeset/152599
        https://bugs.webkit.org/show_bug.cgi?id=118612

        This patch includes a failing unit test (Requested by
        mrobinson on #webkit).

        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py: Removed.

2013-07-12  Emanuele Aina  <emanuele.aina@collabora.com>

        [Tools] Ignore missing GNUmakefile when detecting previous arch in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=91223

        Reviewed by Martin Robinson.

        When run on a clean checkout, `build-webkit` complains that no
        GNUmakefile exists when trying to detect the previously configured
        architecture, but in this case there's no previous configuration so
        the warning is pointless.

        * Scripts/webkitdirs.pm:
        (determineArchitecture): Redirect grep stderr to /dev/null.

2013-07-12  Brian Holt  <brian.holt@samsung.com>

        check-webkit-style: Ignore false positive: Instance of 'Popen' has no 'pid' member
        https://bugs.webkit.org/show_bug.cgi?id=118592

        Reviewed by Martin Robinson.

        Added a suppression for pylint false positives and a unit test.

        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        (PythonCheckerTest):
        (PythonCheckerTest.test_pylint_false_positives):
        (PythonCheckerTest.test_pylint_false_positives._mock_handle_pylint_false_positives):
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py: Added.
        (test_popen):

2013-07-11  Arnaud Renevier  <a.renevier@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-07-10  Sergio Correia  <sergio.correia@openbossa.org>

        Handle "load,provisional,failed" with the on_error callback on EFL MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=118538

        Reviewed by Christophe Dumez.

        When attempting some odd url such as ``foo'', MiniBrowser will now show an
        error message such as "Cannot resolve hostname (foo)".

        Previously, it had the following behavior if MiniBrowser was started with
        such urls, e.g ``./MiniBrowser foo'':

        - Debug:
        It wouldt hit WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp(460) and crash.

        - Release:
        No asserts, naturally, but the view would remain blank, even if we tried to
        change to a valid url.

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

2013-07-10  Simon Pena  <simon.pena@samsung.com>

        [GTK] WebKitTestRunner tries to remove an already deleted event in EventSenderProxy::replaySavedEvents
        https://bugs.webkit.org/show_bug.cgi?id=118509

        Reviewed by Martin Robinson.

        In EventSenderProxy::replaySavedEvents WebKitTestRunner can crash
        when trying to remove an event already removed, if another event is
        processed in the middle. By using a Deque's takeFirst, we ensure the
        element is removed before we dispatch it.

        fast/events/mousedown-inside-dragstart-should-not-cause-crash.html no longer
        crashes after this fix is added.

        * WebKitTestRunner/EventSenderProxy.h: Use a Deque instead of Vector in GTK
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::replaySavedEvents): Use takeFirst to retrieve the event
        from the queue.

2013-07-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add ewk_view_device_pixel_ratio_set
        https://bugs.webkit.org/show_bug.cgi?id=118521

        Reviewed by Gyuyoung Kim.

        * EWebLauncher/main.c: Added new option(-r) to test device pixel ratio.
        (windowCreate):
        (parseUserArguments):

2013-07-09  Bruno de Oliveira Abinader  <brunoabinader@gmail.com>

        Unreviewed change of my email addresses.
        https://bugs.webkit.org/show_bug.cgi?id=100122

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

2013-07-09  Anders Carlsson  <andersca@apple.com>

        DumpRenderTree should stop sending unsupported URLs to NSWorkspace
        https://bugs.webkit.org/show_bug.cgi?id=118514
        <rdar://problem/13686836>

        Reviewed by Sam Weinig.

        Add a new default policy delegate and override decidePolicyForNavigationAction: to not pass unhandled URLs to NSWorkspace.

        * DumpRenderTree/DefaultPolicyDelegate.h: Added.
        * DumpRenderTree/DefaultPolicyDelegate.m: Added.
        (-[DefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add DefaultPolicyDelegate.h and DefaultPolicyDelegate.m.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allocateGlobalControllers):
        Allocate a DefaultPolicyDelegate object.

        (resetWebViewToConsistentStateBeforeTesting):
        Set the policy delegate to the default policy delegate.

        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        Declare the defaultPolicyDelegate object.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setCustomPolicyDelegate):
        Set the policy delegate to the default delegate if setDelegate is false.

2013-07-08  Zan Dobersek  <zdobersek@igalia.com>

        KURL unit test fixture class should have a meaningful name
        https://bugs.webkit.org/show_bug.cgi?id=118467

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/KURL.cpp:
        (TestWebKitAPI::TEST_F): Use 'KURLTest' as the name for the KURL unit test's fixture class
        instead of the generic and inappropriate 'WebCore' name.

2013-07-08  Antti Koivisto  <antti@apple.com>

        Add Deque::removeLast
        https://bugs.webkit.org/show_bug.cgi?id=118466

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Deque.cpp: Added.
        (TestWebKitAPI::TEST):

2013-07-08  Brian Holt  <brian.holt@samsung.com>

        [GTK] Leak: GFile* leaking in beginDragWithFilesCallback
        https://bugs.webkit.org/show_bug.cgi?id=118412

        Reviewed by Martin Robinson.

        An adoptRef is required to balance ref and deref calls.

        * DumpRenderTree/gtk/EventSender.cpp:
        (beginDragWithFilesCallback):

2013-07-06  Sergio Correia  <sergio.correia@openbossa.org>

        Update list of EFL WK2 API tests
        https://bugs.webkit.org/show_bug.cgi?id=118443

        Reviewed by Christophe Dumez.

        The following tests were included:

        Passing:
        - CloseThenTerminate
        - DidAssociateFormControls
        - PageVisibilityState
        - ResponsivenessTimerDoesntFireEarly
        - TerminateTwice
        - WillLoad

        Failing:
        - ResizeReversePaginatedWebView
        - ScrollPinningBehaviors

        This patch also modified ``test_webkit2_api_BINARIES'' list so that it is in
        alphabetical order.

        * TestWebKitAPI/CMakeLists.txt: Added Bundles for included tests.
        * TestWebKitAPI/PlatformEfl.cmake: Added a few tests.

2013-07-05  Tim Horton  <timothy_horton@apple.com>

        Fix r152265: FrameView's pagination mode is only one of two, and the logic was totally wrong
        https://bugs.webkit.org/show_bug.cgi?id=118439
        <rdar://problem/14366120>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::TEST):
        - Make use of EXPECT_JS_EQ instead of manually doing JavaScript stuff.
        - Assert that we got the right number of pages for sanity.
        - Reduce the page gap size so that DrawingAreaImpl doesn't try to allocate
            so much memory that SharedMemory asserts and makes the test time out.
        - Use didFirstLayoutAfterSuppressedIncrementalRendering instead of Paint
            because paint doesn't fire if the window is offscreen.

2013-07-05  Tim Horton  <timothy_horton@apple.com>

        [wk2] Add API to lock the scroll position at the top or bottom of the page
        https://bugs.webkit.org/show_bug.cgi?id=118429
        <rdar://problem/14120323>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp: Added.
        (TestWebKitAPI::didFinishDocumentLoadForFrame):
        (TestWebKitAPI::TEST):
        Add a test that ensures that the three pinning modes (DoNotPin, PinToTop, PinToBottom)
        all work correctly in the face of resizing the view and scrolling from JS.

2013-07-05  Michael Pruett  <michael@68k.org>

        Unreviewed. Add myself as a committer.

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

2013-07-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] WebKit2 test TestWebKitFaviconDatabase times out with recent glib
        https://bugs.webkit.org/show_bug.cgi?id=111434

        Reviewed by Carlos Garcia Campos.

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

2013-07-04  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL] DumpRenderTree doesn't run if "opengl_x11" engine is not available
        https://bugs.webkit.org/show_bug.cgi?id=118370

        Reviewed by Christophe Dumez.

        Add fallback to software X11 engine if opengl_x11 engine creation fails.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (initEcoreEvas):

2013-07-04  Brian Holt  <brian.holt@samsung.com>

        [ATK] Leak: AtkAttributeSet* should be freed
        https://bugs.webkit.org/show_bug.cgi?id=118307

        Reviewed by Christophe Dumez.

        Fixed memory leaks for AtkAttributeSet by calling
        atk_attribute_set_free().

        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::childElementById):
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (getAtkAttributeSetAsString):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::stringAttributeValue):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::childElementById):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::getAtkAttributeSetAsString):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):

2013-07-03  David Farler  <dfarler@apple.com>

        Add Makefile to WebKitLauncher
        https://bugs.webkit.org/show_bug.cgi?id=118365

        Reviewed by Mark Rowe.

        * WebKitLauncher/Makefile: Added.

2013-07-03  Brian Holt  <brian.holt@samsung.com>

        [ATK] Leak: more leaks in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118362

        Reviewed by Christophe Dumez.

        Free the memory created by g_strdup_printf.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::language):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::language):

2013-07-03  Jer Noble  <jer.noble@apple.com>

        Xcode often gets in a state where the debugger is completely unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=118157

        The GetPointeeData() operations we use to retrieve strings is extremely expensive.
        Rather than pull the character data out of the debugger one byte at a time
        through the GetPointeeData() API, retrieve the memory contents of the string through
        the ReadMemory() API, and convert the retrieved memory into a python string.

        Reviewed by Anders Carlsson.

        * lldb/lldb_webkit.py:
        (__lldb_init_module.lldb_webkit):
        (guess_string_length):
        (ustring_to_string):
        (lstring_to_string):

2013-07-03  Morten Stenshorne  <mstensho@opera.com>

        [GTK] Let F5 refresh the page in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=117638

        Reviewed by Carlos Garcia Campos.

        Also use the correct icon for the refresh button that was already there.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init):

2013-07-02  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        Unreviewed. Add my email to a few watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-07-02  David Farler  <dfarler@apple.com>

        Unreviewed. Adding myself to contributors.json.

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

2013-07-02  Brian Holt  <brian.holt@samsung.com>

        [ATK] Leak: leaks in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118297

        Fixed memory leak.

        Reviewed by Christophe Dumez.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::stringValue):

2013-07-02  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix WebKitTestRunner crashes.
        https://bugs.webkit.org/show_bug.cgi?id=117630

        Reviewed by Darin Adler.

        Create static function to dump for WebProcess unresponsiveness status,
        and use it before calling TestController::runTest().

        Accessing TestController::m_currentInvocation before calling
        TestController::runTest() can make crash because the invocation
        instance will be assigned at the function.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::run):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness):
        * WebKitTestRunner/TestInvocation.h:

2013-07-02  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK1] Support WebGL with EGL on Linux
        https://bugs.webkit.org/show_bug.cgi?id=118251

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2013-07-01  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Efl][Gtk] Look at WEBKIT_OUTPUTDIR instead of WEBKITOUTPUTDIR in jhbuildrc
        https://bugs.webkit.org/show_bug.cgi?id=118267

        Reviewed by Gyuyoung Kim.

        After r152226 (from https://bugs.webkit.org/show_bug.cgi?id=117249)
        WEBKIT_OUTPUTDIR should be used instead of WEBKITOUPUTDIR. However
        Efl's jhbuildrc is still using the WEBKITOUTPUTDIR environment variable.

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2013-07-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Remove unsupported AC backends
        https://bugs.webkit.org/show_bug.cgi?id=117362

        Reviewed by Martin Robinson.

        * gtk/jhbuild-optional.modules: no longer needs clutter-gtk, clutter
        and cogl, so removed.

2013-07-01  Timothy Hatcher  <timothy@apple.com>

        Link to WebInspectorUI.framework at build time instead of soft linking.

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

        Reviewed by Joseph Pecoraro.

        * Scripts/build-webkit: Build WebInspectorUI before WebKit and WebKit2.

2013-07-01  Tim Horton  <timothy_horton@apple.com>

        Maximum scroll position can be negative in some cases
        https://bugs.webkit.org/show_bug.cgi?id=118175
        <rdar://problem/14301217>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp: Added.
        (TestWebKitAPI::didRunJavaScript):
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/lots-of-text-vertical-lr.html: Added.
        Add a test that loads a vertical-lr document, paginates it horizontally
        from right to left, resizes the view to fit the entire document, and
        verifies that the scroll position is negative, as it must be for the
        document to be enclosed by the view.

2013-07-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][GTK] Migrate from WEBKITOUTPUTDIR to WEBKIT_OUTPUTDIR
        https://bugs.webkit.org/show_bug.cgi?id=117249

        Reviewed by Brent Fulgham.

        Finish converting all use cases of WEBKITOUTPUTDIR to
        WEBKIT_OUTPUTDIR, which seems to be preferred these days.

        * DumpRenderTree/efl/FontManagement.cpp:
        (getCustomBuildDir):
        (getPlatformFontsPath):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getOutputDir):
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (usesPerConfigurationBuildDirectory):
        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server):
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        * jhbuild/jhbuildutils.py:
        (get_dependencies_path):

2013-07-01  Rafael Brandao  <rafael.lobo@webkit.org>

        Unreviewed change of my email address.

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

2013-06-28  Andreas Kling  <akling@apple.com>

        Fix Windows builds after deprecatedCharactersWithNullTermination() removal.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):

2013-06-28  Anders Carlsson  <andersca@apple.com>

        Remove String::deprecatedCharactersWithNullTermination() and related code
        https://bugs.webkit.org/show_bug.cgi?id=118211

        Reviewed by Benjamin Poulain.

        Remove all hasTerminatingNullCharacter() checks.

        * TestWebKitAPI/Tests/WTF/AtomicString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2013-06-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Crash when loading is stopped from -didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=118209
        <rdar://problem/14259249>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidReceiveResponse.html: Added.
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidReceiveResponse.mm: Added.
        (-[StopLoadingFromDidReceiveResponse webView:resource:didReceiveResponse:fromDataSource:]):
        (TestWebKitAPI::TEST):

2013-06-28  Andy Estes  <aestes@apple.com>

        [Mac] Newer versions of clang use a default template instantiation depth that is too small for TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=118208

        Reviewed by Mark Rowe.

        Newer versions of clang use a default template depth of 128, but this
        is too small for Tests/WTF/HashSet.cpp. Use 256 instead, which was the
        previous default.

        Clang lowered the default to keep recursive template instantiation
        from overflowing the stack (see <rdar://problem/13935016>), but
        TestWebKitAPI's C++ files don't trigger a stack overflow even with the
        higher limit. If for some reason this starts happening then we can
        lower the limit back down.

        * TestWebKitAPI/Configurations/Base.xcconfig: Build TestWebKitAPI with -ftemplate-depth=256.

2013-06-28  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Tools] Add support for "webKitBranchBuild" git option when calculating jhbuildPath
        https://bugs.webkit.org/show_bug.cgi?id=118195

        Reviewed by Daniel Bates.

        Currently, ports that use jhbuild fail to determine jhbuild directory
        when "webKitBranchBuild" git configuration property is enabled. To reproduce
        that issue in Efl port, enable that flag in .git/config, switch to a git branch
        other than "master" and try to build webkit. The build will fail to
        locate dependencies due to lack of pkg-config paths which should be set
        by jhbuild.

        For more details about "webKitBranchBuild" option, see:
        https://trac.webkit.org/wiki/UsingGitWithWebKit

        * Scripts/webkitdirs.pm:
        (getJhbuildPath):

2013-06-28  Jessie Berlin  <jberlin@apple.com>

        WebKitTestRunner should disable automatic quote and dash substitution like DumpRenderTree does
        https://bugs.webkit.org/show_bug.cgi?id=118201

        Reviewed by Dean Jackson.

        * WebKitTestRunner/mac/main.mm:
        (main):
        Modify NSUserDefaults directly since setAutomaticQuoteSubstitutionEnabled and
        setAutomaticDashSubstitutionEnabled are not exposed on WKView.

2013-06-28  David Farler  <dfarler@apple.com>

        Upstream WebKit Nightly’s WebKitLauncher
        https://bugs.webkit.org/show_bug.cgi?id=117418

        Reviewed by Mark Rowe.

        Literal patch from Nightly's OpenSource repo.

        * WebKitLauncher/Configurations/Base.xcconfig:
        * WebKitLauncher/Configurations/WebKitLauncher.xcconfig:
        * WebKitLauncher/Info.plist:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncherURLProtocol.m:
        (+[WebKitLauncherURLProtocol load]):
        (+[WebKitLauncherURLProtocol canInitWithRequest:]):
        (-[WebKitLauncherURLProtocol startLoading]):
        (-[WebKitLauncherURLProtocol handleWebKitVersionInformation]):
        (-[WebKitLauncherURLProtocol resourceNotFound]):
        * WebKitLauncher/WebKitNightlyEnablerSparkle.m:
        (initializeSparkle):
        * WebKitLauncher/main.m:
        (determineExecutablePath):
        (currentMacOSXVersion):
        (main):
        * WebKitLauncher/start.html:

2013-06-28  Balazs Kelemen  <b.kelemen@samsung.com>

        [EFL] back/forward keyboard shortcuts are non-intuitive
        https://bugs.webkit.org/show_bug.cgi?id=118193

        Reviewed by Christophe Dumez.

        Changed shortcuts for go-back/go-forward to alt+left and alt+right.

        * EWebLauncher/main.c:
        (on_key_down):
        * MiniBrowser/efl/main.c:
        (on_key_down):

2013-06-28  Roger Fong  <roger_fong@apple.com>

        Enable AVFoundation in Web Prefs for WinLauncher and DumpRenderTree on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=118194.

        Reviewed by Brent Fulgham.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dllLauncherEntryPoint):
        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint):

2013-06-28  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix for AppleWin port. Fix some file paths.

        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:

2013-06-27  Roger Fong  <roger_fong@apple.com>

        Add IAccessibilityDelegate implementation to WinLauncher for testing purposes.
        https://bugs.webkit.org/show_bug.cgi?id=118160.

        Reviewed by Brent Fulgham.

        * WinLauncher/AccessibilityDelegate.cpp: Added.
        (AccessibilityDelegate::QueryInterface):
        (AccessibilityDelegate::AddRef):
        (AccessibilityDelegate::Release):
        (AccessibilityDelegate::fireFrameLoadStartedEvents): Just returns S_OK;
        (AccessibilityDelegate::fireFrameLoadFinishedEvents): Ditto.
        * WinLauncher/AccessibilityDelegate.h: Added.
        (AccessibilityDelegate::AccessibilityDelegate):
        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint):
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:

2013-06-28  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Clean up temporary files created by the bindings test script
        https://bugs.webkit.org/show_bug.cgi?id=118189

        Reviewed by Kentaro Hara.

        Remove temporary files created by preprocess-idls.pl script after
        the bindings tests are executed.

        Based on Blink 153236 by Kentaro Hara <haraken@chromium.org>.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.main):

2013-06-26  Dean Jackson  <dino@apple.com>

        [Mac] Add Mavericks system font to Test systems
        https://bugs.webkit.org/show_bug.cgi?id=118109

        Reviewed by Simon Fraser.

        OS X Mavericks uses a different font for system controls. Tell DRT and
        WKTR about them otherwise they use a fallback font. Unfortunately the
        fonts are hidden (not found in the list of available fonts) so I
        had to add them manually.

        Even though there is only one at the moment, I implemented this
        as a set so it will be easier to add new fonts if necessary.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet): Fixed typo.
        (systemHiddenFontFamilySet): New method that returns the system control font.
        (drt_NSFontManager_availableFonts): Merge the hidden fonts.
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet): Fixed typo.
        (WTR::systemHiddenFontFamilySet): As above.
        (WTR::wtr_NSFontManager_availableFonts):

2013-06-27  Anders Carlsson  <andersca@apple.com>

        Get rid of the last uses of deprecatedCharactersWithNullTermination()
        https://bugs.webkit.org/show_bug.cgi?id=118159

        Reviewed by Andreas Kling.

        Replace calls to deprecatedCharactersWithNullTermination() with charactersWithNullTermination().data().

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

2013-06-27  Bem Jones-Bey  <bjonesbe@adobe.com>

        Sync up w3c import script with changes in Blink
        https://bugs.webkit.org/show_bug.cgi?id=118149

        Reviewed by Dirk Pranke.

        This is a port of the following blink changes:

        https://codereview.chromium.org/15366004
        https://chromiumcodereview.appspot.com/15592005
        https://codereview.chromium.org/16021006
        https://codereview.chromium.org/15590004
        https://codereview.chromium.org/15901008
        https://codereview.chromium.org/16171009
        https://codereview.chromium.org/16465007
        https://codereview.chromium.org/15981013

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (setUp):
        (test_commit_message_for_this_commit):
        * Scripts/webkitpy/port/base.py:
        (Port):
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.__init__):
        (W3CTestConverter.read_webkit_prefixed_css_property_list):
        (W3CTestConverter.convert_for_webkit):
        (W3CTestConverter.convert_css):
        (W3CTestConverter.convert_html):
        (W3CTestConverter.convert_testharness_paths):
        (W3CTestConverter.convert_prefixed_properties):
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (configure_logging):
        (configure_logging.LogHandler):
        (configure_logging.LogHandler.format):
        (parse_args):
        (TestImporter.__init__):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.remove_deleted_files):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):
        (TestImporterTest):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2013-06-27  Csaba Osztrogonác  <ossy@webkit.org>

        [webkitpy] AbstractPatchSequencingCommand should have _prepare_state
        https://bugs.webkit.org/show_bug.cgi?id=118128

        Reviewed by Ryosuke Niwa.

        It is a preparation for a new webkit-patch command: run-tests-touched-by-attachment
        https://bugs.webkit.org/show_bug.cgi?id=117831

        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchSequencingCommand):
        (AbstractPatchSequencingCommand._prepare_to_process): Call _prepare_state before prepare_steps.
        (AbstractPatchSequencingCommand._process_patch): Use the same initial state for each patch.
        (AbstractPatchSequencingCommand._prepare_state): Added.

2013-06-27  Brendan Long  <b.long@cablelabs.com>

        [Qt] Build overrides -j when given --makeargs="-sj40"
        https://bugs.webkit.org/show_bug.cgi?id=116897

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):
        Change regex checking for -j* to also check for -*j*

2013-06-27  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove [NoInterfaceObject] from WorkerGlobalScope
        https://bugs.webkit.org/show_bug.cgi?id=118071

        Reviewed by Kentaro Hara.

        Update bindings test script to pass 2 additional parameters
        now needed by the preprocess-idls.pl script.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-06-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Fixing some compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=117791

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Silenced format warning.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::globalObjectIsAvailableForFrame):
        Solved warning about uninitialized variable.

2013-06-27  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Fix bindings tests after r152080
        https://bugs.webkit.org/show_bug.cgi?id=118118

        Reviewed by Gyuyoung Kim.

        r152080 renamed argument to preprocess-idls.pl from --workerContextConstructorsFile
        to --workerGlobalScopeConstructorsFile. This patch updates to bindings test script
        accordingly.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-06-26  Carlos Garcia Campos  <cargarcia@blackberry.com>

        [BlackBerry] Handle testRunner.setCustomPolicyDelegate()
        https://bugs.webkit.org/show_bug.cgi?id=117982

        Reviewed by Rob Buis.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::DumpRenderTree): Initialize
        m_policyDelegateIsPermissive.
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        Reset m_policyDelegateIsPermissive.
        (BlackBerry::WebKit::DumpRenderTree::setCustomPolicyDelegate): Set
        m_policyDelegateIsPermissive.
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (BlackBerry::WebKit::DumpRenderTree::policyDelegateEnabled):
        Return whether custom policy is enabled.
        (BlackBerry::WebKit::DumpRenderTree::policyDelegateIsPermissive):
        Return whether custom policy is permissive.

2013-06-26  Anders Carlsson  <andersca@apple.com>

        Deprecate StringImpl::charactersWithNullTermination
        https://bugs.webkit.org/show_bug.cgi?id=118108

        Reviewed by Beth Dakin.

        Rename calls to charactersWithNullTermination to deprecatedCharactersWithNullTermination.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):

2013-06-26  Nico Weber  <thakis@chromium.org>

        Remove detect-mismached-virtual-const.
        https://bugs.webkit.org/show_bug.cgi?id=117999

        Reviewed by Anders Carlsson.

        Clang warns on mismatched virtual const, so there's no need for this
        script any more.

        * Scripts/detect-mismatched-virtual-const: Removed.

2013-06-26  Alex Christensen  <achristensen@apple.com>

        Added a code coverage report.
        https://bugs.webkit.org/show_bug.cgi?id=117941

        Reviewed by Joseph Pecoraro.

        * CodeCoverage: Added.
        * CodeCoverage/results-template.html: Added.
        * Scripts/generate-coverage-data: Generate and open the new report.

2013-06-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        gdb: Remove the webcore.py pretty printer.
        https://bugs.webkit.org/show_bug.cgi?id=117992

        Reviewed by Jochen Eisinger.

        webcore.py has been only a placeholder for backwards compatibility
        for almost 3 years. It should be safe enough to remove it now.

        * gdb/webcore.py: Removed.

2013-05-26  Peter Gal  <galpeter@inf.u-szeged.hu>

        Creating cURL watchlist and adding myself to it.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, change my email address for watch list.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-25  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Add a script to install dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=117968

        Reviewed by Christophe Dumez.

        Add a script which installs basic dependencies for building WebKit EFL.

        The dependencies are from the current EFLWebKit wiki page.
        After this patch is landed, the wiki page will be updated to use
        this script.

        * efl/install-dependencies: Added.

2013-06-24  Dean Jackson  <dino@apple.com>

        [Mac] Update font used for Chinese in test systems
        https://bugs.webkit.org/show_bug.cgi?id=117970

        Reviewed by Alexey Proskuryakov.

        Add "Songti TC" and "Songti SC" to the list of allowed fonts
        in DRT and WKTR.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):

2013-06-24  Tim Horton  <timothy_horton@apple.com>

        Make MiniBrowser paginated mode work with WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=117950

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController isPaginated]):
        (-[WK1BrowserWindowController togglePaginationMode:]):
        Hook up isPaginated and togglePaginationMode just as for WebKit2.

2013-06-24  David Kilzer  <ddkilzer@apple.com>

        bisect-builds: improve heuristic for choosing the next build after a broken build
        <http://webkit.org/b/117918>

        Reviewed by Simon Fraser.

        * Scripts/bisect-builds: When a build is broken, use a heuristic
        that "bisects" the left side or the right side of the remaining
        revisions to pick a revision that's sufficiently different from
        the revision of the broken build.  This heuristic assumes there
        is a sequential range of broken builds whenever one broken build
        is found.

2013-06-24  Chris Rogers  <crogers@google.com>

        WaveTable name has changed to PeriodicWave
        https://bugs.webkit.org/show_bug.cgi?id=117748

        Reviewed by Jer Noble.

        * Scripts/do-webcore-rename:

2013-06-22  Santosh Mahto  <santosh.ma@samsung.com>

        [EFL] Add support for MHTML save/load feature to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=106620

        Reviewed by Christophe Dumez.

        Enable CTRL + S as save page in mhtml and CTRL + L to load any page
        from filesystem.

        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (page_contents_callback):
        (on_key_down):
        (show_file_entry_dialog): generic function to show file enrty
        selector dialogue

2013-06-21  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed crash protection for DRT

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp: Check for null elements in routines
        to avoid crashing during test runs.

2013-06-21  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        REGRESSION (r150663): Using webkitAudioContext in Inspector makes it undefined everywhere
        https://bugs.webkit.org/show_bug.cgi?id=117825

        Reviewed by Kentaro Hara.

        DumpRenderTreeSupportEfl::setWebAudioEnabled() now requires an additional view argument.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):

2013-06-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Added support for aria-required attribute.
        https://bugs.webkit.org/show_bug.cgi?id=117730

        Reviewed by Chris Fleizach.

        Added support for testing aria-required attribute.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isRequired):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isRequired):

2013-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE][EFL] Enable DOM4 Events Constructor
        https://bugs.webkit.org/show_bug.cgi?id=117858

        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm: Enable the feature for the EFL port.

2013-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Handle testRunner.setWillSendRequestReturnsNull() in DRT
        https://bugs.webkit.org/show_bug.cgi?id=117827

        Reviewed by Rob Buis.

        Reset the passed in request if willSendRequestReturnsNull() is
        true or willSendRequestReturnsNullOnRedirect() is true and it's a
        redirection.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::willSendRequestForFrame):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:

2013-06-20  Csaba Osztrogonác  <ossy@webkit.org>

        Commit queue shouldn't reopen unrelated bugs because of flakiness
        https://bugs.webkit.org/show_bug.cgi?id=117503

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (_follow_duplicate_chain):
        (_update_bug_for_flaky_test):

2013-06-19  Brent Fulgham  <bfulgham@apple.com>

        [Windows] AX: Expand notification support.
        https://bugs.webkit.org/show_bug.cgi?id=117761

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isPressActionSupported): Provide implementation.
        (AccessibilityUIElement::press): Provide implementation.

2013-06-19  Benjamin Poulain  <bpoulain@apple.com>

        Use the PlatformEvent timestamp when creating a DOM Event
        https://bugs.webkit.org/show_bug.cgi?id=117179

        Reviewed by Darin Adler.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::keyDown):

2013-06-18  Alex Christensen  <achristensen@apple.com>

        Working on coverage script, added xml to json data extraction script.
        https://bugs.webkit.org/show_bug.cgi?id=117648

        This is part of a new test code coverage analysis tool.  This compiles WebKit to generate
        coverage data, runs the tests, and collects all of the data in json format.

        Reviewed by Stephanie Lewis.

        * Scripts/generate-coverage-data:
        (parseGcovrOutput):
        (getFileHitsAndBranches):
        (addLineCounts):
        (createResultName):
        * Scripts/webkitpy/tool/gcovr: Added.

2013-06-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix after r151699.

        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        Added include dir for InjectedBundleHitTestResultMediaType.h and WKBundleHitTestResult.h

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Replace tools32 folder with tools and update WebKit Windows solution accordingly.
        <rdar://problem/14118143>.

        Rubberstamped by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebug.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/record-memory/record-memory.vcxproj:
        * win/record-memory/record-memoryDebug.props:
        * win/record-memory/record-memoryDebugWinCairo.props:
        * win/record-memory/record-memoryProduction.props:
        * win/record-memory/record-memoryRelease.props:
        * win/record-memory/record-memoryReleaseWinCairo.props:

2013-06-17  Kangil Han  <kangil.han@samsung.com>

        Unreviewed. Add my email to a DOM watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip three WebKit2APITests suites that are currently timing out.

2013-06-15  Bruno de Oliveira Abinader  <brunoabinader@gmail.com>

        Unreviewed. Reorder my email addresses.
        https://bugs.webkit.org/show_bug.cgi?id=100122

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

2013-06-14  Enrica Casucci  <enrica@apple.com>

        WKPageFindStringMatches ignores the kWKFindOptionsBackwards option.
        https://bugs.webkit.org/show_bug.cgi?id=117647
        <rdar://problem/13881024>

        Reviewed by Darin Adler.
        
        The test now uses content with a selection and tests both
        forwards and backward find as well as the case of a find
        that has no matches after the user selection.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::didFindStringMatches):
        * TestWebKitAPI/Tests/WebKit2/findRanges.html: Added.

2013-06-14  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        Remove myself from Qt build system watchlist

        Reviewed by Simon Hausmann.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-13  Michael Brüning  <michael.bruning@digia.com>

        [Qt][Mac] Disable QTKit video on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=117591

        Reviewed by Tor Arne Vestbø.

        Deployment of Qt binaries to different Mac OS X
        platform version makes it impossible to link against
        the correct version of the WebKitSystemInterface library,
        so we need to disable QTKit for media elements.

        * qmake/mkspecs/features/features.prf:

2013-06-13  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Wrong context menu and popup menu positions when scroll is applied
        https://bugs.webkit.org/show_bug.cgi?id=116610

        Reviewed by Noam Rosenthal.

        Remove unnecessary code adjusting context menu position to webview position.
        Now position is calculcated in EwkView.

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

2013-06-12  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Turn on WinEWS test now that AppleWin port uses new-run-webkit-tests.

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

2013-06-12  Eduardo Lima Mitev  <elima@igalia.com>

        [atk] Replace deprecated call to atk_document_get_locale() in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=115647

        Reviewed by Martin Robinson.

        Locale resolution is moved to WebKitAccessibleWrapperAtk using
        AtkObject::get_object_locale() API. Now, implementation of
        AccessibilityUIElement::language() in both DumpRenderTree and WebKitTestRunner can
        be leveraged to get_object_locale() of AtkObject.

        Apart from improving encapsulation, this avoids calling deprecated get_document_locale()
        method.

        No new functionality, no new tests.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::language): Leverage locale resolution to
        AtkObject::get_object_locale().
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::language): Leverage locale resolution to
        AtkObject::get_object_locale().

2013-06-12  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Remove last bits of GYP from build-webkit and update-webkit scripts
        https://bugs.webkit.org/show_bug.cgi?id=117557

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * Scripts/update-webkit:

2013-06-12  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Remove forgotten unused Tools/Script/make-gypi script
        https://bugs.webkit.org/show_bug.cgi?id=117558

        Reviewed by Ryosuke Niwa.

        This script isn't used since the GYP removal from WebKit.

        * Scripts/make-gypi: Removed.

2013-06-12  Andres Gomez  <agomez@igalia.com>

        [GTK] MiniBrowser to automatically download "non-showable" documents when left click in link
        https://bugs.webkit.org/show_bug.cgi?id=117533

        Reviewed by Carlos Garcia Campos.

        MiniBrowser now starts automatically the download of the documents
        that cannot be shown just by WebKit itself on link left clicking.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy): handled the
        WEBKIT_POLICY_DECISION_TYPE_RESPONSE decision type too.

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove the WebCoreLayer(Gtk2).a archives before regenerating them
        https://bugs.webkit.org/show_bug.cgi?id=116723

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/GNUmakefile.am: When generating the WebCoreLayer.a archive from all the dependency archives,
        remove the current archive (if any). Updating an existent archive in an incremental build is not bulletproof
        and can lead to corrupt archives and subsequent build failures. On the other hand, the archive generation is
        not expensive and produces a working archive without problems even on incremental builds.

2013-06-11  Santosh Mahto  <santosh.ma@samsung.com>

        [EFL] Window resize should close the popupmenu
        https://bugs.webkit.org/show_bug.cgi?id=117391

        Reviewed by Christophe Dumez.
        
        Added the code to close the popup when main window is resized.

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

2013-06-11  Alex Christensen  <achristensen@apple.com>

        Removed old broken code coverage tool.
        https://bugs.webkit.org/show_bug.cgi?id=117520

        Reviewed by Sam Weinig.

        * CodeCoverage: Removed.
        * CodeCoverage/README: Removed.
        * CodeCoverage/amber.png: Removed.
        * CodeCoverage/cov.py: Removed.
        * CodeCoverage/emerald.png: Removed.
        * CodeCoverage/gcov.css: Removed.
        * CodeCoverage/glass.png: Removed.
        * CodeCoverage/regenerate-coverage-display: Removed.
        * CodeCoverage/ruby.png: Removed.
        * CodeCoverage/run-generate-coverage-data: Removed.
        * CodeCoverage/snow.png: Removed.

2013-06-11  Timothy Hatcher  <timothy@apple.com>

        Have build-webkit build the WebInspectorUI project.

        * Scripts/build-webkit:

2013-06-11  Ryosuke Niwa  <rniwa@webkit.org>

        Add an option to run-webkit-tests to skip java dependency check
        https://bugs.webkit.org/show_bug.cgi?id=117516

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/mac.py:
        (MacPort._check_port_build):

2013-06-11  Alex Christensen  <achristensen@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=117514
        Removed extra Xcode code coverage flags.

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (XcodeCoverageSupportOptions):

2013-06-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Implement 'attributeValue' accessor to support testing
        https://bugs.webkit.org/show_bug.cgi?id=117513

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (comparableObject): Move earlier in file.
        (findAccessibleObjectById): New implemenation.
        (AccessibilityController::accessibleElementById): New implementation.

2013-06-11  Csaba Osztrogonác  <ossy@webkit.org>

        Make WTR use its own temporary directory for application cache
        https://bugs.webkit.org/show_bug.cgi?id=117143

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2013-06-10  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=117449
        Remove dead code for storing fonts in __DATA section

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Don't copy font resources to __DATA, as we don't have any code that reads them
        from there (previously removed due to being under "defined(BUILDING_ON_LEOPARD)").

        * DumpRenderTree/mac/DumpRenderTree.mm: (activateTestingFonts):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm: (WTR::activateFonts):
        Removed comments suggesting that we want to restore the old solution.

2013-06-10  Bear Travis  <betravis@adobe.com>

        [CSS Shapes][CSS Exclusions] Split CSS Exclusions and CSS Shapes code
        https://bugs.webkit.org/show_bug.cgi?id=117162

        Reviewed by Alexandru Chiculita.

        Adding the WebCore/rendering/shapes directory to the include list.

        * DumpRenderTree/efl/CMakeLists.txt:

2013-06-09  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed test correction:  Prevent DumpRenderTree crashes
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::role): Prevent crashes when m_element is null. This
        happends in some of the 'accessibility' test cases.

2013-06-08  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] TestWebKitAPI fails to link.
        https://bugs.webkit.org/show_bug.cgi?id=117345

        Reviewed by Brent Fulgham.

        Need to link with WTF.lib.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props: Link with WTF.lib.

2013-06-07  Roger Fong  <roger_fong@apple.com>

        Get rid of not very helpful test that fails only on some machines because xcrun is not installed.

        Rubberstamped by Ryousuke Niwa.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_build_check):

2013-06-07  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt] Remove Qt bits from Scripts/webkitperl/FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=117315

        Reviewed by Benjamin Poulain.

        Qt doesn't use the default values specified on FeatureList since r44681,
        this patch just remove a bit of noise.

        * Scripts/webkitperl/FeatureList.pm:

2013-06-07  Jungsik Tae  <davidtlay88@gmail.com>

        [EFL] Implement colorpicker for HTML5 input type color on Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=115890

        Reviewed by Christophe Dumez.

        When user clicks HTML5 input type color,
        color selector window is created on browser object by using elm_colorchooser_add().
        It can listen a signal dismissing colorpicker by calling the ewk_color_picker_color_set().
        The evas_object_color_set() sets a color value returning to browser.

        * MiniBrowser/efl/main.c:
        (window_free): When we delete parent window, deleting the colorpicker object.
        (on_color_changed): Change color of rectangle to show color selected by user.
        (on_color_item_selected): Change color of rectangle when clicked color palettes offered by elm_color_chooser().
        (on_color_picker_ok_clicked): Call on_colorpicker_dismiss() and set the color.
        (on_color_picker_cancel_clicked): Get a preexisting color and call ewk_color_picker_color_set().
        (on_color_picker_dismiss): Delete colorpicker object.
        (on_color_picker_request): Create colorpicker window object.
        (window_create):

2013-06-06  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        svn-apply cannot apply patches which is generated by git to files that contain space characters in their path
        https://bugs.webkit.org/show_bug.cgi?id=111066

        Reviewed by Daniel Bates.

        Fixes an issue where parseGitDiffHeader() would extract the wrong substring of the diff --git line as the target file path when the source file path contains a space character.

        ParseGitDiffHeader() should support the path which line has space characters.
        To support this, I changed parsing algorithm like the following:
        - When the diff have prefix, we consider next characters after "b/" as part of a file path.
        - When the diff have no prefix, we assume that both path have same directory prefix, and we split the diff line using the prefix.

        We only support --src-prefix and --dst-prefix don't contain a non-word character (\W) and end with '/' because we cannot distinguish the prefix from directory path.

        If the path has a tab, the patch(1) command thinks file path is characters before the tab.
        I added a dummy tab and revision when we convert git diff to svn diff.

        * Scripts/VCSUtils.pm:
        (parseGitDiffHeader):
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Update expectations for dummy revision.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl: Ditto.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl: Ditto.
          - Added test case for files which have space in their path and --src-prefix and --dst-prefix option.

2013-06-06  Simon Fraser  <simon.fraser@apple.com>

        Add a menu item to MiniBrowser to toggle Transparent windows
        https://bugs.webkit.org/show_bug.cgi?id=117316

        Reviewed by Anders Carlsson.
        
        Add a menu item that toggles "Transparent window" mode, which is exposed
        via private WebKit API and WebKit2 API.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController toggleTransparentWindow:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController toggleTransparentWindow:]):
        (-[WK2BrowserWindowController dumpSourceToConsole:]): Fix a crash that was seen
        when testing.

2013-06-06  Roger Fong  <roger_fong@apple.com>

        Stop copying AAS binaries into build folder.
        https://bugs.webkit.org/show_bug.cgi?id=117319.

        Rubberstamped by Darin Adler.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd:

2013-06-06  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Aligning build-webkit command line switch names to the WebKit flag names
        https://bugs.webkit.org/show_bug.cgi?id=117254

        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm: Rename some command line switches.

2013-06-06  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS ignores ARIA progressbar elements
        https://bugs.webkit.org/show_bug.cgi?id=116727

        Reviewed by David Kilzer.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):

2013-06-06  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Fix build-webkit to build WinCairo under VS2010.
        https://bugs.webkit.org/show_bug.cgi?id=117255

        Reviewed by Daniel Bates.

        Need to update configuration names according to solution file.

        * Scripts/webkitdirs.pm:
        (determineConfiguration):
        (determinePassedConfiguration):

2013-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        Remove run-performance-tests
        https://bugs.webkit.org/show_bug.cgi?id=117285

        Reviewed by Andreas Kling.
        
        Remove the script since it's not used anywhere.

        * BuildSlaveSupport/run-performance-tests: Removed.

2013-06-05  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions][CSS Shapes] Split CSS Exclusions & Shapes compile & runtime flags
        https://bugs.webkit.org/show_bug.cgi?id=117172

        Reviewed by Alexandru Chiculita.

        Adding the CSS_SHAPES compile flag.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-06-05  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix. Add CRLF eol-style for DOS shell scripts; if they accidentally change
        to UNIX-style they will not execute properly.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Added property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd: Added property svn:eol-style.

2013-06-05  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix. Don't pass in --use-remote-links argument on Windows now that we use NRWT.

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

2013-06-05  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Switch to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=117200

        Reviewed by Anders Carlsson.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests): No longer use old-run-webkit-tests for Windows port.

2013-06-05  Dominik Röttsches  <dominik.rottsches@intel.com>

        Unreviewed name fix after r150662

        My firstname got duplicated when fixing bug 116737.

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

2013-06-05  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Use WEBKITOUTPUTDIR if WEBKIT_OUTPUTDIR is not present.
        https://bugs.webkit.org/show_bug.cgi?id=117244

        Reviewed by Daniel Bates.

        Fixed a regression introduced by r151196: not only does webkit.org
        still mention WEBKITOUTPUTDIR instead of WEBKIT_OUTPUTDIR, but the
        infrastructure used by ports such as GTK+ and EFL also use on it for
        things such as jhbuild.

        While everything is not fully transitioned to WEBKIT_OUTPUTDIR, read
        both environment variables.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2013-06-05  Wojciech Bielawski  <w.bielawski@samsung.com>

        [GTK] Forwarding headers not generated for incremental build
        https://bugs.webkit.org/show_bug.cgi?id=117198

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/GNUmakefile.am: libTestRunnerInjectedBundle added to dependencies.

2013-06-05  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix layout testing with Qt 5.1
        https://bugs.webkit.org/show_bug.cgi?id=117203

        Reviewed by Jocelyn Turcotte.

        With Qt 5.1 synchronous requests via QNetworkAccessManager do not
        go into loading state but directly call handler functions for
        finished state instead of relying on a connection.
        Our wrapper QQuickView uses a data URI scheme to create the root
        item for testing which results in a synchronous request when loading
        the QML data, therefore the state of the QQuickWindow immediately
        becomes Ready.
        Since the final initialization of the root item depended on the
        emission of QQuickView::statusChanged(QQuickView::Ready) we ended
        up with a partially initialized wrapper window, thus most of our
        layout tests were failing.
        For compatibility with pre-5.1 Qt versions keep the old behaviour
        in case the WrapperWindow is not ready in the constructor yet.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        * TestWebKitAPI/qt/PlatformWebViewQt.cpp:
        (TestWebKitAPI::WrapperWindow::WrapperWindow):

2013-06-05  Dariusz Frankiewicz  <d.frankiewic@samsung.com>

        Bad value in tests counter at new-run-webkit-tests
        in --debug-rwt-logging mode
        https://bugs.webkit.org/show_bug.cgi?id=116858

        Reviewed by Dirk Pranke.

        Fix by moving counter incrementation, from after printing line,
        to before printing. Also changed variable name.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.__init__):
        (Printer._test_status_line):
        (Printer.print_started_test):
        (Printer.print_finished_test):
        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer.print_finished_test):
        (Printer._test_line):
        (Printer.print_result):

2013-06-05  Zan Dobersek  <zdobersek@igalia.com>

        Move MemoryInfo under window.internals
        https://bugs.webkit.org/show_bug.cgi?id=117197

        Reviewed by Ryosuke Niwa.

        * GNUmakefile.am: Add the testing/MemoryInfo.(h|idl) files and the generated targets to
        the Automake build
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl: List the
        testing/MemoryInfo.idl file instead of page/MemoryInfo.idl.

2013-06-03  Roger Fong  <roger_fong@apple.com>

        Remove uses of VS2005 scripts, executables and associated environment variables from scripts.
        <rdar://problem/14042021>.

        Reviewed by Brent Fulgham.

        * Scripts/build-api-tests:
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/update-webkit-dependency:
        * Scripts/update-webkit-support-libs:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (setupAppleWinEnv):
        (setupCygwinEnv):

2013-06-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT is not putting crash logs in proper place (corrections)
        https://bugs.webkit.org/show_bug.cgi?id=117212

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.__init__): Accept a result directory argument in constructor.
        (CrashLogs.find_newest_log): Don't require 'port' argument anymore.
        (CrashLogs._find_newest_log_win): No longer use 'port' argument.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_win): Simplify test.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids): Handle "win32" case separately from "cygwin" case.
        * Scripts/webkitpy/port/win.py:
        (WinPort._get_crash_log): No longer require 'port' argument.

2013-06-04  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r150592. We need to disable \2 shouldn't be treated as an escape character.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2013-06-04  Greg Hughes  <ghughes@apple.com>

        Add "VisibleOnly" key to search predicate
        https://bugs.webkit.org/show_bug.cgi?id=115491

        Reviewed by Chris Fleizach.

        Added support for accessibility clients to use the search predicate to find only visible elements

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2013-06-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix.  The last check-in lost CR/LF endings on the batch file,
        causing build failure.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Revert to
        DOS-style CR/LF endings.

2013-06-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed test correction.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Also copy the
        QuartzCore dll's, which are needed by TestWebKitAPI.
        * TestWebKitAPI/win/main.cpp: Declare proper manfifest dependencies to ensure TestWebKitAPI built
        with VS2010 will run when linked against VS2005 support libraries.

2013-06-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Automatically generate WorkerContext constructor attributes
        https://bugs.webkit.org/show_bug.cgi?id=117183

        Reviewed by Kentaro Hara.

        Pass new --workerContextConstructorsFile to preprocess-idl.pl for bindings
        tests.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-06-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] File dialog of MiniBrowser have broken background.
        https://bugs.webkit.org/show_bug.cgi?id=117189

        Reviewed by Christophe Dumez.

        * MiniBrowser/efl/main.c:
        (on_file_chooser_request): Added elm_bg for elm_win of file chooser.

2013-06-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [WKTR][WTK] Undefined symbols in libTestRunnerInjectedBundle.so after r151124
        https://bugs.webkit.org/show_bug.cgi?id=117184

        Reviewed by Gyuyoung Kim.

        Add ATK stubs for mathPostscriptsDescription() and mathPrescriptsDescription() so
        that we don't have undefined symbols in libTestRunnerInjectedBundle.so.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):

2013-06-03  Simon Pena  <simon.pena@samsung.com>

        validate-committer-lists script is now outdated and does not work
        https://bugs.webkit.org/show_bug.cgi?id=115860

        Reviewed by Brent Fulgham.

        The script validate-committer-lists was outdated, still using the deprecated log
        system and having the old addresses for the mailing lists, as well as still referring
        to committers.py, after this was renamed to contributors.json. This patch fixes that
        so it can be used again.

        * Scripts/validate-committer-lists: Replace calls to log and error with the
        new logging mechanism, fix the URLs for the mailing lists, and fix the mentions
        to committers.py, which should be contributors.json.
        (CommitterListFromMailingList):
        (CommitterListFromMailingList.check_for_emails_missing_from_list):
        (CommitterListFromGit._fetch_authors_and_last_commit_time_from_git_log):
        (CommitterListFromGit._fill_in_emails_for_old_logins):
        (CommitterListFromGit.print_committers_missing_from_committer_list):

2013-06-03  Dirk Pranke  <dpranke@chromium.org>

        add a script to dump the tests run most recently by a given worker
        https://bugs.webkit.org/show_bug.cgi?id=116571

        Reviewed by Brent Fulgham.

        The tests_run*.txt results files in layout-test-results/ were removed
        in r137356, in favor of collecting more data about how the tests were
        run and compressing it and storing it in stats.json. However, it was
        nice to just be able to look at a flat text file.

        This script will extract the tests run by a given worker from a
        given stats.json file, and should help to address that.

        * Scripts/dump-webkit-tests-run: Added.
        (main):
        (convert_trie_to_flat_paths):

2013-06-03  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT is not putting crash logs in proper place
        https://bugs.webkit.org/show_bug.cgi?id=117098

        Reviewed by Ryosuke Niwa.

        Provide windows-specific overloads for various Port features needed to create and capture
        crash logs.  This change makes it possible to view crash logs (when created) as part of the
        summary report at the end of the NRWT run.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_newest_log): Add support for win32 crash logs
        (CrashLogs._find_newest_log_win): Added
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (make_mock_crash_report_win): Added
        (CrashLogsTest.test_find_log_win): Added.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids): Add support for Cygwin win32 crash logs
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.__init__):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_and_write_file): Add tests for
        malformed ascii/utf8 handling (i.e., Windows log files)
        * Scripts/webkitpy/port/base.py:
        (Port.find_system_pid): Added
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._start): Gather windows PIDs to match up with Cygwin PIDs
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_crash_log_saving): Don't open windows shell (which might get stuck waiting
        for user to hit enter.
        (WinPort._get_crash_log): Added
        (WinPort.look_for_new_crash_logs): Added
        (WinPort.find_system_pid): Added
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_get_crash_log): Added test

2013-06-03  Eduardo Lima Mitev  <elima@igalia.com>

        [EFL] Add ATK version 2.8.0 to efl jhbuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=116726

        Reviewed by Gyuyoung Kim.

        Current version of ATK in efl-ews environment is 2.4.0 and is taken from
        the platform (it is not listed in jhbuild moduleset). That version is
        old-ish and contain deprecated symbols and missing API, that are blocking
        patches in other ports (gtk). This patch adds ATK version 2.8.0 to efl
        moduleset, which is the same version the gtk port uses.

        See bug https://bugs.webkit.org/show_bug.cgi?id=115647 for more details on
        why this is needed.

        * efl/jhbuild.modules: Adds ATK module as dependency

2013-06-03  Erik van Pienbroek  <epienbro@fedoraproject.org>

        [GTK] Respect PKG_CONFIG env variable when generating gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=117168

        Reviewed by Martin Robinson.

        The tool generate-gtkdoc internally calls pkg-config.
        When cross-compiling it shouldn't use pkg-config, but
        it should use the pkg-config which was detected by
        the ./configure script (for example this can be
        i686-w64-mingw32-pkg-config when cross-compiling)

        * GNUmakefile.am:
        * gtk/gtkdoc.py:
        (PkgConfigGTKDoc.__init__):

2013-06-03  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix.

        * TestWebKitAPI/win/main.cpp: Embed proper manifest information to
        allow VS2010 builds to use VS2005 runtime libraries as needed.

2013-06-03  Roger Fong  <roger_fong@apple.com>

        Nuke VS2005 files from the tree.
        <rdar://problem/14042021>.

        Rubberstamped by Brent Fulgham.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebug.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugAll.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPostBuild.cmd: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPreBuild.cmd: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/resource.h: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Removed.
        * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeDebug.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeDebugAll.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncher.vcproj: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherCommon.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebug.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugAll.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherProduction.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherRelease.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd: Removed.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Removed.
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiff.vcproj: Removed.
        * DumpRenderTree/win/ImageDiffCommon.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffDebug.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffDebugAll.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncher.vcproj: Removed.
        * DumpRenderTree/win/ImageDiffLauncherCommon.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherDebug.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherDebugAll.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherProduction.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherRelease.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffPostBuild.cmd: Removed.
        * DumpRenderTree/win/ImageDiffPreBuild.cmd: Removed.
        * DumpRenderTree/win/ImageDiffProduction.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffRelease.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Removed.
        * Scripts/pdevenv: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Removed.
        * TestWebKitAPI/win/TestWebKitAPIPostBuild.cmd: Removed.
        * TestWebKitAPI/win/TestWebKitAPIPreBuild.cmd: Removed.
        * WebKitLauncherWin: Removed.
        * WebKitLauncherWin/Resource.h: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.cpp: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.rc: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj: Removed.
        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinDebug.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinDebugAll.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinDebugCairoCFLite.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops: Removed.
        * WebKitLauncherWin/webkit.ico: Removed.
        * WinLauncher/WinLauncher.ico: Removed.
        * WinLauncher/WinLauncher.rc: Removed.
        * WinLauncher/WinLauncher.vcproj: Removed.
        * WinLauncher/WinLauncherCommon.vsprops: Removed.
        * WinLauncher/WinLauncherDebug.vsprops: Removed.
        * WinLauncher/WinLauncherDebugAll.vsprops: Removed.
        * WinLauncher/WinLauncherDebugCairoCFLite.vsprops: Removed.
        * WinLauncher/WinLauncherLauncher.rc: Removed.
        * WinLauncher/WinLauncherLauncher.vcproj: Removed.
        * WinLauncher/WinLauncherLauncherCommon.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherDebug.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherDebugAll.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherProduction.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherRelease.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherReleaseCairoCFLite.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherResource.h: Removed.
        * WinLauncher/WinLauncherPostBuild.cmd: Removed.
        * WinLauncher/WinLauncherPreBuild.cmd: Removed.
        * WinLauncher/WinLauncherProduction.vsprops: Removed.
        * WinLauncher/WinLauncherRelease.vsprops: Removed.
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops: Removed.
        * WinLauncher/small.ico: Removed.
        * record-memory-win: Removed.
        * record-memory-win/main.cpp: Removed.
        * record-memory-win/record-memory-win-common.vsprops: Removed.
        * record-memory-win/record-memory-win.vcproj: Removed.
        * record-memory-win/record-memory-winDebug.vsprops: Removed.
        * record-memory-win/record-memory-winDebugAll.vsprops: Removed.
        * record-memory-win/record-memory-winDebugCairoCFLite.vsprops: Removed.
        * record-memory-win/record-memory-winProduction.vsprops: Removed.
        * record-memory-win/record-memory-winRelease.vsprops: Removed.
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops: Removed.

2013-06-03  Chris Fleizach  <cfleizach@apple.com>

        AX: MathML multiscripts not exposed in Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=115069

        Reviewed by Tim Horton.

        Add methods to help output components of math multiscripts for accessibility.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (mathPostscriptsDescriptionCallback):
        (mathPrescriptsDescriptionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (convertMathMultiscriptPairsToString):
        (AccessibilityUIElement::mathPostscriptsDescription):
        (AccessibilityUIElement::mathPrescriptsDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::_convertMathMultiscriptPairsToString):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):

2013-06-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r151109.
        http://trac.webkit.org/changeset/151109
        https://bugs.webkit.org/show_bug.cgi?id=117145

        "Plugins in WK2 aren't implemented yet." (Requested by
        jturcotte on #webkit).

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-05-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Re-enable plugins on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=116622

        Reviewed by Tor Arne Vestbø.

        Plugins on Mac were only enabled if !embedded but the later was set if
        QPA is enabled, which is the default since Qt 5.0.

        Remove references to 'embedded' and fix various build issues,
        PluginViewMac.mm and PluginPackageMac.cpp haven't been compiled since a few
        months.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-06-03  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][WK2] accessibility/placeholder.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=106344

        Reviewed by Gyuyoung Kim.

        Adds support for retrieving attribute value.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::coreAttributeToAtkAttribute):
        (WTR::AccessibilityUIElement::stringAttributeValue):

2013-06-01  Tim Horton  <timothy_horton@apple.com>

        Add a preferred email address and "expertise" for me.

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

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Make windows test bots search in the correct directory for build output.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start):
        * Scripts/webkitdirs.pm:
        (determineConfigurationProductDir):

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix...

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

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix. One more time!

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

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix.

        * Scripts/build-webkit:

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix.

        * Scripts/build-webkit:

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Make build-webkit output VCExpress 2010 build logs properly.
        https://bugs.webkit.org/show_bug.cgi?id=117096

        Reviewed by Brent Fulgham.

        Make it so that output from VCExpress is always printed to console.
        Get build log results from AssembleBuildLogs project output.
        We don't need those old VCExpress scripts anymore either. 

        * Scripts/build-webkit:
        * Scripts/print-msvc-project-dependencies: Removed.
        * Scripts/print-vse-failure-logs: Removed.

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Use WinLauncher to display LayoutTest results
        https://bugs.webkit.org/show_bug.cgi?id=117085

        Reviewed by Oliver Hunt.

        * Scripts/webkitdirs.pm:
        (runSafari): Use WinLauncher to display content
        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Check for URL argument.

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Modify AssembleBuildLogs project to WebKit solution in preparation for moving buildbots to VCExpress 2010.

        * win/AssembleBuildLogs/AssembleLogs.cmd:

2013-05-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r151022.
        http://trac.webkit.org/changeset/151022
        https://bugs.webkit.org/show_bug.cgi?id=117084

        Also breaks build by introducing duplicate symbols (Requested
        by bfulgham on #webkit).

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix to NRWT

        * Scripts/webkitpy/port/win.py:
        (WinPort.create_debugger_command_file): Use proper argument for _filesystem.write_text_file.

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix after r151012

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Add dependency on
        WTF library to support SHA tests

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix after r151012

        * TestWebKitAPI/Tests/WTF/MD5.cpp: Include <wtf/StringExtras.h> to provide
        snprintf definition for Windows.

2013-05-31  Zan Dobersek  <zdobersek@igalia.com>

        Move MD5, SHA1 unit tests from WTF to TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=116445

        Reviewed by Benjamin Poulain.

        Add the MD5 and SHA1 unit tests that were previously located inside WTF.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MD5.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::expectMD5):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/SHA1.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::expectSHA1):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTF.pro:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2013-05-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build correction.

        * Scripts/webkitpy/port/win.py:
        (WinPort.create_debugger_command_file): The directory needs to be
        a string, not a temporary directory object.

2013-05-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT doesn't save crash logs on Apple's Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=76935

        Reviewed by Ryosuke Niwa.

        Extend the WinPort class with commands to set and clean up various registry
        values needed to invoke the correct debugger to get crash files.

        * Scripts/webkitpy/port/win.py:
        (WinPort): Added global caches for registry keys and settings
        (WinPort._ntsd_location): Added
        (WinPort.create_debugger_command_file): Added
        (WinPort.read_registry_string): Added
        (WinPort.write_registry_string): Added
        (WinPort.setup_crash_log_saving): Added
        (WinPort.restore_crash_log_saving): Added
        (WinPort.setup_test_run): Added overload to add registry settings.
        (WinPort.clean_up_test_run): Added overload to clean up registry settings.

2013-05-30  Roger Fong  <roger_fong@apple.com>

        Get rid of JavaScript exports file on AppleWin port.
        https://bugs.webkit.org/show_bug.cgi?id=117050.

        Reviewed by Darin Adler.

        Start linking in WTF.lib now that it's a shared library.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props:

2013-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: tests in PerformanceTests/inspector/ are timing out
        https://bugs.webkit.org/show_bug.cgi?id=77024

        Reviewed by Andreas Kling.

        Remove inspector performance tests since they have been disabled for ages,
        and they don't use the standard parser-style performance output.

        It's adding a lot of code complexity to our infrastructure.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (SingleProcessPerfTest.__init__):
        (PerfTestFactory):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestFactory.test_regular_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (TestDriver.run_test):
        (MainTest.run_test):
        (MainTest._tests_for_runner):
        (MainTest.test_run_test_set_kills_drt_per_run):
        (MainTest._test_run_with_json_output):
        (MainTest):
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json):

2013-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove requires_http_server as Chromium Android was the only port that needed this
        https://bugs.webkit.org/show_bug.cgi?id=117018

        Reviewed by Benjamin Poulain.

        Removed the unused code that existed for Chromium Android port.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._handle_finished_test_list):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        * Scripts/webkitpy/port/base.py:
        (Port.to.start_helper):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_path):

2013-05-29  Ruth Fong  <ruth_fong@apple.com>

        prepare-Changelog should not be generating namespace-only or class-name-only lines like "(WebCore):"
        https://bugs.webkit.org/show_bug.cgi?id=113221

        Reviewed by Ryosuke Niwa.

        Teach prepare-Changelog to not list the names of modified namespaces, 
        classes, or structs in C++ files. Thus, if a change is made 
        within a namespace/class/struct yet outside a function, it will 
        not be reflected in the ChangeLog entry. 
        See https://bugs.webkit.org/show_bug.cgi?id=113221#c8 
        for more details on how ChangeLog entries are affected.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): 
        (delete_namespaces_from_ranges_for_cpp): Added.
        (is_function_in_namespace): Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt: Updated
        to reflect revised definition of a function (i.e. excludes namespaces, classes, structs)

2013-05-29  Praveen R Jadhav  <praveen.j@samsung.com>

        Cleanup AudioSourceNode.idl from WebKit build.
        https://bugs.webkit.org/show_bug.cgi?id=116905.

        Reviewed by Darin Adler.

        AudioSourceNode.idl is not part of WebAudio Specifications anymore.
        AudioNode is inherited directly in all the audio source nodes.

        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:

2013-05-29  Andrew Lo  <anlo@rim.com>

        Add Andrew Lo to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=116981

        Reviewed by Rob Buis.

        Adding Andrew Lo to contributors.json.

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

2013-05-29  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Unreviewed. Adding myself as a committer.

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

2013-05-29  Marcelo Lira  <marcelo.lira@openbossa.org>

        [WK2][CoordinatedGraphics][EFL] WKViewUserViewportToContents() function doesn't do what it says
        https://bugs.webkit.org/show_bug.cgi?id=116683

        Reviewed by Noam Rosenthal.

        A coordinates conversion test for WKViewUserViewportToContents was
        added to WebKit2 API tests.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2013-05-29  Yong Li  <yong.li.webkit@outlook.com>

        Unreviewed. Update my info.

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

2013-05-29  Dongseong Hwang  <dongseong.hwang@intel.com>

        Unreviewed. Add myself as committer in contributors.json.

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

2013-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * TestWebKitAPI/GNUmakefile.am: Add WebCoreLayer.a to
        DISTCLEANFILES.

2013-05-29  Mary Wu  <mawu@blackberry.com>

        Unreviewed: update my email address in contributors.json.

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

2013-05-29  Kalyan Kondapally  <kalyan.kondapally@intel.com>

        Unreviewed: Adding myself to committers list.

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

2013-05-28  Arpita Bahuguna  <a.bah@samsung.com>

        Unreviewed: Adding myself to committers list.

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

2013-05-28  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Many CSS2.1 tests fail under NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=75707

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback): Added
        (addFontFallbackIfPresent): Added
        (removeFontFallbackIfPresent): Added
        (runTest): Set up/remove font fallbacks when needed.

2013-05-28  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT reports failure for 'mac' test cases.
        https://bugs.webkit.org/show_bug.cgi?id=116698

        Reviewed by Ryosuke Niwa.

        The Windows port falls back to the Mac port for many test results,
        and so adds the mac and mac-wk2 to its set of fallbacks.
        Unfortunately, NRWT thinks that this means that tests in these
        folders should be executed, resulting in many failures on
        Windows.

        This change overloads the '_tests_for_other_platforms' method
        to return a subset of the result fallback list so that we do
        not attempt to execute Mac tests on Windows.

        * Scripts/webkitpy/port/base.py:
        (Port.test_search_path): Added. Defaults to just calling the
        baseline_search_path method, which is how most ports behave.
        (Port._test_for_other_platforms): Modified to call the new
        test_search_path method.

        * Scripts/webkitpy/port/win.py:
        (WinPort.test_search_path): Added custom overload. Strips
        out mac-specific test paths.

2013-05-28  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ CMake build

        * MiniBrowser/gtk/CMakeLists.txt: After r150336, the name of the WebKit2
        library target is simply "WebKit2."

2013-05-28  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Explicitly specify the reference file extensions
        https://bugs.webkit.org/show_bug.cgi?id=116333

        Reviewed by Benjamin Poulain.

        Explicitly specify the extensions that are valid for the reference files. This helps to differentiate
        between valid reference files required by reftests and text baselines that have the same extension as
        potential test files (specifically the current MHTML tests in the .mht files and the future .mht baselines
        that were until this change recognized as reference files).

        Covered by existing tests and the new test_is_reference_html_file test in webkitpy.port.base_unittest.

        * Scripts/webkitpy/port/base.py:
        (Port.reference_files): Iterate through the _supported_reference_extensions set.
        (Port): Rename the _supported_file_extensions set to _supported_test_extensions. Add the
        _supported_reference_extensions set, containing the extensions allowed for reference files.
        (Port.is_reference_html_file): Return False if the file's extension is not a supported reference file extension.
        (Port._has_supported_extension): Use _supported_test_extensions.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_is_reference_html_file): Add the unit test, testing various test cases around the
        Port.is_reference_html_file method.

2013-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another WKR build fix. Sorry for the mess. It seems like I can't win today :(

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        WKR and webkitbot build fixes.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS.execute):
        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        roll-chromium-deps doesn't repeat the full name.

        Rubber-stamped by Andreas Kling.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS.execute):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Revert another erroneous change.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Revert an erroneous change.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Some build fixes for WKR and webkitbot.

        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help):
        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (Agent):
        (Agent.__init__):
        (Agent.name):
        (NewCommitBot):
        (NewCommitBot.begin_work_queue):
        (NewCommitBot.next_work_item):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Teach webkitbot and WKR how to respond to yt?
        https://bugs.webkit.org/show_bug.cgi?id=116775

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi): Fixed the usage string.
        (Hi.execute): Made it more generic so that it works in WKR.
        (YouThere): Added.
        (YouThere.execute): Added.
        * Scripts/webkitpy/tool/commands/newcommitbot.py:

2013-05-25  Simon Fraser  <simon.fraser@apple.com>

        Try to fix the EFL build.
        
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setPageVisibility):

2013-05-25  Simon Fraser  <simon.fraser@apple.com>

        Unprefix Page Visibility API
        https://bugs.webkit.org/show_bug.cgi?id=102340

        Reviewed by Tim Horton.
        
        Rename "preview" state to "unloaded" state, and adjust the tests
        to test for it.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setPageVisibility):
        * TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp:
        (TestWebKitAPI::setPageVisibilityStateWithEvalContinuation):
        (TestWebKitAPI::didRunStep2StateChangeHiddenToPrerender):
        (TestWebKitAPI::didRunStep3StateChangePrerenderToUnloaded):
        (TestWebKitAPI::didRunStep4InStateUnloaded):
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.html:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPageVisibility):

2013-05-24  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix. Don't use new NRWT logic needed
        by Windows yet. Activate (and fix test) when we cut over.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        (Driver._start):

2013-05-24  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Expose database storage and cache locations via preferences.
        https://bugs.webkit.org/show_bug.cgi?id=116729

        Reviewed by Tim Horton.

        Update DumpRenderTree to use CFPreferences to control where WebKit
        stores its local databases, URL caches, etc.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree): Added.
        (dllLauncherEntryPoint): Set up DRT-specific cache locations.
        * Scripts/webkitpy/port/base.py:
        (Port._driver_tempdir): Added (to allow port-specific overload).
        (Port._driver_tempdir_for_environment): Ditto
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Use new overload to set
        environment variable.
        (Driver._start): Use new overload for temp directory location.
        * Scripts/webkitpy/port/win.py:
        (WinPort._driver_tempdir_for_environment): New overload to supply
        Windows path to DumpRenderTree environment (while still using
        cygwin paths for internal operations.

2013-05-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove custom code for webkitAudioContext global constructor getter
        https://bugs.webkit.org/show_bug.cgi?id=116530

        Reviewed by Geoffrey Garen.

        Update EFL's DumpRenderTree to use DumpRenderTreeSupport to toggle
        WebAudio feature instead of public ewk_view API since that API was
        removed.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):

2013-05-24  Bem Jones-Bey  <bjonesbe@adobe.com>

        Make team.html have each contributor's area of expertise
        https://bugs.webkit.org/show_bug.cgi?id=116737

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/common/config/contributors.json:
        Add expertise to each contributor, taken from http://trac.webkit.org/wiki/WebKit%20Team
        
        Changed formatting of the file because the lines are getting way to
        long, and I generated this, so it's easier if the formatting of the
        file is regular.

2013-05-24  Simon Pena  <simon.pena@samsung.com>

        Update WTF::Vector pretty printers
        https://bugs.webkit.org/show_bug.cgi?id=116719

        Reviewed by Anders Carlsson.

        After r148891, WTF::Vector pretty printers were left outdated, as
        the WTF::Vector was made to extend a VectorBuffer, instead of keeping
        one as a member. This patch updates the pretty printers so they work
        again. 

        * gdb/webkit.py:
        (WTFVectorPrinter.children):
        (WTFVectorPrinter.to_string):

2013-05-24  Steve Falkenburg  <sfalken@apple.com>

        Update prepareConsistentTestingEnvironment to use a non-deprecated API.
        https://bugs.webkit.org/show_bug.cgi?id=116710

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment): Use beginActivityWithOptions instead of beginSuspensionOfSystemBehaviors.

2013-05-23  Lauro Neto  <lauro.neto@openbossa.org>

        Add missing dependencies to deps script.

        [GTK] Missing packages in install-dependencies script.
        https://bugs.webkit.org/show_bug.cgi?id=116632

        Reviewed by Martin Robinson.

        * gtk/install-dependencies:

2013-05-23  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed change for NRWT support.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes): Added a default implementation
        that limits NRWT to a single instance.

2013-05-23  Brent Fulgham  <bfulgham@apple.com>

        Remove meaningless "test_uses_apache" from Python test cases.
        https://bugs.webkit.org/show_bug.cgi?id=38756

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_driver_cmd_line): Remove the meaningless
        "test_uses_apache" test case from the Python test infrastructure.
        It was hard-coded to true, even though not all ports use
        Apache.

2013-05-23  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Update new-run-webkit-tests for Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=38756

        Reviewed by Ryosuke Niwa.

        * Scripts/new-run-webkit-httpd:
        (run): Switch from 'chromium' to 'win'
        * Scripts/webkitpy/port/win.py:
        (WinPort): Add support methods for lighttpd server.
        (WinPort._uses_apache):
        (WinPort._path_to_lighttpd):
        (WinPort._path_to_lighttpd_modules):
        (WinPort._path_to_lighttpd_php):

2013-05-23  Patrick Gansterer  <paroga@webkit.org>

        Make default bug links in buildbot clickable
        https://bugs.webkit.org/show_bug.cgi?id=116673

        Reviewed by Ryosuke Niwa.

        Use changecommentlink of html.WebStatus to make the links clickable.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2013-05-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150491): WebKit2.DOMWindowExtensionNoCache fails
        https://bugs.webkit.org/show_bug.cgi?id=116595

        Temporarily skip this test.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):

2013-05-22  Alex Christensen  <achristensen@apple.com>

        Unreviewed.  Added myself to contributors.json.

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

2013-05-22  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Add sub menus to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=114728

        Reviewed by Christophe Dumez.

        Elementary Ctxpopup widget API does not provide support for submenu item.
        To implement ewk submenus in Minibrowser, Ctxpopup has to be replaced with
        Elementary Menu widget.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (on_window_resize):
        (window_free):
        (context_menu_item_selected_cb):
        (context_menu_populate):
        (on_context_menu_show):
        (on_context_menu_hide):
        (window_create):

2013-05-22  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] Add command line option to MiniBrowser to set cookies policy.
        https://bugs.webkit.org/show_bug.cgi?id=115028

        Reviewed by Christophe Dumez.

        Add command line option to MiniBrowser EFL to set cookies policy:
        -p parameter with value from (always, never, no-third-party) respectively (EWK_COOKIE_ACCEPT_POLICY_ALWAYS,
        EWK_COOKIE_ACCEPT_POLICY_NEVER, EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY).

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

2013-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150369): WebKit2WillLoadTest tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=116585

        Reviewed by Alexey Proskuryakov.

        willLoadURLRequest and willLoadDataRequest require the API version 6.

        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:

2013-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150393): editing/inserting/typing-at-end-of-line.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116516

        Reviewed by Alexey Proskuryakov.

        Reset states in DumpRenderTree. The fix for WebKitTestRunner should be implemented in the bug 116577.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Match the ordering.
        (resetWebViewToConsistentStateBeforeTesting): Reset text replacement states.

2013-05-21  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13929704> [WK2] WebKitTestRunner always crashes on exit
        https://bugs.webkit.org/show_bug.cgi?id=116568

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::~WebNotificationProvider):
        * WebKitTestRunner/WebNotificationProvider.h:
        When the provider is destroyed, it should no longer be registered with the manager.

        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::~GeolocationProviderMock):
        * WebKitTestRunner/GeolocationProviderMock.h:
        I wasn't seeing a crash here, but this code has the same issue as notification
        provider, so applying the same fix.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::~TestController):
        Close icon database. I started seeing ASSERT(!isOpen()) in WebCore IconDatabase
        destructor having fixed the above.

2013-05-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150386 and r150397.
        http://trac.webkit.org/changeset/150386
        http://trac.webkit.org/changeset/150397
        https://bugs.webkit.org/show_bug.cgi?id=116572

        Broke a test; Alex is going to try again later. (Requested by
        thorton on #webkit).

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult):
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):

2013-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a python unittest after r149419. We need to support Python 2.6 on Windows.

        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (AbstractCommitLogCommand._recent_commit_messages):

2013-05-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=116372

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Do not build WebKitTestRunner yet for WebKitGTK+.
        * MiniBrowser/gtk/CMakeLists.txt: Added.

2013-05-21  Jessie Berlin  <jberlin@apple.com>

        Revert r149635, it was too optimistic.

        Rubber-stamped by Andreas Kling.

        We are not at the point where we can always use more descriptive macros instead of PLATFORM()
        #ifdefs in WebCore code outside of WebCore/platform.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_invalid_increment):
        (process_line):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_plain_integral_bitfields):

2013-05-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed; fix lldb synthetic representation of WTF::Vector after r148891.

        * lldb/lldb_webkit.py:
        (WTFVectorProvider.num_children):
        (WTFVectorProvider.get_child_index):
        (WTFVectorProvider.get_child_at_index):
        (WTFVectorProvider.update):

2013-05-21  Jessie Berlin  <jberlin@apple.com>

        Expose a way to know when forms are added to a page or when form controls are added to a form
        in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=116334

        Reviewed by Alexey Proskuryakov.

        Add tests for the new callbacks.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add DidAssociateFormControls/_Bundle.cpp and associate-form-controls.html

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        A "null" callback to handle the fact that WKPageRunJavaScriptInMainFrame cannot handle null
        being passed in for the callback.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        After receiving the message that didAssociateFormControls callback was invoked from adding
        the form in the onload handler, tell the page to add a password field to the form, which
        should also invoke didAssociateFormControls callback.
        (TestWebKitAPI::setInjectedBundleClient):
        Register to receive messages.
        (TestWebKitAPI::TEST):
        Load associate-form-controls.html and wait until the didAssociateFormControls callback has
        been invoked for both adding the form and for adding a password field to the form.

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp: Added.
        (TestWebKitAPI::shouldNotifyOnFormChanges):
        Return true so the didAssociateFormControls callback is invoked.
        (TestWebKitAPI::didAssociateFormControls):
        Tell the UI process.
        (TestWebKitAPI::DidAssociateFormControlsTest::DidAssociateFormControlsTest):
        (TestWebKitAPI::DidAssociateFormControlsTest::didCreatePage):
        Register for the shouldNotifyOnFormChanges and didAssociateFormControls callbacks.

        * TestWebKitAPI/Tests/WebKit2/associate-form-controls.html: Added.
        Add a form in response to the onload event. Add a button that will add the password field
        for manual testing.

2013-05-21  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][WK2] accessibility/label-for-control-hittest.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=106341

        Reviewed by Martin Robinson.

        Adds support for retrieving accessibility element at exact point.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::elementAtPoint):

2013-05-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] [WebKit2] AccessibilityUIElement often leaks its AtkObject
        https://bugs.webkit.org/show_bug.cgi?id=112913

        Reviewed by Martin Robinson.

        AccessibilityUIElement is often created by passing new reference to AtkObject (transfer full).
        AccessibilityUIElement::~AccessibilityUIElement does not decrement the reference of the element,
        so the leak appears.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::rootElement):
        (WTR):
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::checkElementState):
        (WTR::indexRangeInTable):
        (WTR::alterCurrentValue):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::isVisible):

2013-05-20  Lucas Forschler  <lforschler@apple.com>

    Rollout 150398.
    
2013-05-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Fix concatenations of string literals that are not C++11-compliant
        https://bugs.webkit.org/show_bug.cgi?id=116449

        Reviewed by Martin Robinson.

        Fix the problematic concatenations of string literals so they are compilable under the C++11 standard. This
        is simply a matter of separating the string and the string literal that are being concatenated with a space.

        * ImageDiff/gtk/ImageDiff.cpp:
        (printImage):

2013-05-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Pass GTEST_HAS_RTTI=0 cppflag to TestWebKitAPI programs at compilation-time
        https://bugs.webkit.org/show_bug.cgi?id=116450

        Reviewed by Martin Robinson.

        The -fno-rtti flag is used when compiling C++ source code throughout the project. The TestWebKitAPI
        programs fail to compile because of this when using the C++11 standard as the GTest headers assume by
        default that the RTTI support is available. This can be turned off by passing GTEST_HAS_RTTI=0 to the
        TestWebKitAPI programs when compiling them.

        * TestWebKitAPI/GNUmakefile.am:

2013-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        Remove DriverProxy._running_drivers from webkitpy.layout_tests.port
        https://bugs.webkit.org/show_bug.cgi?id=116492

        Reviewed by Dirk Pranke.

        Merge https://chromium.googlesource.com/chromium/blink/+/1af2f0be5a1746784ff114952f29f7b8fa9895f3.

        The DriverProxy class had the concept of keeping a pool of started DRTs around (indexed by command line)
        so that we didn't necessarily need to restart DRT when the command line for a test changed (e.g., when
        starting to run tests in a virtual suite). However, the pool was per-worker (so not shared across the machine)
        and we didn't cap the number of processes started, so we would end up with a whole bunch of DRTs (3x-4x
        the number of workers started). If anything, this seemed to make the tests slightly slower and probably added
        to memory pressure on the machine.

        This change removes the pool code; now we'll simply restart DRT when the command line changes. With this change,
        we can actually fold the restarting code into Driver itself (and get rid of DriverProxy), but I'll leave that
        for a subsequent patch just to make things easier to follow.

        * Scripts/webkitpy/port/driver.py:
        (DriverProxy.__init__):
        (DriverProxy.run_test):
        (DriverProxy.has_crashed):
        (DriverProxy.stop):

2013-05-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change EFL Linux 64-bit Release with EFL Linux 64-bit Release WK1
        https://bugs.webkit.org/show_bug.cgi?id=116423

        Reviewed by Ryosuke Niwa.

        EFL Linux 64-bit Release starts to support WK1's build and layout test from now on.

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

2013-05-20  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove remaining link-prerender code
        https://bugs.webkit.org/show_bug.cgi?id=116429

        Reviewed by Darin Adler.

        Link prerendering code was removed in r150356.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        commit-queue should check for oops in changelog entries
        https://bugs.webkit.org/show_bug.cgi?id=116395

        Reviewed by Martin Robinson.

        Make changelog validation fail when it contains oops!.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask._validate_changelog):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (CommitQueueTaskTest._run_through_task):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        (ValidateChangeLogs.options):
        (ValidateChangeLogs._check_changelog_diff):
        (ValidateChangeLogs._changelog_contains_oops):
        (ValidateChangeLogs.run):
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
        (ValidateChangeLogsTest._assert_start_line_produces_output):
        (ValidateChangeLogsTest.test_check_changelog_diff):
        (ValidateChangeLogsTest):
        (ValidateChangeLogsTest.test_changelog_contains_oops):

2013-05-20  Jessie Berlin  <jberlin@apple.com>

        Expose a way to know when forms are added to a page or when form controls are added to a form
        in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=116334

        Reviewed by Alexey Proskuryakov.

        Add tests for the new callbacks.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add DidAssociateFormControls/_Bundle.cpp and associate-form-controls.html

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        A "null" callback to handle the fact that WKPageRunJavaScriptInMainFrame cannot handle null
        being passed in for the callback.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        After receiving the message that didAssociateFormControls callback was invoked from adding
        the form in the onload handler, tell the page to add a password field to the form, which
        should also invoke didAssociateFormControls callback.
        (TestWebKitAPI::setInjectedBundleClient):
        Register to receive messages.
        (TestWebKitAPI::TEST):
        Load associate-form-controls.html and wait until the didAssociateFormControls callback has
        been invoked for both adding the form and for adding a password field to the form.

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp: Added.
        (TestWebKitAPI::shouldNotifyOnFormChanges):
        Return true so the didAssociateFormControls callback is invoked.
        (TestWebKitAPI::didAssociateFormControls):
        Tell the UI process.
        (TestWebKitAPI::DidAssociateFormControlsTest::DidAssociateFormControlsTest):
        (TestWebKitAPI::DidAssociateFormControlsTest::didCreatePage):
        Register for the shouldNotifyOnFormChanges and didAssociateFormControls callbacks.

        * TestWebKitAPI/Tests/WebKit2/associate-form-controls.html: Added.
        Add a form in response to the onload event. Add a button that will add the password field
        for manual testing.

2013-05-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][JHBUILD] Make sure eet is built before evas
        https://bugs.webkit.org/show_bug.cgi?id=116440

        Reviewed by Gyuyoung Kim.

        Mark eet as a dependency of evas since evas requires eet to enable some of its
        functionality.

        * efl/jhbuild.modules:

2013-05-20  Alex Christensen  <achristensen@apple.com>

        WTR::pathSuitableForTestResult should behave the same as _drt_descriptionSuitableForTestResult so we can unskip tests.
        https://bugs.webkit.org/show_bug.cgi?id=116125

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult):
        Changed string operations to match _drt_descriptionSuitableForTestResult.
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        Pass the main frame's URL to pathSuitableForTestResult.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Added WKBundlePageRef to willPerformClientRedirectForFrame.

2013-05-20  Dirk Pranke  <dpranke@chromium.org>

        fix w3c test importer unit tests after r150324
        https://bugs.webkit.org/show_bug.cgi?id=116459

        Reviewed by Ryosuke Niwa.

        This patch fixes the unit tests to not actually call out to
        'hg' (by using a mock executive) and also changes the real
        directory we crawl from Source/WebCore/css to
        Tools/Scripts/webkitpy/w3c to run much more quickly. We should
        still change this to a mock filesystem, but that's a separate change.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (TestImporter.__init__):
        (TestImporter.load_changeset):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):

2013-05-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed EFL build fix.

        Fix linking errors due to undefined symbols on Ubuntu 13.04.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:

2013-05-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Reenabled INDEXED_DATABASE after r150344
        https://bugs.webkit.org/show_bug.cgi?id=116430

        Reviewed by Gyuyoung Kim.

        Reenable INDEXED_DATABASE flag for EFL port now that WebKit2
        build was fixed in r150344.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] init/shutdown should be paired in EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=116427

        Reviewed by Christophe Dumez.

        Added ecore_file_shutdown() for cleanup of ecore_file.
        Removed edje_init and ecore_evas_init because it was in ewk_init().

        * EWebLauncher/main.c:
        (main):

2013-05-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Add command line option to MiniBrowser to set user agent
        https://bugs.webkit.org/show_bug.cgi?id=116387

        Reviewed by Christophe Dumez.

        We need this option to compare the rendering differences according to different user agents.

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

2013-05-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, addressing test-webkitpy failures after r150317.

        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.read_webkit_prefixed_css_property_list): CssPropertyNames.in doesn't exist, but CSSPropertyNames.in does.

2013-05-18  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Replace *_LIBRARY_NAME with *_OUTPUT_NAME
        https://bugs.webkit.org/show_bug.cgi?id=114554

        Reviewed by Gyuyoung Kim.

        Using variables as target names is very uncommon in CMake.
        The usual way to specify the name of the resulting binary
        is to set the OUTPUT_NAME target property.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WinCELauncher/CMakeLists.txt:

2013-05-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed EFL build fix.

        Temporarily disabled INDEXED_DATABASE at compile-time as it breaks
        WK2 build after r150305.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-18  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Parallel build fails if gtk-doc is enabled
        https://bugs.webkit.org/show_bug.cgi?id=116227

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        Don't use the 'all' target to generate the documentation.
        The prerequisites of this target must be files that need to be
        built _before_ the actual compilation of WebKit starts. Since the
        documentation depends on WebKit being built first, this means in
        practice that the code will be built in parallel with the
        generation of its dependencies, potentially making the build fail.

2013-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Don't run hg.

        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest):

2013-05-17  Dirk Pranke  <dpranke@chromium.org>

        Create a script to import W3C tests
        https://bugs.webkit.org/show_bug.cgi?id=111513

        Reviewed by Ryosuke Niwa.

        This patch attempts to re-land the 'import-w3c-tests'
        script and accompanying modules.  The tests and code have
        been cleaned up so that we do not log anything to stdout/stderr
        while running the tests (thanks to outputcapture) and do not
        write into the source tree while running the tests, and much
        but not all of the code has been converted over to using the webkitpy

        * Scripts/import-w3c-tests: Added.
        * Scripts/webkitpy/w3c/__init__.py: Added.
        * Scripts/webkitpy/w3c/test_converter.py: Added.
        (W3CTestConverter):
        (W3CTestConverter.__init__):
        (W3CTestConverter.path_from_webkit_root):
        (W3CTestConverter.read_webkit_prefixed_css_property_list):
        (W3CTestConverter.convert_for_webkit):
        (W3CTestConverter.convert_css):
        (W3CTestConverter.convert_html):
        (W3CTestConverter.convert_testharness_paths):
        (W3CTestConverter.convert_prefixed_properties):
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):
        (W3CTestConverter.replace_tag):
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Added.
        (W3CTestConverterTest):
        (W3CTestConverterTest.fake_dir_path):
        (W3CTestConverterTest.test_read_prefixed_property_list):
        (W3CTestConverterTest.test_convert_for_webkit_nothing_to_convert):
        (test_convert_for_webkit_harness_only):
        (test_convert_for_webkit_properties_only):
        (test_convert_for_webkit_harness_and_properties):
        (test_convert_test_harness_paths):
        (test_convert_prefixed_properties):
        (verify_conversion_happened):
        (verify_no_conversion_happened):
        (verify_test_harness_paths):
        (verify_prefixed_properties):
        (generate_test_content):
        * Scripts/webkitpy/w3c/test_importer.py: Added.
        (main):
        (parse_args):
        (validate_import_directory):
        (TestImporter):
        (TestImporter.__init__):
        (TestImporter.path_from_webkit_root):
        (TestImporter.do_import):
        (TestImporter.load_changeset):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.update_test_status):
        (TestImporter.remove_deleted_files):
        (TestImporter.write_import_log):
        * Scripts/webkitpy/w3c/test_importer_unittest.py: Added.
        (TestImporterTest):
        (TestImporterTest.test_import_dir_with_no_tests):
        * Scripts/webkitpy/w3c/test_parser.py: Added.
        (TestParser):
        (TestParser.__init__):
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.reference_links_of_type):
        (TestParser.is_jstest):
        (TestParser.support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Added.
        (TestParserTest):
        (TestParserTest.test_analyze_test_reftest_one_match):
        (test_analyze_test_reftest_multiple_matches):
        (test_analyze_test_reftest_match_and_mismatch):
        (test_analyze_test_reftest_with_ref_support_Files):
        (test_analyze_jstest):
        (test_analyze_pixel_test_all_true):
        (test_analyze_pixel_test_all_false):
        (test_analyze_non_html_file):

2013-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Leaks builders exit early frequently
        https://bugs.webkit.org/show_bug.cgi?id=116355

        Reviewed by Stephanie Lewis.

        Throttle the number of processes to use, and also bump up the number of crashes/timeouts
        we tolerate from 20 to 50.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_child_processes):

2013-05-17  Peter Gal  <galpeter@inf.u-szeged.hu>

        Remove chrome-channels command from the webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=116303

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/config/urls.py: Removed omahaproxy url.
        * Scripts/webkitpy/common/net/omahaproxy.py: Removed.
        * Scripts/webkitpy/common/net/omahaproxy_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/__init__.py: Removed chromechannels import.
        * Scripts/webkitpy/tool/commands/chromechannels.py: Removed.
        * Scripts/webkitpy/tool/commands/chromechannels_unittest.py: Removed.

2013-05-17  David Kilzer  <ddkilzer@apple.com>

        filter-build-webkit: Don't filter out the location of the missing symbol when linking fails
        Part 3 of 3: <http://webkit.org/b/116247>

        Reviewed by Benjamin Poulain.

        * Scripts/filter-build-webkit: Change while() loop to for() loop
        to track $previousLine, then pass $previousLine into
        shouldIgnoreLine().
        (shouldIgnoreLine): Add $previousLine argument. Do not skip a
        line that begins with four spaces if the previous line is a
        linker error message.
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
        - Add "Ignored: " to test descriptions to document expected
          behavior.
        - Add comment blocks for various groups of tests.
        - Expand "Build settings" tests since we're changing the code in
          shouldIgnoreLine() that ignores those lines.
        - Add tests for undefined symbols error message.
        (description): Add.  Extract from global code.

2013-05-17  David Kilzer  <ddkilzer@apple.com>

        Add tests for shouldIgnoreLine() in filter-build-webkit
        Part 2 of 3: <http://webkit.org/b/116247>

        Reviewed by Benjamin Poulain.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine): Add.  Extract code from global scope into
        subroutine to make it testable.
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl: Add.
        Tests shouldIgnoreLine() using output from a real build
        transcript.

2013-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename "WebKit Queues" to explicitly call out for EWS and CQ on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=116341

        Reviewed by Brady Eidson.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-05-17  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Don't use pdevenv when building with VS2010.
        https://bugs.webkit.org/show_bug.cgi?id=116338.

        Reviewed by Adam Roben.

        * Scripts/webkitdirs.pm:
        (setupCygwinEnv): Check if we are using VS2005, and only use
        the 'pdevenv' hack if we are. Otherwise, just build with
        our standard project since it uses VS2010+'s native
        parallel building features.

2013-05-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Unreviewed. Disable accelerated compositing until we figure out why it does not work
        properly in the 64 bits release bot.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2013-05-17  David Kilzer  <ddkilzer@apple.com>

        Make filter-build-webkit testable using LoadAsModule
        Part 1 of 3: <http://webkit.org/b/116247>

        Reviewed by Benjamin Poulain.

        * Scripts/filter-build-webkit: Change global variables that are
        used in subroutines from 'my' to 'our' to make it possible to
        evaluate the script in a package context in LoadAsModule.pm.

2013-05-14  Sam Weinig  <sam@webkit.org>

        Add variants of the loading APIs that take user data and a way for the injected bundle to find out about them
        https://bugs.webkit.org/show_bug.cgi?id=116132

        Reviewed by Anders Carlsson.

        Adds "WithUserData" versions of all the load APIs and two new WKBundlePageLoaderClient functions,
        willLoadURLRequest and willLoadDataRequest to let the bundle access them.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:

2013-05-16  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] inspector-protocol/page/javascriptDialogEvents.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=114781

        Reviewed by Christophe Dumez.

        Add run_before_unload_confirm and
        Print the log message with "CONFIRM NAVIGATION: " in console.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onBeforeUnloadConfirm):
        (drtViewAdd):

2013-05-16  Peter Gal  <galpeter@inf.u-szeged.hu>

        Fix Analyze ChangeLog's entry processing
        https://bugs.webkit.org/show_bug.cgi?id=116219

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        (ChangeLogAnalyzer._analyze_entries): Fix the counter initialization.

2013-05-16  Hyungchan Kim  <hyungchan2.kim@lge.com>

        [Qt] UrlLoader::loadNext is broken in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=116099

        Reviewed by Jocelyn Turcotte.

        QQuickWebView's 3 signals(loadStarted, loadSucceeded, loadFailed)
        are not available any more. So, UrlLoader::loadNext was broken
        because it failed to connect to those signals.

        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        (UrlLoader::loadingChanged):
        * MiniBrowser/qt/UrlLoader.h:
        (UrlLoader):

2013-05-16  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [WebSocket] Update pywebsocket to r760
        https://bugs.webkit.org/show_bug.cgi?id=115863

        Reviewed by Alexey Proskuryakov.

        Version r760 supports a newer draft of message compression.
        We need this update to finish the permessage compression patch in
        bug 98840. This patch also fixes failing unit tests after the update.

        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_base.py:
        (StreamBase._read):
        (StreamBase._read.of):
        (StreamBase._write):
        (StreamBase.receive_bytes):
        (StreamBase._read_until):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py:
        (parse_frame):
        (StreamOptions.__init__):
        (Stream.__init__):
        (Stream._receive_frame_as_frame_object):
        (Stream._get_message_from_frame):
        (Stream._process_close_message):
        (Stream.close_connection):
        (Stream.get_last_received_opcode):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/dispatch.py:
        (Dispatcher.do_extra_handshake):
        (Dispatcher.transfer_data):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py:
        (ExtensionProcessorInterface.__init__):
        (ExtensionProcessorInterface.request):
        (ExtensionProcessorInterface):
        (ExtensionProcessorInterface.name):
        (ExtensionProcessorInterface.check_consistency_with_other_processors):
        (ExtensionProcessorInterface.set_active):
        (ExtensionProcessorInterface.is_active):
        (ExtensionProcessorInterface._get_extension_response_internal):
        (ExtensionProcessorInterface.get_extension_response):
        (ExtensionProcessorInterface._setup_stream_options_internal):
        (ExtensionProcessorInterface.setup_stream_options):
        (_log_outgoing_compression_ratio):
        (_log_incoming_compression_ratio):
        (_parse_window_bits):
        (_AverageRatioCalculator):
        (_AverageRatioCalculator.__init__):
        (_AverageRatioCalculator.add_original_bytes):
        (_AverageRatioCalculator.add_result_bytes):
        (_AverageRatioCalculator.get_average_ratio):
        (DeflateFrameExtensionProcessor):
        (DeflateFrameExtensionProcessor.__init__):
        (DeflateFrameExtensionProcessor._get_extension_response_internal):
        (DeflateFrameExtensionProcessor._setup_stream_options_internal):
        (DeflateFrameExtensionProcessor._outgoing_filter):
        (DeflateFrameExtensionProcessor._incoming_filter):
        (CompressionExtensionProcessorBase.for):
        (CompressionExtensionProcessorBase.__init__):
        (CompressionExtensionProcessorBase._get_extension_response_internal):
        (CompressionExtensionProcessorBase._setup_stream_options_internal):
        (PerFrameCompressExtensionProcessor):
        (PerMessageDeflateExtensionProcessor):
        (PerMessageDeflateExtensionProcessor.__init__):
        (PerMessageDeflateExtensionProcessor._get_extension_response_internal):
        (PerMessageDeflateExtensionProcessor._setup_stream_options_internal):
        (PerMessageDeflateExtensionProcessor.set_c2s_max_window_bits):
        (PerMessageDeflateExtensionProcessor.set_c2s_max_window_bits.adds):
        (PerMessageDeflateExtensionProcessor.set_c2s_no_context_takeover):
        (PerMessageDeflateExtensionProcessor.set_c2s_no_context_takeover.adds):
        (PerMessageDeflateExtensionProcessor.set_bfinal):
        (PerMessageDeflateExtensionProcessor.enable_outgoing_compression):
        (PerMessageDeflateExtensionProcessor.disable_outgoing_compression):
        (_PerMessageDeflateFramer):
        (_PerMessageDeflateFramer.__init__):
        (_PerMessageDeflateFramer.set_compress_outgoing_enabled):
        (_PerMessageDeflateFramer._process_incoming_message):
        (_PerMessageDeflateFramer._process_outgoing_message):
        (_PerMessageDeflateFramer.setup_stream_options):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingMessageFilter):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingMessageFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingMessageFilter.filter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter.decompress_next_message):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter.filter):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter.set_compression_bit):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter.filter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingFrameFilter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingFrameFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingFrameFilter.filter):
        (PerMessageCompressExtensionProcessor):
        (PerMessageCompressExtensionProcessor._lookup_compression_processor):
        (MuxExtensionProcessor.__init__):
        (MuxExtensionProcessor.check_consistency_with_other_processors):
        (MuxExtensionProcessor):
        (MuxExtensionProcessor._get_extension_response_internal):
        (MuxExtensionProcessor._setup_stream_options_internal):
        (MuxExtensionProcessor.set_quota):
        (MuxExtensionProcessor.quota):
        (MuxExtensionProcessor.set_extensions):
        (MuxExtensionProcessor.extensions):
        (is_compression_extension):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py:
        (validate_subprotocol):
        (parse_host_header):
        (format_header):
        (check_request_line):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py:
        (Handshaker.do_handshake):
        (Handshaker._create_handshake_response):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi00.py:
        (_validate_subprotocol):
        (_check_header_lines):
        (_build_location):
        (Handshaker.do_handshake):
        (Handshaker._set_subprotocol):
        (Handshaker._set_location):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/headerparserhandler.py:
        (_create_dispatcher):
        (headerparserhandler):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/mux.py:
        (_create_add_channel_response):
        (_create_drop_channel):
        (_create_flow_control):
        (_create_new_channel_slot):
        (_create_fallback_new_channel_slot):
        (_MuxFramePayloadParser._read_number):
        (_MuxFramePayloadParser._read_size_and_contents):
        (_MuxFramePayloadParser._read_flow_control):
        (_MuxFramePayloadParser._read_new_channel_slot):
        (_LogicalConnection.__init__):
        (_LogicalConnection.write):
        (_LogicalConnection.on_write_data_done):
        (_LogicalConnection):
        (_LogicalConnection.on_writer_done):
        (_InnerMessage):
        (_InnerMessage.__init__):
        (_InnerMessageBuilder):
        (_InnerMessageBuilder.that):
        (_InnerMessageBuilder.__init__):
        (_InnerMessageBuilder._handle_first):
        (_InnerMessageBuilder._process_first_fragmented_control):
        (_InnerMessageBuilder._process_first_fragmented_message):
        (_InnerMessageBuilder._handle_fragmented_control):
        (_InnerMessageBuilder._reassemble_fragmented_control):
        (_InnerMessageBuilder._handle_fragmented_message):
        (_InnerMessageBuilder._reassemble_fragmented_message):
        (_InnerMessageBuilder.build):
        (_LogicalStream.__init__):
        (_LogicalStream._create_inner_frame):
        (_LogicalStream._write_inner_frame):
        (_LogicalStream.replenish_send_quota):
        (_LogicalStream.send_message):
        (_LogicalStream._receive_frame):
        (_LogicalStream._get_message_from_frame):
        (_LogicalStream.stop_sending):
        (_PhysicalConnectionWriter.__init__):
        (_PhysicalConnectionWriter._write_data):
        (_PhysicalConnectionWriter.run):
        (_PhysicalConnectionWriter.stop):
        (_Worker.run):
        (_MuxHandshaker.__init__):
        (_MuxHandshaker._create_stream):
        (_MuxHandshaker._create_handshake_response):
        (_HandshakeDeltaBase.create_headers):
        (_MuxHandler.start):
        (_MuxHandler.wait_until_done):
        (_MuxHandler.notify_write_data_done):
        (_MuxHandler._process_drop_channel):
        (_MuxHandler._process_logical_frame):
        (_MuxHandler.notify_reader_done):
        (_MuxHandler):
        (_MuxHandler.notify_writer_done):
        (_MuxHandler.fail_physical_connection):
        (_MuxHandler.fail_logical_channel):
        (use_mux):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py:
        (_StandaloneRequest.get_uri):
        (_StandaloneRequest.get_unparsed_uri):
        (_StandaloneRequest):
        (_StandaloneRequest.is_https):
        (_import_ssl):
        (_import_pyopenssl):
        (_StandaloneSSLConnection.for):
        (_StandaloneSSLConnection):
        (_StandaloneSSLConnection.__getattribute__):
        (_StandaloneSSLConnection.__setattr__):
        (_StandaloneSSLConnection.makefile):
        (_StandaloneSSLConnection.shutdown):
        (_StandaloneSSLConnection.recv):
        (WebSocketServer.__init__):
        (WebSocketServer._create_sockets):
        (WebSocketServer.handle_error):
        (WebSocketServer.get_request):
        (WebSocketServer.get_request.default_callback):
        (WebSocketRequestHandler.parse_request):
        (_build_option_parser):
        (_main):
        (_main.if):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py:
        (RepeatedXorMasker.__init__):
        (RepeatedXorMasker._mask_using_swig):
        (RepeatedXorMasker):
        (RepeatedXorMasker._mask_using_array):
        (_Deflater.compress_and_finish):
        (_RFC1979Deflater.filter):
        (DeflateSocket.send):

2013-05-16  Jonathan Liu  <net147@gmail.com>

        Fix testing if program exists in PATH
        https://bugs.webkit.org/show_bug.cgi?id=116216

        Reviewed by Jocelyn Turcotte.

        functions.prf incorrectly uses win_cmd_shell to test whether to
        add .exe to the executable name when checking if it exists in
        the PATH environment variable. This works correctly when
        building using Windows Command Prompt but not under MSYS shell.

        To resolve this, check the win32 platform scope instead of
        win_cmd_shell so that it correctly adds .exe to the executable
        name on Windows regardless of the shell used when testing if
        it exists in PATH.

        * qmake/mkspecs/features/functions.prf:

2013-05-16  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the hard-coded names of EWS bots that run tests.

        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.did_pass_testing_ews):

2013-05-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Build Xvfb with jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=115907

        Reviewed by Martin Robinson.

        Build our own Xvfb so that we can avoid problems with the system Xvfb
        relying on symbols not present in our jhbuilt libraries such as pixman,
        and also to ensure we have the fix for a GLX module crasher.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): enable accelerated compositing.
        * gtk/install-dependencies: list packages required for building Xvfb.
        * gtk/jhbuild.modules: add xserver as a jhbuild module.
        * gtk/patches/xserver-remove-bogus-dependencies.patch: Added.
        * gtk/patches/xserver-fix-glx-init.patch: Added. Fixes a crash while
        initializing the GLX module for Xvfb.

2013-05-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [jhbuild] Should remove the sources directory as well when cleaning
        https://bugs.webkit.org/show_bug.cgi?id=116229

        Reviewed by Martin Robinson.

        * Scripts/update-webkit-libs-jhbuild:
        (cleanJhbuild): remove the Source directory as well when cleaning.

2013-05-15  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Remove Intel Wk2 Buildbots from Master
        https://bugs.webkit.org/show_bug.cgi?id=116149

        Removing Intel maintained EFL Wk2 bots except the handle for efl-linux-slave-2
        since Gyuyoung Kim from Samsung plans to take over and maintain it.

        Reviewed by Benjamin Poulain.

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

2013-05-15  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Update various build tools to understand VS2010 environment.
        https://bugs.webkit.org/show_bug.cgi?id=116169.

        Reviewed by Anders Carlsson.

        * Scripts/build-api-tests: Identify VS2010 environment.
        * Scripts/build-dumprendertree: Ditto.
        * Scripts/build-webkit: Ditto.
        * Scripts/webkitdirs.pm:
        (dieIfWindowsPlatformSDKNotInstalled): Update to recognize a wider
        range of acceptable SDK's.

2013-05-15  Peter Gal  <galpeter@inf.u-szeged.hu>

        Allow http tests on Arch Linux
        https://bugs.webkit.org/show_bug.cgi?id=116155

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/base.py:
        (Port._is_arch_based): Added check for /etc/arch-release file.
        (Port._apache_config_file_name_for_platform): Call the check.
        * Scripts/webkitpy/port/port_testcase.py:
        (test_linux_distro_detection): Testcase added.

2013-05-15  Peter Gal  <galpeter@inf.u-szeged.hu>

        Remove a leftover v8 file from the watchlist
        https://bugs.webkit.org/show_bug.cgi?id=116158

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/watchlist: Removed a v8 entry from the watchlist.

2013-05-15  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Fails to build while generating gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=115612

        Reviewed by Philippe Normand.

        Fix typo in the prerequisites of docs-build.stamp.

        * GNUmakefile.am:

2013-05-15  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, fixing the current test-webkitpy failure.

        * Scripts/webkitpy/port/mac_unittest.py:
        (test_setup_environ_for_server): Adjusting the expected DYLD_INSERT_LIBRARIES environment variable value
        in webkitpy.port.mac_unittest.test_setup_environ_for_server after r150089.

2013-05-14  Jaehun Lim  <ljaehun.lim@samsung.com>

        Fix build after r150090.
        https://bugs.webkit.org/show_bug.cgi?id=116129

        Unreviewed build fix after r150090.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows, others] Unreviewed build fix after r150090.

        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback): IsSecureEventInputEnabled
        doesn't exist on other platforms.

2013-05-14  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Expunge pthreads2VC.dll from DumpRenderTree Project
        https://bugs.webkit.org/show_bug.cgi?id=115889

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Identify proper run environment for scripts.
        https://bugs.webkit.org/show_bug.cgi?id=116114

        Reviewed by David Kilzer.

        Determine (based on Visual Studio version) which path to use for
        executables (bin versus bin32).

        * Scripts/webkitdirs.pm:
        (determineVisualStudioInstallDir): Added.
        (determineVisualStudioVersion): Added.
        (determineConfigurationProductDir): Modified to choose proper bin
        or bin32 directory.
        (visualStudioVersion): Added
        (setupCygwinEnv): Modified to use new determineVisualStudioInstallDir

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add tests for secure event input
        https://bugs.webkit.org/show_bug.cgi?id=116121

        Reviewed by Mark Rowe.

        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback):
        (TestRunner::staticValues):
        Expose an accessor for current secure event input state.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::secureEventInputIsEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Expose an accessor for current secure event input state. This has to be done in
        UI process, as this is where it's changed by WebKit.

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add a testing shim for secure event input functions
        https://bugs.webkit.org/show_bug.cgi?id=116122

        Reviewed by Mark Rowe.

        * Scripts/webkitpy/port/mac.py: (MacPort.setup_environ_for_server):
        Inject WebCore testing shim library to override system framework functions.

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Switch to embedded manifest commands for launcher executables.
        https://bugs.webkit.org/show_bug.cgi?id=116109

        Reviewed by Darin Adler.

        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Remove the
        now-unused WinLauncher.exe.manifest file.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Ditto.
        * win/DLLLauncher/DLLLauncherMain.cpp: Add embedded manifest command
        when building with VS2010 or newer.

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Update ORWT to know about the Windows 8 SDK and Debug Tools.
        https://bugs.webkit.org/show_bug.cgi?id=116079

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (setUpWindowsCrashLogSaving): Locate ntsd.exe and use it.

2013-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move generated ColorData.cpp, WebKitFontFamilyNames.(cpp|h) build targets into libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115921

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Add platform_cppflags to the list of CPPFLAGS for libWebCoreInternals and DumpRenderTree.
        * TestWebKitAPI/GNUmakefile.am: Add platform_cppflags to the list of TestGtk CPPFLAGS.

2013-05-13  Alex Christensen  <achristensen@apple.com>

        Added testRunner.setPrinting.
        https://bugs.webkit.org/show_bug.cgi?id=42693
        rdar://problem/8213845

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Added setPrinting JavaScript function.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        Dump the external representation for printing if setPrinting has been called.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::isPrinting): Added.
        (WTR::TestRunner::setPrinting): Added.
        Added and initialized m_isPrinting member boolean.

2013-05-13  Csaba Osztrogonác  <ossy@webkit.org>

        [webkitpy] Make FileInfo.repository_name support SVN version > 1.6
        https://bugs.webkit.org/show_bug.cgi?id=116016

        Reviewed by Dirk Pranke.

        Same fix as in the upstream style checker, but without hg support.
        ( http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py )

        * Scripts/webkitpy/style/checkers/cpp.py:
        (FileInfo.repository_name):

2013-05-13  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Use WebCore layer archives for TestWebCore, WebKitPluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=115918

        Reviewed by Gustavo Noronha Silva.

        Due to layer violations and circular dependencies the TestWebCores requires for the libraries containing
        the built code of the intertwining Platform and WebCore layers to be specified multiple times when linking.
        This can be avoided by packing the two layers' archives into one big archive, named after the WebCore layer
        due to no clear boundary between it and the Platform layer. The big archive can then be specified only once
        when linking, simplifying the code and suppressing all the layering violations so they do not cause build
        problems.

        First the libtool libraries that the WebCore layer (as required by the TestWebCore) depends on are specified.
        These are then used as dependencies for the archive creation rule as well as the list from which the archive
        file paths are constructed and then used to dump the member files from these archives. The member files are
        then added to the big archive. The latter is added to the list of libraries the TestWebCore requires to
        successfully link.

        * TestWebKitAPI/GNUmakefile.am:

2013-05-13  Anders Carlsson  <andersca@apple.com>

        Remove UnusedParam.h
        https://bugs.webkit.org/show_bug.cgi?id=116029

        Reviewed by Andreas Kling.

        Stop including UnusedParam.h.

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:

2013-05-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149955.
        http://trac.webkit.org/changeset/149955
        https://bugs.webkit.org/show_bug.cgi?id=115990

        Broke lots of tests (Requested by smfr on #webkit).

        * Scripts/webkitpy/port/mac.py:

2013-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GTK_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115914

        Reviewed by Martin Robinson.

        * GtkLauncher/main.c:
        (createToolbar):
        * MiniBrowser/gtk/BrowserWindow.c:
        (_BrowserWindow):
        (browserWindowSetStatusText):
        (fullScreenMessageTimeoutCallback):
        (webViewEnterFullScreen):
        (webViewLeaveFullScreen):
        (browserWindowFinalize):
        (browserWindowConstructed):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):

2013-05-11  Anders Carlsson  <andersca@apple.com>

        Crash when terminating a process that has not been fully launched
        https://bugs.webkit.org/show_bug.cgi?id=115962
        <rdar://problem/13660916>

        Reviewed by Andreas Kling.

        Add TerminateTwice, a test that terminates a page, then reloads it and terminates it again
        before the process has had a chance to be fully launched.

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WebKit2.pro:

2013-05-10  Laszlo Gombos  <l.gombos@samsung.com>

        Remove Mac OS X Leopard (10.5) support
        https://bugs.webkit.org/show_bug.cgi?id=107964

        Reviewed by Ryosuke Niwa.

        Removed the code for 10.5 and removed if-def for 10.6.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (convertMIMEType):
        (createXMLStringFromWebArchiveData):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::authenticateSession):
        (TestRunner::setTextDirection):
        * WebKitTestRunner/cf/WebArchiveDumpSupport.cpp:
        (convertMIMEType):
        (createXMLStringFromWebArchiveData):

2013-05-10  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Allow VS2010 Build to use VS2005 Support Libraries
        https://bugs.webkit.org/show_bug.cgi?id=115935

        Reviewed by Jer Noble.

        * WinLauncher/WinLauncher.vcxproj/WinLauncher.exe.manifest: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Add reference
        to the new manifest file.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Ditto.

2013-05-10  Jacky Jiang  <zhajiang@blackberry.com>

        Fix some compiler warnings (miscellaneous)
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Rob Buis.

        Fix the following warnings for BlackBerry:
        DumpRenderTree.cpp:357:42: warning: suggest parentheses around assignment
        used as truth value [-Wparentheses].

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2013-05-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2][CoordinatedGraphics] WKViewSetThemePath is EFL specific
        https://bugs.webkit.org/show_bug.cgi?id=115928

        Reviewed by Kenneth Rohde Christiansen.

        WKViewSetThemePath was moved to WKViewEfl.h.

        * TestWebKitAPI/efl/PlatformWebView.cpp:

2013-05-10  Andreas Kling  <akling@apple.com>

        I accidentally the Java testing.

        * Scripts/webkitpy/port/mac.py:

2013-05-10  Brian Holt  <brian.holt@samsung.com>

        [GTK] Module Cairo fails to build under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=115854

        Reviewed by Martin Robinson.

        Make cairo depend on glib in jhbuild.modules.

        * gtk/jhbuild.modules:

2013-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GLIB_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115904

        Reviewed by Martin Robinson.

        * ImageDiff/gtk/ImageDiff.cpp:
        (main):

2013-05-10  Balazs Kelemen  <kbalazs@webkit.org>

        Add my new address to contributors.json. (Unreviewed)

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

2013-05-10  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Move myself to the reviewers list.

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

2013-05-10  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Add my email to a few watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-05-10  Simon Pena  <simon.pena@samsung.com>

        Unicode support missing from string representation of Contributors in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=115859

        Reviewed by Darin Adler.

        Contributors, in committers.py, provided a string representation in __str__ which
        didn't support unicode characters, so printing a contributor would fail in that case.
        This patch implements __unicode__ and makes __str__ use it to represent a contributor.
        The unit tests are updated accordingly, so they ensure that a unicode name can be shown.

        * Scripts/webkitpy/common/config/committers.py: Move the existing string representation
        to the newly implemented method __unicode__, and make __str__ display its utf-8 encoded
        representation.
        (Contributor.__str__):
        (Contributor):
        (Contributor.__unicode__):
        * Scripts/webkitpy/common/config/committers_unittest.py: Add a new test that checks that
        a contributor with unicode characters can be represented as a string.
        (CommittersTest):
        (CommittersTest.test_contributor_encoding):

2013-05-09  Patrick Gansterer  <paroga@webkit.org>

        [WIN][DRT] Remove duplicated (start|stop)JavaScriptThreads()
        https://bugs.webkit.org/show_bug.cgi?id=92371

        Reviewed by Brent Fulgham.

        Use JavaScriptThreading.cpp where the same functionality is
        implemented too. This reduces the dependency on the pthread
        library. Also replace assert() with WebKit ASSERT().

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem):
        (dumpBackForwardList):
        * DumpRenderTree/win/DumpRenderTree.vcproj:

2013-05-09  Patrick Gansterer  <paroga@webkit.org>

        [DRT] Replace JavaScriptThreadingPthreads.cpp with JavaScriptThreading.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92505

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/JavaScriptThreading.cpp: Copied from DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp.
        (javaScriptThreadsMutex):
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * DumpRenderTree/pthreads: Removed.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Removed.

2013-05-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed. Update Simon Pena email on his behalf.

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

2013-05-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for [NoInterfaceObject] Web IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=115714

        Reviewed by Kentaro Hara.

        Update BindingsTests.generate_supplemental_dependency() to pass an
        additional windowConstructorsFile argument to preprocess-idls.pl.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-05-09  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Buildfix after r149694
        https://bugs.webkit.org/show_bug.cgi?id=115797

        Reviewed by Gustavo Noronha Silva.

        Add CLUTTER_LIBS for linking TestWebCore.

        * TestWebKitAPI/GNUmakefile.am:

2013-05-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove unnecessary pkgs in EFL jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=114908

        Reviewed by Laszlo Gombos.

        p11-kit, libgpg-error and libgcrypt don't influence on layout test. So, we don't need to
        handle them using jhbuild. We can reduce build time when using --update-efl.

        * efl/jhbuild.modules:

2013-05-08  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Disable SHADOW DOM feature in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=115834

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-08  Lucas Forschler  <lforschler@apple.com>

        Add Scheduler for Mac MtnLion 32bit Release builder.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-05-08  Denis Nomiyama  <d.nomiyama@samsung.com>

        Update JSCIdentifier pretty printer in Tools/gdb/webkit.py
        https://bugs.webkit.org/show_bug.cgi?id=115808

        Reviewed by Darin Adler.

        The pretty printer for the JSCIdentifier in Tools/gdb/webkit.py
        was left outdated after r127191, when the m_string member was changed
        from UString to String. This patch calls the right pretty printer for it.

        * gdb/webkit.py:
        (JSCIdentifierPrinter.to_string): Use WTFPrettyPrinter instead of
        WTFImplPrettyPrinter.

2013-05-08  Andy Estes  <aestes@apple.com>

        [WebKit2] REGRESSION (Custom Protocols): Reproducible crash when navigating to URL with an invalid scheme
        https://bugs.webkit.org/show_bug.cgi?id=115790

        Reviewed by Alexey Proskuryakov.

        Added two API tests:

        1) Verify that +[WKBrowsingContextController (un)registerSchemeForCustomProtocol:] can be called with a nil NSString without crashing.
        2) Verify that +[WKCustomProtocol canInitWithRequest:] does not crash when passed an NSURLRequest with an invalid scheme.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (CustomProtocolInvalidSchemeTest):
        (TestWebKitAPI::CustomProtocolInvalidSchemeTest::CustomProtocolInvalidSchemeTest):

2013-05-08  Lucas Forschler  <lforschler@apple.com>

        Teach buildbot how to compile 32-bit on Mac.

        Reviewed by Ryosuke Niwa.

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

2013-05-08  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Fix usage of BlackBerry::Platform::String
        https://bugs.webkit.org/show_bug.cgi?id=115781

        Reviewed by Rob Buis.

        BlackBerry PRs 304193 and 327181
        Internally Reviewed by Mike Lattanzio, Arvid Nilsson, Joe Mason, Jeff Rogers, and George Staikos

        We currently have a problem where we're passing UTF-8 encoded data into
        the char* constructors of BlackBerry::Platform::String. This means the string
        thinks its data is not UTF-8.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (BlackBerry::WebKit::dumpHistoryItem):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setUserStyleSheetLocation):
        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp:
        (LoadHTMLStringItem::invoke):

2013-05-08  Alberto Garcia  <agarcia@igalia.com>

        Tools: add new BlackBerry include dirs.
        https://bugs.webkit.org/show_bug.cgi?id=115514

        Reviewed by Rob Buis.

        iType include dirs are missing, and HarfBuzz needs to be fixed.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2013-05-08  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Plumb the Automake build system for the Battery Status API feature
        https://bugs.webkit.org/show_bug.cgi?id=115718

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): List battery-status as a configurable feature, meaning its value will be adjusted
        through the --(enable|disable)-battery-status flag passed to configure.

2013-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        new-run-webkit-websocketserver doesn't work after Chromium removal
        https://bugs.webkit.org/show_bug.cgi?id=115816

        Reviewed by Joseph Pecoraro.

        Fix the bug by instantiating the correct port object.

        * Scripts/new-run-webkit-websocketserver:
        (main):

2013-05-07  Lucas Forschler  <lforschler@apple.com>

        Configure buildbot for 32bit builder.
        https://bugs.webkit.org/show_bug.cgi?id=115769
        
        Reviewed by Ryosuke Niwa.

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

2013-05-08  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed. Update to show my apple.com address.

        * Scripts/webkitpy/common/config/contributors.json: Added
        my apple.com e-mail address.

2013-05-08  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r149579): Use Vector::appendVector() instead of Vector::append()

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (concatenateAttributeAndValue): Switch to appendVector().

2013-05-08  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WTR] Fix the build on Mac after r149692

        Unreviewed build fix.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):

2013-05-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed. Added Anton Obzhirov to the list of contributors and myself
        to the watchlist for Accessibility.

        * Scripts/webkitpy/common/config/contributors.json: Added Anton Obzhirov.
        * Scripts/webkitpy/common/config/watchlist: Added myself.

2013-05-08  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Build fails with clang
        https://bugs.webkit.org/show_bug.cgi?id=115741

        Reviewed by Benjamin Poulain.

        Since r149112 std::move is used in AtomicString for compilers that
        support rvalue references and this requires a standard library
        implementing c++11 move semantics.
        We only explicitely require c++11 for WebKit2, but since clang supports
        rvalue references the build of subtargets using AtomicString fails because
        of missing std::move.
        It is safe to add CONFIG += c++11 for the whole project when using clang
        since we explicitely disable c++11 for ANGLE that had probems with libc++.

        * qmake/mkspecs/features/unix/default_pre.prf:

2013-05-08  Darin Adler  <darin@apple.com>

        Fix one more place that needed to use adoptCF/NS
        https://bugs.webkit.org/show_bug.cgi?id=115778

        Reviewed by Benjamin Poulain.

        Not sure why I missed this code last time, but found a bit more code that needs
        to switch to the newer style adoptCF/NS.

        * WebKitTestRunner/cf/WebArchiveDumpSupport.cpp:
        (convertWebResourceDataToString): Use adoptCF.
        (convertWebResourceResponseToDictionary): Ditto.
        (createXMLStringFromWebArchiveData): Ditto.
        * WebKitTestRunner/mac/WebArchiveDumpSupportMac.mm:
        (createCFURLResponseFromResponseData): Use adoptNS and adoptCF.

2013-05-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149271.
        http://trac.webkit.org/changeset/149271
        https://bugs.webkit.org/show_bug.cgi?id=115780

        The mangled symbols are now enforced through LDFLAGS
        (Requested by zdobersek on #webkit).

        * BuildSlaveSupport/gtk/daemontools-buildbot.conf:

2013-05-08  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Remove the Chromium fallback platforms listing from the legend popup
        https://bugs.webkit.org/show_bug.cgi?id=115636

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (showLegend): Remove the listing of the Chromium fallback platforms from the legend popup. The code iterated
        through the platforms in the g_fallbacksMap dictionary to construct this part of the legend, but the dictionary,
        while Chromium-specific, can't be removed just yet as there's more code that uses it.

2013-05-06  Darin Adler  <darin@apple.com>

        Use adoptCF and adoptNS in more places, test code and code not compiled on Mac
        https://bugs.webkit.org/show_bug.cgi?id=115657

        Reviewed by Sam Weinig.

        This is similar to my last set of changes, but covers code that I missed with
        global replace using the Safari Xcode workspace.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (convertWebResourceDataToString):
        (convertWebResourceResponseToDictionary):
        (createXMLStringFromWebArchiveData):
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (createImageFromStdin):
        (createDifferenceImage):
        (main):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::BitmapContext):
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        (-[MockWebNotificationProvider init]):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addDisallowedURL):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::localStorageDiskUsageForOrigin):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::deleteLocalStorageForOrigin):
        (TestRunner::copyDecodedHostName):
        (TestRunner::copyEncodedHostName):
        (TestRunner::queueLoad):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setUserStyleSheetLocation):
        (TestRunner::setValueForUser):
        (TestRunner::overridePreference):
        (TestRunner::setPersistentUserStyleSheetLocation):
        (TestRunner::execCommand):
        (TestRunner::findString):
        (TestRunner::isCommandEnabled):
        (TestRunner::addOriginAccessWhitelistEntry):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        (TestRunner::evaluateInWebInspector):
        (TestRunner::evaluateScriptInIsolatedWorld):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):
        (TestRunner::authenticateSession):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:
        (createCFURLResponseFromResponseData):
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ScriptItem::invoke):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (substringFromIndex):
        (urlSuitableForTestResult):
        (lastPathComponent):
        (sharedCFURLCache):
        * DumpRenderTree/win/ImageDiffCairo.cpp:
        (createImageFromStdin):
        (main):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setUserStyleSheetLocation):
        (TestRunner::setPersistentUserStyleSheetLocation):
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/InstanceMethodSwizzler.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm:
        (TestWebKitAPI::createWindow):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        (TestWebKitAPI::AcceptsFirstMouse::runTest):
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/BackForwardList.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/CancelLoadFromResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DOMHTMLTableCellCellAbove.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        (TestWebKitAPI::DeviceScaleFactorOnBack::createWindow):
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        (TestWebKitAPI::DynamicDeviceScaleFactor::createWindow):
        * TestWebKitAPI/Tests/mac/HTMLCollectionNamedItem.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SetDocumentURI.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WillSendSubmitEvent.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WindowlessWebViewWithMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm:
        (WTR::testPathFromURL):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        (WTR::dumpBitmap):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        Use adoptCF and adoptNS.

2013-05-07  Alex Christensen  <achristensen@apple.com>

        Fix a memory leak introduced in r149692
        https://bugs.webkit.org/show_bug.cgi?id=115766

        Reviewed by Mark Rowe.

        In r149692, the fix for <http://webkit.org/b/42324>, a call to WKBundleFrameCopyWebArchive was added without any 
        matching call to WKRelease. An earlier attempted fix in r149697 introduced a RetainPtr but failed to adopt the object.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        Fix the memory leak by switching to WKRetainPtr and adopting the returned object.

2013-05-07  Darin Adler  <darin@apple.com>

        [Win] Fix storage leak in Windows DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=115651

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (lastPathComponent): Added a missing call to adoptCF.

2013-05-07  Alex Christensen  <achristensen@apple.com>

        fixed a memory leak introduced by bug 42324 by using a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=115760

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        fixed memory leak, added UNUSED_PARAM macros

2013-05-07  Alex Christensen  <achristensen@apple.com>

        WebKitTestRunner needs testRunner.dumpDOMAsWebArchive
        https://bugs.webkit.org/show_bug.cgi?id=42324
        <rdar://problem/8193633>

        Reviewed by Tim Horton.

        * Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Added dumpDOMAsWebArchive JavaScript function to be called by test cases.
        * Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        Added dumpDOMAsWebArchive code that is called when dumping.        
        (WTR::InjectedBundlePage::dump):
        Made DOMAsWebArchive case when dumping call dumpDOMAsWebArchive.
        * Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        Added dumpDOMAsWebArchive declaration.
        * Tools/WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpDOMAsWebArchive):
        Added dumpDOMAsWebArchive JS callback function that sets m_whatToDump to DOMAsWebArchive.
        * Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Added WebArchiveDumpSupport.cpp, WebArchiveDumpSupport.h, WebArchiveDumpSupportMac.mm to project.
        * Tools/WebKitTestRunner/cf: Added.
        * Tools/WebKitTestRunner/cf/WebArchiveDumpSupport.cpp: Added.
        Copied from Tools/DumpRenderTree/cf for createXMLStringFromWebArchiveData and other functions it uses.
        (convertMIMEType):
        (convertWebResourceDataToString):
        (normalizeHTTPResponseHeaderFields):
        (normalizeWebResourceURL):
        (convertWebResourceResponseToDictionary):
        (compareResourceURLs):
        (createXMLStringFromWebArchiveData):
        * Tools/WebKitTestRunner/cf/WebArchiveDumpSupport.h: Added.
        Copied from Tools/DumpRenderTree/cf for used symbol declarations.
        * Tools/WebKitTestRunner/mac/WebArchiveDumpSupportMac.mm: Added.
        Copied from Tools/DumpRenderTree/mac for used functions.
        (createCFURLResponseFromResponseData):
        (supportedNonImageMIMETypes):

2013-05-07  Alex Christensen  <achristensen@apple.com>

        Updated style of WebArchiveDumpSupport before putting it into WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=115745

        Reviewed by Tim Horton.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (compareResourceURLs):
        Updated style.

2013-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Add an 'isReadOnly' member to IDL parse tree structure
        https://bugs.webkit.org/show_bug.cgi?id=115704

        Reviewed by Kentaro Hara.

        Use newly added isReadOnly attribute.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateHeaderFile):
        (_generateImplementationFile):
        (_staticValuesGetterImplementation):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Remove AlwaysInline.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=115727

        Reviewed by Brent Fulgham.

        The macro that used to be in AlwaysInline.h is now in Compiler.h so there's no reason
        to keep AlwaysInline.h around anymore.

        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:

2013-05-07  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WTR] QQuickWindowPrivate::setRenderWithoutShowing has been removed from Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=114808

        Reviewed by Jocelyn Turcotte.

        QQuickWindow::grabWindow() has been implemented for isVisible=false for Qt 5.1.
        (https://codereview.qt-project.org/#change,54234)

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):

2013-05-06  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Add my email to EFL and BindingsScripts watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-05-06  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK1][PerformanceTests] Adopt --no-timeout option implementation to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=115645

        Reviewed by Gyuyoung Kim.

        To run performance tests in wk1, we need --no-timeout option implementation.
        So adopt it from gtk+ port.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (shouldSetWaitToDumpWatchdog):
        (parseCommandLineOptions):
        * DumpRenderTree/efl/DumpRenderTreeEfl.h:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setWaitToDump):

2013-05-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149547.
        http://trac.webkit.org/changeset/149547
        https://bugs.webkit.org/show_bug.cgi?id=115682

        Added unittests that fail on bots and spits out text into
        stdout (Requested by rniwa on #webkit).

        * Scripts/import-w3c-tests: Removed.
        * Scripts/webkitpy/w3c/__init__.py: Removed.
        * Scripts/webkitpy/w3c/test_converter.py: Removed.
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Removed.
        * Scripts/webkitpy/w3c/test_importer.py: Removed.
        * Scripts/webkitpy/w3c/test_importer_unittest.py: Removed.
        * Scripts/webkitpy/w3c/test_parser.py: Removed.
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Removed.

2013-05-03  Gustavo Noronha Silva  <gns@gnome.org>

        [jhbuild] bump jhbuild version to take advantage of new improvements
        https://bugs.webkit.org/show_bug.cgi?id=115558

        Reviewed by Martin Robinson.

        One of the important improvements is jhbuild no longer fetches git
        repositories if they are already at the expected revision, which should
        make the EWS bots more robust to git servers unavailability.

        * jhbuild/jhbuild-wrapper: bump jhbuild to 496974221c3a8ac4fbbc3b0a577c71cac224130d.

2013-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

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

        Reviewed by Anders Carlsson.

        * MiniBrowser/gtk/main.c:
        (miniBrowserErrorQuark): Add function to create a global quark for
        MiniBrowser.
        (aboutURISchemeRequestCallback): Update MiniBrowser to use the new
        function webkit_uri_scheme_request_finish_error().

2013-05-06  Mike Lattanzio  <mlattanzio@blackberry.com>

        [BlackBerry] Enable and Expose Text Autosizing through BlackBerry::WebKit::WebSettings
        https://bugs.webkit.org/show_bug.cgi?id=113808

        Reviewed by Rob Buis.

        Modify FeatureList.pm and set ENABLE_TEXT_AUTOSIZING to default
        to true for BlackBerry.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-06  Jessie Berlin  <jberlin@apple.com>

        check-webkit-style should complain about a layering violation if platform-specific guards are
        used in WebCore outside of the platform directory
        https://bugs.webkit.org/show_bug.cgi?id=115567

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_webcore_platform_layering_violation):
        If the file is in WebCore but not in platform and contains #if PLATFORM(SOMETHING), emit an error.
        (process_line):
        Add the check_for_webcore_platform_layering_violation.
        (CppChecker):
        List the new check.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_webcore_platform_layering_violation):
        Add tests.

2013-05-06  David Kilzer  <ddkilzer@apple.com>

        webkit-patch: fix 'upload' command with Bugzilla 4.2.5
        <http://webkit.org/b/115667>

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._check_create_bug_response): Update regex to work with
        Bugzilla 3.2.3 and 4.2.5.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test__check_create_bug_response): Add new test that covers both
        old and new <title> variations.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Stop decoding SnowLeopard builder names into platforms
        https://bugs.webkit.org/show_bug.cgi?id=115661

        Reviewed by Ryosuke Niwa.

        The Apple Mac Snow Leopard builders are no long present so there's no need to try to decode such
        builders into the APPLE_MAC_SNOW_LEOPARD platforms. Instead, check for the Mountain Lion builders
        and decode their names into the APPLE_MAC_MOUNTAIN_LION platforms.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Remove everything Chromium from the builders.json-generating script
        https://bugs.webkit.org/show_bug.cgi?id=114603

        Reviewed by Ryosuke Niwa.

        * TestResultServer/generate_builders_json.py:
        (insert_builder_and_test_data): Only process the 'layout-tests' steps, but force the name that's used
        to represent these to be 'layout-test', for backwards compatibility.
        (main): Remove all the build.chromium.org masters.
        * TestResultServer/generate_builders_json_unittest.py: Clean up the Chromium-related test cases and update other ones.
        (GenerateBuildersJsonTest.test_generate_json_data.dummy_fetch_json):
        (GenerateBuildersJsonTest):
        (GenerateBuildersJsonTest.test_generate_json_data):
        * TestResultServer/static-dashboards/builders.jsonp: Updated after changes to the script, now only lists the
        test-running builders from the webkit.org master.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Update expected outcome in a couple of unit tests after r148778
        https://bugs.webkit.org/show_bug.cgi?id=114988

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: Update the expected platforms list, the Chromium
        and Apple Mac Snow Leopard platforms were removed with the Apple Mac Mountain Lion platform being added.
        * TestResultServer/static-dashboards/loader_unittests.js: Update the list of the expected loaded expectations platforms,
        mac-snowleopard isn't loaded anymore due to the support for the platform being removed, while the mac-wk2 is loaded twice,
        once for the Apple Mac Lion and once for the Apple Mac Mountain Lion platform.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Remove the remaining traces of platform modifier unions
        https://bugs.webkit.org/show_bug.cgi?id=114954

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processExpectationsForPlatform): Remove the platform tree traversal that checked for presence of the platform
        modifier unions in the list of modifiers.
        (generatePageForExpectationsUpdate): Only filter through the modifiers that do not represent build types or bug references.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: Adjust the test cases for the realModifiers unit test.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Simplify builder-name-based platform recognition
        https://bugs.webkit.org/show_bug.cgi?id=114957

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (determineBuilderPlatform): Renamed from nonChromiumPlatform.
        (chromiumPlatform): Removed, unnecessary.
        (platformAndBuildType): With Chromium builders are gone, meaning determineBuilderPlatform can be called by default
        to determine the platform of the builder. No need to check for 'DBG' substring in the builder name to determine whether
        the builder operates with debug builds, no webkit.org builders are named this way.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (platformAndBuildTypes): Remove Chromium-specific test cases, reducing the number of expected assertions this test will make.

2013-05-06  Andy Estes  <aestes@apple.com>

        Added two files I neglected to commit in r149589.

        * TestWebKitAPI/Tests/mac/CloseNewWindowInNavigationPolicyDelegate.mm: Added.
        * TestWebKitAPI/Tests/mac/OpenNewWindow.html: Added.

2013-05-04  Andy Estes  <aestes@apple.com>

        REGRESSION (r125592): Reproducible crash in DOMWindow::open when a delegate closes the new window in decidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=115609

        Reviewed by Oliver Hunt.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/CloseNewWindowInNavigationPolicyDelegate.mm: Added.
        (+[TestDelegate shared]):
        (-[TestDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (-[TestDelegate webView:createWebViewWithRequest:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/OpenNewWindow.html: Added.

2013-05-06  Antoine Quint  <graouts@apple.com>

        Manage the presentation of the snapshotted plug-in using JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=115548

        Reviewed by Dean Jackson.

        Take into account the new plugInExtraScript method added to support
        the injection of a JS file from the chrome client to customize the
        rendering of a snapshotted plug-in's shadow tree.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-05-05  Anders Carlsson  <andersca@apple.com>

        Remove the Vector::append overload that takes a Vector
        https://bugs.webkit.org/show_bug.cgi?id=115535

        Reviewed by Andreas Kling.

        Use Vector::appendVector instead.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (concatenateAttributeAndValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::concatenateAttributeAndValue):

2013-05-04  Sam Weinig  <sam@webkit.org>

        REGRESSION(r148312): Crash when calling WKPageClose(page) followed by WKPageTerminate(page)
        <rdar://problem/13702008>
        https://bugs.webkit.org/show_bug.cgi?id=115607

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/CloseThenTerminate.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        Add test that calls WKPageClose, follow by WKPageTerminate. If it crashes, its not working.

2013-05-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json: Correcting my igalia.com email address.

2013-05-04  Mihnea Ovidenie  <mihnea@adobe.com>

        Unreviewed. Adding Radu Stavila as an Adobe contributor, working on CSSRegions.

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

2013-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Catch select.error exceptions in parse_output_lines
        https://bugs.webkit.org/show_bug.cgi?id=115253

        Reviewed by Gustavo Noronha Silva.

        Catch any select.error exceptions when waiting for the file descriptor to become readable when parsing the
        output lines in common.parse_output_lines. These are currently being thrown when running the GTK unit tests on
        builders, but are not fatal. Because of that they are at the moment only logged (writing out the file descriptor,
        error code and the error message) and the loop is re-entered.

        * gtk/common.py:
        (parse_output_lines):

2013-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the TestWebCore in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=115237

        Reviewed by Gustavo Noronha Silva.

        Set up the WebCore unit test program, consisting of the unit tests under the TestWebKitAPI/Tests/WebCore directory.
        Again the approach of specifying libtool libraries multiple times in the TestWebCore program's LDFLAGS is used as
        a workaround for the layer violations and circular dependencies between various static libraries. Linking against
        either libwebkitgtk or libwebkit2gtk shared libraries is avoided due to the unit tests covering WebCore, which
        shouldn't rely on neither of the two distributable libraries (hence the dirty workaround).

        * TestWebKitAPI/GNUmakefile.am:

2013-05-03  Rebecca Hauck  <rhauck@adobe.com>

        Create a script to import W3C tests
        https://bugs.webkit.org/show_bug.cgi?id=111513

        Reviewed by Dirk Pranke.

        Script to automate the import of W3C tests into WebKit. 
        For the full description of how it works, see the comments
        at the top of test_importer.py.

        * Scripts/import-w3c-tests: Added.
        * Scripts/webkitpy/w3c/__init__.py: Added.
        * Scripts/webkitpy/w3c/test_converter.py: Added.
        (TestConverter):
        (TestConverter.__init__):
        (TestConverter.load_prefixed_prop_list):
        (TestConverter.load_file):
        (TestConverter.convert_for_webkit):
        (TestConverter.convert_testharness_paths):
        (TestConverter.convert_prefixed_properties):
        (TestConverter.scrub_unprefixed_props):
        (TestConverter.replace_tag):
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Added.
        (TestConverterTest):
        (TestConverterTest.testLoadPrefixedPropList):
        (TestConverterTest.test_convertForWebkitNothingToConvert):
        (test_convertForWebkitHarnessOnly):
        (test_convertForWebkitPropsOnly):
        (test_convertForWebkitHarnessAndProps):
        (test_convertTestHarnessPaths):
        (test_convertPrefixedProperties):
        (verifyTestHarnessPaths):
        (verifyPrefixedProperties):
        (generateTestContent):
        * Scripts/webkitpy/w3c/test_importer.py: Added.
        (main):
        (parse_args):
        (validate_import_directory):
        (TestImporter):
        (TestImporter.__init__):
        (TestImporter.do_import):
        (TestImporter.get_changeset):
        (TestImporter.scan_source_directory):
        (TestImporter.import_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.get_test_status):
        (TestImporter.remove_deleted_files):
        (TestImporter.write_import_log):
        * Scripts/webkitpy/w3c/test_importer_unittest.py: Added.
        (TestImporterTest):
        (TestImporterTest.test_ImportDirWithNoTests):
        * Scripts/webkitpy/w3c/test_parser.py: Added.
        (TestParser):
        (TestParser.__init__):
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.get_reftests):
        (TestParser.is_jstest):
        (TestParser.get_support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Added.
        (TestParserTest):
        (TestParserTest.test_analyzeTestReftestOneMatch):
        (test_analyzeTestReftestMultipleMatches):
        (test_analyzeTestReftestMatchAndMismatch):
        (test_analyzeTestReftestWithRefSupportFiles):
        (test_analyzeJSTest):
        (test_analyzePixelTestAllTrue):
        (test_analyzePixelTestAllFalse):
        (test_analyzeNonHTMLFile):

2013-05-03  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Update Viatcheslav Ostapenko's email in contributors.json.

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

2013-05-02  Nico Weber  <thakis@chromium.org>

        Remove a stale script file.
        https://bugs.webkit.org/show_bug.cgi?id=115521

        Reviewed by Anders Carlsson.

        This script was added in
        https://bugs.webkit.org/show_bug.cgi?id=17507, but it relies on the
        Bakefile system that was removed in
        https://bugs.webkit.org/show_bug.cgi?id=49983 . As a result, this
        script just asserts when it's run and is useless.

        * Scripts/update-sources-list.py: Removed.

2013-05-01  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Need abstract base class for commands that analyze commit logs
        https://bugs.webkit.org/show_bug.cgi?id=115391

        Reviewed by Benjamin Poulain.

        Move commit log parsing functions into new abstract base class AbstractCommitLogCommand
        in preparation for adding two new commands that will reuse this functionality along with
        suggest-nominations. See https://bugs.webkit.org/show_bug.cgi?id=115387 and
        https://bugs.webkit.org/show_bug.cgi?id=115388.

        No new tests as this patch does not change existing functionality or behavior.

        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (AbstractCommitLogCommand): Add abstract base class for commands that analyze commit logs.
        (AbstractCommitLogCommand.__init__):
        (AbstractCommitLogCommand._init_options):
        (AbstractCommitLogCommand._parse_commit_message):
        (SuggestNominations): Move generic commit log parsing into new base class. Use new base class.
        (SuggestNominations.__init__): 
        (SuggestNominations._init_options):

2013-05-01  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Fix check-inspector-strings script and fix localized strings
        https://bugs.webkit.org/show_bug.cgi?id=115495

        Reviewed by Joseph Pecoraro.

        * Scripts/check-inspector-strings:

2013-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [TestWebKitAPI] <WebKit2/WebKit2_C.h> being included in GTK WK1-only builds
        https://bugs.webkit.org/show_bug.cgi?id=115470

        Reviewed by Martin Robinson.

        In the TestWebKitAPI's config.h header, only include the <WebKit2/WebKit2_C.h> header when
        not building either of the IOS, Windows or GTK-WK1 platforms.

        Up until now the header was included for everything but the IOS and Windows platforms due to
        an incorrectly stated condition regarding the GTK platform.

        * TestWebKitAPI/config.h:

2013-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Split the forwarding headers stamp in the TestWebKitAPI GNUmakefile.am
        https://bugs.webkit.org/show_bug.cgi?id=115469

        Reviewed by Martin Robinson.

        Split the stamp-testwebkitapi-forwarding-headers into two stamps, one covering forwarding headers
        for the WebCore tests (under the Tests/WebCore directory) and the other covering forwarding headers
        for the WebKit2 tests and the injected bundle required by them.

        This makes it possible for the WebCore tests to compile when the WebKit2 build is disabled, i.e. the WebCore
        tests shouldn't depend on the WebKit2 build (though the forwarding headers generation script is stored
        under the WebKit2 code).

        The WebCore forwarding headers are generated by scanning only the files under the Tests/WebCore directory,
        while the WebKit2 forwarding headers generation should keep on scanning the complete root directory of the
        TestWebKitAPI subproject, though the target directory should be narrowed down if at all possible.

        * TestWebKitAPI/GNUmakefile.am:

2013-04-30  Glenn Adams  <glenn@skynav.com>

        Unreviewed. Add myself to watchlist entries.

        * Scripts/webkitpy/common/config/watchlist:

2013-04-30  Glenn Adams  <glenn@skynav.com>

        [webkitpy] suggest-nominations doesn't count all qualified patches
        https://bugs.webkit.org/show_bug.cgi?id=115285

        Reviewed by Benjamin Poulain.

        Fix commit analysis so that patches made by an existing committer are counted towards reviewer
        nomination. Improve commit log parsing.

        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (CommitLogError):
        (CommitLogError.__init__):
        (CommitLogMissingReviewer):
        (CommitLogMissingReviewer.__init__):
        (SuggestNominations):
        (SuggestNominations.__init__):
        (SuggestNominations._recent_commit_messages):
        (SuggestNominations._author_name_from_email):
        (SuggestNominations._contributor_from_email):
        (SuggestNominations._parse_commit_message):
        (SuggestNominations._count_commit):
        (SuggestNominations._count_recent_patches):
        (SuggestNominations._collect_nominations):
        (SuggestNominations._print_nominations):
        (SuggestNominations.execute):
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:
        (_make_options):
        (test_recent_commit_messages):
        (test_basic):

2013-04-30  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r149309.
        http://trac.webkit.org/changeset/149309
        https://bugs.webkit.org/show_bug.cgi?id=115430

        The patch does not build on WK1-only builds of the GTK port
        (Requested by zdobersek on #webkit).

        * TestWebKitAPI/GNUmakefile.am:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Stop using "in" keyword in IDL files
        https://bugs.webkit.org/show_bug.cgi?id=115418

        Reviewed by Kentaro Hara.

        Remove "in" keyword from IDL files as this is no longer part of the Web
        IDL specification.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/GCController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Enable scaled cursors
        https://bugs.webkit.org/show_bug.cgi?id=106242

        Reviewed by Gyuyoung Kim.

        Enable ENABLE_MOUSE_CURSOR_SCALE for EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Replace "Optional" extended attribute by proper Web IDL "optional" keyword
        https://bugs.webkit.org/show_bug.cgi?id=115380

        Reviewed by Kentaro Hara.

        Replace WebKit-specific [Optional] extended attribute by Web IDL "optional"
        keyword.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:

2013-04-30  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Fix the USE(3D_GRAPHICS) build with the standard OpenGL on Windows
        https://bugs.webkit.org/show_bug.cgi?id=114684

        Reviewed by Simon Hausmann.

        Remove the ANGLE requirement for USE(3D_GRAPHICS).
        This enables WebKit2 in the build when using a "-opengl desktop" configured Qt.

        * qmake/mkspecs/features/features.prf:

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Disable Shadow DOM feature
        https://bugs.webkit.org/show_bug.cgi?id=115374

        Reviewed by Martin Robinson.

        Disable the Shadow DOM feature on the GTK port, the feature is planned for removal.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-29  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Add missing contributor email addresses
        https://bugs.webkit.org/show_bug.cgi?id=115394

        Reviewed by Ryosuke Niwa.

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

2013-04-29  Alberto Garcia  <agarcia@igalia.com>

        Remove all remaining Skia code
        https://bugs.webkit.org/show_bug.cgi?id=115263

        Reviewed by Benjamin Poulain.

        Remove all remaining references to Skia.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):
        * Scripts/webkitpy/common/config/contributionareas.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-04-29  Seokju Kwon  <seokju.kwon@gmail.com>

        Get rid of unused options in Tools/Scripts/webkit-build-directory
        https://bugs.webkit.org/show_bug.cgi?id=115383

        Reviewed by Darin Adler.

        * Scripts/webkit-build-directory:

2013-04-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Test with NetworkProcess enabled.

        Fix the build for non-Mac.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2013-04-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Test with NetworkProcess enabled.

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the TestWebCore in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=115237

        Reviewed by Gustavo Noronha Silva.

        Set up the WebCore unit test program, consisting of the unit tests under the TestWebKitAPI/Tests/WebCore directory.
        Again the approach of specifying libtool libraries multiple times in the TestWebCore program's LDFLAGS is used as
        a workaround for the layer violations and circular dependencies between various static libraries. Linking against
        either libwebkitgtk or libwebkit2gtk shared libraries is avoided due to the unit tests covering WebCore, which
        shouldn't rely on neither of the two distributable libraries (hence the dirty workaround).

        * TestWebKitAPI/GNUmakefile.am:

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the TestJavaScriptCore in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=115236

        Reviewed by Gustavo Noronha Silva.

        Set up the TestJavaScriptCore unit test program, consisting of the unit tests
        under the TestWebKitAPI/Tests/JavaScriptCore directory.

        * TestWebKitAPI/GNUmakefile.am:

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Export the COLLECT_NO_DEMANGLE variable on the builders
        https://bugs.webkit.org/show_bug.cgi?id=115323

        Reviewed by Philippe Normand.

        Export the COLLECT_NO_DEMANGLE environment variable on the GTK BuildBot builders.
        Its presence enforces linkers to output mangled symbols when reporting linking failures
        due to unresolved references. People trying to fix the build can then simply copy
        the printed mangled symbol into the symbols.filter file instead of doing a manual build
        or connecting to the builders to discover the mangled version of the missing symbol.

        * BuildSlaveSupport/gtk/daemontools-buildbot.conf:

2013-04-28  Zan Dobersek  <zdobersek@igalia.com>

        Remove Chromium code from Tools/BuildSlaveSupport
        https://bugs.webkit.org/show_bug.cgi?id=115325

        Reviewed by Benjamin Poulain.

        Remove the two Chromium-specific scripts and the Chromium-specific parts from the code
        covering archiving test results and built products.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):
        * BuildSlaveSupport/chromium/output-android-device-status: Removed.
        * BuildSlaveSupport/chromium/remove-crash-logs: Removed.
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):

2013-04-28  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove support for Chromium from webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=115338

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (builtDylibPathForName):
        (determineIsQt):
        (isAppleWebKit):

2013-04-28  Zan Dobersek  <zdobersek@igalia.com>

        Rename TestRunner's setAudioData to setAudioResult
        https://bugs.webkit.org/show_bug.cgi?id=115326

        Reviewed by Darin Adler.

        Rename the TestRunner's setAudioData method to setAudioResult. The new name better conveys the method's purpose
        than the previous one. The change is a simple rename, there's no change in the method's functionality. The
        affected tests are adjusted accordingly.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::setAudioResult):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAudioResult):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-04-28  Zan Dobersek  <zdobersek@igalia.com>

        [WKTR] Tests dumping audio data shouldn't dump pixels
        https://bugs.webkit.org/show_bug.cgi?id=115270

        Reviewed by Benjamin Poulain.

        Prevent dumping the pixel output when Web Audio tests are dumping output data
        as the testing output. Pixel output in these tests has no real meaning and is
        as such unnecessary.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAudioData):

2013-04-27  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Unreviewed Intel bots fix after r149231.

        * efl/jhbuild.modules: Disable the libxml Python bindings since the
        bots don't have Python's development files installed. libxml should
        detect this kind of thing better.

2013-04-26  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break using jhbuild on ubuntu 13.04
        https://bugs.webkit.org/show_bug.cgi?id=115225

        Reviewed by Gyuyoung Kim.

        libxslt in Ubuntu 13.04 requires libxml 2.9.0 or higher and
        libxml 2.9.0 has a bug to make regression which r138422 mentioned.
        So this patch bumped libxml version to 2.9.1.

        * efl/jhbuild.modules:

2013-04-26  Jeffrey Pfau  <jpfau@apple.com>

        delete-stale-build-files does not clear .d files
        http://bugs.webkit.org/show_bug.cgi?id=115293

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/delete-stale-build-files:
        (main): Add .d to the file type list

2013-04-26  Roger Fong  <roger_fong@apple.com>

        Make Apple Windows VS2010 build results into and get dependencies from __32 suffixed folders.
        Make the DebugSuffix configuration use _debug dependencies.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeApple.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.def:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebug.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCommon.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/AssembleBuildLogs/AssembleLogs.cmd:
        * win/record-memory/record-memory.vcxproj:
        * win/record-memory/record-memoryDebug.props:
        * win/record-memory/record-memoryDebugWinCairo.props:
        * win/record-memory/record-memoryProduction.props:
        * win/record-memory/record-memoryRelease.props:
        * win/record-memory/record-memoryReleaseWinCairo.props:

2013-04-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Clean up the TestWebKitAPI GNUmakefile.am
        https://bugs.webkit.org/show_bug.cgi?id=115233

        Reviewed by Martin Robinson.

        Specify unconditional, non-installable program targets in one declaration. Only conditionally specify
        WebKit2-specific targets, not the complete target setups (i.e. targets' sources, cppflags listings etc.).
        Add missing unit test source files to the TestWTF program, namely HashSet.cpp and MetaAllocator.cpp.
        Specify the TestWTF program's CXXFLAGS to be the same as the global cxxflags as the source files need to
        be compiled with the -fno-rtti flag that's present in the global_cxxflags variable.

        * TestWebKitAPI/GNUmakefile.am:

2013-04-25  Andy Estes  <aestes@apple.com>

        [WebKit2] Loading a resource from a custom protocol in a synchronous XHR times out
        https://bugs.webkit.org/show_bug.cgi?id=115223

        Reviewed by Darin Adler.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm: Added.
        (TestWebKitAPI::TEST): Tested that a synchronous XHR does not time out
        when it loads a request with a custom protocol.
        * TestWebKitAPI/Tests/WebKit2/custom-protocol-sync-xhr.html: Added.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm: Moved the
        NSURLProtocol subclass to TestProtocol.{h, mm} and did some
        miscellaneous cleanup.
        * TestWebKitAPI/mac/TestProtocol.h: Copied from Source/WebKit2/WebProcess/WebProcessSupplement.h.
        * TestWebKitAPI/mac/TestProtocol.mm: Copied from Tools/TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm.
        (+[TestProtocol canInitWithRequest:]):
        (+[TestProtocol canonicalRequestForRequest:]):
        (+[TestProtocol requestIsCacheEquivalent:toRequest:]):
        (+[TestProtocol scheme]):
        (-[TestProtocol startLoading]):
        (-[TestProtocol stopLoading]):

2013-04-26  Martin Robinson  <mrobinson@igalia.com>

        Remove the remaining Skia #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=114886

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (createBitmapContextFromWebView): Remove Skia #ifdef references.

2013-04-26  Mary Wu  <mary.wu@torchmobile.com.cn>

        [BlackBerry] Clean up load interface in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=113267

        Reviewed by Rob Buis.

        Update DumpRenderTree with change of load() interface in WebPage.
        RIM Bug# 315535, internally reviewed by Joe Mason.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::runTest):

2013-04-26  Zan Dobersek  <zdobersek@igalia.com>

        Remove the HeapGraphSerializer unit test
        https://bugs.webkit.org/show_bug.cgi?id=115231

        Reviewed by Andreas Kling.

        Remove the HeapGraphSerializer unit test. The code it was testing was removed in r148921,
        specifically the Source/WebCore/inspector/HeapGraphSerializer.(cpp|h) files.

        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Removed.

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove support for Chromium from build/update scripts
        https://bugs.webkit.org/show_bug.cgi?id=115218

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        (writeCongrats):
        * Scripts/update-webkit:

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove support for Chromium from api-test
        https://bugs.webkit.org/show_bug.cgi?id=115211

        Reviewed by Dirk Pranke.

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        (isSupportedPlatform):

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Get rid of Chromium in build-dumprendertree
        https://bugs.webkit.org/show_bug.cgi?id=115212

        Reviewed by Dirk Pranke.

        * Scripts/build-dumprendertree:

2013-04-25  Alexey Proskuryakov  <ap@apple.com>

        Pass relatedPage when creating a page in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=115206

        Reviewed by Geoffrey Garen.

        To make sure that window.open() opens in the same process even when using multiple processes.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:relatedToPage:useTiledDrawing:]):
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Fix autocompletion for Benjamin. The Bugzilla email address must come first.

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

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Forgot to merge args.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        webkitbot should recognize its own nickname in greetings.
        https://bugs.webkit.org/show_bug.cgi?id=115196

        Reviewed by Andreas Kling.

        Make webkitbot recognize other forms of its nick. Also be tolerant of spaces between the nick and !.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2013-04-25  Xavier Castano  <xcastanho@igalia.com>

        [GTK] Tools/gtk/install-dependencies added ragel dependency
        https://bugs.webkit.org/show_bug.cgi?id=115163

        Reviewed by Xan Lopez.

        The install-dependencies script was missing a dependency on ragel
        which is expected when building HarfBuzz.

        * gtk/install-dependencies: Added a dependency on ragel for both
        apt and yum.

2013-04-25  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Remove pango from optional jhbuild dependencies
        https://bugs.webkit.org/show_bug.cgi?id=115162

        Reviewed by Martin Robinson.

        Pango is not needed since revision r148293 that lowers the pango
        dependency to 1.30, which is available in most distributions.

        * gtk/jhbuild-optional.modules: Removes description of pango module.

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove Chromium-specific cases from FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=115169

        Reviewed by Andreas Kling.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-24  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove checking chromium from run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=115139

        Reviewed by Benjamin Poulain.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2013-04-24  Simon Fraser  <simon.fraser@apple.com>

        Pixel tests in SVG are all broken in WK2
        https://bugs.webkit.org/show_bug.cgi?id=114218

        Reviewed by Darin Adler.
        
        Window snapshots in WebKitTestRunner on Mac are window-sized
        (800x600), which is wrong for the W3C SVG tests that require a
        480x360 snapshot.
        
        Fix by resizing the window, as well as the web view in
        PlatformWebView::resizeTo() so that window snapshots are correctly
        sized.
        
        Also do some drive-by cleanup of the window size constants in both
        DRT and WTR to remove magic numbers, and make the code more similar.
        
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::setShouldPaintBrokenImage):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorShowWindow):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (sizeWebViewForCurrentTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::DumpRenderTree):
        (DumpRenderTree::open):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (sizeWebViewForCurrentTest):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::sizeWebViewForCurrentTest):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::resizeTo):

2013-04-24  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Fix build error after r148963.
        https://bugs.webkit.org/show_bug.cgi?id=115126

        Reviewed by Laszlo Gombos.

        Generate forwarding headers for 'CoordinatedGraphics' to generate WKView.h

        * TestWebKitAPI/PlatformEfl.cmake:

2013-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use stamp files for generate-forwarding-headers makefile rules
        https://bugs.webkit.org/show_bug.cgi?id=115118

        Reviewed by Martin Robinson.

        Use a stamp file for the TestWebKitAPI and WebKitTestRunner
        forwarding generator rules and don't call it for soup since there
        aren't soup directories in TestWebKitAPI and WebKitTestRunner.

        * TestWebKitAPI/GNUmakefile.am:
        * WebKitTestRunner/GNUmakefile.am:

2013-04-24  Simon Pena  <simon.pena@samsung.com>

        [GTK] Update build dependencies
        https://bugs.webkit.org/show_bug.cgi?id=115111

        Reviewed by Martin Robinson.

        The install-dependencies script was missing a dependency on EGL,
        which is expected when building Cairo.

        * gtk/install-dependencies: Added a dependency on libegl1-mesa
        for both apt and yum.

2013-04-24  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove the Chromium-specific helper from run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=114996

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-04-24  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2]: Fix WKViewClientWebProcessCallbacks WK2 API test
        https://bugs.webkit.org/show_bug.cgi?id=114850

        Reviewed by Andreas Kling.

        Revision r148312 fixed WebPageProxy cleanup and also changed the process
        termination semantics when requested by the user so that a client is not
        notified of a crash anymore, since there was no crash anyway.

        That change broke WKViewClientWebProcessCallbacks WK2 API test, since it
        relied on being notified of a crash after calling WKPageTerminate(). As
        a result of not being notified of such non-existent crash, the test would
        timeout right after making the terminate call.

        This patch adds an InjectedBundle to be used for simulating a crash, by
        calling abort() upon receiving a "Crash" message, and thus we are able to
        keep testing the crash callback.

        This patch also re-enables the WKViewClientWebProcessCallbacks test, which
        had been disabled in revisions r148858 and r148855, since it was failing.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks_Bundle.cpp: Added.
        (TestWebKitAPI):
        (WKViewClientWebProcessCallbacksTest):
        (TestWebKitAPI::WKViewClientWebProcessCallbacksTest::WKViewClientWebProcessCallbacksTest):
        (TestWebKitAPI::WKViewClientWebProcessCallbacksTest::didReceiveMessage):

2013-04-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] WebKitTestRunner failures due to IconDatabase assertions
        https://bugs.webkit.org/show_bug.cgi?id=115095

        Reviewed by Antonio Gomes.

        Use different subfolders under DumpRenderTree Temp folder for every
        functionality (icon database, cache, localstorage, ...). This makes
        sure there is no conflict between the functionalities.

        In EFL's case, libsoup cache was causing problems for the icon
        database if sharing the same folder.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

== Rolled over to ChangeLog-2013-04-24 ==
