2012-10-02  Daniel Bates  <dbates@webkit.org>

        Define watch list "webkitperl", "SVNScripts", and "XSS" to watch for changes
        to Tools/Scripts/{VCSUtils.pm, webkitdirs.pm, webkitperl}, Tools/Scripts/svn-*
        scripts, and files whose name contains the word "XSS", respectively. Subscribe
        myself to these lists.

        * Scripts/webkitpy/common/config/watchlist:

2012-10-02  Roger Fong  <roger_fong@apple.com>

        executive_unittest.py fails on Apple Windows bots but not when run locally.
        https://bugs.webkit.org/show_bug.cgi?id=98196

        Reviewed by Eric Seidel.

        Making the test more flexible to check for cygwin and allow different outputs from process.wait().

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_kill_process):

2012-10-02  Roger Fong  <roger_fong@apple.com>

        Ignore failing line of SpacebarScrolling API test on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=84961

        Reviewed by Anders Carlsson.

        Test is failing because of https://bugs.webkit.org/show_bug.cgi?id=97946.
        Ignoring the line that fails on Windows for now until the larger problem at hand is fixed.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):

2012-10-02  Tony Chang  <tony@chromium.org>

        check-webkit-style can't handle qt-arm, qt-win, qt-mac, qt-5.0, qt-5.0-wk1 and qt-5.0-wk2 TestExpecatations
        https://bugs.webkit.org/show_bug.cgi?id=98140

        Reviewed by Eric Seidel.

        Fix a bug where we were always using the host OS rather than using what was passed in as part of the
        port name on Qt.

        There's also a bug with being able to test for qt-5.0 expectations files when on a system with
        Qt 4.8 installed. I'm not sure how to solve that, so for now, stop emitting a style warning about
        not checking a file.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._search_paths): Use passed in OS.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check): Don't warn if we don't know about the TestExpectations file.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path): Added a test case for the OS fix.
        Add a commented out test for the version case.

2012-10-02  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Remove the last bits of MSYS support from webkitperl.
        https://bugs.webkit.org/show_bug.cgi?id=98195

        Reviewed by Eric Seidel.

        No ports currently need MinGW/MSYS support, so remove the last
        hackish bits related to it from our Perl code.

        * Scripts/commit-log-editor:
        (createCommitMessage):
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:
        (isAnyWindows):
        (isWindows):

2012-10-02  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Remove MSYS-related changes to the http testing infrastructure.
        https://bugs.webkit.org/show_bug.cgi?id=98183

        Reviewed by Eric Seidel.

        In the process of removing the cruft that has accumulated in our
        Apache configuration code, we can basically revert r77161 which
        added some MSYS (mingw)-specific code to old-run-webkit-tests,
        since it is not being used by any port anymore.

        * Scripts/run-webkit-httpd: Remove isMsys()-dependent hacks.
        * Scripts/webkitperl/httpd.pm:
        (getHTTPDPath): Remove isMsys() code path.
        (getDefaultConfigForTestDirectory): Revert isMsys() hacks.
        (getHTTPDConfigPathForTestDirectory): Do not point to the noew
        removed apache2-msys-httpd.conf.
        (convertMsysPath): Removed.

2012-10-02  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Make sure the touch-points in the touch-events have the correct state.
        https://bugs.webkit.org/show_bug.cgi?id=98110

        Reviewed by Adam Barth.

        TestWebPlugin can now be configured to print out some details about
        events. For now, details for only touch events are printed. This is
        used to verify that touch-points in the touch-events are properly
        set.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (pointState):
        (printTouchList):
        (printEventDetails):
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::handleInputEvent):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):

2012-10-02  Zan Dobersek  <zandobersek@gmail.com>

        [XvfbDriver] First tests in each worker occasionally crash
        https://bugs.webkit.org/show_bug.cgi?id=96203

        Reviewed by Dirk Pranke.

        Often in debug builds, the first tests in each worker crash because they
        can't yet open the Xvfb display assigned to them. This indicates Xvfb hasn't
        yet been set up.

        To avoid this, the execution should halt for a small amount of time before tests
        are run so the Xvfb process has enough time to get ready. At the moment this is
        done right after the Xvfb process is spawned and the execution halts for one
        second. That value is overriden to zero when testing to not prolong the testing time.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver.__init__):
        (XvfbDriver._start):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):

2012-10-02  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Use XvfbDriver for layout tests
        https://bugs.webkit.org/show_bug.cgi?id=98162

        Reviewed by Kenneth Rohde Christiansen.

        Use XvfbDriver for layout tests on EFL port.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start): Set DUMPRENDERTREE_TEMP and LOCAL_RESOURCE_ROOT
        environment variables in XvfbDriver as those are needed for
        TestRunner::pathToLocalResource().

2012-10-02  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Several tests launch g_object_ref/unref assertion messages
        https://bugs.webkit.org/show_bug.cgi?id=95062

        Reviewed by Martin Robinson.

        Only increase and decrease reference count of the accessibility
        UI element if it actually exists.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):

2012-10-02  Douglas Stockwell  <dstockwell@chromium.org>

        [chromium] running layout tests on mountainlion should use chromium TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=98119

        Reviewed by Adam Barth.

        Some basic support for mountainlion has already been committed but it failed to refer
        to the chromium TestExpectations.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_all_test_configurations):

2012-10-02  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        webkitpy: Stop listening on port 8081 when using Apache.
        https://bugs.webkit.org/show_bug.cgi?id=98155

        Reviewed by Eric Seidel.

        No test currently uses this port, and the lighttpd configuration
        does not open it.

        This helps the efforts of bringing some consistency to the Apache
        configuration at the moment by opening the same ports in the
        webkitpy side and in the httpd.conf side (the idea is to remove
        the httpd.conf side later), and also makes the behavior consistent
        across the two servers we currently support.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):

2012-10-02  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] REGRESSION(r128623): It made layout tests extremely slow
        https://bugs.webkit.org/show_bug.cgi?id=96862

        Reviewed by Simon Hausmann.

        Disable calling the extremely slow WKBundleSetDatabaseQuota() between tests until proper fix.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2012-10-02  Philip Rogers  <pdr@google.com>

        Fix PerfTest standard deviation calculation.
        https://bugs.webkit.org/show_bug.cgi?id=98115

        Reviewed by Ryosuke Niwa.

        Previously our standard deviation calculation was incorrect. This patch
        updates perftest.py's algorithm to calculate the sample standard deviation
        (with Bessel's correction) using Knuth's online algorithm:
        http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm
        An existing test has been modified to prove our new results.

        This patch also updates runner.js to use Bessel's correction in
        its sample standard deviation calculation, which is more accurate
        for small sample sizes.

        Additionally, runner.js has been modified to not calculate
        the 'sum' statistic, which was not very useful.

        * Scripts/webkitpy/performance_tests/perftest.py:

            The unused variable valueSum has also been removed.

        (PageLoadingPerfTest.run):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:

            This test calculates the stdev of {2000, 3000, ..., 20000} which
            was hand-calculated using a spreadsheet.

        (TestPageLoadingPerfTest.test_run):

2012-10-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        webkitpy should accept a different httpd.conf specified by the user
        https://bugs.webkit.org/show_bug.cgi?id=98071

        Reviewed by Dirk Pranke.

        The existing httpd.conf variants (or lighttpd.conf, for that
        matter) we have do not always suit the user's system. This is
        particularly true on Linux/Unix, where Apache can be installed in
        a plethora of ways and the LoadModule calls can fail to specify
        the proper module paths.

        For now, we start accepting the WEBKIT_HTTP_SERVER_CONF_PATH
        environment variable, which allows the user to specify the
        absolute path to another http server configuration file that might
        work on the user's system.

        In the long term, we should try to generate our configuration file
        and stop requiring all the different httpd.conf files we have as
        well as this hack.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._path_to_apache_config_file):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_path_to_apache_config_file):

2012-10-01  Emil A Eklund  <eae@chromium.org>

        Unreviewed, upgrade eae to reviewer. 
        http://lists.webkit.org/mailman/private/webkit-committers/2012-October/000191.html

        * Scripts/webkitpy/common/config/committers.py:

2012-10-01  Ming Xie  <mxie@rim.com>

        [BlackBerry] Add a early return in buildCMakeProjectOrExit()
        https://bugs.webkit.org/show_bug.cgi?id=98052

        Reviewed by Rob Buis.

        This option allows our build to only run the CMake build configuration
        step when environment variable GENERATE_CMAKE_PROJECT_ONLY is specified.

        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit):

2012-10-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [webkitpy] Detect the multiple names of the wdiff binary in the Port class.
        https://bugs.webkit.org/show_bug.cgi?id=98039

        Reviewed by Dirk Pranke.

        Unify the duplicate checks for the wdiff binary present in
        different ports into the base Port class.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port._path_to_wdiff):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._path_to_wdiff): Removed.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._path_to_wdiff): Removed.

2012-10-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [chromium] Remove custom implementation of _path_to_apache_config_file in chromium_linux.
        https://bugs.webkit.org/show_bug.cgi?id=98042

        Reviewed by Dirk Pranke.

        The Chromium-based ports inherit from Port these days, so get rid
        of the custom implementation of _path_to_apache_config_file() in
        favor of the more portable one in the Port class.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._path_to_apache_config_file):

2012-10-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [chromium] Remove duplicated _is_redhat_based() implementation from chromium_linux.py.
        https://bugs.webkit.org/show_bug.cgi?id=98035

        Reviewed by Dirk Pranke.

        Since the Chromium port classes inherit from Port these days, it
        can rely on the same implementation of _is_redhat_based() present
        there instead of duplicating it.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._is_redhat_based): Removed.

2012-10-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [GTK] Rely on the general implementation for detecting the Apache server path.
        https://bugs.webkit.org/show_bug.cgi?id=98033

        Reviewed by Martin Robinson.

        The implemenentation of _path_to_apache() in base.py already
        checks for the same paths gtk.py tries; the only difference is
        that all of the are tried regardless of the current distro.

        Doing so is more portable, and lets us remove some distro-checking
        from the code.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._path_to_apache): Remove.

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

        Unreviewed, update the URL of the Szeged SVN mirror.

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

2012-10-01  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed. Create WebSocket watch list, and add myself to that list.

        * Scripts/webkitpy/common/config/watchlist:

2012-09-30  Taiju Tsuiki  <tzik@chromium.org>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-30  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Add a test to verify that a plugin does not receive touch-events unless it explicitly requests for them
        https://bugs.webkit.org/show_bug.cgi?id=97975

        Reviewed by Adam Barth.

        TestWebPlugin can now be configured to accept touch events or not. Use this
        configurability to verify that a plugin does not receive touch events unless
        it explicitly requests for them.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::initialize):
        (TestWebPlugin::parseBoolean):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):

2012-09-28  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [WK2][GTK][EFL] Share WebKit2-GTK plugin process implementation with EFL port
        https://bugs.webkit.org/show_bug.cgi?id=91844

        Reviewed by Simon Hausmann.

        Turn on Netscape Plugin API option by default.

        * Scripts/webkitperl/FeatureList.pm:

2012-09-28  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations is broken
        https://bugs.webkit.org/show_bug.cgi?id=97619

        Reviewed by Ojan Vafai.

        The new expectations format is causing two problems for
        webkit-patch rebaseline expectations

        1) the transformation into and out of the old syntax (which is
        still used internally) is somewhat lossy, e.g., we're not
        preserving the case of Bug(x) identifiers. Also, we can't
        tell if the input was [ WontFix ] or [ Skip WontFix Pass ]
        2) the new syntax is more lenient, allowing for multiple ways to
        specify the same result, e.g., "[ Skip ]" may or may not be
        missing.

        As a result, we end up rewriting a whole bunch of lines for
        purely syntactic differences.

        Both of these things are bugs that need to be fixed, but
        we should also not just rewrite lines that shouldn't be
        modified.

        This patch fixes the last issue (no rewriting).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationLine._format_line):
        (TestExpectations.remove_rebaselined_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RebaseliningTest.test_remove):

2012-09-28  Dirk Pranke  <dpranke@chromium.org>

        virtual directories should just rename the beginning of the test path
        https://bugs.webkit.org/show_bug.cgi?id=97925

        Reviewed by Ojan Vafai.

        We were replacing all occurrences of the base prefix of a
        virtual test suite with the virtual name, instead of just the
        first. So, where we had softwarecompositing running the
        compositing tests, any compositing test that actually had
        "compositing" in the test base name would get that expanded
        incorrectly.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.populated_virtual_test_suites):
        (Port.lookup_virtual_test_base):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:

2012-09-28  Ojan Vafai  <ojan@chromium.org>

        Garden-o-matic sometimes things buildbot warnings are failures
        https://bugs.webkit.org/show_bug.cgi?id=97926

        Reviewed by Tony Chang.

        It turns out the JSON clearly tells us if it's a failure.
        We want to skip all warnings even if they don't have "warning" in the text.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:

2012-09-28  Harald Tveit Alvestrand  <harald@alvestrand.no>

        Implement the GetStats interface on PeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95193

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCStatsRequestSucceededTask):
        (RTCStatsRequestSucceededTask::RTCStatsRequestSucceededTask):
        (MockWebRTCPeerConnectionHandler::getStats):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-28  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] XvfbDriver should choose the next free display
        https://bugs.webkit.org/show_bug.cgi?id=88414

        Reviewed by Dirk Pranke.

        This change how the XvfbDriver choose the next display. Before
        this the choosing are based on the worker number but it caused
        errors when several nrwt run on the same time. This add process
        based free diplay search.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver.__init__):
        (XvfbDriver._next_free_display):
        (XvfbDriver._start):
        (XvfbDriver.stop):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start_no_pixel_tests):
        (XvfbDriverTest.test_start_pixel_tests):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_next_free_display):
        (XvfbDriverTest):
        (XvfbDriverTest.test_start_next_worker):

2012-09-28  Huang Dongsung  <luxtella@company100.net>

        [GTK] Enable CSS Shaders layout LayoutTests on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=97821

        Reviewed by Martin Robinson.

        This feature is disabled via Settings by default, but for testing,
        we enable it using layoutTestController.overridePreferences. Add the
        necessary plumbing for DRT.

        WTR already works because support was added for Apple Mac earlier.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Feature is off by default.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::overridePreference): Add handling of WebKitCSSCustomFilterEnabled.

2012-09-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Make NRWT use wk2/TestExpectations file
        https://bugs.webkit.org/show_bug.cgi?id=97894

        Reviewed by Simon Hausmann.

        * Scripts/webkitpy/layout_tests/port/qt.py: Remove unnecessary _skipped_file_search_paths function.
        (QtPort.expectations_files): Add wk2 if --webkit-test-runner option added.
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py: Remove unnecessary test__skipped_file_search_paths function.
        (QtPortTest._assert_search_path): Removed.
        (QtPortTest.test_expectations_files): Add wk2 if --webkit-test-runner option added, and code cleanup.

2012-09-28  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] EFL's layoutTestController.keepWebHistory should enable visited links tracking
        https://bugs.webkit.org/show_bug.cgi?id=97901

        Reviewed by Kenneth Rohde Christiansen.

        EFL's DRT testRunner.keepWebHistory should enable visited links tracking in order
        to be consistent with WTR implementation and also several tests rely on that (fast/history).

        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::keepWebHistory):

2012-09-28  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] EFL DRT should disable visited links tracking by default
        https://bugs.webkit.org/show_bug.cgi?id=97881

        Reviewed by Kenneth Rohde Christiansen.

        Visited links tracking is disabled by default for each test.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-09-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r129863.
        http://trac.webkit.org/changeset/129863
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Broken debug WK2 layout test

        * MiniBrowser/efl/main.c:
        (quit):
        (main):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::initEcoreEvas):
        (WTR::PlatformWebView::~PlatformWebView):
        * WebKitTestRunner/efl/main.cpp:
        (main):

2012-09-28  Kai Koehne  <kai.koehne@digia.com>

        [Qt] Use qInstallMessageHandler()
        https://bugs.webkit.org/show_bug.cgi?id=96648

        Reviewed by Jocelyn Turcotte.

        qInstallMsgHandler() got deprecated in Qt 5.

        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        (messageHandler):
        (main):
        * WebKitTestRunner/qt/main.cpp:
        (messageHandler):
        (main):

2012-09-28  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Gyuyoung Kim.

        The initialization and shutdown are done inside the webkit, so we don't
        have to call them out of the webkit.

        * MiniBrowser/efl/main.c:
        (quit):
        (main):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::initEcoreEvas):
        (WTR::PlatformWebView::~PlatformWebView):
        * WebKitTestRunner/efl/main.cpp:
        (main):

2012-09-27  Alexandre Elias  <aelias@chromium.org>

        [chromium] DumpRenderTree support for software compositing
        https://bugs.webkit.org/show_bug.cgi?id=96853

        Reviewed by James Robinson.

        This adds software compositor support to DumpRenderTree.  The only
        thing needed is a minimal OutputSurfaceSoftware that holds a
        viewport-sized bitmap. Then, I added virtual test suite
        platform/chromium/virtual/softwarecompositing -- a mirror of the
        compositing/ directory with --enable-software-compositing, and
        expectations for not yet supported tests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::softwareCompositingEnabled):
        (TestShell::setSoftwareCompositingEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):
        * DumpRenderTree/chromium/WebViewHostOutputSurface.cpp:
        (WebKit::WebViewHostOutputSurface::create3d):
        (WebKit):
        (WebKit::WebViewHostOutputSurface::createSoftware):
        (WebKit::WebViewHostOutputSurface::WebViewHostOutputSurface):
        (WebKit::WebViewHostOutputSurface::bindToClient):
        (WebKit::WebViewHostOutputSurface::surfaceSoftware):
        * DumpRenderTree/chromium/WebViewHostOutputSurface.h:
        (WebKit):
        (WebViewHostOutputSurface):
        * DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.cpp: Copied from Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.cpp.
        (WebKit):
        (WebKit::WebViewHostSoftwareOutputDevice::lockForWrite):
        (WebKit::WebViewHostSoftwareOutputDevice::unlockForWrite):
        (WebKit::WebViewHostSoftwareOutputDevice::lockForRead):
        (WebKit::WebViewHostSoftwareOutputDevice::unlockForRead):
        (WebKit::WebViewHostSoftwareOutputDevice::viewportChanged):
        * DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.h: Copied from Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.cpp.
        (WebKit):
        (WebViewHostSoftwareOutputDevice):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-09-27  Nasko Oskov  <nasko@chromium.org>

        Move DumpRenderTree to use newer version of the name method of
        WebFrame and the willCheckAndDispatchMessageEvent method of WebFrameClient
        https://bugs.webkit.org/show_bug.cgi?id=95254

        Reviewed by Adam Barth.

        The WebFrame name() method is removed and replaced by better named
        uniqueName() method, so DRT needs to be updated to use this new version.
        Also the willCheckAndDispatchMessageEvent in WebFrameClient gained
        one more parameter, which had to be added in DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpFramesAsText):
        (dumpFramesAsPrintedText):
        (dumpFrameScrollPosition):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::unableToImplementPolicyWithError):
        (WebViewHost::willCheckAndDispatchMessageEvent):
        (WebViewHost::printFrameDescription):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-09-27  Julie Parent  <jparent@chromium.org>

        Add webkit_unit_tests to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=97814

        Reviewed by Dirk Pranke.

        webkit_unit_tests run on the same bots as test_shell_tests.

        * TestResultServer/static-dashboards/builders.js:
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2012-09-27  Florin Malita  <fmalita@chromium.org>

        [Perftest] PerfTestRunner exception when using nested git checkouts
        https://bugs.webkit.org/show_bug.cgi?id=97796

        Reviewed by Ryosuke Niwa.

        In order to support separate Chromium vs. WebKit git trees, PerfTestsRunner needs to
        instantiate per-repository SCM objects when collecting revision information.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_results_dict):

2012-09-27  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [Mac][DRT] Add support to allow non-array modifier arguments in keyDown()
        https://bugs.webkit.org/show_bug.cgi?id=97805

        Reviewed by Alexey Proskuryakov.

        Add support for handling a string as modifier argument to keyDown().
        This support has already been added to other ports, so implementing
        this on Mac too, to be consistent with the other ports.

        * DumpRenderTree/mac/EventSendingController.mm:
        (modifierFlags):
        (buildModifierFlags):

2012-09-27  Dirk Pranke  <dpranke@chromium.org>

        efl wk2 bots weren't looking at platform/wk2/TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=97815

        Unreviewed, build fix.

        Should clean up this logic later so that we're just using the
        implementation in base ...

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._search_paths):
        (EflPort.expectations_files):

2012-09-27  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: make warning about missing BUG identifiers per-port configurable
        https://bugs.webkit.org/show_bug.cgi?id=97751

        Reviewed by Ojan Vafai.

        Prior to this change linting TestExpectations files (checking their style)
        would raise warnings if lines were missing a BUG modifier, even
        though such a modifier is actually optional in the syntax. As we
        migrate the entries over from the Skipped files, these warnings
        will generate a lot of noise, and it's not yet clear that we
        actually want to require the modifiers on all ports.

        So, this change makes this per-port configurable so that they
        will generate warnings in the Chromium TestExpectations and not
        anywhere else.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_modifiers):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (MiscTests.test_parse_warning):
        (SemanticTests.test_missing_bugid):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.warn_if_bug_missing_in_test_expectations):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.warn_if_bug_missing_in_test_expectations):

2012-09-27  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Push more fonts for layout tests to match chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=97746

        Reviewed by Dirk Pranke.

        * DumpRenderTree/chromium/android_fallback_fonts.xml: Added the new fonts into fallback list. Removed the Android system fallback font DroidSansFallback.ttf.
        * Scripts/webkitpy/layout_tests/port/builders.py: Add chromium-android to pass style check.
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.check_build): Added check for md5sum and forwarder utilities to give better error message when they are missing.
        (ChromiumAndroidPort.check_sys_deps): Allow host font files to come from one of multiple directories.
        (ChromiumAndroidPort._path_to_md5sum):
        (ChromiumAndroidDriver._setup_md5sum_and_push_data_if_needed):
        (ChromiumAndroidDriver._push_fonts):
        (ChromiumAndroidDriver._push_test_resources):

2012-09-27  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Enhance MediaConstraints to make it easier to get the constraint data
        https://bugs.webkit.org/show_bug.cgi?id=97559

        Reviewed by Adam Barth.

        Refactoring for the new WebMediaConstraints api.

        * DumpRenderTree/chromium/MockConstraints.cpp:
        (MockConstraints::verify):

2012-09-27  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Rename MockConstraints::verify to verifyConstraints
        https://bugs.webkit.org/show_bug.cgi?id=97779

        Reviewed by Csaba Osztrogonác.

        The Mac OS X sdk has a macro called verify :/

        * DumpRenderTree/chromium/MockConstraints.cpp:
        (MockConstraints::verifyConstraints):
        * DumpRenderTree/chromium/MockConstraints.h:
        (MockConstraints):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::initialize):
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (WebUserMediaClientMock::requestUserMedia):

2012-09-27  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update getUserMedia to match the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=97540

        Reviewed by Adam Barth.

        http://dev.w3.org/2011/webrtc/editor/getusermedia.html#navigatorusermedia
        Navigator.getUserMedia is changed so that the audio and video members can either
        be a bool or a constraints object.

        * public/WebUserMediaRequest.h:
        (WebKit):
        (WebUserMediaRequest):
        * src/WebUserMediaRequest.cpp:
        (WebKit::WebUserMediaRequest::audioConstraints):
        (WebKit):
        (WebKit::WebUserMediaRequest::videoConstraints):

2012-09-26  Laszlo Gombos  <l.gombos@samsung.com>

        Unreviewed. Update my e-mail address.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-26  Dirk Pranke  <dpranke@chromium.org>

        modify old-run-webkit-tests to support TestExpectations files a little
        https://bugs.webkit.org/show_bug.cgi?id=97276

        Reviewed by Daniel Bates.

        This patch adds minimal support to old-run-webkit-tests so that
        it can read a TestExpectations file and skip the tests listed
        there. It will skip *all* tests, regardless of the expectation
        (even if the test is listed as [ Pass ]), and it will only look
        at the TestExpectations file if there isn't a Skipped file next
        to it.
        
        This will allow us to switch to using just using
        TestExpectations files without making old-run-webkit-tests
        totally useless.

        * Scripts/old-run-webkit-tests:
        (readSkippedFiles):
        (processSkippedFileEntry): Added.
        (startsWith): Added.

2012-09-26  Dirk Pranke  <dpranke@chromium.org>

        The style bot spams about skia_test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=97699

        Reviewed by Adam Barth.

        Remove the warning about a missing skia_test_expectations.txt
        file for now. There are some situations where it would be
        helpful to get this warning as it might indicate that the user
        is going to get results different than what they're expecting,
        but at the moment it looks difficult if not impossible to get
        those warnings and not also get warnings that we don't care
        about, so the noise is outweighing the value of the signal.

        This at least will stop the false negatives we're getting on the
        style bots. If it turns out people do need the warning we can
        add it back in in some other more conditional way.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.expectations_files):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_expectations):
        (_assert_command):

2012-09-26  David Michael Barr  <davidbarr@chromium.org>

        Unreviewed. Upgrade myself from contributor to committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Remove deprecated code from perftestrunner.py
        https://bugs.webkit.org/show_bug.cgi?id=97724

        Reviewed by Adam Barth.

        Remove the code deprecated in r129580 now that we have landed r129597,
        which updated master.cfg to use new options, and restarted the buildbot master.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._generate_and_show_results):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_with_slave_config_json):
        (test_parse_args):

2012-09-26  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=97629
        http/tests/security/cross-frame-access-put.html failing on Mac WK2 bots after 
        being unskipped

        Reviewed by Tim Horton.

        The test was failing because we were failing to use the fake window origin. We 
        should really always use the fake origin. This patch eliminates 
        _shouldUseFakeOrigin in favor of always using it.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow setFrameOrigin:]):
        (-[WebKitTestRunnerWindow setFrame:display:animate:]):
        (-[WebKitTestRunnerWindow setFrame:display:]):
        (-[WebKitTestRunnerWindow frameRespectingFakeOrigin]):

2012-09-26  Tony Chang  <tony@chromium.org>

        C++ style checker should warn when the indentation is wrong
        https://bugs.webkit.org/show_bug.cgi?id=97602

        Reviewed by Ojan Vafai.

        Rewrite the indentation checker to ensure that indentation is always a factor of 4
        and that we only indent 4 spaces from the previous line.

        I deleted some of the old indentation checking code since it was filtered out
        and didn't match the webkit style.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_indentation_amount): New function that checks indentation. Intentionally runs after
        other indentation checks.
        (check_style): Delete the old indentation code since we were already filtering out the whitespace/labels warnings.
        (CppChecker): Remove the whitespace/labels filter.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_multi_line_comments): Force 4 space indent.
        (CppStyleTest.test_explicit_single_argument_constructors):
        (CppStyleTest.test_explicit_single_argument_constructors.Foo):
        (CppStyleTest.test_explicit_single_argument_constructors.Qualifier):
        (CppStyleTest.test_slash_star_comment_on_single_line):
        (CppStyleTest.test_braces):
        (CppStyleTest.test_spacing_before_last_semicolon):
        (CppStyleTest.test_static_or_global_stlstrings):
        (CppStyleTest.test_indent): Added macro test case.
        (CppStyleTest.test_build_class):
        (NoNonVirtualDestructorsTest.test_no_error):
        (NoNonVirtualDestructorsTest.test_no_error.Foo):
        (NoNonVirtualDestructorsTest.test_no_error.Qualified):
        (NoNonVirtualDestructorsTest.test_no_destructor_when_virtual_needed):
        (NoNonVirtualDestructorsTest.test_no_destructor_when_virtual_needed.Foo):
        (NoNonVirtualDestructorsTest.test_destructor_non_virtual_when_virtual_needed):
        (NoNonVirtualDestructorsTest.test_destructor_non_virtual_when_virtual_needed.Foo):
        (NoNonVirtualDestructorsTest.test_no_warn_when_derived):
        (NoNonVirtualDestructorsTest.test_no_warn_when_derived.Foo):
        (NoNonVirtualDestructorsTest.test_internal_braces):
        (NoNonVirtualDestructorsTest.test_internal_braces.Foo):
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor):
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor.Foo):
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor.Foo.Goo):
        (NoNonVirtualDestructorsTest.test_outer_class_needs_virtual_destructor):
        (NoNonVirtualDestructorsTest.test_outer_class_needs_virtual_destructor.Foo):
        (NoNonVirtualDestructorsTest.test_outer_class_needs_virtual_destructor.Foo.Goo):
        (NoNonVirtualDestructorsTest.test_qualified_class_needs_virtual_destructor):
        (NoNonVirtualDestructorsTest.test_qualified_class_needs_virtual_destructor.Qualified):
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_no_error):
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_no_error.Foo):
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_with_error):
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_with_error.Foo):
        (WebKitStyleTest.test_indentation):
        (WebKitStyleTest.test_braces): Add test for call params spanning lines.

2012-09-26  Adam Barth  <abarth@webkit.org>

        Rollout messages should be clickable in bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=97711

        Reviewed by Simon Fraser.

        If we say Bug NNNN instead of just NNNN, bugzilla will autolink to the
        actual bug.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.run):

2012-09-26  Marcelo Lira  <marcelo.lira@openbossa.org>

        run-perf-tests must expand environment variables in user provided paths
        https://bugs.webkit.org/show_bug.cgi?id=97686

        Reviewed by Ryosuke Niwa.

        The run-perf-tests command line options that receive paths from the
        user now expand any possible environment variables, because Python's
        file handling methods do not handle those.

        Examples:
        run-perf-tests --platform=qt --release --output-json-path=~/perf-results
        run-perf-tests --platform=qt --release --output-json-path=$HOME/perf-results

        Also removed unused imports.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args._expand_path): expand environment variables in a path passed via command line
        (PerfTestsRunner._parse_args):

2012-09-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129654.
        http://trac.webkit.org/changeset/129654
        https://bugs.webkit.org/show_bug.cgi?id=97702

        breaks chromium windows build (Requested by schenney on
        #webkit).

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-26  Michael Saboff  <msaboff@apple.com>

        Unreviewed build change.

        Reverting inadvertent change to project file.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2012-09-26  Harald Tveit Alvestrand  <harald@alvestrand.no>

        Implement the GetStats interface on PeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95193

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCStatsRequestSucceededTask):
        (RTCStatsRequestSucceededTask::RTCStatsRequestSucceededTask):
        (MockWebRTCPeerConnectionHandler::getStats):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-26  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] Policy client: dumping from decidePolicyForResponse callback
        https://bugs.webkit.org/show_bug.cgi?id=97034

        Reviewed by Kenneth Rohde Christiansen.

        Provided dumping from WTR Policy client 'decidePolicyForResponse' callback.

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

2012-09-26  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt][WTR] Build fix for MSVC. 
        https://bugs.webkit.org/show_bug.cgi?id=97667

        Reviewed by Csaba Osztrogonác.

        WTR misses InjectedBundle headers. Adding $$PWD to Target.pri is required for MSVC. Clean build is necessary on Windows.

        * WebKitTestRunner/InjectedBundle/Target.pri:

2012-09-26  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] [DRT] eventSender.keyDown() doesn't support Ctrl key modifier
        https://bugs.webkit.org/show_bug.cgi?id=97665

        Reviewed by Rob Buis.

        This patch fixes test fast/forms/input-text-option-delete.html.

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

2012-09-26  Dinu Jacob  <dinu.s.jacob@intel.com>

        Unreviewed. Adding myself as a committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove color codes characters from run-gtk-tests output when not writing to a TTY
        https://bugs.webkit.org/show_bug.cgi?id=97660

        Reviewed by Philippe Normand.

        Remove also the '\r' characters returned by TTY output to try to fix
        the double line endings of the script output in the bots.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Compile a regexp for color codes if stdout
        it not a TTY.
        (TestRunner._run_test_command.parse_line): Remove color codes and
        '\r' characters from the line returned by the pseudo-terminal if
        stdout is not a TTY.
        * gtk/common.py:
        (parse_output_lines): Fix the last chunk check to make sure we
        always send entire lines to the callback, otherwise color codes
        regexp might fail if the line is not complete.

2012-09-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [DRT][WTR] Support overriding the 'WebKitDisplayImagesKey' preference
        https://bugs.webkit.org/show_bug.cgi?id=96883

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference): Support the
        'WebKitDisplayImagesKey' preference.

2012-09-26  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable some of the unstable CSS features
        https://bugs.webkit.org/show_bug.cgi?id=97572

        Reviewed by Martin Robinson.

        Enable the <style scoped> support via DumpRenderTreeSupportGtk method
        whenever resetting defualts to consistent values.

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

2012-09-26  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION (r126189): No more mismatch-did-not-occur failures in reftests
        https://bugs.webkit.org/show_bug.cgi?id=97112

        Reviewed by Dirk Pranke.

        Don't use the reftest's image hash when gathering output of its reference.
        This indirectly forces the driver to return the reference's image output
        as well. This specifically solves the problem when the reftest and its
        mismatch reference are equal but the unexpected match failure is not
        reported due to missing image output of the reference file.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.diff_image):
        (TestDriver.run_test):

2012-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        Update master.cfg to invoke run-perf-tests with --no-show-results and --reset-results
        https://bugs.webkit.org/show_bug.cgi?id=97613

        Reviewed by Dirk Pranke.

        Use options added in r129580.

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

2012-09-25  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Fix logging in pure protocol test harness
        https://bugs.webkit.org/show_bug.cgi?id=97579

        Reviewed by Yury Semikhatsky.

        JavaScript alert implementation in DumpRenderTree gets immediate flush to make sure that
        the message survives crash or kill by timeout.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::runJavaScriptAlert):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModalAlertDialog):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onJavaScriptAlert):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewScriptAlert):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::javaScriptAlert):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runJavaScriptAlertPanelWithMessage):

2012-09-25  Dan Bernstein  <mitz@apple.com>

        Tools part of <rdar://problem/11455228> [mac] Stop using screen fonts
        https://bugs.webkit.org/show_bug.cgi?id=97620

        Reviewed by John Sullivan.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Enable screen font substitution when
        running the tests.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Ditto.

2012-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. "values" doesn't necessarily contain multiple values but it needs to be always parsed as an array.

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

2012-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests: cleanup options and results generation code
        https://bugs.webkit.org/show_bug.cgi?id=97611

        Reviewed by Dirk Pranke.

        Previously, --test-results-server triggered old JSOn format where the outermost structure was a dictionary
        instead of an array, and also implicitly triggered --no-show-results, caused the old outputs not to merge,
        and prevented the generation of results page. Also, it was not obvious that --source-json-path is an option
        used only on buildbot slaves.

        This patch will:
        - Remove the old format since perf-o-matic supports new format now.
        - Add --reset-results option so that we can explicitly clear existing outputs.
        - Add --slave-config-json-path option to replace --source-json-path option.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Added --reset-results and --slave-config-json-path options.
        (PerfTestsRunner._generate_and_show_results): Refactored. Also removed the code to strip "values" from
        results since perf-o-matic can parse and store these values now.
        (PerfTestsRunner._merge_outputs_if_needed): Renamed from _merge_outputs_if_needed.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_with_json_output): Test a harmless behavioral change to generate resuls page even when
        --test-results-server is present.
        (test_run_with_description):
        (test_run_generates_json_by_default):
        (test_run_merges_output_by_default): Added.
        (test_run_respects_reset_results): Added.
        (test_run_with_slave_config_json):
        (test_run_with_bad_slave_config_json): Use --slave-config-json-path instead of --source-json-path to make
        sure this optioon works as well.
        (test_run_with_multiple_repositories):
        (test_run_with_upload_json):

2012-09-25  Simon Fraser  <simon.fraser@apple.com>

        Fix SnowLeopard build by adding #ifdefs.
        
        Fix crashes on some tests where the CFURLRef appears to be null.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm:
        (WTR::testPathFromURL):
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):

2012-09-25  Simon Fraser  <simon.fraser@apple.com>

        Speculative build fix for Production builds.

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

2012-09-25  Simon Fraser  <simon.fraser@apple.com>

        Fix the build after r129566.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:

2012-09-25  Dominic Mazzoni  <dmazzoni@google.com>

        AX: AccessibilityUIElementChromium.cpp won't build on Windows without wtf/StringExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=97614

        Unreviewed, fixing windows breakage.

        Added wtf/StringExtras.h to the includes to fix the Chromium/Windows build.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:

2012-09-24  Simon Fraser  <simon.fraser@apple.com>

        <rdar://problem/12351906> Have DumpRenderTree and WebKitTestRunner crash logs show which test crashed

        Reviewed by Mark Rowe.

        Use a new WebKitSytemInterface function to add data to crash logs about which 
        test was running when the crash happened.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig: Make sure WEBKIT_SYSTEM_INTERFACE_LIBRARY is defined.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: link with the WebKitSystemInterface library.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (testPathFromURL): Given a (probably) file URL, return the part after "/LayoutTests/"
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]): Tell Crash Reporter which test was running,
        if we're the main frame and the test is active.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig: Make sure WEBKIT_SYSTEM_INTERFACE_LIBRARY is defined.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: link the injected bundle with the WebKitSystemInterface library.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): Call platformDidStartProvisionalLoadForFrame().
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame): Stub for non-Mac platforms.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Add a platformDidStartProvisionalLoadForFrame() for platform-specific work.
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm: Added.
        (WTR::testPathFromURL): Given a (probably) file URL, return the part after "/LayoutTests/"
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame): Tell Crash Reporter which test was running,
        if we're the main frame.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Add InjectedBundlePageMac.mm.

2012-09-25  Julie Parent  <jparent@chromium.org>

        Make test_shell_tests show up in flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=97585

        Reviewed by Dirk Pranke.

        test_shell_tests run only on chromium.org, and on the same bots as
        the layout tests, so do not use the generic fallbacks.

        * TestResultServer/static-dashboards/builders.js:
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2012-09-25  Lucas Forschler  <lforschler@apple.com>

        Python tests fail on Windows bots when running with more than one child process.  Temporarily use only one child process until the problem can be fixed.
        https://bugs.webkit.org/show_bug.cgi?id=97465
        
        Reviewed by Tim Horton.

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

2012-09-25  Mike West  <mkwst@chromium.org>

        Unreviewed. Adding myself as a committer.

        Yay. :)

        * Scripts/webkitpy/common/config/committers.py:

2012-09-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=95397
        Need to merge didFirstVisuallyNonEmptyLayout and 
        didNewFirstVisuallyNonEmptyLayout
        -and corresponding-
        <rdar://problem/10791680>

        Reviewed by Sam Weinig.

        Account for the new member of the PageLoadClient.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

        The NewFirstVisuallyNonEmptyLayoutForImages has existed for a while, 
        but it did not have the right target membership.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        Use new didLayout API instead of old 
        didNewFirstVisuallyNonEmptyLayout API.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        (TestWebKitAPI):
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):

2012-09-25  Benjamin Poulain  <bpoulain@apple.com>

        Add missing support for Geolocation tests on WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=97518

        Reviewed by Sam Weinig.

        There are two main features added to the tooling to make the test run:
        -Add support for error reporting for position errors through setMockGeolocationPositionUnavailableError.
        -Support the 3 states permission: undefined-allowed-denied.

        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::GeolocationProviderMock):
        (WTR::GeolocationProviderMock::setPosition):
        (WTR::GeolocationProviderMock::setPositionUnavailableError):
        (WTR::GeolocationProviderMock::startUpdating):
        (WTR::GeolocationProviderMock::sendPositionIfNeeded):
        (WTR::GeolocationProviderMock::sendErrorIfNeeded):
        * WebKitTestRunner/GeolocationProviderMock.h:
        (GeolocationProviderMock):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setMockGeolocationPositionUnavailableError):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMockGeolocationPositionUnavailableError):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::decidePolicyForGeolocationPermissionRequest):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setGeolocationPermission):
        (WTR::TestController::setMockGeolocationPosition):
        (WTR::TestController::setMockGeolocationPositionUnavailableError):
        (WTR::TestController::handleGeolocationPermissionRequest):
        (WTR::TestController::decidePolicyForGeolocationPermissionRequestIfPossible):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2012-09-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129517.
        http://trac.webkit.org/changeset/129517
        https://bugs.webkit.org/show_bug.cgi?id=97582

        Link errors in chromium (Requested by alecf on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockConstraints.cpp: Removed.
        * DumpRenderTree/chromium/MockConstraints.h: Removed.
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestFailedTask::RTCSessionDescriptionRequestFailedTask):
        (RTCVoidRequestTask::RTCVoidRequestTask):
        (isSupportedConstraint):
        (isValidConstraint):
        (MockWebRTCPeerConnectionHandler::initialize):
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (WebKit::WebUserMediaClientMock::requestUserMedia):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        (WebKit):
        (WebUserMediaClientMock):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost):

2012-09-25  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Chromium doesn't pass accessibility text range and line number tests
        https://bugs.webkit.org/show_bug.cgi?id=97246

        Reviewed by Chris Fleizach.

        Provide a chromium implementation of some AccessibilityUIElement
        methods needed by accessibility tests.

        Enables four existing tests to pass on Chromium:
        Tests: accessibility/textarea-insertion-point-line-number.html
               accessibility/textarea-line-for-index.html
               accessibility/textarea-selected-text-range.html
               accessibility/textbox-role-reports-selection.html

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (AccessibilityUIElement::insertionPointLineNumberGetterCallback):
        (AccessibilityUIElement::selectedTextRangeGetterCallback):
        (AccessibilityUIElement::lineForIndexCallback):
        (AccessibilityUIElement::setSelectedTextRangeCallback):

2012-09-25  Peter Beverloo  <peter@chromium.org>

        [Chromium] Android's build archives have grown from 38M to 102M in 11 days
        https://bugs.webkit.org/show_bug.cgi?id=97336

        Reviewed by Adam Barth.

        Each WebKit target results in four APKs in the out/{Debug,Release}/ directory,
        while we really only need one. Ignoring the unsigned APKs removes six from
        the archive will make sure that we only archive a single APK per target,
        bringing its size back to rougly 40 megabytes.

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

2012-09-25  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update getUserMedia to match the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=97540

        Reviewed by Adam Barth.

        Adding mock support for the enhanced getUserMedia call.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockConstraints.cpp: Copied from Source/WebCore/platform/chromium/support/WebMediaConstraints.cpp.
        (MockConstraints):
        (MockConstraints::isSupported):
        (MockConstraints::isValid):
        (MockConstraints::verify):
        * DumpRenderTree/chromium/MockConstraints.h: Copied from Tools/DumpRenderTree/chromium/WebUserMediaClientMock.h.
        (WebKit):
        (MockConstraints):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestFailedTask::RTCSessionDescriptionRequestFailedTask):
        (RTCVoidRequestTask::RTCVoidRequestTask):
        (MockWebRTCPeerConnectionHandler::initialize):
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (UserMediaRequestTask):
        (UserMediaRequestTask::UserMediaRequestTask):
        (WebUserMediaClientMock::requestUserMedia):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        (WebUserMediaClientMock):
        (WebUserMediaClientMock::taskList):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost):

2012-09-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Do not dump inspector output in DRT
        https://bugs.webkit.org/show_bug.cgi?id=97018

        Reviewed by Kenneth Rohde Christiansen.

        Some inspector-related layout tests expect console output from the
        inspector view to be suppressed. Do that by setting a property in
        the inspector view that makes the onConsoleMessage callback return
        early and not output anything.

        Using evas_object_data_{get,set} is not very beautiful, but it is
        still better than properly subclassing Ewk_View and having to
        implement something similar to drt_view_console_message_enable_set().

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createWebInspectorView):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onConsoleMessage):

2012-09-25  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs support for setWillSendRequestReturnsNullOnRedirect
        https://bugs.webkit.org/show_bug.cgi?id=97542

        Reviewed by Kenneth Rohde Christiansen.

        Implement support for setWillSendRequestReturnsNullOnRedirect
        in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::willSendRequestReturnsNullOnRedirect):
        (WTR::TestRunner::setWillSendRequestReturnsNullOnRedirect):
        (TestRunner):

2012-09-25  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] [DRT] fast/forms/textarea-live-pseudo-selectors.html failed
        https://bugs.webkit.org/show_bug.cgi?id=97189

        Reviewed by Rob Buis.

        Translate ASCII key code to BlackBerry key code for BACKSPACE and DELETE key.

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

2012-09-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WTR bundle client loads binary data as text
        https://bugs.webkit.org/show_bug.cgi?id=97532

        Reviewed by Kenneth Rohde Christiansen.

        WTR::InjectedBundlePage::decidePolicyForResponse now checks response MIME type
        and returns WKBundlePagePolicyActionPassThrough if it cannot be shown.

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

2012-09-25  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed, another test case adjustment after r129459. Python 2.7 doesn't
        seem to be a requirement yet so the assertDictEqual method is not yet available
        on all builders. Assert that the empty dictionary length equals 0 instead.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_interpret_test_failures):

2012-09-24  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with latest Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=97479

        Reviewed by Tor Arne Vestbø.

        The variables for syncqt handling are now set in api.pri, but let's add a comment here that we can
        remove them from default_pre.prf once we're past Qt 5 beta2.

        * qmake/mkspecs/features/default_pre.prf:

2012-09-25  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed, adjusting the test cases after r129459. The JSON data
        for reftests now contains the 'reftest_type' key and no more 'is_reftest'
        or 'is_mismatch_reftest' keys.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (EndToEndTest.test_reftest_with_two_notrefs):

2012-09-24  Zan Dobersek  <zandobersek@gmail.com>

        Unexpected reftest passes are only reported when pixel testing is enabled in results.html as well
        https://bugs.webkit.org/show_bug.cgi?id=97426

        Reviewed by Ojan Vafai.

        The 'is_reftest' member of the TestResult class has been replaced by the reftest_type
        member which is a set containing either '!=', '==', both or none if the test represented
        by the object is not a reftest.

        When summarizing results, the test dictionary is updated to contain the 'reftest_type' key
        if the test is a reftest. The value of this key is a list of all the reftest types of this test.

        The test failure interpretation method has been refactored, it now reports only
        missing results of various formats and image diff percent in case of image or
        reftest mismatch.

        Unit tests have been modified accordingly.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner._update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests.test_update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (interpret_test_failures):
        (summarize_results):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_interpret_test_failures):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.run):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (EndToEndTest.test_reftest_with_two_notrefs):

2012-09-24  Sam Weinig  <sam@webkit.org>

        Use NSUserDefaults rather than an environment variable to control whether to use an XPC Service for the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=97514

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (argumentsForRunAndDebugMacWebKitApp):
        Push "-WebKit2UseXPCServiceForWebProcess YES" as arguments when --use-web-process-xpc-service
        is provided to set the user default. Move adding of @ARGV to after custom additions as calling
        shouldUseXPCServiceForWebProcess() can change @ARGV.

        (runMacWebKitApp):
        (execMacWebKitAppForDebugging):
        Stop setting the WEBKIT_USE_XPC_SERVICE_FOR_WEB_PROCESS environment variable.

2012-09-24  Laszlo Gombos  <l.gombos@samsung.com>

        [GTK][EFL] Make sure cairo is built with fontconfig support
        https://bugs.webkit.org/show_bug.cgi?id=97513

        Reviewed by Martin Robinson.

        The GTK and EFL port of WebKit requires a version of cairo that is built with fontconfig support. 

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

2012-09-24  Benjamin Poulain  <bpoulain@apple.com>

        Fix Geolocation error reporting in the test support
        https://bugs.webkit.org/show_bug.cgi?id=97386

        Reviewed by Sam Weinig.
        The TestRunner was exposing internal implementation details of
        the Geolocation object through setMockGeolocationError().

        In practice, only the error code PositionUnavailable is supported
        or even implemented.

        Exposing setMockGeolocationError() does not make sense for WebKit2 as
        passing generic errors from the UIProcess is a bad idea. This is the
        opportunity to clean TestRunner and prepare and interface suitable for WebKit2.

        * DumpRenderTree/TestRunner.cpp:
        (setMockGeolocationPositionUnavailableErrorCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/mac/MockGeolocationProvider.h:
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider dealloc]):
        (-[MockGeolocationProvider resetError]):
        (-[MockGeolocationProvider setPosition:]):
        (-[MockGeolocationProvider setPositionUnavailableErrorWithMessage:]):
        (-[MockGeolocationProvider lastPosition]):
        (-[MockGeolocationProvider timerFired]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setMockGeolocationPositionUnavailableError):
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        (TestRunner::setMockGeolocationPositionUnavailableError):

2012-09-24  Nikhil Bansal  <n.bansal@samsung.com>

        [EFL][WK2] TestRunner needs touch events support.
        https://bugs.webkit.org/show_bug.cgi?id=96465

        Reviewed by Kenneth Rohde Christiansen.

        Simulate touch events in WebkitTestRunner for touch related
        layout tests. This patch uses ewk_view_feed_touch_event() to
        generate touch events.

        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR):
        (WTR::setEvasModifiers):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::~EventSenderProxy):
        (WTR::EventSenderProxy::sendTouchEvent):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::touchCancel):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::cancelTouchPoint):

2012-09-24  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] TestRunner does not support overridePreference with value "0"
        https://bugs.webkit.org/show_bug.cgi?id=97457

        Reviewed by Alexey Proskuryakov.

        testRunner.overridePreference() was marked as taking a boolean
        in argument in testRunner.idl even though the test cases are
        passing strings to it. The current code works if the test
        case wants to enable a setting and therefore passes "1" string.
        However, if the test wants to disable a setting and passes "0"
        string, the current code also evaluates this to true causing
        certain test cases to fail.

        The argument to testRunner.overridePreference() is now of string
        type and a function has been added to convert the string passed
        by the test to a boolean value.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::toBool):
        (WTR):
        (WTR::TestRunner::overridePreference):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129343.
        http://trac.webkit.org/changeset/129343
        https://bugs.webkit.org/show_bug.cgi?id=97479

        It broke the build (Requested by Ossy_NIGHT on #webkit).

        * qmake/mkspecs/features/default_pre.prf:

2012-09-24  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Unskip the Shadow DOM layout tests
        https://bugs.webkit.org/show_bug.cgi?id=90776

        Reviewed by Ryosuke Niwa.

        Enable Shadow DOM through DumpRenderTreeSupport when resetting defaults in between tests.

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

2012-09-24  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION (r129211-r129218): http/tests/loading/redirect-with-no-location-crash.html failing on GTK Linux 64-bit Release WK2 (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=97404

        Reviewed by Philippe Normand.

        Print out the 'didReceiveTitle' information when dumping frame load callbacks.

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

2012-09-24  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with latest Qt 5

        Reviewed by Tor Arne Vestbø.

        The variables for syncqt handling are now set in api.pri, but let's add a comment here that we can
        remove them from default_pre.prf once we're past Qt 5 beta2.

        * qmake/mkspecs/features/default_pre.prf:

2012-09-22  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Layout tests would be easier to write if AccessibilityController could find an element by id
        https://bugs.webkit.org/show_bug.cgi?id=97301

        Reviewed by Chris Fleizach.

        Adds a new accessibleElementById method to AccessibilityController, to make it
        easier to write cross-platform layout tests.

        Implemented for Chromium and for Mac (DRT and WKTR).

        * DumpRenderTree/AccessibilityController.cpp:
        (getAccessibleElementByIdCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        (AccessibilityController):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::findAccessibleElementByIdRecursive):
        (AccessibilityController::getAccessibleElementById):
        (AccessibilityController::accessibleElementByIdGetterCallback):
        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.h:
        (AccessibilityController):
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/mac/AccessibilityCommonMac.h: added
        * DumpRenderTree/mac/AccessibilityCommonMac.mm: added
        (+[NSString stringWithJSStringRef:]):
        (-[NSString createJSStringRef]):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (findAccessibleObjectById):
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (AccessibilityController):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h: added
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm: added
        (+[NSString stringWithJSStringRef:]):
        (-[NSString createJSStringRef]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::findAccessibleObjectById):
        (WTR):
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2012-09-22  Zan Dobersek  <zandobersek@gmail.com>

        Unexpected reftest passes are only reported when pixel testing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=97242

        Reviewed by Dirk Pranke.

        LayoutTestRunner should know whether the finished test it's handling is
        a reftest. This is necessary when updating result summary for reftests
        when pixel testing is not enabled - in these circumstances an unexpectedly
        passing reftest was not reported as such due to pixel testing then being
        determined by searching for reftest failures in failures list, which were
        not found in an empty failure list of a passing test. Now the TestResult
        objects have a member variable indicating the test is a reftest whenever
        that's the case.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner._update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests.test_update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.run):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__):

2012-09-21  Sam Weinig  <sam@webkit.org>

        WebProcess XPC services need have their environment set without disrupting all other XPC services
        https://bugs.webkit.org/show_bug.cgi?id=95161

        Reviewed by Anders Carlsson.

        Remove setting the __XPC_* environment variables.

        * Scripts/webkitdirs.pm:
        (setUpGuardMallocIfNeeded):
        (runMacWebKitApp):
        (execMacWebKitAppForDebugging):

2012-09-21  Dirk Pranke  <dpranke@chromium.org>

        Fix typo in additional-platform-directory patch just landed
        https://bugs.webkit.org/show_bug.cgi?id=97380
        
        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.relative_test_filename):
        (Port.relative_perf_test_filename):

2012-09-21  Dirk Pranke  <dpranke@chromium.org>

        nrwt: don't require additional-platform-directory to be an abspath or live under LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=97380

        Reviewed by Ojan Vafai.

        There doesn't seem to be a good reason for this restriction and
        it's useful to be able to point to directories outside the
        checkout for results (e.g., for local failures due to a 10.7.4
        install ;).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.relative_test_filename):
        (Port.relative_perf_test_filename):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._command_from_driver_input):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_additional_platform_directory):

2012-09-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: drop support for old TestExpectations syntax
        https://bugs.webkit.org/show_bug.cgi?id=97364

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._collect_matching_tests):
        (TestExpectationParser):
        (TestExpectationParser._tokenize_line):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (SkippedTests.test_skipped_entry_dont_exist):
        (ExpectationSyntaxTests.assert_tokenize_exp):
        (ExpectationSyntaxTests.test_bare_name):
        (ExpectationSyntaxTests.test_bare_name_and_bugs):
        (ExpectationSyntaxTests.test_comments):
        (ExpectationSyntaxTests.test_config_modifiers):
        (ExpectationSyntaxTests.test_unknown_config):
        (ExpectationSyntaxTests.test_unknown_expectation):
        (ExpectationSyntaxTests.test_skip):
        (ExpectationSyntaxTests.test_slow):
        (ExpectationSyntaxTests.test_wontfix):
        (ExpectationSyntaxTests.test_blank_line):
        (ExpectationSyntaxTests.test_warnings):
        (RebaseliningTest.test_no_get_rebaselining_failures):

2012-09-21  Simon Fraser  <simon.fraser@apple.com>

        Improve WTR unresponsiveness output a little
        https://bugs.webkit.org/show_bug.cgi?id=97370

        Reviewed by Timothy Horton.

        Distinguish between conditions that already set the errorMessage,
        and unresponsiveness due to slow about:blank loads when WTR
        reports unresponsiveness.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-09-21  Chris Rogers  <crogers@google.com>

        Add Web Audio support for deprecated/legacy APIs
        https://bugs.webkit.org/show_bug.cgi?id=97050

        Reviewed by Eric Carlson.

        * Scripts/webkitperl/FeatureList.pm:

2012-09-21  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: update remaining tests to use the new expectation syntax
        https://bugs.webkit.org/show_bug.cgi?id=97362

        Reviewed by Ojan Vafai.

        This patch updates all the unit tests that were still using the
        old TestExpectations syntax to use the new syntax *except* for
        the tests that were specifically testing that we parsed the old
        syntax correctly.

        Also, a block of tests for the new syntax were duplicated, so
        I've deleted the duplicate.

        Note that the old syntax is still supported so this change should
        produce no visible changes.

        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (MiscTests.test_multiple_results):
        (MiscTests.test_category_expectations):
        (MiscTests.test_error_on_different_platform):
        (MiscTests.test_error_on_different_build_type):
        (MiscTests.test_overrides):
        (MiscTests.test_overrides__directory):
        (MiscTests.test_overrides__duplicate):
        (MiscTests.test_more_specific_override_resets_skip):
        (SkippedTests.check):
        (SkippedTests.test_duplicate_skipped_test_fails_lint):
        (SkippedTests.test_skipped_file_overrides_expectations):
        (SkippedTests.test_skipped_dir_overrides_expectations):
        (SkippedTests.test_skipped_file_overrides_overrides):
        (SkippedTests.test_skipped_dir_overrides_overrides):
        (ExpectationSyntaxTests.disabled_test_missing_expectation):
        (ExpectationSyntaxTests.disabled_test_missing_colon):
        (ExpectationSyntaxTests.disabled_test_too_many_colons):
        (ExpectationSyntaxTests.disabled_test_too_many_equals_signs):
        (ExpectationSyntaxTests):
        (ExpectationSyntaxTests.test_unrecognized_expectation):
        (ExpectationSyntaxTests.test_macro):
        (SemanticTests.test_bug_format):
        (SemanticTests.test_bad_bugid):
        (SemanticTests.test_missing_bugid):
        (SemanticTests.test_slow_and_timeout):
        (SemanticTests.test_rebaseline):
        (test_missing_file):
        (test_ambiguous):
        (test_more_modifiers):
        (test_order_in_file):
        (test_macro_overrides):
        (OldExpectationParserTests):
        (OldExpectationParserTests._tokenize):
        (OldExpectationParserTests.test_tokenize_extra_colon):
        (OldExpectationParserTests.test_tokenize_missing_equal):
        (OldExpectationParserTests.test_tokenize_extra_equal):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_skip_failing_tests):
        (MainTest.test_additional_expectations):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_valid_expectations):
        (TestExpectationsTestCase.test_invalid_expectations):
        (TestExpectationsTestCase.test_tab):

2012-09-21  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Add basic testing support for Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=97278

        Reviewed by Kenneth Rohde Christiansen.

        Update the Geolocation testing to use the proper API in the UIProcess.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/GNUmakefile.am:

        * WebKitTestRunner/GeolocationProviderMock.cpp: Added.
        (WTR::startUpdatingCallback):
        (WTR::stopUpdatingCallback):
        (WTR::GeolocationProviderMock::GeolocationProvierMock):
        (WTR::GeolocationProviderMock::setMockGeolocationPosition):
        (WTR::GeolocationProviderMock::startUpdating):
        (WTR::GeolocationProviderMock::stopUpdating):
        (GeolocationProviderMock):
        The GeolocationProvider store the location update and deliver them as needed.

        WebCore GeolocationController do not support asynchronous update on start/stop. This is not
        a problem in this case because all the messages between the WebProcess and the UIProcess are
        asynchronous. Because of this, unlike GeolocationClientMock, we do not use a timer for event
        delivery.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setGeolocationPermission):
        (WTR::InjectedBundle::setMockGeolocationPosition):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setGeolocationPermission):
        (WTR::TestRunner::setMockGeolocationPosition):
        From the InjectedBundle, we now pass the information to the UIProcess so that
        GeolocationProvider and the TestController can respond appropriately.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::decidePolicyForGeolocationPermissionRequest):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::setMockGeolocationPosition):
        * WebKitTestRunner/TestController.h:
        (TestController):
        (WTR::TestController::setGeolocationPermission):
        (WTR::TestController::isGeolocationPermissionAllowed):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2012-09-21  Joanmarie Diggs  <jdiggs@igalia.com>

        REGRESSION (r127882): accessibility/spinbutton-value.html failing on GTK
        https://bugs.webkit.org/show_bug.cgi?id=96196

        Reviewed by Martin Robinson.

        The "regression" is that a new test was added but the support was missing
        in the Gtk port for spin buttons.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::valueDescription): Updated the FIXME comment to
        indicate that this cannot be implemented until it is implemented in ATK.
        URL of the newly-filed ATK bug included for reference.

2012-09-21  Dirk Pranke  <dpranke@chromium.org>

        Fix test_skip_and_wontfix failure
        https://bugs.webkit.org/show_bug.cgi?id=97225

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (SemanticTests.test_skip_and_wontfix):

2012-09-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement ViewState methods in PageClientImpl in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=97202

        Reviewed by Martin Robinson.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::focus): Focus the view.

2012-09-21  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WTR] Memory leaks in InjectedBundleController::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=97329

        Reviewed by Alexey Proskuryakov.

        Fix leaks in InjectedBundleController::initialize() by adopting
        strings created with WKStringCreateWithUTF8CString().

        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):

2012-09-21  Marcelo Lira  <marcelo.lira@openbossa.org>

        [Qt][WK2] Removed duplicated code from EventSenderProxy::keyDown
        https://bugs.webkit.org/show_bug.cgi?id=97235

        Reviewed by Luiz Agostini.

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::keyDown):

2012-09-21  Gergely Kis  <gergely@homejinni.com>

        Add MIPS build slave to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=96713

        Reviewed by Csaba Osztrogonác.

        Added a build slave for MIPS, and enabled a builder for 
        Qt Linux MIPS32R2 little-endian release build.

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

2012-09-21  Peter Beverloo  <peter@chromium.org>

        [Chromium] Switch back to a fixed fifo path for Android
        https://bugs.webkit.org/show_bug.cgi?id=97230

        Reviewed by Tony Chang.

        Because not all external storage cards will be formated using a file
        system that supports named pipes, Chromium has been changed to creating
        the pipes in a temporary folder on the internal storage. Adapt this in
        WebKit so we can continue to run layout tests.

        This also includes an *unreviewed* fix for a breakage in the webkitpy
        tests I made in r129221. Two lines and related to this code, so I decided
        to include it in this change.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._setup_test):
        (ChromiumAndroidDriver._update_version):

2012-09-20  Peter Beverloo  <peter@chromium.org>

        Leverage Chromium's code to set up FIFOs for Chromium Android layout tests
        https://bugs.webkit.org/show_bug.cgi?id=97227

        Reviewed by Tony Chang.

        We switched Chromium to using FIFOs in order to achieve better consistency,
        which was done by Marcus in r157541. Remove all custom WebKit code in
        favor of Chromium's implementation.

        Remove more FIFO code in the test runner itself, including the code in
        DumpRenderTree that invoked it. We can now switch to Chromium's brand
        new FIFO-creating code, which is being set-up for all test targets build
        for Android, including DumpRenderTree, TestWebKitAPI and webkit_unit_tests.

        This also changes the ChromiumAndroidDriver._remove_all_pipes method to
        delete the files individually. "rm" would fail if one of the earlier files
        does not exist, and the "-f" argument doesn't seem to be reliable.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (platformInit):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._setup_test):
        (ChromiumAndroidDriver._get_external_storage):
        (ChromiumAndroidDriver._drt_cmd_line):
        (ChromiumAndroidDriver._remove_all_pipes):
        (ChromiumAndroidDriver.stop):
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-09-21  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] EventSender needs to implement scheduleAsynchronousClick
        https://bugs.webkit.org/show_bug.cgi?id=97326

        Reviewed by Kenneth Rohde Christiansen.

        Implement scheduleAsynchronousClick() in WebKitTestRunner's
        EventSender by sending a "MouseDown" and a "MouseUp" message
        asynchronously to the WebProcess.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::createMouseMessageBody):
        (WTR):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::scheduleAsynchronousClick):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):

2012-09-21  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Error out early if we don't have ICU available

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/configure.prf:

2012-09-21  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Bail out when trying to build WebKit with Qt != 5

        Reviewed by Tor Arne Vestbø.

        Moved check for Qt version out of default_pre into top-level WebKit.pro,
        because we never reach default_pre.prf due to the lack of .qmake.conf support
        in older versions of Qt/QMake.

        * qmake/mkspecs/features/default_pre.prf:

2012-09-21  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs to print frame load delegate information
        https://bugs.webkit.org/show_bug.cgi?id=42705

        Reviewed by Kenneth Rohde Christiansen.

        Added missing dumping from WTR::InjectedBundlePage::didFailLoadWithErrorForFrame.

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

2012-09-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EventSender should mimic CTRL+o emacs shortcut
        https://bugs.webkit.org/show_bug.cgi?id=97224

        Reviewed by Kenneth Rohde Christiansen.

        Add support for mimicking CTRL+o emacs shortcut in EFL's
        EventSender in DumpRenderTree and WebKitTestRunner.

        * DumpRenderTree/efl/EventSender.cpp:
        (sendKeyDown):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::keyDown):

2012-09-21  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Re-fix clean builds

        Reviewed by Tor Arne Vestbø.

        Re-introduce the sanitization for LIBS when creating a module to use
        LIBS_PRIVATE and otherwise do _not_ use LIBS_PRIVATE. We decided to
        continue to use QT, LIBS and PKGCONFIG instead of their _PRIVATE variants
        throughout the code base, so just using LIBS_PRIVATE in linkAgainstLibrary()
        causes build issues when depending system libraries end up in LIBS before
        LIBS_PRIVATE.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-09-20  Simon Fraser  <simon.fraser@apple.com>

        Comment out a failing webkitpy unit test until Dirk can fix it.

        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (SemanticTests.test_skip_and_wontfix):

2012-09-20  Dirk Pranke  <dpranke@chromium.org>

        make Skip, WontFix be the only expectations on a line
        https://bugs.webkit.org/show_bug.cgi?id=97225

        Reviewed by Ojan Vafai.

        It is now incorrect in the new syntax to have a line like:

            foo.html [ WontFix Crash ]

        This will generate a lint warning and be treated as an invalid
        line. Fixing this caused a whole bunch of unit tests to need updating
        to no longer be marked as WontFix :). Also, this patch adjusts
        the warnings so that missing Bug() identifiers will cause lint
        warnings but will *not* cause the line to be treated as invalid.
        Fixing these issues also revealed that test_hung_thread was no
        longer testing the right logic, so I adjusted the timeouts in
        test.py to make that test work again.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_test_in_another_thread):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_summarized_results_wontfix):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_modifiers):
        (TestExpectationParser._tokenize_line_using_new_format):
        (TestExpectationLine.is_invalid):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (BasicTests.test_basic):
        (test_get_test_set):
        (test_parse_warning):
        (test_pixel_tests_flag):
        (SemanticTests.test_missing_bugid):
        (SemanticTests):
        (SemanticTests.test_skip_and_wontfix):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_hung_thread):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_basic):
        (PrintExpectationsTest.test_multiple):
        (PrintExpectationsTest.test_full):
        (PrintExpectationsTest.test_exclude):
        (PrintExpectationsTest.test_csv):

2012-09-20  Lucas Forschler  <lforschler@apple.com>

        Unreviewed.  Start running tests on the mac-ews.
        
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):

2012-09-20  Tony Chang  <tony@chromium.org>

        [chromium] Enable more clang warnings
        https://bugs.webkit.org/show_bug.cgi?id=97257

        Reviewed by James Robinson.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Add -Wunused-parameter. Don't add -Wglobal-constructors because
        there are lots of violations in these files.

2012-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should record individual value instead of statistics
        https://bugs.webkit.org/show_bug.cgi?id=97155

        Reviewed by Hajime Morita.

        Parse the list of individual value reported by tests and include them as "values".
        We strip "values" from the output JSON when uploading it to the perf-o-matic
        since it doesn't know how to parse "values" or ignore it.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        (PerfTest.parse_output): Parse and report "values".
        (PageLoadingPerfTest.run): Report indivisual page loading time in "values".
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest.test_run):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_and_show_results): Strip "values" from each result
        until we update perf-o-matic.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_memory_test):
        (test_run_with_json_output):
        (test_run_with_description):
        (test_run_with_slave_config_json):
        (test_run_with_multiple_repositories):

2012-09-20  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix production builds

        Unreviewed trivial fix: Follow up r129119 and avoid clobbering LIBS through the use of LIBS_PRIVATE.

        Otherwise the libQtWebKit.prl file for example contains -lWebKit1 -lWebCore, etc.

        * qmake/mkspecs/features/functions.prf:

2012-09-20  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION: layout test results doesn't show diffs
        https://bugs.webkit.org/show_bug.cgi?id=97182

        Reviewed by Ojan Vafai.

        Go back to storing TEXT, AUDIO, and IMAGE+TEXT in results.json
        so that results.html (and hopefully garden-o-matic) can
        determine which things actually failed. However, we keep mapping
        these results to Failure so that we still only have a single
        expectation type for them.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectations):
        (TestExpectations.result_was_expected):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (determine_result_type):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_retrying_and_flaky_tests):

2012-09-20  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Extend UserMediaRequest with a ownerDocument method
        https://bugs.webkit.org/show_bug.cgi?id=97095

        Reviewed by Adam Barth.

        Extending WebUserMediaClientMock to check that the owning document is valid,
        and that the document has a frame.

        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        (WebKit::WebUserMediaClientMock::requestUserMedia):

2012-09-20  Stephen Chenney  <schenney@chromium.org>

        [Chromium] DRT does not support --dump-all-pixels flag
        https://bugs.webkit.org/show_bug.cgi?id=95098

        Reviewed by Dirk Pranke.

        Add support for the --pixel-tests and shorthand -p option in Chromium DumpRenderTree. Use
        of this flag causes pixel results to be created for all tests, regardless of
        individual test options. If an individual test provides a pixel hash it will be used,
        otherwise the hash will be empty. This replaces a previously defined but unused option
        --dump-all-pixels, and is useful primarily when debugging DRT instances.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest): Add a parameter and code to force pixel results for the test.
        (main): Add parameter handling for --pixels-test and -p, and remove --dump-all-pixels.

2012-09-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-api-tests should not buffer test stdout
        https://bugs.webkit.org/show_bug.cgi?id=88474

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner._run_test_command): Use os.forkpty() instead of
        subprocess.Popen() so that gtest sends the output with colors to
        stdout. Use common.parse_output_lines() to parse the output and
        write it to stdout while it's read.
        (TestRunner._run_test_command.parse_line): Parse the line to get
        the test pid and write the line to stdout.
        (TestRunner._run_test_command.waitpid): Helper function to call
        waitpid handling EINTR.
        (TestRunner._run_test_command.return_code_from_exit_status):
        Helper function to convert exit status of test commands to a
        return code.
        * gtk/common.py:
        (parse_output_lines): Helper function that uses select to read
        the given file descriptor and call the given callback for every
        line read.

2012-09-20  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix initial build

        Reviewed by Tor Arne Vestbø.

        When building QtWebKit the first time there is no qt_webkit.pri module pri file, and therefore
        $$QT.webkit.name isn't set and so creating_module isn't set. That has all sorts of implications
        causing incorrect linking for Makefile.api, etc.

        Fix the determination by simply checking if MODULE is set, which only happens in api.pri.

        * qmake/mkspecs/features/webkit_modules.prf:

2012-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129091.
        http://trac.webkit.org/changeset/129091
        https://bugs.webkit.org/show_bug.cgi?id=97205

        It broke perf tests everywhere (Requested by Ossy on #webkit).

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        (PerfTest.parse_output):
        (PageLoadingPerfTest.run):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest.test_run):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_and_show_results):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_memory_test):
        (test_run_with_json_output):
        (test_run_with_description):
        (test_run_with_slave_config_json):
        (test_run_with_multiple_repositories):

2012-09-20  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] QtWebKit module header includes private dependencies

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf: Don't try to sanitize LIBS, because we can make sure
        that LIBS_PRIVATE is set from the beginning. Moved the creating_module and PKGCONFIG/QT(_PRIVATE)
        sanitization into webkit_modules.prf. creating_module determination requires TARGET to be set, so
        we can't do it in default_pre.
        * qmake/mkspecs/features/webkit_modules.prf:

2012-09-20  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with MingW

        Reviewed by Tor Arne Vestbø.

        Don't try to compile WebCore, etc. with debug symbols for production
        builds, it's just too big.

        * qmake/mkspecs/features/production_build.prf:

2012-09-20  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][DRT]DumpRenderTree needs to reset focus state when test starts.
        https://bugs.webkit.org/show_bug.cgi?id=97087

        Reviewed by Gyuyoung Kim.

        Add focusing a main frame on settings reset.
        After editing/undo/undo-iframe-location-change was executed a frame
        was left in unfocused state. This caused flakiness in two tests results.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-09-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Add eventSender.gestureTap
        https://bugs.webkit.org/show_bug.cgi?id=66173

        Reviewed by Kenneth Rohde Christiansen.

        Implement support for sending raw QGesture events.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::gestureTap):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):

2012-09-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129007.
        http://trac.webkit.org/changeset/129007
        https://bugs.webkit.org/show_bug.cgi?id=97172

        It broke the build on the Qt bots (Requested by Ossy on
        #webkit).

        * qmake/config.tests/gccdepends/empty.cpp:
        * qmake/config.tests/gccdepends/gccdepends.pro:
        * qmake/mkspecs/features/default_pre.prf:

2012-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should record indivisual value instead of statistics
        https://bugs.webkit.org/show_bug.cgi?id=97155

        Reviewed by Hajime Morita.

        Parse the list of indivisual value reported by tests and include them as "values".
        We strip "values" from the output JSON when uploading it to the perf-o-matic
        since it doesn't know how to parse "values" or ignore it.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        (PerfTest.parse_output): Parse and report "values".
        (PageLoadingPerfTest.run): Report indivisual page loading time in "values".
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest.test_run):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_and_show_results): Strip "values" from each result
        until we update perf-o-matic.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_memory_test):
        (test_run_with_json_output):
        (test_run_with_description):
        (test_run_with_slave_config_json):
        (test_run_with_multiple_repositories):

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        Fix regex groups for bug matching in flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=97152

        Unreviewed, build fix.

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

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        nrwt: print unexpected results using new TestExpectations syntax
        https://bugs.webkit.org/show_bug.cgi?id=97159

        Unreviewed, build fix.

        Change new-run-webkit-tests to print out failures using the new
        syntax when there are unexpected results, e.g.:

        52 tests ran as expected, 19 didn't:


        Regressions: Unexpected failures : (2)
          failures/flaky/text.html [ Failure ]
          failures/unexpected/text-image-checksum.html [ Failure ]

        and so forth

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_unexpected_results):

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        update flakiness dashboard after cutover to new test expectations syntax
        https://bugs.webkit.org/show_bug.cgi?id=97152

        Unreviewed, build fix.

        Handle (??) the new Bug notations as well. Hopefully we don't
        still need the old ones.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (filterBugs):
        (htmlForBugs):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        update flakiness dashboard after cutover to new test expectations syntax
        https://bugs.webkit.org/show_bug.cgi?id=97152

        Reviewed by Ryosuke Niwa.

        This change clones the TestExpectation parsing state machine
        from python into javascript.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (parsedExpectations.lines.forEach):
        (parsedExpectations):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-09-19  Dana Jansens  <danakj@chromium.org>

        Add backer@chromium.org as contributor
        https://bugs.webkit.org/show_bug.cgi?id=97150

        * Scripts/webkitpy/common/config/committers.py:

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        fix MISSING after TestExpectations conversion
        https://bugs.webkit.org/show_bug.cgi?id=97148

        Unreviewed, expectations change / build fix.

        * Scripts/convert-test-expectations:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        nrwt: convert chromium TestExpectations to the new syntax
        https://bugs.webkit.org/show_bug.cgi?id=97139

        Reviewed by Ryosuke Niwa.
    
        Add in a file temporarily that does the conversion of
        test expectations formats

        * Tools/Scripts/convert-test-expectations: Added.

2012-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: run-perf-tests no longer reports the total test time
        https://bugs.webkit.org/show_bug.cgi?id=97138

        Reviewed by Tony Chang.

        Report the finished time as a info-level log as opposed to a debug level log.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.normalizeFinishedTime): Added. It replaces all finished times by 0.1 seconds.
        (test_run_test_pause_before_testing):
        (test_run_test_set_for_parser_tests):
        (test_run_memory_test):
        (_test_run_with_json_output):

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        Support new TestExpectations format alongside old one
        https://bugs.webkit.org/show_bug.cgi?id=96588

        Reviewed by Ojan Vafai.

        This patch adds support for actually reading in lines formatted
        in the new style, and when we re-serialize/write out the file,
        all lines will be written in the new style. Note that reading in
        the old style is still supported, and no updates are being made
        to the actual TestExpectations files as part of this change.

        This change updates most but not all of the unit tests to use
        the new syntax. I will update the rest when (or before where
        possible) I drop support for the old format.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser._tokenize_line):
        (TestExpectationParser._tokenize_line_using_new_format):
        (TestExpectationLine.to_string):
        (TestExpectationLine._format_line):
        (TestExpectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_warning):
        (SkippedTests.test_skipped_entry_dont_exist):
        (NewExpectationSyntaxTests.test_warnings):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        (RebaseliningTest.test_remove):
        (RebaseliningTest.test_no_get_rebaselining_failures):
        (TestExpectationParserTests.test_tokenize_blank):
        (TestExpectationParserTests.test_tokenize_extra_colon):
        (TestExpectationParserTests.test_tokenize_missing_equal):
        (TestExpectationParserTests.test_tokenize_extra_equal):
        (TestExpectationSerializationTests.test_unparsed_to_string):
        (TestExpectationSerializationTests.test_unparsed_list_to_string):
        (TestExpectationSerializationTests.test_parsed_to_string):
        (TestExpectationSerializationTests.test_format_line):
        (TestExpectationSerializationTests.test_string_roundtrip):
        (TestExpectationSerializationTests.test_list_roundtrip):
        (TestExpectationSerializationTests.test_reconstitute_only_these):
        (TestExpectationSerializationTests.test_string_whitespace_stripping):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_lint_test_files__errors):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_basic):
        (PrintExpectationsTest.test_multiple):
        (PrintExpectationsTest.test_full):
        (PrintExpectationsTest.test_exclude):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_expectations_noop):
        (test_overrides_are_included_correctly):

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        implement first part of support for the new TestExpectations syntax
        https://bugs.webkit.org/show_bug.cgi?id=96569

        Reviewed by Ryosuke Niwa.

        This patch implements support for parsing a line of the new
        format for the TestExpectations file and converting it back into
        the old format for compatibility. This routine is not yet used
        by anything.

        The new format is documented at:
          http://trac.webkit.org/wiki/TestExpectations

        but, in short:

          [bugs] [ "[" modifiers "]" ] test_name [ "[" expectations "]" ]

        - Comments are indicated with "#" instead of "//"
        - If no expectations are specified we default to Skip for
          compatibility with the Skipped files (these two changes make
          Skipped files a subset of TestExpectations files)

        - All of the tokens are now CamelCase instead of ALLCAPS.
        - FAIL -> Failure
        - IMAGE -> ImageOnlyFailure
        - WONTFIX -> WontFix
        - modifiers refer to just the platforms and configurations
          (release/debug) that the line applies to.
        - WontFix, Rebaseline, Slow, and Skip move to the right-hand side as
          expectations
        - expectations will typically be written out in lexicographic order
        - We use webkit.org/b/12345, crbug.com/12345, and Bug(dpranke)
          instead of BUGWK12345, BUGCR12345, and BUGDPRANKE.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser._tokenize_line_using_new_format):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (NewExpectationSyntaxTests):
        (NewExpectationSyntaxTests.assert_exp):
        (NewExpectationSyntaxTests.test_bare_name):
        (NewExpectationSyntaxTests.test_bare_name_and_bugs):
        (NewExpectationSyntaxTests.test_comments):
        (NewExpectationSyntaxTests.test_config_modifiers):
        (NewExpectationSyntaxTests.test_unknown_config):
        (NewExpectationSyntaxTests.test_unknown_expectation):
        (NewExpectationSyntaxTests.test_skip):
        (NewExpectationSyntaxTests.test_slow):
        (NewExpectationSyntaxTests.test_wontfix):
        (NewExpectationSyntaxTests.test_blank_line):
        (NewExpectationSyntaxTests.test_warnings):

2012-09-19  Dirk Pranke  <dpranke@chromium.org>

        nrwt: replace TEXT, AUDIO, and IMAGE+TEXT with FAIL
        https://bugs.webkit.org/show_bug.cgi?id=96845

        Reviewed by Ojan Vafai.

        In preparation for the new TestExpectations syntax, we replace
        all TEXT, IMAGE+TEXT, and AUDIO failures with FAIL. This will
        make switching to the new syntax lossless (i.e., we lose
        information now, not then).

        Note that we can still parse in results.json files that have the
        old data for backwards compatibility.
        

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (JSONTestResult._failure_types_from_actual_result):
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        (ResultsJSONParserTest):
        (test_basic):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_summarized_results_wontfix):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):
        (TestExpectations.remove_pixel_failures):
        (TestExpectations.has_pixel_failures):
        (TestExpectations.suffixes_for_expectations):
        (TestExpectations.get_rebaselining_failures):
        (TestExpectations.remove_configuration_from_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (assert_bad_expectations):
        (BasicTests):
        (BasicTests.test_basic):
        (MiscTests):
        (MiscTests.test_multiple_results):
        (MiscTests.test_result_was_expected):
        (MiscTests.test_remove_pixel_failures):
        (MiscTests.test_suffixes_for_expectations):
        (test_get_expectations_string):
        (test_parse_warning):
        (test_error_on_different_platform):
        (test_error_on_different_build_type):
        (test_overrides):
        (test_overrides__directory):
        (test_overrides__duplicate):
        (test_pixel_tests_flag):
        (test_more_specific_override_resets_skip):
        (SkippedTests.test_skipped_file_overrides_expectations):
        (SkippedTests.test_skipped_dir_overrides_expectations):
        (SkippedTests.test_skipped_file_overrides_overrides):
        (SkippedTests.test_skipped_dir_overrides_overrides):
        (ExpectationSyntaxTests.test_missing_colon):
        (ExpectationSyntaxTests.test_too_many_equals_signs):
        (SemanticTests.test_bug_format):
        (SemanticTests.test_bad_bugid):
        (SemanticTests.test_missing_bugid):
        (SemanticTests.test_rebaseline):
        (test_missing_file):
        (test_more_modifiers):
        (test_order_in_file):
        (test_macro_overrides):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        (RebaseliningTest.test_remove):
        (TestExpectationSerializationTests.test_serialize_parsed_expectations):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (determine_result_type):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_test_expectations):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_retrying_and_flaky_tests):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_valid_expectations):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_basic):
        (PrintExpectationsTest.test_multiple):
        (PrintExpectationsTest.test_full):
        (PrintExpectationsTest.test_exclude):
        (PrintExpectationsTest.test_csv):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_does_not_include_overrides):
        (test_overrides_are_included_correctly):

2012-09-19  Dominic Mazzoni  <dmazzoni@google.com>

        AX: A few control types are returning the wrong answer for isReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=96735

        Reviewed by Chris Fleizach.

        Exposing isReadOnly in an AccessibilityObject to DumpRenderTree.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::isReadOnlyGetterCallback):
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h:
        (AccessibilityUIElement):

2012-09-19  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WTR] Memory leaks in TestRunner::deliverWebIntent()
        https://bugs.webkit.org/show_bug.cgi?id=97111

        Reviewed by Kenneth Rohde Christiansen.

        Fix memory leaks in deliverWebIntent() by adopting strings
        created with WKStringCreateWithUTF8CString().

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::deliverWebIntent):

2012-09-19  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix incremental builds with all-in-one-files and gccdepends

        Reviewed by Tor Arne Vestbø.

        Pass -MP to gcc when we use the gcc depends feature, to ensure that implicit rules
        are not only created for header files but also for .cpp files. AllInOne.cpp files
        include other .cpp files, and when those are removed we need those dummy rules to
        avoid a "No rule to make Foo.cpp required by AllInOne.o" error.

        * qmake/config.tests/gccdepends/empty.cpp:
        (main):
        * qmake/config.tests/gccdepends/gccdepends.pro:
        * qmake/mkspecs/features/default_pre.prf:

2012-09-19  Rick Byers  <rbyers@chromium.org>

        Do touch adjustment on GestureTapDown
        https://bugs.webkit.org/show_bug.cgi?id=96677

        Reviewed by Antonio Gomes.

        Allow radius to be set for GestureTapDown events.
        * DumpRenderTree/chromium/TestRunner/EventSender.cpp:
        (EventSender::gestureEvent):

2012-09-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's DRT does not support overriding 'WebKitCSSRegionsEnabled' preference
        https://bugs.webkit.org/show_bug.cgi?id=97100

        Reviewed by Gyuyoung Kim.

        EFL's DRT now supports overriding the 'WebKitCSSRegionsEnabled'
        preference, in order to match WebKitTestRunner functionality.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):

2012-09-18  Kangil Han  <kangil.han@samsung.com>

        [WK2][WTR] CodeGeneratorTestRunner could keep original copyright.
        https://bugs.webkit.org/show_bug.cgi?id=96181

        Reviewed by Daniel Bates.

        This patch enabled derived files, in DerivedSources/InjectedBundle, to keep original copyright.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (new):
        (_parseLicenseBlock):
        (_parseLicenseBlockFromFile):
        (_defaultLicenseBlock):
        (_licenseBlock):
        (_generateHeaderFile):
        (_generateImplementationFile):

2012-09-18  Byungwoo Lee  <bw80.lee@samsung.com>

        Title string should be changed when document.title is set to ''.
        https://bugs.webkit.org/show_bug.cgi?id=96793

        Reviewed by Kenneth Rohde Christiansen.

        Change dump format of dumpTitleChanges more understandable.
        Uses single quotation marks for the title string.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::didReceiveTitleForFrame):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveTitle):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameTitleChanged):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewTitleChanged):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::titleChanged):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didReceiveTitle):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (LayoutWebViewEventHandler::OnReceivedTitleEvent):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):

2012-09-18  Szilard Ledan  <szledan@inf.u-szeged.hu>

        EWS shouldn't sleep if there are new patches in its queue
        https://bugs.webkit.org/show_bug.cgi?id=83038

        Reviewed by Eric Seidel.

        EWS tries to process a security patch. Of course it can't, because the EWS isn't
        the member of the security group. But the problem is that after it can't process
        the attachment, it says that queue is empty (but it isn't!) and it sleeps 2 minutes
        and push the security patch to the end of the queue.
        Now it stays in the loop until it finds a patch or the queue gets empty.

        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractPatchQueue._next_patch):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractPatchQueueTest.test_next_patch):

2012-09-18  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] InjectedBundle::booleanForKey() should handle literals effectively
        https://bugs.webkit.org/show_bug.cgi?id=97014

        Reviewed by Kenneth Rohde Christiansen.

        According to http://trac.webkit.org/wiki/EfficientStrings WTF::StringBuilder::appendLiteral() shall
        be used for literals rather than WTF::StringBuilder::append().

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::booleanForKey):

2012-09-18  Simon Hausmann  <simon.hausmann@digia.com>

        Update my e-mail address.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-18  Andras Becsi  <andras.becsi@digia.com>

        Update my e-mail address.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-18  Andras Becsi  <andras.becsi@digia.com>

        [Qt] qt_webkit.pri should not be listed in Tools.pro

        Reviewed and rubber-stamped by Simon Hausmann and Tor Arne Vestbø.

        Since r128751 the module pri file is auto-generated
        but it was still listed in OTHER_FILES.

        * Tools.pro: Remove unneeded line.

2012-09-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with some versions of the gold linker

        Reviewed by Tor Arne Vestbø.

        Don't unconditionally pass --no-keep-memory to the linker, some versions might not support it.
        Instead run a compile/link test first to see if it works.

        * qmake/config.tests/gnuld/gnuld.pro: Added.
        * qmake/config.tests/gnuld/main.cpp: Added.
        (main):
        * qmake/mkspecs/features/unix/default_post.prf:

2012-09-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Remove forced use of gold.

        Reviewed by Tor Arne Vestbø.

        The choice of what linker to use with WebKit should be taken by Qt's build system and ideally the same for all
        modules of Qt. Then in turn it is usually up to the administrator of the machine. Recent Debian based systems
        often offer the automatic use of gold through a symlink and a dpkg-diversion when installing the gold package.

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

2012-09-18  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Prospective Qt/Windows cross-compiling fix

        Reviewed by Tor Arne Vestbø.

        The win32 scope is not set when cross-compiling from Linux to Windows.

        * qmake/mkspecs/features/functions.prf:

2012-09-18  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] Remove background view on EWebLauncher and MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=96905

        Reviewed by Gyuyoung Kim.

        The size of webview was changed after adding url bar.
        And the background view is not necessary anymore, since it was used for debugging back in the day.

        * EWebLauncher/main.c:
        (_ELauncher):
        (on_ecore_evas_resize):
        (browserCreate):
        * MiniBrowser/efl/main.c:
        (_MiniBrowser):
        (on_ecore_evas_resize):
        (browserCreate):

2012-09-18  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] run-webkit-tests unable to find TestExpectations for WK2
        https://bugs.webkit.org/show_bug.cgi?id=96998

        Reviewed by Philippe Normand.

        We should look for TestExpectations files in all the locations where
        we currently look for Skipped files. This will allow
        run-webkit-tests to look for TestExpectations files in
        platform/gtk-wk2 and platform/wk2 if the "-2" flag is used.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.expectations_files):

2012-09-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build without the QtQuick module

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-09-18  Stephanie Lewis  <slewis@apple.com>

        Build fix after http://trac.webkit.org/projects/webkit/changeset/128852.

        Unreviewed.

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

2012-09-18  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Unreviewed update of email addresses for Berlin QtWebKit office.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-17  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] fast/loader/display-image-unset-can-block-image-and-can-reload-in-place.html failing after r128645
        https://bugs.webkit.org/show_bug.cgi?id=96899

        Reviewed by Martin Robinson.

        When overriding the 'WebKitDisplayImageKey' preference, use the
        'auto-load-images' property of WebKitWebSettings as the property which
        should be updated with the corresponding preference value.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::overridePreference):

2012-09-17  Pratik Solanki  <psolanki@apple.com>

        DumpRenderTree and WebKitTestRunner should compile with -Wundef on Mac
        https://bugs.webkit.org/show_bug.cgi?id=96973

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/PlatformWebView.h: Use #ifdef __OBJC__ and not #if.

2012-09-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove "unexpected EOF" warnings
        https://bugs.webkit.org/show_bug.cgi?id=96970

        Reviewed by Ojan Vafai.

        After debugging this a bit, it looks like there aren't any cases
        that I can reproduce where a read() of zero indicates something
        actually wrong; either it is a prelude to a crash, or a false
        negative. So, I'm removing these warnings and adding a comment.

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

2012-09-17  Dirk Pranke  <dpranke@chromium.org>

        [chromium] ASAN bot is crashing at the end of the run
        https://bugs.webkit.org/show_bug.cgi?id=96967

        Reviewed by Abhishek Arya.

        The ASAN bot is crashing attempting to decode some output into
        UTF-8; there's no reason to do this, so let's not do this and
        see if something else is going on as well.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._get_crash_log):

2012-09-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: --results-directory isn't getting printed properly
        https://bugs.webkit.org/show_bug.cgi?id=96965

        Reviewed by Ojan Vafai.

        options.results_directory isn't actually initialized with the
        default values until after we call print_config(), so this
        changes things to print the value directly.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):

2012-09-17  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Enable VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=96949

        Reviewed by Antonio Gomes.

        * Scripts/webkitperl/FeatureList.pm:

2012-09-17  Rick Byers  <rbyers@chromium.org>

        Add handling of new GestureTapCancel in DRT

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

        Reviewed by Antonio Gomes.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::handleInputEvent):
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::gestureTapCancel):

2012-09-17  Philip Rogers  <pdr@google.com>

        Teach style checker about preprocessor directive indentation rules
        https://bugs.webkit.org/show_bug.cgi?id=96874

        Reviewed by Adam Barth.

        Preprocessor directives (#ifdef, #include, #define, etc.) should not be indented.
        This is not explicit in our style guide but is generally followed in our code.
        Searching for violations in our codebase shows these are rarely indented:
            #include - indented in 6 files
            #ifdef - indented in 0 files
            #ifndef - indented in 1 file
            #define - indented in 11 files
            #if - indented in 7 files

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_directive_indentation):

            This is the simple test where we look for spaces followed by a #.

        (check_style):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

            A few tests needed to be modified because they had unintentionally indented
            preprocessor directives.

        (CppStyleTest.test_build_class.Foo):
        (CppStyleTest.test_build_class):
        (CppStyleTest.test_build_class.DERIVE_FROM_GOO):
        (WebKitStyleTest.test_line_breaking):
        (WebKitStyleTest.test_directive_indentation):

2012-09-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Auto-generate the module pri file for QtWebKit

        Reviewed by Simon Hausmann.

        * qmake/qt_webkit.pri: Removed.

2012-09-14  Dirk Pranke  <dpranke@chromium.org>

        nrwt: --additional-platform-dir is broken on chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=96840

        Reviewed by Ojan Vafai.

        Looks like I broke this when cleaning things up as part of
        adding ML support. Fixing and adding a test.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.default_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.default_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.default_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_check_build):
        (test_additional_platform_directory):

2012-09-13  Stephanie Lewis  <slewis@apple.com>

        mac-future ignores previous platform TestExpectations.
        https://bugs.webkit.org/show_bug.cgi?id=96718.

        Reviewed by Dirk Pranke.

        TestExpectations match an expectation's configuraton against a list of configurations that are 
        valid for that port.  That list does not contain mac-future so none of the expectations can be
        applied.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort._generate_all_test_configurations):

2012-09-14  Adam Barth  <abarth@webkit.org>

        Remove webkitPostMessage
        https://bugs.webkit.org/show_bug.cgi?id=96577

        Reviewed by Ojan Vafai.

        Add ENABLE_LEGACY_VENDOR_PREFIXES flag.

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

2012-09-14  Alexey Proskuryakov  <ap@apple.com>

        [WK2] webarchive/loading/javascript-url-iframe-crash.html fails
        https://bugs.webkit.org/show_bug.cgi?id=96817

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame): This callback
        got overlooked when adding logging elsewhere.

2012-09-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Build fix for DumpRenderTree following r128628
        https://bugs.webkit.org/show_bug.cgi?id=96808

        Reviewed by Tony Chang.

        When building DumpRenderTree from the Chromium project, a compile error
        shows up because including the header ForwardIOStreamsAndroid.h cannot
        be located. TestWebKitAPI does this correctly.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-09-14  Dana Jansens  <danakj@chromium.org>

        Change cc-bugs@google.com watchlist to cc-bugs@chromium.org
        https://bugs.webkit.org/show_bug.cgi?id=96805

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2012-09-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Support the --{in,out,err}-fifo arguments on TestWebKitAPI and webkit_unit_tests
        https://bugs.webkit.org/show_bug.cgi?id=96687

        Reviewed by Tony Chang.

        Android's DumpRenderTree currently supports these arguments, implemented
        as part of TestShellAndroid:
        http://trac.webkit.org/browser/trunk/Tools/DumpRenderTree/chromium/TestShellAndroid.cpp?rev=128496

        They're used by the layout test runner to get the STDOUT and STDERR while
        a layout test run is in process, which is a safer alternative to parsing
        all the logcat output manually. The implementation can be seen here:
        http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py?rev=128496#L590

        This patch generalizes parsing of and applying the effects of these arguments
        so that they can be used for TestWebKitAPI and webkit_unit_tests as well.
        After this patch, this will make it possible to pull out the output-reading
        code from Android's layout test port and generalize it so it can be re-used
        in the new test-runner for the other two test suites.

        This has no effect when compiling and running these tests as part of Chromium
        code, which has a much more advanced test-runner that does parse complete log
        output, but also directly depends on code licensed under Apache 2.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (platformInit):
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-09-14  Zoltan Horvath  <zoltan@webkit.org>

        check-webkit-style should not warn in case of NONCOPYABLE and FAST_ALLOCATED macros
        https://bugs.webkit.org/show_bug.cgi?id=96656

        Reviewed by Adam Barth.

        We should allow to use WTF_MAKE_NONCOPYABLE(ClassName) and WTF_MAKE_FAST_ALLOCATED
        macros in 1 line.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_style.definitions):
        (check_style): Add rule.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_line_breaking): Add unittest.

2012-09-14  Christophe Dumez  <christophe.dumez@intel.com>

        WebKitTestRunner needs layoutTestController.dumpDatabaseCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=57570

        Reviewed by Kenneth Rohde Christiansen.

        Implement testRunner.dumpDatabaseCallbacks in WebKitTestRunner
        and dump the information expected by the test cases.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Explicitly set the default
        database quota.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::securityOriginToStr): New convenience function to convert
        a security origin to the string expected in test results.
        (WTR):
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didExceedDatabaseQuota):
        (WTR::InjectedBundlePage::didReachApplicationCacheOriginQuota): Minor
        refactoring to share code with didExceedDatabaseQuota.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpDatabaseCallbacks):
        (WTR::TestRunner::shouldDumpDatabaseCallbacks):
        (TestRunner):

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Set force_static_libs_as_shared early enough to be caught by configure

        Rubber-stamped by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove old cruft from the qmake build system

        Rubber-stamped by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * qmake/mkspecs/features/default_post.prf:

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Enable force_static_libs_as_shared for development

        Not enabled for buildbots or production-builds (part of Qt5)

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make force_static_libs_as_shared work on Mac OS

        We had to move a few LIBS += around that were in the wrong place,
        and not caught when everything was just linked into the final
        QtWebKit library.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/force_static_libs_as_shared.prf:

2012-09-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build of WTR on Windows

        Reviewed by Tor Arne Vestbø.

        WTR/qt/main.cpp includes TestController.h, which lives in just WTR/
        With qmake's unix makefile generator as well as with the MingW generator,
        the directory where the pro file lives (WTR/) is automatically added to
        the include search path, but not so with MSVC. Instead of relying on qmake's
        implicit feature here, add WTR/ explicitly to the include search path.

        * WebKitTestRunner/Target.pri:

2012-09-14  Christophe Dumez  <christophe.dumez@intel.com>

        WebKitTestRunner needs layoutTestController.setStopProvisionalFrameLoads
        https://bugs.webkit.org/show_bug.cgi?id=42691

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for testrunner.setStopProvisionalFrameLoads()
        in WebKitTestRunner.

        Original patch by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):
        (WTR::TestRunner::setStopProvisionalFrameLoads):
        (WTR::TestRunner::shouldStopProvisionalFrameLoads):

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix handling of debug/release/debug_and_release/build_all

        We now pick up the defaults from Qt, in default_pre (CONFIG already
        contains the appropriate values for debug and release). We then let
        the command line arguments to qmake, or the project files themselves,
        override the configuration, and finally we sanitize the configuration
        in default_post.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/mac/default_pre.prf:

2012-09-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        WebKitTestRunner needs layoutTestController.setTabKeyCyclesThroughElements
        https://bugs.webkit.org/show_bug.cgi?id=42687

        Reviewed by Kenneth Rohde Christiansen.

        Implement testRunner.setTabKeyCyclesThroughElements for
        WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setTabKeyCyclesThroughElements):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        EventSendingController::keyDown does not support non-array modifier arguments
        https://bugs.webkit.org/show_bug.cgi?id=96727

        Reviewed by Kenneth Rohde Christiansen.

        Add support for handling a string as modifier argument to
        EventSendingController::keyDown.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::parseModifierArray):

2012-09-14  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs layoutTestController.setCustomPolicyDelegate
        https://bugs.webkit.org/show_bug.cgi?id=42546

        Reviewed by Kenneth Rohde Christiansen.

        Exported TestRunner::setCustomPolicyDelegate() method.
        Allowed Policy Delegate dumping even if we're not in 'waitUntilDone' mode.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):

2012-09-14  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Clear application cache between tests in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=96543

        Reviewed by Philippe Normand.

        Call the new DumpRenderTreeSupportGtk method to clear application cache
        after each test in DumpRenderTree.

        Set the XDG_CACHE_HOME environment variable when running DumpRenderTree
        as well. It's now being set in XvfbDriver._start so that each driver is assigned
        a cache directory that's constructed out of the driver's name and its worker
        number. These directories are located in the layout tests results directory.
        At least on the builders this ensures a driver-specific empty cache directory
        with each test run.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):

2012-09-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix linking on Windows

        Reviewed by Tor Arne Vestbø.

        When compiling code _after_ QtWebKit.dll, we need to make sure that the QWEBKIT_EXPORT
        macro turns into an import macro, which means QT_MAKEDLL should only be set _up until_
        the QtWebKit.dll creation in the build process and be off afterwards. This is done in
        win32/default_post.prf using a !contains(QT, webkit): DEFINES += QT_MAKEDLL.

        r128450 sanitized the values of QT and PKGCONFIG to only contain the dependencies we
        want for QtWebKit.dll, but unfortunately that code was applied to any binary built also
        after the module. Therefore QT did never contain webkit anymore and we always passed
        QT_MAKEDLL to DEFINES, resulting in QWEBKIT_EXPORT to _not_ turn into an import macro.

        This patch introduces a creating_module configuration that is used to
        scope the qt/pkgconfig sanitization.

        * qmake/mkspecs/features/default_post.prf:

2012-09-14  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner is not dumping some frame load callbacks information
        https://bugs.webkit.org/show_bug.cgi?id=96740

        Reviewed by Kenneth Rohde Christiansen.

        Dump information expected by the test cases about the following
        frame load callbacks:
        "didDisplayInsecureContentForFrame"
        "didRunInsecureContentForFrame"
        "didDetectXSSForFrame"

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame): Print a URL
        as expected by test results by calling pathSuitableForTestResult() instead
        of printing raw URL.
        (WTR::InjectedBundlePage::didDisplayInsecureContentForFrame):
        (WTR::InjectedBundlePage::didRunInsecureContentForFrame):
        (WTR::InjectedBundlePage::didDetectXSSForFrame):

2012-09-14  Peter Beverloo  <peter@chromium.org>

        The runtime/unsigned category should be valid in the cpp style-checker.
        https://bugs.webkit.org/show_bug.cgi?id=96748

        Reviewed by Csaba Osztrogonác.

        This is causing the webkitpy tests to fail because it's not listed in the
        category array. Furthermore, change an "int" to "long" because it's
        throwing a double error in one of the earlier asserts.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2012-09-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Evas_Object* is a ref'ed structure, so tread it as such
        https://bugs.webkit.org/show_bug.cgi?id=96659

        Reviewed by Adam Barth.

        Replace OwnPtr<Evas_Object> with RefPtr.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (calculateDifference):
        (printImageDifferences):
        (readImageFromStdin):
        (main):

2012-09-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r128507.
        http://trac.webkit.org/changeset/128507
        https://bugs.webkit.org/show_bug.cgi?id=96659

        Revert. r128507 makes too many crashes in EFL layout test bots.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (calculateDifference):
        (printImageDifferences):
        (readImageFromStdin):
        (main):

2012-09-13  Kevin Funk  <kevin.funk@kdab.com>

        Make compile with both OS(WINCE) and PLATFORM(QT) support
        https://bugs.webkit.org/show_bug.cgi?id=95536

        Reviewed by Simon Hausmann.

        Fix wince support in qmake files

        * Tools.pro:
        * qmake/mkspecs/features/configure.prf:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:

2012-09-13  KwangYong Choi  <ky0.choi@samsung.com>

        [WK2] Add color picker API support for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=95058

        Reviewed by Gyuyoung Kim.

        Initialization code for color picker callbacks in UI client.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2012-09-13  Yuta Kitamura  <yutak@chromium.org>

        Upgrade yutak to reviewer
        https://bugs.webkit.org/show_bug.cgi?id=96721

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-13  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Make the style checker report usage of "unsigned int"
        https://bugs.webkit.org/show_bug.cgi?id=96693

        Reviewed by Dirk Pranke.

        Add a rule to check for uses of unsigned int, as the updated coding style recomends.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):

2012-09-13  Philip Rogers  <pdr@google.com>

        Add gender-neutral form of webkit-patch land-cowboy
        https://bugs.webkit.org/show_bug.cgi?id=96709

        Reviewed by Adam Barth.

        Add webkit-patch land-cowhand, the confident and courageous form of webkit-patch for everyone.

        * Scripts/webkitpy/tool/commands/download.py:
        (LandCowhand):

2012-09-13  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] Remove some parameters in browserCreate()
        https://bugs.webkit.org/show_bug.cgi?id=96499

        Reviewed by Kenneth Rohde Christiansen.

        There are too many parameters in browserCreate(). Lots of it seems like settings from command line argument.
        And I have moved some parameters into User_Arguments.

        * EWebLauncher/main.c:
        (_User_Arguments):
        (_ELauncher):
        (on_key_down):
        (browserCreate):
        (findThemePath):
        (parseUserArguments):
        (main):

2012-09-13  Mark Lam  <mark.lam@apple.com>

        Unreviewed. Adding myself to the committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests output cryptic error when the config file is missing.
        https://bugs.webkit.org/show_bug.cgi?id=96453

        Reviewed by Tony Chang.

        Add a special error message when a configuration file is missing.

        Also update the help message of --source-json-path to signify the fact it specifies
        the configuration file on performance tests bots.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._generate_and_show_results):
        (PerfTestsRunner._merge_slave_config_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (_test_run_with_json_output): Make upload to fail by default and assert the result
        in the function so that we can return logs instead.
        (_test_run_with_json_output.mock_upload_json):
        (test_run_with_json_output):
        (test_run_with_description):
        (test_run_respects_no_results):
        (test_run_with_slave_config_json):
        (test_run_with_bad_slave_config_json):
        (test_run_with_multiple_repositories):

2012-09-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Evas_Object* is a ref'ed structure, so tread it as such
        https://bugs.webkit.org/show_bug.cgi?id=96659

        Reviewed by Adam Barth.

        Replace OwnPtr<Evas_Object> with RefPtr.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (calculateDifference):
        (printImageDifferences):
        (readImageFromStdin):
        (main):

2012-09-13  Csaba Osztrogonác  <ossy@webkit.org>

        One more unreviewed trivial fix after r128399.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Fix URLs of the SVN mirror server.

2012-09-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial fix after r128399.

        * BuildSlaveSupport/wait-for-SVN-server.py: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/wait-for-SVN-server.py.
        (getLatestSVNRevision):
        (waitForSVNRevision):

2012-09-13  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.callShouldCloseOnWebView
        https://bugs.webkit.org/show_bug.cgi?id=96366

        Reviewed by Anders Carlsson.

        Implement testRunner.callShouldCloseOnWebView for WebKitTestRunner
        by calling shouldClose() on the FrameLoader.

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

2012-09-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128453.
        http://trac.webkit.org/changeset/128453
        https://bugs.webkit.org/show_bug.cgi?id=96681

        Having tests use the same appcache directory leads to timeouts
        (Requested by zdobersek on #webkit).

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):

2012-09-13  James Robinson  <jamesr@chromium.org>

        [chromium] Temporarily remove Android Builder (dbg) from garden-o-matic view
        https://bugs.webkit.org/show_bug.cgi?id=96678

        Reviewed by Dirk Pranke.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-09-13  Rob Buis  <rbuis@rim.com>

        Unreviewed changes to watchlist.

        - Add myself to BlackBerry bugs

        * Scripts/webkitpy/common/config/watchlist:

2012-09-13  Stephen Chenney  <schenney@chromium.org>

        Add an SVG entry to the watchlist

        Unreviewed config change.

        * Scripts/webkitpy/common/config/watchlist:
        - Created a new SVG watchlist label covering WebCore/svg and WebCore/rendering/svg
        - Added myself and pdr as watchers

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make WebKit2 work on Windows with Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=76776

        Reviewed by Tor Arne Vestbø.

        WebKit2 should compile with Qt on Windows now, so enable it. This patch in fact corrects
        the check to disable WebKit when we don't have USE_3D_GRAPHICS available, because we need
        that for the GL TextureMapper (it's only built when that feature is set).

        * qmake/mkspecs/features/configure.prf:

2012-09-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Ensure that QT is finalized before loading qt_module.prf

        As qt_module.prf does dependency tracking based on the content of the
        QT variable. The intermediate WebKit modules modify the variable in
        their .pri files, so we have to ensure we've loaded all the modules
        before loading qt_module.

        Reviewed by Tor Arne Vestbø.
        Patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com> on 2012-09-13

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/webkit_modules.prf: Added.

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build of Qt WTR/MiniBrowser with MSVC and nmake
        https://bugs.webkit.org/show_bug.cgi?id=96633

        Reviewed by Csaba Osztrogonác.

        WTR and MiniBrowser both have DRT in their include path (for the shared font stuff). Batch
        builds with MSVC and nmake result in nmake picking up main.cpp from the wrong directory.
        It's the usual problem and the usual solution is to rename one of the conflicting files.
        This patch chooses to rename DRT instead of WTR and MBR.

        Fixed include order at the same time to match style guide.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp: Renamed from Tools/DumpRenderTree/qt/main.cpp.
        (messageHandler):
        (isOption):
        (takeOptionValue):
        (printUsage):
        (main):

2012-09-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        The Script run-launcher should support -2 in combination with --efl
        https://bugs.webkit.org/show_bug.cgi?id=96639

        Reviewed by Simon Hausmann.

        Support running the MiniBrowser then supplied -2 as argument.

        * Scripts/run-launcher:

2012-09-13  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed, add my Intel email address to the list.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't overwrite LIBS_PRIVATE when sanitizing LIBS

        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:

2012-09-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][DRT] Implement LayoutTestController::layerTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=82294

        Reviewed by Gyuyoung Kim.

        Implement layerTreeAsText using the DumpRenderTreeSupportEfl method.

        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::layerTreeAsText):

2012-09-13  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Clear application cache between tests in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=96543

        Reviewed by Philippe Normand.

        Call the new DumpRenderTreeSupportGtk method to clear application cache
        after each test.

        Set the XDG_CACHE_HOME environment variable when running DumpRenderTree
        as well. Currently it points to a subdirectory in the layout tests results
        directory. At least on the builders this ensures an empty cache directory
        with each test run.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):

2012-09-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure LIBS, PKGCONFIG, and QT, do not affect QtWebKit's prl file

        Unless it's actually a dependency of the public QtWebKit API.

        We could replace every occurance of LIBS, PKGCONFIG, and QT, in the pri
        files with their _PRIVATE equivivalent, but that's likely to break when
        someone adds a new QT/LIBS/PKGCONFIG += foo line somewhere. Instead we
        clean up the variables in default_post.

        This means that the CONFIG -= explicitlib in linkAgainstLibrary() is no
        longer needed, as it was a workaround for the intermediate libraries ending
        up in the prl file. And, since CONFIG -= staticlib was there to support
        the explicitlib option, we can remove that too (as well as the exception
        for gprof, since it would be empty). If gprof needs tweaks to always link
        statically they should go in gprof.prf.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-09-13  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] "Infinite" loop in AccessibilityUIElementGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=96632

        Reviewed by Carlos Garcia Campos.

        Fix this by using atk_object_get_n_accessible_children instead of
        calling getChildren() from childCount.

        * WebKitTestRunner/InjectedBundle/gtk/AccessibilityUIElementGtk.cpp:
        (WTR::AccessibilityUIElement::childrenCount): Avoid the infinite
        loop by using atk_object_get_n_accessible_children().

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][Win] Enable USE(3D_GRAPHICS)
        https://bugs.webkit.org/show_bug.cgi?id=90879

        Reviewed by Kenneth Rohde Christiansen.

        Enable it on Windows as well as on QNX (bug fixed).

        * qmake/mkspecs/features/features.prf:

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] The ANGLE build on Windows breaks with GnuWin32's flex because it is too old
        https://bugs.webkit.org/show_bug.cgi?id=96359

        Reviewed by Tor Arne Vestbø.

        GnuWin32's flex is 2.5.4 and that is too old for ANGLE's preprocessor
        lexer. The only viable alternative I could find on Windows that provides
        binaries is the winflexbison distribution (http://sourceforge.net/projects/winflexbison/),
        so let's use that one instead.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig):
        * qmake/mkspecs/features/default_pre.prf:

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add configuration for production builds
        https://bugs.webkit.org/show_bug.cgi?id=96607

        Reviewed by Kenneth Rohde Christiansen.

        Add configuration tweaks for production builds, to ease memory pressure with the GNU toolchain
        and enable all-in-one-files optimizations.

        * qmake/mkspecs/features/production_build.prf: Added.

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] GStreamer detection does not work when cross-compiling
        https://bugs.webkit.org/show_bug.cgi?id=96608

        Reviewed by Kenneth Rohde Christiansen.

        When cross-compiling it is not safe to just use system(pkg-config),
        because there is a high probability that it will find packages in the
        host system instead of in the target one. Instead use qmake's new
        packagesExist() function that takes care of this delicate aspect of
        cross compilation by setting PKG_CONFIG_SYSROOT_DIR and
        PKG_CONFIG_LIBDIR accordingly.

        * qmake/mkspecs/features/features.prf:

2012-09-13  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] More efficient string handling in InjectedBundlePage
        https://bugs.webkit.org/show_bug.cgi?id=96609

        Reviewed by Kenneth Rohde Christiansen.

        Update StringBuilder usage in InjectedBundlePage to follow
        the latest recommandations for efficient string handling:
        http://trac.webkit.org/wiki/EfficientStrings

        This involves using appendLiteral() or appendNumber()
        instead of append() whenever possible.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpPath):
        (WTR::rangeToStr):
        (WTR::styleDecToStr):
        (WTR::frameToStr):
        (WTR::dumpResourceURL):
        (WTR):
        (WTR::dumpFrameDescriptionSuitableForTestResult):
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::dumpErrorDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::didReceiveIntentForFrame):
        (WTR::InjectedBundlePage::registerIntentServiceForFrame):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishProgress):
        (WTR::dumpFrameScrollPosition):
        (WTR::dumpFrameText):
        (WTR::dumpDescendantFramesText):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didCancelClientRedirectForFrame):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::didHandleOnloadEventsForFrame):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        (WTR::InjectedBundlePage::didFinishLoadForResource):
        (WTR::InjectedBundlePage::didFailLoadForResource):
        (WTR::InjectedBundlePage::shouldCacheResponse):
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt):
        (WTR::InjectedBundlePage::didReachApplicationCacheOriginQuota):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        (WTR::InjectedBundlePage::supportsFullScreen):
        (WTR::InjectedBundlePage::enterFullScreenForElement):
        (WTR::InjectedBundlePage::exitFullScreenForElement):
        (WTR::InjectedBundlePage::beganEnterFullScreen):
        (WTR::InjectedBundlePage::beganExitFullScreen):
        (WTR::InjectedBundlePage::closeFullScreen):
        (WTR::dumpBackForwardListItem):
        (WTR::InjectedBundlePage::dumpBackForwardList):

2012-09-13  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [Qt][WK2] Memory leaks in Qt's TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=96603

        Reviewed by Csaba Osztrogonác.

        Fix memory leaks in Qt's TestRunner code by adopting WKString
        created with WKStringCreateWithUTF8CString().

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):

2012-09-13  Zan Dobersek  <zandobersek@gmail.com>

        [GTK][NRWT] Lower timeout value to 6 seconds (12 for debug configuration)
        https://bugs.webkit.org/show_bug.cgi?id=96506

        Reviewed by Dirk Pranke.

        Lower the timeout value to 6 seconds for release configuration and 12 seconds
        for debug configuration. These are the same values the Chromium port uses.

        Currently the value is lowered only for the DumpRenderTree, WebKitTestRunner (and
        the layout tests under WebKit2 generally) requires more attention and gardening
        than what the current effort produces.

        The unit test is updated as well to test these changes.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest.test_default_timeout_ms):
        (GtkPortTest.assertLinesEqual):

2012-09-12  Csaba Osztrogonác  <ossy@webkit.org>

        Add SVN mirror handling feature to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=85887

        Reviewed by Dirk Pranke.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add SVN mirrors for Qt buildslaves hosted in Szeged.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ConfigureBuild.__init__): Add SVNMirror property to be able to watch which slaves use which mirror on build.webkit.org.
        (ConfigureBuild.start):
        (CheckOutSource.__init__): Set baseURL to the SVNMirror or the default http://svn.webkit.org/repository/webkit/
        (WaitForSVNServer): Add new buildstep for waiting the SVNMirror to be in sync with http://svn.webkit.org/repository/webkit/
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (BuildAndPerfTestWebKit2Factory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):
        (loadBuilderConfig): Use kwargs instead of args to be able to add the optional SVNMirror factory argument.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (SVNMirrorTest):
        (SVNMirrorTest.setUp): Load config.json once at startup.
        (SVNMirrorTest.get_SVNMirrorFromConfig): Get the SVNMirror from config.json for a given buildslave.
        (SVNMirrorTest.test_CheckOutSource): Compare CheckOutSource.baseURL with SVNMirror in config.json for all builders
        * BuildSlaveSupport/build.webkit.org-config/wait-for-SVN-server.py: Added.
        (getLatestSVNRevision): Get the latest SVN revison from the given server.
        (waitForSVNRevision): Wait until the given SVN revision is committed to the given server. It doesn't wait if the
                              SVN revision is empty (force build triggered without revision) or the server is unavailable.

2012-09-12  Kangil Han  <kangil.han@samsung.com>

        [WK2][WTR] Set waitUntilDone watchdog timer value equal to WK1.
        https://bugs.webkit.org/show_bug.cgi?id=81606

        Reviewed by Tim Horton.

        6 seconds is harsh for some jquery test cases.
        Therefore, adjust the value to match DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR):

2012-09-12  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] Support download attribute feature
        https://bugs.webkit.org/show_bug.cgi?id=96462

        Reviewed by Gyuyoung Kim.

        Enable DOWNLOAD_ATTRIBUTE feature for EFL port,
        and add "download,request" callback to the DumpRenderTree for EFL.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onDownloadRequest):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * Scripts/webkitperl/FeatureList.pm:

2012-09-12  Stephanie Lewis  <slewis@apple.com>

        Reduce parallism on the wk2 testers.
        https://bugs.webkit.org/show_bug.cgi?id=95906

        Reviewed by Dirk Pranke.

        The wk2 testers on Mountain Lion are getting stuck and timing out.  The problem appears to be due to
        resource contention.  Reducing the number of processes alleviates the issue.  

        Starting by reducing 25%.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_child_processes):

2012-09-12  Brady Eidson  <beidson@apple.com>

        Assert in NetscapePlugin::destroy() with async plugin init
        <rdar://problem/12277595> and https://bugs.webkit.org/show_bug.cgi?id=96576

        Reviewed by Anders Carlsson.

        Expose NPN_Invoke to plug-in tests:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_Invoke):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest):

        Add a test that uses NPN_Invoke on the window object from inside NPP_New to remove the plug-in element:
        * DumpRenderTree/TestNetscapePlugIn/Tests/InvokeDestroysPluginWithinNPP_New.cpp: Added.
        (InvokeDestroysPluginWithinNPP_New):
        (InvokeDestroysPluginWithinNPP_New::InvokeDestroysPluginWithinNPP_New):
        (InvokeDestroysPluginWithinNPP_New::NPP_New):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2012-09-12  Dirk Pranke  <dpranke@chromium.org>

        refactor TestExpectations tokenization slightly in preparation for the new syntax
        https://bugs.webkit.org/show_bug.cgi?id=96564

        Reviewed by Ojan Vafai.

        This change changes how we will tokenize/lex the
        TestExpectations files, in preparation for supporting both the
        old syntax and the new one. This change by itself should be a
        no-op.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._tokenize_line):
        (TestExpectationParser):
        (TestExpectationParser._tokenize_line_using_old_format):
        (TestExpectationParser._tokenize_line_using_new_format):

2012-09-12  Dirk Pranke  <dpranke@chromium.org>

        remove unused testexpectations editing code from webkitpy, garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=96562

        Reviewed by Adam Barth.

        This code was prototyped but never fully realized. Removing
        until it reanimates :).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor.py: Removed.
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py: Removed.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (BuildCoverageExtrapolator.extrapolate_test_configurations):
        (GardeningHTTPRequestHandler._run_webkit_patch):
        (GardeningHTTPRequestHandler.ping):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):
        (GardeningServerTest.test_rebaseline_new_port):

2012-09-12  Lucas Forschler  <lforschler@apple.com>

        Remove unused bot, apple-xserve-1.
        https://bugs.webkit.org/show_bug.cgi?id=96570
        
        Reviewed by Stephanie Lewis.

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

2012-09-12  Xan Lopez  <xlopez@igalia.com>

        [GTK] We attempt to rebase documentation even if it's not present
        https://bugs.webkit.org/show_bug.cgi?id=96553

        Reviewed by Martin Robinson.

        Do not make the documentation rebase step fatal. This allows make
        install to succeed when there's no documentation generated.

        * gtk/generate-gtkdoc:

2012-09-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Respect WEBKITOUTPUTDIR when running EFL tests
        https://bugs.webkit.org/show_bug.cgi?id=96528

        Reviewed by Dirk Pranke.

        Expose user set WEBKITOUTPUTDIR to the web process.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver._start): Add WEBKITOUTPUTDIR to the environment
        of the web process and its potential jhbuild wrapper.

2012-09-12  Dirk Pranke  <dpranke@chromium.org>

        webkitdirs: fix uname version handling for cygwin
        https://bugs.webkit.org/show_bug.cgi?id=96436

        Reviewed by Jon Honeycutt.

        Newer versions of cygwin embed an additional version string
        inside parentheses, so you get "1.7.16(0.249/5/3)" instead of "1.7.16".
        Update the code to handle that.

        * Scripts/webkitdirs.pm:
        (setupAppleWinEnv):

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r128338): Broke Windows build
        https://bugs.webkit.org/show_bug.cgi?id=96537

        Unreviewed build fix.

        Fix Apple-Win build by allocating array dynamically
        since its size is not constant.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::stringArrayToJS):

2012-09-12  Alex Sakhartchouk  <alexst@chromium.org>

        [chromium] Add a virtual test suite for fast/hidpi
        https://bugs.webkit.org/show_bug.cgi?id=90192

        Reviewed by Dirk Pranke.

        Add a virtual test suite to make sure the pixel tests in fast/hidpi give the same result
        on the hardware accelerated path as the software path.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-09-12  Adam Klein  <adamk@chromium.org>

        [chromium] Add content_browsertests to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=96535

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/dashboard_base.js:

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement originsWithApplicationCache
        https://bugs.webkit.org/show_bug.cgi?id=96496

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for originsWithApplicationCache to
        WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::stringArrayToJS):
        (WTR):
        (WTR::TestRunner::originsWithApplicationCache):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix Qt/Windows build with Python3
        https://bugs.webkit.org/show_bug.cgi?id=96473

        Reviewed by Csaba Osztrogonác.

        In Python 3 print is a real function, so we must use parentheses around
        the function parameters. This is backwards compatible with Python 2.

        * Scripts/generate-win32-export-forwards:

2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed trivial build fix for Qt/Windows after bug #96358.

        As pointed out by Kevin, we should inject the "set PATH=..." statement
        to add the GnuWin32 directory only if that directory actually exists.

        * qmake/mkspecs/features/default_post.prf:

2012-09-12  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Memory leaks in TestControllerEfl
        https://bugs.webkit.org/show_bug.cgi?id=96525

        Reviewed by Kenneth Rohde Christiansen.

        Fix memory leaks in EFL's TestRunner code by adopting an allocation
        of WKString created with WKStringCreateWithUTF8CString().

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement dumpApplicationCacheDelegateCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=96374

        Reviewed by Kenneth Rohde Christiansen.

        Implement support for dumpApplicationCacheDelegateCallbacks
        and disallowIncreaseForApplicationCacheQuota in
        WebKitTestRunner and properly dump the information
        expected by the tests.

        If the application cache quota is reached for a given
        security origin, WebKitTestRunner will reset the quota
        to its default value, unless intructed not to via
        disallowIncreaseForApplicationCacheQuota().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didReachApplicationCacheOriginQuota):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        (WTR::TestRunner::disallowIncreaseForApplicationCacheQuota):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpApplicationCacheDelegateCallbacks):
        (TestRunner):
        (WTR::TestRunner::shouldDisallowIncreaseForApplicationCacheQuota):
        (WTR::TestRunner::shouldDumpApplicationCacheDelegateCallbacks):

2012-09-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove deprecated and unused sets import from chromium_android driver
        https://bugs.webkit.org/show_bug.cgi?id=96485

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:

2012-09-12  Zan Dobersek  <zandobersek@gmail.com>

        Flakiness dashboard doesn't recognize new Chromium Android test builder
        https://bugs.webkit.org/show_bug.cgi?id=96523

        Reviewed by Ojan Vafai.

        Properly return 'ANDROID' as the Chromium platform for Android builders.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (chromiumPlatform):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build on Windows requires bison/flex in PATH
        https://bugs.webkit.org/show_bug.cgi?id=96358

        Reviewed by Tor Arne Vestbø.

        The build requires flex, bison, etc. and they need to be in the PATH when building. On Mac OS X
        and Linux that is rarely a problem given how easily available the tools are. On Windows however
        a separate installation of various GNU tools is required as the operating system doesn't come with
        them. To make the development more convenient, Qt 5 provides a copy of the most essential tools in
        the gnuwin32 directory of the qt5.git top-level repository.

        This patch tries to detect the presence of those tools and prepends them to the PATH if found.

        This is required in preparation for the elimination of qt5/qtwebkit.pri, which currently expands
        PATH before calling build-webkit. It it also required for the upcoming introduction of win_flex
        as dependency over flex, which can be done with less hassle when qt5's gnuwin32 directory has been
        updated with the new tool.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig):
        * qmake/mkspecs/features/default_post.prf:

2012-09-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Update build-jsc after r128174

        Reviewed by Ossy.

        * Scripts/build-jsc:

2012-09-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Teach addStrictSubdirOrderBetween to handle more than two targets

        By hard-coding the names of the targets we defined we ended up just
        redefining the previous target when using addStrictSubdirOrderBetween
        more than once in a single project file.

        We now embed the two base targets into the target names.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/functions.prf:

2012-09-12  Philippe Liard  <pliard@google.com>

        Depend on {base,net} GYP targets rather than {base,net}_java.
        https://bugs.webkit.org/show_bug.cgi?id=95690

        Reviewed by Adam Barth.

        {base,net}_java became 'private' targets on the Chromium side that
        clients should not depend on (see
        https://chromiumcodereview.appspot.com/10913083/).
        This removes a bunch of trailing white spaces additionally in
        TestWebkitAPI.gyp (which includes non-trailing white space changes).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix the build with ENABLE_NETSCAPE_PLUGIN_API=0
        https://bugs.webkit.org/show_bug.cgi?id=96494

        Reviewed by Tor Arne Vestbø.

        WK2's ENABLE_PLUGIN_PROCESS uses the NPAPI functions unconditionally, so disable the
        plugin process feature if we don't have NPAPI.

        * qmake/mkspecs/features/features.prf:

2012-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128280.
        http://trac.webkit.org/changeset/128280
        https://bugs.webkit.org/show_bug.cgi?id=96498

        it broke compilation on windows debug bot (Requested by loislo
        on #webkit).

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

2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make it possible to build with "make release" and "make debug" on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96488

        Reviewed by Tor Arne Vestbø.

        A "make debug" is passed through recursively and currently it aborts at Makefile.DerivedSources
        because there are no such targets. We want the generated sources to be independent from release
        or debug build configurations, so it is sufficient to provide fake debug and release targets that
        redirect to the same general-purpose target (first) of creating the derived sources.

        * qmake/mkspecs/features/default_post.prf:

2012-09-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL] Make DumpRenderTree smarter at finding the fonts
        http://webkit.org/b/96281

        Reviewed by Gyuyoung Kim.

        Respect WEBKITOUTPUTDIR and expand the font dir from it.
        Use CString consistently.

        * DumpRenderTree/efl/FontManagement.cpp:
        (buildPath):
        (getCoreFontFiles):
        (addFontDirectory):
        (addFontFiles):
        (getCustomBuildDir):
        (getPlatformFontsPath):
        (addFontsToEnvironment):

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement dumpApplicationCacheDelegateCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=96374

        Reviewed by Kenneth Rohde Christiansen.

        Implement support for dumpApplicationCacheDelegateCallbacks
        and disallowIncreaseForApplicationCacheQuota in
        WebKitTestRunner and properly dump the information
        expected by the tests.

        If the application cache quota is reached for a given
        security origin, WebKitTestRunner will reset the quota
        to its default value, unless intructed not to via
        disallowIncreaseForApplicationCacheQuota().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didReachApplicationCacheOriginQuota):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        (WTR::TestRunner::disallowIncreaseForApplicationCacheQuota):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpApplicationCacheDelegateCallbacks):
        (TestRunner):
        (WTR::TestRunner::shouldDisallowIncreaseForApplicationCacheQuota):
        (WTR::TestRunner::shouldDumpApplicationCacheDelegateCallbacks):

2012-09-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] WebKitTestRunner needs TestRunner.workerThreadCount
        https://bugs.webkit.org/show_bug.cgi?id=96388

        Reviewed by Kenneth Rohde Christiansen.

        Exported TestRunner.workerThreadCount as readonly attribute.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Added workerThreadCount() method implementation.
        (WTR::TestRunner::workerThreadCount): Returns count of worker threads.
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Added workerThreadCount() method. 
        (TestRunner):

2012-09-12  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Consume a user gesture when creating a new view.
        https://bugs.webkit.org/show_bug.cgi?id=96373

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):

2012-09-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] Some of TestRunner special options are not reset before testing
        https://bugs.webkit.org/show_bug.cgi?id=96384

        Reviewed by Kenneth Rohde Christiansen.

        Now values of the following special options are reset:
        void setAcceptsEditing(in boolean value);
        void setCloseRemainingWindowsWhenComplete(in boolean value);
        void setXSSAuditorEnabled(in boolean value);
        void setAllowFileAccessFromFileURLs(in boolean value);
        void setPluginsEnabled(in boolean value);
        void setPopupBlockingEnabled(in boolean value);

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2012-09-11  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Supply feature defines to CodeGeneratorTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=96273

        Reviewed by Gyuyoung Kim.

        Passed FEATURE_DEFINES_WITH_SPACE_SEPARATOR to CodeGeneratorTestRunner
        in order to distinguish compile time options such as ENABLE(TOUCH_EVENTS).

        * WebKitTestRunner/CMakeLists.txt:

2012-09-11  Dirk Pranke  <dpranke@chromium.org>

        [chromium] rename webkit_resources
        https://bugs.webkit.org/show_bug.cgi?id=95874

        Reviewed by James Robinson.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-09-11  Jochen Eisinger  <jochen@chromium.org>

        [chromium] don't include content shell builders in the garden-o-matic view
        https://bugs.webkit.org/show_bug.cgi?id=96418

        Reviewed by James Robinson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-09-11  Adam Klein  <adamk@chromium.org>

        Garden-o-matic should ignore a wider variety of warnings in buildbot json
        https://bugs.webkit.org/show_bug.cgi?id=96411

        Reviewed by Adam Barth.

        Previously only the exact string "warning" was treated as a warning
        result. This patch treats any string with "warning" as a substring
        as a warning (e.g., "warnings", as seen on the cr-win buildbots).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:

2012-09-11  Marcelo Lira  <marcelo.lira@openbossa.org>

        Restore original value of mock scrollbars enabled in InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=87680

        Reviewed by Adam Barth.

        Added backup support for mock scrollbars state in
        InternalSettings::Backup, and removed support for these
        from Qt's DumpRenderTree.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::setFrameFlatteningEnabled):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):

2012-09-11  Dan Bernstein  <mitz@apple.com>

        Fixed a bug where kill-old-processes failed to kill clang++.

        Rubber-stamped by Alexey Proskuryakov.

        * BuildSlaveSupport/kill-old-processes: Escape the + signs in "clang++"
        where it is passed as a regular expression to killall.

2012-09-11  Philippe Liard  <pliard@google.com>

        Make sure that md5sum is not setup on non-Chromium Android platforms.
        https://bugs.webkit.org/show_bug.cgi?id=96393

        Reviewed by Adam Barth.

        Previously md5sum was setup in ChromiumAndroidDriver's constructor
        which is also invoked on non-Chromium Android platforms. The following patch
        moves this logic to _startup_test() which is guaranteed to be invoked
        only on Android.

        This also updates the prompt unit test in chromium_android_unittest.py.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._setup_md5sum_and_push_data_if_needed):
        (ChromiumAndroidDriver._setup_test):

2012-09-11  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Rewrite the EFL-related Find modules
        https://bugs.webkit.org/show_bug.cgi?id=95237

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/efl/CMakeLists.txt: Stop setting the LINK_FLAGS
        property and include all the Enlightenment Foundation Libraries
        required by the target.
        * EWebLauncher/CMakeLists.txt: Ditto.
        * MiniBrowser/efl/CMakeLists.txt: Ditto.
        * TestWebKitAPI/PlatformEfl.cmake: Add missing include directories
        now that they are not added implicitly.
        * WebKitTestRunner/CMakeLists.txt: Stop setting the LINK_FLAGS
        property.
        * WebKitTestRunner/PlatformEfl.cmake: Stop setting the LINK_FLAGS
        property and include all the Enlightenment Foundation Libraries
        required by the target.

2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement setApplicationCacheOriginQuota
        https://bugs.webkit.org/show_bug.cgi?id=96379

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for setApplicationCacheOriginQuota
        to WebKitTestRunner.

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

2012-09-11  Luciano Wolf  <luciano.wolf@openbossa.org>

        [Qt] [WK2] editing/inserting/typing-tab-designmode tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=91988

        Reviewed by Kenneth Rohde Christiansen.

        Regular key events generated by Qt for the tab key fill both
        keyCode and keyText, so we should do the same for our fake events.

        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::keyDown):

2012-09-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=96269

        Reviewed by Kenneth Rohde Christiansen.

        Exported missing testRunner.setSpatialNavigationEnabled() method.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setSpatialNavigationEnabled):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-11  Philippe Liard  <pliard@chromium.org>

        Support LayoutTests on non-rooted devices for Chromium Android.
        https://bugs.webkit.org/show_bug.cgi?id=95346

        Reviewed by Dirk Pranke.

        We were requiring root permissions to sync resource files with the
        device by comparing host and device files' timestamp after we
        synchronized the device and host clocks.
        We now rely on md5sum provided by Chromium to handle data files
        synchronization.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._check_driver_build_up_to_date):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._setup_test):
        (ChromiumAndroidDriver._push_executable):
        (ChromiumAndroidDriver._push_test_resources):
        (ChromiumAndroidDriver._read_prompt):

2012-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix output paths on Windows

        Reviewed by Tor Arne Vestbø.

        BUILD_ROOT_RELATIVE_TO_OUT_PWD was calculated incorrectly Windows, resulting in an incorrect
        DESTDIR transformation at the end of default_post.prf. The calculation should be baased no qmake
        paths, which can use drive letters but always use forward slashes. So the use of QMAKE_DIR_SEP is
        incorrect here and instead for the calculation we should use forward slashes.

        * qmake/mkspecs/features/default_pre.prf:

2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix passing of defines from the build system

        We explicitly have to pass -DENABLE_FOO=0 for every single feature
        that's not explicitly enabled in WEBKIT_CONFIG, since Platform.h
        will add it's own defaults if the features are not defined.

        At some point we might want to run a configure-test to inspect what
        Platform.h will do, so we can sync up the build system's view of
        the feature-defines with the compile-time situation.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/functions.prf:

2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix --qt option to build-webkit

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add a configure step to the Qt build system

        This allows building the Qt port using just 'qmake WebKit.pro'. Using
        the build-webkit script is still supported, and will add slightly more
        logic to the build, such as detecting the need for clean or incremental
        builds.

        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
        all things related to configuring the build, such as use/have/enable flags,
        and these are translated to defines in default_post. Project files should
        no longer check contains(DEFINES,...) to detect features, but use the new
        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
        options have been translated into WEBKIT_CONFIG options as well, and can
        be checked using build?().

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (buildQMakeProjects):
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/.qmake.cache: Added.
        * qmake/configure.pri: Removed.
        * qmake/configure.pro: Removed.
        * qmake/dump-features: Added.
        * qmake/mkspecs/features/configure.prf: Added.
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/features.pri:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/gprof.prf:
        * qmake/mkspecs/features/mac/default_pre.prf:
        * qmake/mkspecs/features/win32/default_pre.prf:

2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement clearApplicationCacheForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=96372

        Reviewed by Kenneth Rohde Christiansen.

        Implement clearApplicationCacheForOrigin() in WebKitTestRunner.

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

2012-09-11  Peter Beverloo  <peter@chromium.org>

        Don't ignore .pak files when making an archive for Android
        https://bugs.webkit.org/show_bug.cgi?id=96375

        Reviewed by Jochen Eisinger.

        The .pak files do need to be pushed to the device, which is currently
        preventing the layout test runner from correctly pushing all files.

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

2012-09-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WebKitTestRunner needs layoutTestController.setMinimumTimerInterval
        https://bugs.webkit.org/show_bug.cgi?id=96256

        Reviewed by Kenneth Rohde Christiansen.

        Exported TestRunner::setMinimumTimerInterval() method.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMinimumTimerInterval):
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-11  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: add RTCPeerConnection::onnegotiationneeded
        https://bugs.webkit.org/show_bug.cgi?id=96097

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::addStream):
        (MockWebRTCPeerConnectionHandler::removeStream):

2012-09-11  Peter Beverloo  <peter@chromium.org>

        Recognize the "--chromium-android" argument in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=96369

        Reviewed by Jochen Eisinger.

        Chromium for the Android platform cannot determine the platform based on
        the host itself, so we'll use the --chromium-android argument as the build
        master passes to run-webkit-tests. Make sure the layout test runner
        can pick the right port when doing so.

        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (port_options):

2012-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [QT] Fix build with newer qmake from Qt 5

        Rubber-stamped by Tor Arne Vestbø.

        Support for "qmake -query QMAKE_MKSPECS" was removed from qmake. Replace
        it with the use of QT_HOST_DATA/mkspecs.
        Based on patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):
        (qtMakeCommand):

2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove Qt 4 syncqt, no longer needed

        Reviewed by Simon Hausmann.

        * qmake/syncqt-4.8: Removed.

2012-09-11  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the build with recent Qt5
        https://bugs.webkit.org/show_bug.cgi?id=96283

        Reviewed by Simon Hausmann.

        We should not use deprecated Qt API because doing that results
        in build failure since all the deprecated API was disabled
        in qtbase (https://codereview.qt-project.org/#change,24890).

        * DumpRenderTree/qt/main.cpp:
        (main):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/raw/View.cpp:
        (View::exposeEvent):
        (main):

2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>

        WTR needs an implementation of applicationCacheDiskUsageForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=87188

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for applicationCacheDiskUsageForOrigin()
        in WebKitTestRunner.

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

2012-09-10  Joanmarie Diggs  <jdiggs@igalia.com>

        Properly expose <legend> elements to ATs
        https://bugs.webkit.org/show_bug.cgi?id=84137

        Reviewed by Chris Fleizach.

        Created a new WebCore Accessibility Role, LegendRole. Used it to map to
        the expected platform role, ATK_ROLE_LABEL. Also established the needed
        AtkRelation pair, label-for/labelled-by between the legend and fieldset.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString): added "Legend" string for WebAccessibilityRoleLegend

2012-09-10  Jer Noble  <jer.noble@apple.com>

        Unreviewed; rolling out r128081.
        http://trac.webkit.org/changeset/128081
        https://bugs.webkit.org/show_bug.cgi?id=96134

        New test http/tests/media/video-donottrack.html fails to run on Apple test bots.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-10  Christophe Dumez  <christophe.dumez@intel.com>

        TestExpectationsChecker._determine_port_from_expectations_path() does not support cascaded TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=96205

        Reviewed by Tony Chang.

        _determine_port_from_expectations_path() was calling port.path_to_test_expectations_file()
        internally, which means that it would support only 1 TestExpectations file per port. This
        is an issue for ports such as EFL that support cascased TestExpectations (efl-wk2 -> efl
        and efl-wk1 -> efl).

        This patch makes _determine_port_from_expectations_path() call port.expectations_files()
        instead so that all the ports TestExpectations are recognized. The ports are also
        constructed twice, with "webkit_test_runner" option set to True and False so that we
        retrieve the TestExpectations paths for both WebKit1 and WebKit2.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_expectations_path):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Add corresponding unit test.
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):

2012-09-10  Ryuan Choi  <ryuan.choi@samsung.com>

        [WTR] Generated source files should include config.h
        https://bugs.webkit.org/show_bug.cgi?id=96254

        Reviewed by Benjamin Poulain.

        Current coding style has encouraged to include config.h at the first position,
        But derived sources, generated by CodeGeneratorTestRunner.pm, don't follow
        this rule.
        Therefore, this patch added it.

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

2012-09-10  Rick Byers  <rbyers@chromium.org>

        Add handling of new GestureTapCancel in DRT
        
        https://bugs.webkit.org/show_bug.cgi?id=96183

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::handleInputEvent):

2012-09-10  Brady Eidson  <beidson@apple.com>

        Javascript in foreground tabs should not wait synchronously for plug-ins to load
        <rdar://problem/12067415> and https://bugs.webkit.org/show_bug.cgi?id=96167

        Reviewed by Geoff Garen.

        Enhance the "Slow NPP_New" plug-in to also be able to return properties to javascript.

        * DumpRenderTree/TestNetscapePlugIn/Tests/SlowNPPNew.cpp:
        (PluginObject):
        (SlowNPPNew::PluginObject::PluginObject):
        (SlowNPPNew::PluginObject::~PluginObject):
        (SlowNPPNew::PluginObject::hasProperty):
        (SlowNPPNew::PluginObject::getProperty):
        (SlowNPPNew::NPP_GetValue):
        (SlowNPPNew):

2012-09-10  Tim Horton  <timothy_horton@apple.com>

        WKTR often reports an unresponsive WebProcess on Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=95906

        Reviewed by Dan Bernstein.

        Attempt to work around resource contention issues by increasing the NRWT
        timeout when running against WKTR, as well as WKTR's own WebProcess timeout.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_timeout_ms): Default timeout when using WKTR -> 80 seconds.
        * WebKitTestRunner/TestController.cpp:
        (WTR): LongTimeout (used when waiting for WebProcess to finish) -> 60 seconds.

2012-09-07  Jer Noble  <jer.noble@apple.com>

        <audio> and <video> should send Do Not Track when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=96134

        Reviewed by Eric Carlson.

        Add a testRunner JS API for calling setShouldSendDoNotTrackHTTPHeader to DRT and 
        WTR. Add FrameLoaderClient client methods for retrieving that value.

        * DumpRenderTree/TestRunner.cpp:
        (setShouldSendDoNotTrackHTTPHeaderCallback): Pass through to the TestRunner.
        (TestRunner::staticFunctions): Add the setShouldSendDoNotTrackHTTPHeader function.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setShouldSendDoNotTrackHTTPHeader): Simple setter.
        (TestRunner::shouldSendDoNotTrackHTTPHeader): Simple getter.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webViewShouldSendDoNotTrackHTTPHeader:]): 
            Pass the question on to the TestRunner.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
            Add the setShouldSendDoNotTrackHTTPHeader client function.
        (WTR::InjectedBundlePage::shouldSendDoNotTrackHTTPHeader):
            Pass the question on to the TestRunner.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::shouldSendDoNotTrackHTTPHeader): Simple getter.
        (WTR::TestRunner::setShouldSendDoNotTrackHTTPHeader): Simple Setter.

2012-09-10  Ojan Vafai  <ojan@chromium.org>

        Make EFL bots work on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=96164

        Reviewed by Tony Chang.

        Also, update outdated unittests that had started failing.

        * TestResultServer/static-dashboards/builders.js:
        (isWebkitTestRunner):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (nonChromiumPlatform):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-09-10  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Remove the Descriptor postfix
        https://bugs.webkit.org/show_bug.cgi?id=96268

        Reviewed by Adam Barth.

        After consideration I realized that there is no need whatsoever in using the Descriptor prefix
        in the WekKit embedder API. Removed from WebRTCSessionDescription and WebRTCICECandidate to start with.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (MockWebRTCPeerConnectionHandler::createOffer):
        (MockWebRTCPeerConnectionHandler::createAnswer):
        (MockWebRTCPeerConnectionHandler::setLocalDescription):
        (MockWebRTCPeerConnectionHandler::setRemoteDescription):
        (MockWebRTCPeerConnectionHandler::localDescription):
        (MockWebRTCPeerConnectionHandler::remoteDescription):
        (MockWebRTCPeerConnectionHandler::addICECandidate):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-10  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [Gtk] failure to build jhbuild dependencies with cups 1.6
        https://bugs.webkit.org/show_bug.cgi?id=95991

        Reviewed by Gustavo Noronha Silva.

        Bump gtk+ and gnome-themes-standard dependencies to 3.4.2 to allow
        building with cups >= 1.6 [GNOME #670373].

        * gtk/jhbuild.modules:

2012-09-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][DRT] Encoding issue in printed console messages
        https://bugs.webkit.org/show_bug.cgi?id=96263

        Reviewed by Kenneth Rohde Christiansen.

        Correctly handle CONSOLE messages that contain non-ascii
        characters in EFL's DRT. We need to use String::fromUTF8()
        to construct a WTF::String from a raw string.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onConsoleMessage):

2012-09-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] User style sheet location should be reset before each test
        https://bugs.webkit.org/show_bug.cgi?id=96262

        Reviewed by Kenneth Rohde Christiansen.

        User style sheet location is reset before each test now.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2012-09-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix build of WTR with Qt on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96249

        Reviewed by Kenneth Rohde Christiansen.

        Windows loves to define min and max as macros, which beautifully
        clashes in many places where min and max are used as variable or method
        names. It can be convinced not to do this when min and max are already
        define as macros (expanding to themselves). We have this kind of
        workaround in config.h files all over WebKit and as it turns out when
        building WTR with Qt on Windows we do end up with such a clash. Therefore
        we need the same workaround.

        * WebKitTestRunner/config.h:

2012-09-10  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] New fast/forms/number/number-interactive-validation-required.html fails
        https://bugs.webkit.org/show_bug.cgi?id=95936

        Reviewed by Kenneth Rohde Christiansen.

        Enable interactive form validation setting in WebKitTestRunner as
        we are currently doing in DumpRenderTree. This is needed for some
        tests to pass.

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

2012-09-09  Zan Dobersek  <zandobersek@gmail.com>

        Clean up the code in XvfbDriver
        https://bugs.webkit.org/show_bug.cgi?id=96202

        Reviewed by Philippe Normand.

        Changes:
        - Remove unneeded imports,
        - assign the _lock_file member variable when the display number is determined,
        - no need for parentheses around a single string format argument,
        - use FileSystem.exists method when checking if lock file is present as it
        makes the intention much more clearer.

        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):
        (XvfbDriver.stop):

2012-09-09  Patrick Gansterer  <paroga@webkit.org>

        Make the String initialization on the function side of String::number()
        https://bugs.webkit.org/show_bug.cgi?id=95940

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WTF/IntegerToStringConversion.cpp:
        (testBoundaries):
        (testNumbers):

2012-09-09  Pierre Rossi  <pierre.rossi@gmail.com>

        [WK2] expose element rect for color input type
        https://bugs.webkit.org/show_bug.cgi?id=91664

        Reviewed by Simon Hausmann.

        Update the QML logic in MiniBrowser to take advantage of this.
        The picker size is now hardcoded and we try to place it below the
        input element if possible.

        * MiniBrowser/qt/qml/ColorChooser.qml:

2012-09-08  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] New fast/events/tab-focus-link-in-canvas fails from r126908
        https://bugs.webkit.org/show_bug.cgi?id=95329

        Reviewed by Kenneth Rohde Christiansen.

        Explicitely disable TabToLinks setting in WebKitTestRunner.
        Tests override the "WebKitTabToLinksPreferenceKey" preference
        to enable it.

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

2012-09-08  Kenichi Ishibashi  <bashi@chromium.org>

        webkit.py gdb pretty printer can't print CString
        https://bugs.webkit.org/show_bug.cgi?id=96068

        Reviewed by Tony Chang.

        Update WTFCStringPrinter to follow r126191.

        * gdb/webkit.py:
        (WTFCStringPrinter.to_string):

2012-09-07  Benjamin Poulain  <bpoulain@apple.com>

        Rename the ustring() accessor to string()
        https://bugs.webkit.org/show_bug.cgi?id=95919

        Reviewed by Geoffrey Garen.

        Update EFL's DRT.

        Fix some string conversion that have been made useless
        with recent changes.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::queueLoad):
        (TestRunner::addOriginAccessWhitelistEntry):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::setUserStyleSheetLocation):
        (TestRunner::setValueForUser):
        (TestRunner::elementDoesAutoCompleteForElementWithId):
        (TestRunner::execCommand):
        (TestRunner::findString):
        (TestRunner::isCommandEnabled):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::pauseAnimationAtTimeOnElementWithId):
        (TestRunner::pauseTransitionAtTimeOnElementWithId):
        (toInt):
        (TestRunner::overridePreference):
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        (TestRunner::evaluateInWebInspector):
        (TestRunner::evaluateScriptInIsolatedWorld):
        (TestRunner::setTextDirection):
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ScriptItem::invoke):

2012-09-06  Jeffrey Pfau  <jpfau@apple.com>

        Extend third-party storage blocking API to optionally allow blocking all storage
        https://bugs.webkit.org/show_bug.cgi?id=95915

        Reviewed by Brady Eidson.

        Modified API test to use new revised API.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2012-09-07  Dominic Mazzoni  <dmazzoni@google.com>

        AX: WebCore accessibility roles should be cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=94870

        Reviewed by Chris Fleizach.

        Add debug strings to Chromium for new accessibility roles.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString):

2012-09-07  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Chromium needs access to canvasHasFallbackContent
        https://bugs.webkit.org/show_bug.cgi?id=96124

        Reviewed by Chris Fleizach.

        Distinguish between canvas roles with and without fallback
        content on Chromium.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (getRole):

2012-09-07  Ojan Vafai  <ojan@chromium.org>

        Handle non-existant TestExpectations files gracefully
        https://bugs.webkit.org/show_bug.cgi?id=96149

        Reviewed by Eric Seidel.

        Even when we get rid of Skipped files, we shouldn't have each port
        require a TestExpectations file for each platform if it doesn't
        need one.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.expectations_dict):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_nonexistant_expectations):

2012-09-07  Tony Chang  <tony@chromium.org>

        Regression: check-webkit-style no longer checks TestExpectations for syntax errors
        https://bugs.webkit.org/show_bug.cgi?id=96136

        Reviewed by Ojan Vafai.

        When we renamed the file to TestExpectations, it was no longer considered a text file so
        it was no longer being checked. Since then, test_expectations_overrides() has been removed
        from the port object, so I've removed that from the check. I'm not sure what it was
        supposed to do.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._file_type): Mark TestExpectations as a text file.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations): Remove overrides param.
        (TestExpectationsChecker.check): Remove overrides param.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.assert_lines_lint): Remove overrides param.

2012-09-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Use same default minimum logical font size in DRT and WTR
        https://bugs.webkit.org/show_bug.cgi?id=96116

        Reviewed by Martin Robinson.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): Set minimum
        logical font size to 9 to match the value used in WTR.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Explicitly set the minimum
        logical font size to 9 (default value in WK2)

2012-09-07  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: add RTCPeerConnection::createAnswer
        https://bugs.webkit.org/show_bug.cgi?id=96092

        Reviewed by Adam Barth.

        Expanding and enhancing MockWebRTCPeerConnectionHandler.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::createOffer):
        (MockWebRTCPeerConnectionHandler::createAnswer):
        (MockWebRTCPeerConnectionHandler::setLocalDescription):
        (MockWebRTCPeerConnectionHandler::setRemoteDescription):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-07  Dean Jackson  <dino@apple.com>

        Unreviewed changes to watchlist.

        - Add new WebGL and Filters definitions
        - Add myself to OpenGL bugs

        * Scripts/webkitpy/common/config/watchlist:

2012-09-07  Peter Beverloo  <peter@chromium.org>

        Actually trigger the Android Tester
        https://bugs.webkit.org/show_bug.cgi?id=96118

        Reviewed by Adam Barth.

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

2012-09-07  Dominic Mazzoni <dmazzoni@google.com>

        New time input needs accessibility
        https://bugs.webkit.org/show_bug.cgi?id=96032

        Reviewed by Chris Fleizach.

        Add support for valueDescription for testing.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (getValueDescription):
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::valueDescriptionGetterCallback):
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h:
        (AccessibilityUIElement):

2012-09-07  Peter Beverloo  <peter@chromium.org>

        Add the google-android-tests build slave to the master's config
        https://bugs.webkit.org/show_bug.cgi?id=96113

        Reviewed by Csaba Osztrogonác.

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

2012-09-07  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [WK2] [EFL] Set theme for WebKit2 API test runner
        https://bugs.webkit.org/show_bug.cgi?id=96100

        Reviewed by Kenneth Rohde Christiansen.

        Set the theme generated by the build for the WebKit2 API test runner.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):

2012-09-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Add Gábor Ballabás as contributor.

        * Scripts/webkitpy/common/config/committers.py:

2012-09-07  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Fix ROOT_BUILD_DIR on Windows MSVC build.
        https://bugs.webkit.org/show_bug.cgi?id=96078

        Reviewed by Tor Arne Vestbø.

        Correct JSC, DumpRenderTree, ImageDiff, QtTestBrowser binaries location by adding $$toSystemPath to ROOT_BUILD_DIR generation.

        * qmake/mkspecs/features/default_pre.prf:

2012-09-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add TestExpectations file for efl-wk1
        https://bugs.webkit.org/show_bug.cgi?id=96019

        Reviewed by Gyuyoung Kim.

        Update TestExpectations cascading for EFL port
        so that we use efl-wk1 -> efl search paths
        for WebKit1 EFL.

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

2012-09-07  Zan Dobersek  <zandobersek@gmail.com>

        [NRWT] XvfbDriver should stop the Xvfb more aggressively
        https://bugs.webkit.org/show_bug.cgi?id=95097

        Reviewed by Dirk Pranke.

        The Xvfb process is now killed when the XvfbDriver is stopping. Simply
        terminating the process does not always work as expected, leading to timeouts
        in run-webkit-tests on the buildbot. The lock file Xvfb creates is also removed
        as it's not removed by the killed Xvfb process.

        Also included is a thorough unittest for XvfbDriver. Proper starting of the driver
        is tested in different circumstances - whether pixel tests are enabled or not,
        with an arbitrary worker number or with an Xorg process already running on the system.
        The stopping of the driver is tested by checking that the Xvfb process is truly killed
        and then set to None.

        * BuildSlaveSupport/kill-old-processes:
        Kill any stale Xvfb processes at the start of the build cycle so no Xvfb
        is left running, potentially clogging up a display at a certain position.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.__init__):
        The _running_pids is now a dictionary with process names as keys and pids
        as values.
        (MockExecutive.check_running_pid):
        Check whether the passed-in pid is in the _running_pids dictionary's values.
        (MockExecutive):
        (MockExecutive.running_pids):
        This method returns the list of all the process pids of which the name passes
        through the process_name_filter.
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        Use the Executive object of the port's host to check for running pids and open
        new subprocesses or kill them throughout the class.
        (XvfbDriver._start):
        Use the _server_process_constructor to make testing the XvfbDriver possible. Also,
        start the server process after it's created.
        (XvfbDriver.stop):
        Now kills the Xvfb process instead of terminating it and waiting for it to close.
        * Scripts/webkitpy/layout_tests/port/xvfbdriver_unittest.py: Added.
        (XvfbDriverTest):
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.assertDriverStartSuccessful):
        (XvfbDriverTest.test_start_no_pixel_tests):
        (XvfbDriverTest.test_start_pixel_tests):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_start_existing_xorg_process):
        (XvfbDriverTest.test_stop):
        (XvfbDriverTest.test_stop.FakeXvfbProcess):

2012-09-06  Peter Beverloo  <peter@chromium.org>

        Introduce the Chromium Android Release (Tests) bot
        https://bugs.webkit.org/show_bug.cgi?id=95980

        Reviewed by Adam Barth.

        This adds the Chromium Android Release (Tests) bot to the WebKit waterfall,
        which will be running layout tests on actual Android devices. Right now,
        four Galaxy Nexus phones are attached.

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

2012-09-06  James Robinson  <jamesr@chromium.org>

        [chromium] Use WebCompositorSupport functions instead of WebCompositor statics
        https://bugs.webkit.org/show_bug.cgi?id=96007

        Reviewed by Adrienne Walker.

        Fixes initialization / settings code to use WebCompositorSupport.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::setPerTilePaintingEnabled):

2012-09-06  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Provide implementation for PlatformWebView::windowFrame()
        https://bugs.webkit.org/show_bug.cgi?id=95995

        Reviewed by Kenneth Rohde Christiansen.

        Provide proper implementation for PlatformWebView::windowFrame()
        in EFL's WebKitTestRunner.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::windowFrame):

2012-09-06  Fady Samuel  <fsamuel@chromium.org>

        Fix WTF.Lrint on 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=96003

        Reviewed by Benjamin Poulain.

        Fixed failing WTF.Lrint test on 32-bit platforms.

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

2012-09-06  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the local and remote description functionality to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95839

        Reviewed by Adam Barth.

        In addition to adding the new methods to MockWebRTCPeerConnectionHandler I cleaned
        up the task definitions a bit. There was no need to have them in the header file.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestFailedTask):
        (RTCSessionDescriptionRequestFailedTask::RTCSessionDescriptionRequestFailedTask):
        (RTCVoidRequestTask):
        (RTCVoidRequestTask::RTCVoidRequestTask):
        (MockWebRTCPeerConnectionHandler::createOffer):
        (MockWebRTCPeerConnectionHandler::setLocalDescription):
        (MockWebRTCPeerConnectionHandler::setRemoteDescription):
        (MockWebRTCPeerConnectionHandler::localDescription):
        (MockWebRTCPeerConnectionHandler::remoteDescription):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build on Mac OS X 10.6
        https://bugs.webkit.org/show_bug.cgi?id=95200

        Reviewed by Tor Arne Vestbø.

        The build on Mac OS X 10.6 is broken when using QuickTime. Enable it only for
        10.7 and newer.

        * qmake/mkspecs/features/features.prf:

2012-09-06  Christophe Dumez  <christophe.dumez@intel.com>

        [WKTR] addSelectionKey should be mapped to "Control" modifiers on other OSes than Mac
        https://bugs.webkit.org/show_bug.cgi?id=95973

        Reviewed by Kenneth Rohde Christiansen.

        Correctly map "addSelectionKey" to "Control" modifier
        in WKTR's EventSender on other OSes than Mac OS X,
        instead of mapping it to the "Meta" modifier.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::parseModifier):

2012-09-06  Balazs Kelemen  <kbalazs@webkit.org>

        [nrwt] Harden against empty stdout/stderr after stopping a crashed/timed out driver
        https://bugs.webkit.org/show_bug.cgi?id=95710

        Reviewed by Dirk Pranke.

        The stdout / stderr output can be None so make sure
        we won't raise an exception in this case.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):

2012-09-06  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Sanitize URLs in EWebLauncher / Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=95849

        Reviewed by Kenneth Rohde Christiansen.

        Sanitize URLs passed by the user as program
        argument or typed in the URL bar in order to
        be more tolerant.

        * EWebLauncher/CMakeLists.txt:
        * EWebLauncher/main.c:
        (main):
        * EWebLauncher/url_bar.c:
        (_url_bar_url_get_with_protocol):
        (on_urlbar_key_down):
        * EWebLauncher/url_utils.c: Added.
        (has_scheme):
        (url_from_user_input): Add utility function to construct a
        URL from user input.
        * EWebLauncher/url_utils.h: Added.
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (main):

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Various small Windows / MSVC build fixes
        https://bugs.webkit.org/show_bug.cgi?id=95934

        Reviewed by Kenneth Rohde Christiansen.

        setFocus takes a boolean as argument: Don't try to implicitly convert
        an enum to a boolean, MSVC doesn't like that. The intent here is to
        enable focus, so just pass true.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::focus):

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with ANGLE on platforms that provide EGL/GLESv2
        https://bugs.webkit.org/show_bug.cgi?id=95965

        Reviewed by Tor Arne Vestbø.

        Add ANGLE as a static library module to the Qt WebKit build system.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/modules/angle.prf: Added.

2012-09-06  Andras Becsi  <andras.becsi@nokia.com>

        [WK2] Make [Qt]ViewportHandler cross platform
        https://bugs.webkit.org/show_bug.cgi?id=91257

        Reviewed by Kenneth Rohde Christiansen.

        Remove initial scale from viewport info item since it is
        set to -1 after applied thus it does not hold any valuable
        information.

        * MiniBrowser/qt/qml/ViewportInfoItem.qml:

2012-09-05  Tony Chang  <tony@chromium.org>

        [chromium] Remove dependency on webkit_user_agent
        https://bugs.webkit.org/show_bug.cgi?id=95886

        Reviewed by Adam Barth.

        The code isn't used by DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-09-05  Rick Byers  <rbyers@chromium.org>

        Update chromium DumpRenderTree for new WebGestureEvent fields
        https://bugs.webkit.org/show_bug.cgi?id=95573

        Reviewed by James Robinson.

        Update EventSender to write gesture details into the appropriate
        type-specific WebGestureEvent fields.
        * DumpRenderTree/chromium/TestRunner/EventSender.cpp:
        (EventSender::gestureEvent):
        (EventSender::gestureFlingStart):

2012-09-05  Dirk Pranke  <dpranke@chromium.org>

        NRWT lies about the number of tests that it's skipping when used with --repeat-each
        https://bugs.webkit.org/show_bug.cgi?id=95789

        Reviewed by Ojan Vafai.

        Fix miscalculation in log message.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):

2012-09-05  Kenichi Ishibashi  <bashi@chromium.org>

        Unreviewed, rolling out r127612, r127660, and r127664.
        http://trac.webkit.org/changeset/127612
        http://trac.webkit.org/changeset/127660
        http://trac.webkit.org/changeset/127664
        https://bugs.webkit.org/show_bug.cgi?id=95920

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::SuccessCallbackTask::SuccessCallbackTask):
        (MockWebRTCPeerConnectionHandler::SuccessCallbackTask::runIfValid):
        (MockWebRTCPeerConnectionHandler::FailureCallbackTask::FailureCallbackTask):
        (MockWebRTCPeerConnectionHandler::FailureCallbackTask::runIfValid):
        (MockWebRTCPeerConnectionHandler::createOffer):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):
        (SuccessCallbackTask):
        (FailureCallbackTask):

2012-09-05  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Ignore-metrics includes scroll offsets.
        https://bugs.webkit.org/show_bug.cgi?id=95845

        Reviewed by Dirk Pranke.

        Strip scroll-offsets the same way scroll-height and scroll-width is stripped.

        * Scripts/old-run-webkit-tests:
        (stripMetrics):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput):

2012-09-05  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed test fix.

        Including a plugin source file into the build that was added in r127595.

        * GNUmakefile.am:

2012-09-05  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the local and remote description functionality to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95839

        Reviewed by Adam Barth.

        In addition to adding the new methods to MockWebRTCPeerConnectionHandler I cleaned
        up the task definitions a bit. There was no need to have them in the header file.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestSuccededTask::RTCSessionDescriptionRequestSuccededTask):
        (RTCSessionDescriptionRequestFailedTask):
        (RTCSessionDescriptionRequestFailedTask::RTCSessionDescriptionRequestFailedTask):
        (RTCVoidRequestTask):
        (RTCVoidRequestTask::RTCVoidRequestTask):
        (MockWebRTCPeerConnectionHandler::createOffer):
        (MockWebRTCPeerConnectionHandler::setLocalDescription):
        (MockWebRTCPeerConnectionHandler::setRemoteDescription):
        (MockWebRTCPeerConnectionHandler::localDescription):
        (MockWebRTCPeerConnectionHandler::remoteDescription):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-05  Kangil Han  <kangil.han@samsung.com>

        [EFL] Remove '+=' usage in String
        https://bugs.webkit.org/show_bug.cgi?id=95808

        Reviewed by Benjamin Poulain.

        Replaced use of String operator '+=' with StringBuilder.append*() in order to adopt efficient String concatenation.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (descriptionSuitableForTestResult):

2012-09-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Provide implementation for TestRunner::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=95842

        Reviewed by Kenneth Rohde Christiansen.

        Provide proper implementation for TestRunner::pathToLocalResource()
        in EFL WKTR, identical to the one for DumpRenderTree.

        Map /tmp to ${DUMPRENDERTREE_TEMP} environment variable and
        /tmp/LayoutTests to ${LOCAL_RESOURCE_ROOT} so that local resources
        are found my WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
        (WTR::TestRunner::pathToLocalResource):

2012-09-05  Brady Eidson  <beidson@apple.com>

        Frequent crashes in PluginView::scriptObject under runtimeObjectCustomGetOwnPropertySlot
        <rdar://problem/12142226> and https://bugs.webkit.org/show_bug.cgi?id=95026

        Reviewed by Andy Estes.

        Add a plug-in that always fails to initialize:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPPNewFails.cpp: Added.
        (NPPNewFails):
        (NPPNewFails::NPPNewFails):
        (NPPNewFails::NPP_New):

        Add it to all the project files:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2012-09-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix makefile race condition between derived sources and target

        r121966 removed too much of the old qmake logic, including the rule
        that ensured that qmake_all would not trigger dual runs of qmake --
        one of the derived sources -qmake-all rule, and one for making the
        derived sources.

        We now follow a similar pattern as before, by introducing a custom
        target that explicitly depends on the derived sources' qmake-all before
        doing a manual run of make. That ensures a single qmake run for the derived
        sources.

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

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/functions.prf:

2012-09-05  Christophe Dumez  <christophe.dumez@intel.com>

        WKTR doesn't implement dumpWillCacheResponse()
        https://bugs.webkit.org/show_bug.cgi?id=94607

        Reviewed by Kenneth Rohde Christiansen.

        Define shouldCacheResponse() callback in resource
        load client and provide implementation for
        dumpWillCacheResponse() in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::shouldCacheResponse):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpWillCacheResponse):
        (WTR::TestRunner::shouldDumpWillCacheResponse):
        (TestRunner):

2012-09-05  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: Move printing related APIs from LayoutTestController to Internals
        https://bugs.webkit.org/show_bug.cgi?id=92735

        Reviewed by Hajime Morita.

        Move numberOfPages, pageProperty & pageSizeAndMarginsInPixels in Internals and remove duplicated code from DumprenderTree & WebkitTestRunner.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::addUserStyleSheet):
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::hasCustomPageSizeStyle):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:
        (TestRunner::abortModal):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2012-09-05  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Automate the use of AllInOne files in the Qt build
        https://bugs.webkit.org/show_bug.cgi?id=95837

        Reviewed by Tor Arne Vestbø.

        New feature file that implements the all-in-one file automation by
        adding the requested all-in-one files to SOURCES and removing the files
        it includes from SOURCES.

        * qmake/mkspecs/features/use_all_in_one_files.prf: Added.

2012-09-04  Tim Horton  <timothy_horton@apple.com>

        Have NRWT log more output when crash logs are missing
        https://bugs.webkit.org/show_bug.cgi?id=95814

        Reviewed by Dan Bernstein.

        Log the stderr and stdout of the test, in order to provide slightly more
        context when the WebProcess times out while running tests.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):

2012-09-04  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Include device serial number in ChromiumAndroidDriver log messages
        https://bugs.webkit.org/show_bug.cgi?id=95770

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._log_error): Added to replace original _log.error().
        (ChromiumAndroidDriver._log_debug): Added to replace original _log.debug().
        (ChromiumAndroidDriver._abort): Added to replace original raise AssertionError().
        (ChromiumAndroidDriver._push_executable):
        (ChromiumAndroidDriver._push_fonts):
        (ChromiumAndroidDriver._push_test_resources):
        (ChromiumAndroidDriver._run_adb_command):
        (ChromiumAndroidDriver._get_last_stacktrace):
        (ChromiumAndroidDriver._get_crash_log):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver._start_once):
        (ChromiumAndroidDriver._start_once.deadlock_detector):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_get_crash_log):

2012-09-04  Satish Sampath  <satish@chromium.org>

        Run git commands within the checkout directory
        https://bugs.webkit.org/show_bug.cgi?id=95742

        Reviewed by Eric Seidel.

        git commands run from scm/git.py are sometimes run with cwd set to the
        checkout_root and other times with whatever directory was the default cwd.
        Instead all these should run with the checkout root set as the cwd
        (except where we explicitly need a different path)

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._run_git):
        (Git.find_checkout_root):
        (Git.discard_local_commits):
        (Git.local_commits):
        (Git.working_directory_is_clean):
        (Git.clean_working_directory):
        (Git.add_list):
        (Git.delete_list):
        (Git.exists):
        (Git._current_branch):
        (Git._changes_files_for_commit):
        (Git.revisions_changing_file):
        (Git.svn_revision):
        (Git._run_git_svn_find_rev):
        (Git.contents_at_revision):
        (Git.diff_for_file):
        (Git.show_head):
        (Git.committer_email_for_revision):
        (Git.apply_reverse_diff):
        (Git.revert_files):
        (Git.commit_with_message):
        (Git._commit_on_branch):
        (Git.svn_commit_log):
        (Git.last_svn_commit_log):
        (Git.svn_blame):
        (Git._branch_ref_exists):
        (Git.delete_branch):
        (Git.remote_merge_base):
        (Git.commit_locally_with_message):
        (Git.push_local_commits_to_server):
        (Git.commit_ids_from_commitish_arguments):
        (Git.commit_message_for_local_commit):
        (Git.files_changed_summary_for_commit):

2012-09-04  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the async createOffer functionality to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95734

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::SuccessCallbackTask::SuccessCallbackTask):
        (MockWebRTCPeerConnectionHandler::SuccessCallbackTask::runIfValid):
        (MockWebRTCPeerConnectionHandler::FailureCallbackTask::FailureCallbackTask):
        (MockWebRTCPeerConnectionHandler::FailureCallbackTask::runIfValid):
        (MockWebRTCPeerConnectionHandler::createOffer):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::taskList):
        (SuccessCallbackTask):
        (FailureCallbackTask):

2012-09-04  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Output time and thread info in crash log
        https://bugs.webkit.org/show_bug.cgi?id=95768

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._get_logcat): Add '-v threadtime' to adb logcat command line to get time and thread info.

2012-09-04  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Change the MediaStreamTrackList track added/removed signaling
        https://bugs.webkit.org/show_bug.cgi?id=95721

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        (MockWebMediaStreamCenter::didAddMediaStreamTrack):
        (MockWebMediaStreamCenter::didRemoveMediaStreamTrack):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h:
        (MockWebMediaStreamCenter):

2012-09-04  Tony Chang  <tony@chromium.org>

        Elide test names when running new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=95626

        Reviewed by Dirk Pranke.

        When the test name exceeds the number of terminal columns, it leaves
        text on the screen. Avoid this by eliding the test name when running
        tests. This is similar to what ninja does when compiling.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream):
        (MeteredStream.number_of_columns): Helper method to get number of
        terminal columns. Won't work on Win32 python, but meh.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._test_status_line): New method for eliding the text. Doesn't use \u2026
        because stderr appears to be ascii only.
        (Printer.print_started_test): Route through _test_status_line.
        (Printer.print_finished_test): Route through _test_status_line.
        (Printer._print_test_trace): Route through _test_status_line.
        (Printer._print_baseline): Route through _test_status_line.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (test_test_status_line): Test for _test_status_line.

2012-09-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Print API missing documentation when generating gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=95703

        Reviewed by Carlos Garcia Campos.

        Print out API missing documentation when generating gtkdoc. This makes it
        easier to fix documentation errors.

        * gtk/generate-gtkdoc:
        (print_missing_api): Added.
        (generate_doc): Inline the rebase step, since it now reports an error
        when you try to rebase without generating documentation first.
        * gtk/gtkdoc.py:
        (GTKDoc.rebase_installed_docs): Raise an error when rebasing without
        generating documentation first to enable a small cleanup at the caller.
        (GTKDoc.api_missing_documentation): Added.

2012-09-04  Vincent Scheib  <scheib@chromium.org>

        [Chromium] Allow asyncronous response of pointer lock requests in layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=95628

        Reviewed by James Robinson.

        Future tests need the ability to respond asynchronously that
        pointer lock requests have been accepted or rejected. This patch
        adds the following:
            testRunner.setPointerLockWillRespondAsynchronously();
            testRunner.didAcquirePointerLock();
            testRunner.didNotAcquirePointerLock();

        Tested in existing test:
            pointerlockchange-pointerlockerror-events.html

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner):
        (DRTTestRunner::didAcquirePointerLock):
        (DRTTestRunner::didNotAcquirePointerLock):
        (DRTTestRunner::setPointerLockWillRespondAsynchronously):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestPointerLock):
        (WebViewHost::didAcquirePointerLock):
        (WebViewHost::didNotAcquirePointerLock):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::setPointerLockWillRespondAsynchronously):

2012-09-04  Ojan Vafai  <ojan@chromium.org>

        Move content shell bots to their own builder group
        https://bugs.webkit.org/show_bug.cgi?id=95765

        Reviewed by Adam Barth.

        In their current state of instability, they add too much noise. Once they get more stable,
        we can add them back to the regular group or just have them replace the other bots.

        Also, fix the filter for Apple Windows bots since some of them are now "Apple Win ...".

        * TestResultServer/static-dashboards/builders.js:
        (isWebkitTestRunner):
        (isChromiumContentShellTestRunner):
        (isChromiumWebkitTipOfTreeTestRunner):
        (loadBuildersList):

2012-09-03  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Change the focus when the web view is clicked in MiniBrowser and EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=95689

        Reviewed by Kenneth Rohde Christiansen.

        In Minibrowser & EWebLauncher, the web view loses the focus when url bar is clicked.
        So, there are bugs that key events are always generated in url bar although
        the user clicked the web view.

        This patch recovers the focus of the web view when left button is pressed and
        adds for MiniBrowser to toggle the focus when middle button is pressed
        like EWebLauncher already did.

        * EWebLauncher/main.c:
        (on_mouse_down):
        * MiniBrowser/efl/main.c:
        (on_mouse_down):
        (browserCreate):

2012-09-03  Tao Bai  <michaelbai@chromium.org>

        Added ANDROID_GDBSERVER definition for Ant
        https://bugs.webkit.org/show_bug.cgi?id=95265

        Reviewed by Adam Barth.

        ANDROID_GDBSERVER will replace ANDROID_TOOLCHAIN, because the ANDROID_TOOLCHAIN
        is only used for finding the gdbserver.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-09-03  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add Ice-related functionality to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95565

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::updateICE):
        (MockWebRTCPeerConnectionHandler::addICECandidate):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-09-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Fix resizing issues related to URL bar in Minibrowser / EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=95670

        Reviewed by Kenneth Rohde Christiansen.

        Fix layout issues related to the URL bar in Minibrowser
        and EWebLauncher when the window is resized.

        The URL bar was not resized accordingly and the Web
        page was moved behing the URL bar, hiding part of it.

        * EWebLauncher/main.c:
        (on_ecore_evas_resize):
        (closeWindow):
        * EWebLauncher/url_bar.c:
        (url_bar_width_set):
        (url_bar_add):
        * EWebLauncher/url_bar.h:
        * MiniBrowser/efl/main.c:
        (on_ecore_evas_resize):
        (main):

2012-09-01  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Remove hard-coded skipped directories in chromium_android.py
        https://bugs.webkit.org/show_bug.cgi?id=95605

        Reviewed by Dirk Pranke.

        Now skipping rules are put in LayoutTests/platform/chromium-android/TestExpectations.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.check_sys_deps):
        (ChromiumAndroidPort.expectations_files):
        (ChromiumAndroidPort.clean_up_test_run):

2012-09-01  Joanmarie Diggs  <jdiggs@igalia.com>

        [Gtk] Incorrect/unexpected characters in the text of certain accessibles
        https://bugs.webkit.org/show_bug.cgi?id=95180

        Reviewed by Chris Fleizach.

        The bug that was fixed stood in the way of fully implementing stringValue().
        Testing that the bug is fixed requires stringValue() to be fully implemented
        and object replacement characters to be printable.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (replaceCharactersForResults): New method which turns object replacement
        characters into "<obj>" so that the characters can be properly shown in
        Layout Test results. Also turns "\n" into "<\\n>" so that printing the
        accessible text of a single object in the accessible tree doesn't mess up
        the readibility of the results.
        (AccessibilityUIElement::stringValue): Remove the code that immediately
        returned upon encountering an object of ATK_ROLE_PANEL and call the new
        replaceCharactersForResults() prior to returning the accessible string
        value.

2012-09-01  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add MediaStream management to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=95543

        Reviewed by Adam Barth.

        Extending MockWebRTCPeerConnectionHandler to handle addStream/removeStream.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::addStream):
        (MockWebRTCPeerConnectionHandler::removeStream):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-08-31  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS3_FLEXBOX compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=95382

        Reviewed by Ojan Vafai.

        Everyone is already enabling this by default and the spec has stablized.

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

2012-08-31  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Fix for older compilers. Pass id as the return type to the template
        instead of relying on default type.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (drt_NSFontManager_availableFontFamilies):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::wtr_NSFontManager_availableFontFamilies):

2012-08-31  Zan Dobersek  <zandobersek@gmail.com>

        nrwt: use scm instead of calling svn directly to get the revision in json results generator
        https://bugs.webkit.org/show_bug.cgi?id=89616

        Reviewed by Eric Seidel.

        Add the new 'executive' optional function argument to the SCM.in_working_directory
        class method. This way we get to reuse an Executive instance which is necessary in testing
        when we're operating with a mock version of the object.

        In JSONResultsGeneratorBase, it's now possible to get the current SVN revision by using
        the SCMDetector with the generator's FileSystem and Executive instances.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system):
        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        (SCMDetectorTest.test_detect_scm_system): Update the unit test to capture the mock
        Executive output and test it against expected output.
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.in_working_directory):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.__init__):
        (JSONResultsGeneratorBase._get_svn_revision):

2012-08-31  Jon Lee  <jonlee@apple.com>

        [Tests] Add basic tests to http/tests/notifications
        https://bugs.webkit.org/show_bug.cgi?id=95493
        <rdar://problem/12209303>

        Reviewed by Alexey Proskuryakov.

        Add permission request support for WTR.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::decidePolicyForNotificationPermissionRequest): Always allow.
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-08-31  Jon Lee  <jonlee@apple.com>

        [DRT] Make simulating a web click on a notification a queued task
        https://bugs.webkit.org/show_bug.cgi?id=95546
        <rdar://problem/12214170>

        Reviewed by Alexey Proskuryakov.

        Making the web click happen asynchronously better mimics user interaction with the platform.

        * DumpRenderTree/TestRunner.h: Add a flag that determines whether we have a pending notification click.
        (TestRunner::hasPendingWebNotificationClick): Exposed so that dump() can check that the flag is
        not set.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Assert that the flag is not set.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::simulateWebNotificationClick): Set the flag, then add a task to click the
        notification. In the case where the block gets executed after the flag has been unset, we avoid
        performing the click.

2012-08-31  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] ImageDiff output is not in the expected form if image dimensions differ
        https://bugs.webkit.org/show_bug.cgi?id=95575

        Reviewed by Csaba Osztrogonác.

        Output 100% difference in the case of differing image dimensions so
        the test harness knows that we won't produce any output further.
        This matches the behavior of other ports.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2012-08-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r127261.
        http://trac.webkit.org/changeset/127261
        https://bugs.webkit.org/show_bug.cgi?id=95572

        This patch depends on other build fixes (see blockers of bug
        95466) which should land first (Requested by milian on
        #webkit).

        * qmake/mkspecs/features/features.prf:

2012-08-31  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] Support WebKit2/QML on QNX
        https://bugs.webkit.org/show_bug.cgi?id=95466

        Reviewed by Noam Rosenthal.

        Enable USE(3D_GRAPHICS) on QNX again, paired with the other bug fixes
        this should finally work now.

        * qmake/mkspecs/features/features.prf:

2012-08-30  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Skip compositing/webgl and platform/chromium/virtual/threaded/compositing/webgl tests
        https://bugs.webkit.org/show_bug.cgi?id=95400

        Reviewed by Dirk Pranke.

        WebGL is not enabled and should be skipped on Android (http://crbug.com/135877).

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.skipped_layout_tests):

2012-08-30  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Tries to run empty string when calling generate-gtkdoc when not using jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=95499

        Unreviewed. One more fix to avoid trying to run the empty string.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2012-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r127171.
        http://trac.webkit.org/changeset/127171
        https://bugs.webkit.org/show_bug.cgi?id=95505

        testRunner does not need dumpWebNotificationCallbacks().
        (Requested by jonlee on #webkit).

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        (-[MockWebNotificationProvider webView:didShowNotification:]):
        (-[MockWebNotificationProvider webView:didClickNotification:]):
        (-[MockWebNotificationProvider webView:didCloseNotifications:]):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForNotificationRequestFromOrigin:listener:]):

2012-08-30  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Use wtfObjcMsgSend and wtfCallIMP templates which do appropriate casts
        to a function pointer with right types when calling objc_msgSend and an
        IMP method directly.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (drt_NSFontManager_availableFontFamilies):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::wtr_NSFontManager_availableFontFamilies):

2012-08-30  Benjamin Poulain  <bpoulain@apple.com>

        Replace JSC::UString by WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=95271

        Reviewed by Geoffrey Garen.

        Get rid of UString.

        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        * gdb/webkit.py:
        (WTFStringPrinter.to_string):
        (JSCIdentifierPrinter.to_string):
        (JSCJSStringPrinter.to_string):
        (add_pretty_printers):

2012-08-30  Dirk Pranke  <dpranke@chromium.org>

        nrwt should have TestExpectations everywhere we have Skipped files for apple ports
        https://bugs.webkit.org/show_bug.cgi?id=95495

        Reviewed by Ojan Vafai.

        This is a follow-on to bug 95370 that adds in support for
        platform/wk2/TestExpectations and
        platform/{mac,win}-$version/TestExpectations.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_expectations_files):

2012-08-30  Dirk Pranke  <dpranke@chromium.org>

        executive.run_in_parallel() hangs if given nothing to do
        https://bugs.webkit.org/show_bug.cgi?id=95387

        Reviewed by Ojan Vafai.

        Check to make sure that Executive.run_in_parallel() requires
        a non-empty list of commands to execute; passing an empty list
        seems surely like a programming error.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.run_in_parallel):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_in_parallel_assert_nonempty):

2012-08-30  Dirk Pranke  <dpranke@chromium.org>

        decide what (and how) we should set the tolerance for ref test pixel compares and test for that
        https://bugs.webkit.org/show_bug.cgi?id=94746

        Reviewed by Ojan Vafai.

        Add an assertion to diff_image() to check that we are passing
        tolerance=0 explicitly when diffing ref test results.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.diff_image):

2012-08-30  Dirk Pranke  <dpranke@chromium.org>

        NRWT should look in mac-wk2 for a TestExpecations file
        https://bugs.webkit.org/show_bug.cgi?id=95370

        Reviewed by Ojan Vafai.

        Adds support for mac-wk2 and win-wk2 to expectations_files()
        for the apple mac and apple win ports.
        
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_expectations_files):

2012-08-30  Jon Lee  <jonlee@apple.com>

        [Mac] Add testRunner.dumpWebNotificationCallbacks() to DRT
        https://bugs.webkit.org/show_bug.cgi?id=95232
        <rdar://problem/12190776>

        Reviewed by Alexey Proskuryakov.

        Add additional output when running test, if testRunner.dumpWebNotificationCallbacks() is called.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (dumpWebNotificationCallbacksCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner):
        (TestRunner::dumpWebNotificationCallbacks):
        (TestRunner::setDumpWebNotificationCallbacks):
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        (-[WebNotification _drt_descriptionSuitableForTestResult]):
        (-[MockWebNotificationProvider webView:didShowNotification:]):
        (-[MockWebNotificationProvider webView:didClickNotification:]):
        (-[MockWebNotificationProvider webView:didCloseNotifications:]):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForNotificationRequestFromOrigin:listener:]):

2012-08-30  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Introduce MediaConstraints
        https://bugs.webkit.org/show_bug.cgi?id=95198

        Reviewed by Adam Barth.

        Extending the MockWebRTCPeerConnectionHandler with MediaConstraints functionality.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (isSupportedConstraint):
        (isValidConstraint):
        (MockWebRTCPeerConnectionHandler::initialize):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-08-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] Add didReceiveServerRedirectForProvisionalLoadForFrame dumping
        https://bugs.webkit.org/show_bug.cgi?id=95454

        Reviewed by Kenneth Rohde Christiansen.

        Added didReceiveServerRedirectForProvisionalLoadForFrame dumping to WTR.

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

2012-08-30  Leo Yang  <leoyang@rim.com>

        Update my email address.

        Not reviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-30  Jochen Eisinger  <jochen@chromium.org>

        [NRWT] Add support for recognizing arbitrary process names in crash lines
        https://bugs.webkit.org/show_bug.cgi?id=95435

        Reviewed by Adam Barth.

        When running layout tests in the chromium port using the content shell,
        we want to be able to report sub-process crashes as well.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver._check_for_driver_crash):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_check_for_driver_crash):

2012-08-29  Zan Dobersek  <zandobersek@gmail.com>

        Random test-webkitpy failures on the buildbot
        https://bugs.webkit.org/show_bug.cgi?id=95096

        Reviewed by Dirk Pranke.

        Suppress occasional errors when running test-webkitpy on GTK builders
        by running these tests serially. The 64-bit Release builder is especially
        prone to these as it can run up to 24 tests in parallel.

        Despite the tests not being run in parallel, the testing only lasts a handful
        of seconds more, so this is a worthy trade-off to avoid unnecessary
        false-alarm redness on the GTK builders.

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

2012-08-29  Benjamin Poulain  <bpoulain@apple.com>

        REGRESSION(r126780): Crash using StringImpl::is8Bit before checking if there is an impl
        https://bugs.webkit.org/show_bug.cgi?id=95380

        Reviewed by Michael Saboff.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        Add very basic tests for String::ascii(). This covers the case of null strings that caused
        the crash.

2012-08-29  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Canvas should have a distinct role
        https://bugs.webkit.org/show_bug.cgi?id=95248

        Reviewed by Chris Fleizach.

        Add support for canvas accessibility role.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString):

2012-08-29  José Dapena Paz  <jdapena@igalia.com>

        [Gtk] Process Gtk 3.4 smooth scroll events properly
        https://bugs.webkit.org/show_bug.cgi?id=88070

        Added continousMouseScrollBy support in WebKitTestRunner, and added
        implementation for gtk, and stub for Qt, mac and EFL.

        Added layout tests support for smooth scroll in Gtk 3.4, and use smooth
        scroll for emulating multi-tick mouseScrollBy events.

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseScrollByCallback):
        (continuousMouseScrollByCallback):
        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseScrollBy):
        (WTR):
        (WTR::EventSendingController::continuousMouseScrollBy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::continuousScrollBy):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR):

2012-08-29  Alex Sakhartchouk  <alexst@chromium.org>

        [chromium] Support high DIP pixel tests with DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=94935

        Reviewed by James Robinson.

        Adding device scale factor into the drt image dumping code

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::reset):
        (DRTTestRunner::setBackingScaleFactor):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setDeviceScaleFactor):
        (WebViewHost::paintInvalidatedRegion):
        (WebViewHost::canvas):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-08-29  Kevin Funk  <kevin.funk@kdab.com>

        Fix check-webkit-style (and probably others) when WebKit is in a git submodule
        https://bugs.webkit.org/show_bug.cgi?id=95177

        Reviewed by Dirk Pranke.

        Find the real checkout root by using 'git rev-parse --show-toplevel' instead of '--git-dir'

        * Scripts/webkitpy/common/checkout/scm/git.py:

2012-08-29  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations wrongly touches other platforms' TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=95222

        Reviewed by Adam Barth.

        The code we had to remove REBASELINE lines from the
        TestExpectations files did not handle multiple files (in a
        cascade) correctly; we weren't limiting lines to a particular
        file correctly in without_rebaseline_modifier(). This patch
        fixes that and corrects the tests (which weren't correct and
        didn't cover things very well).

        Note also that the webkit-patch rebaseline-commands are still
        using the include_overrides=False option in a couple places;
        this is never correct or needed at this point. This patch fixes
        the usage for webkit-patch rebaseline-expectations, but I still
        need to fix rebaseline-test-internal, which I will do in a
        separate patch (see bug 95268).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RebaseliningTest.assertRemove):
        (RebaseliningTest.test_remove):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations._update_expectations_files):

2012-08-29  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations hangs
        https://bugs.webkit.org/show_bug.cgi?id=95243

        Reviewed by Tony Chang.

        Don't try to run no commands in parallel; report an error
        instead that we didn't find any tests to rebaseline.

        Filed bug 95387 as well to make sure run_in_parallel() doesn't hang forever.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (_assert_command):
        (test_rebaseline_expectations_noop):

2012-08-29  Brady Eidson  <beidson@apple.com>

        REGRESSION: Not sending NPP_SetWindow is causing Flash to not throttle itself
        <rdar://problem/12133021> and https://bugs.webkit.org/show_bug.cgi?id=95274

        Reviewed by Sam Weinig.

        Add a test plug-in that calls back into the page with info on the NPWindow passed
        in to NPP_SetWindow.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/LogNPPSetWindow.cpp: Added.
        (LogNPPSetWindow):
        (LogNPPSetWindow::LogNPPSetWindow):
        (LogNPPSetWindow::NPP_SetWindow):

2012-08-29  Jon Lee  <jonlee@apple.com>

        [Mac] Basic DRT support for web notifications
        https://bugs.webkit.org/show_bug.cgi?id=79492
        <rdar://problem/10357639>

        Reviewed by Alexey Proskuryakov.

        This patch implements the stubs for web notification support on DRT. Assume that when
        Notification.requestPermission() is called, the user always chooses to allow it. This can be easily
        overridden in layout tests with testRunner.denyWebNotificationPermission() when needed.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Add MockWebNotificationProvider.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Set MockWebNotificationProvider singleton as the provider for the
        web view.
        (resetWebViewToConsistentStateBeforeTesting): Make sure to reset the provider's state between each test.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::grantWebNotificationPermission): Set permission to granted for specified origin.
        (TestRunner::denyWebNotificationPermission): Set permission to denied for specified origin.
        (TestRunner::removeAllWebNotificationPermissions):
        (TestRunner::simulateWebNotificationClick): Retrieve the notification ID from the JS notification object, and
        simulate the click. This is similar to how WTR performs the click.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForNotificationRequestFromOrigin:listener:]): Assume when asked, the
        user allows web notifications.

        * DumpRenderTree/mac/MockWebNotificationProvider.h: Added. Maintains a list of registered web views, known permissions,
        a map of notification IDs to WebNotification instances, and a map of the WebViews from which the notifications were dispatched.
        * DumpRenderTree/mac/MockWebNotificationProvider.mm: Added.
        (+[MockWebNotificationProvider shared]): The provider is a singleton.
        (-[MockWebNotificationProvider init]): Instantiate the permissions map.
        (-[MockWebNotificationProvider registerWebView:]):
        (-[MockWebNotificationProvider unregisterWebView:]):
        (-[MockWebNotificationProvider showNotification:fromWebView:]): Add the notification to the maps. Tell the web view that the
        notification did show.
        (-[MockWebNotificationProvider cancelNotification:]): Tell the web view the notification did close.
        (-[MockWebNotificationProvider notificationDestroyed:]): Remove the notification from the maps. Here we don't make a callback.
        (-[MockWebNotificationProvider clearNotifications:]): Remove the specified notifications from the maps. Here we don't make a callback.
        (-[MockWebNotificationProvider webView:didShowNotification:]): Delegate callback. Dispatch the show event.
        (-[MockWebNotificationProvider webView:didClickNotification:]): Delegate callback. Dispatch the click event.
        (-[MockWebNotificationProvider webView:didCloseNotifications:]): Delegate callback. Dispatch the close event.
        (-[MockWebNotificationProvider simulateWebNotificationClick:]): Tell the web view we clicked the notification.
        (-[MockWebNotificationProvider policyForOrigin:]): Look in the permission dictionary.
        (-[MockWebNotificationProvider setWebNotificationOrigin:permission:]): Set the permission for the origin in the dictionary.
        (-[MockWebNotificationProvider removeAllWebNotificationPermissions]): Clear the permission map.
        (-[MockWebNotificationProvider reset]): Remove all mappings and permissions.

2012-08-29  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Adjust wtf include header style
        https://bugs.webkit.org/show_bug.cgi?id=95368

        Reviewed by Yong Li.

        Switch to #include <wtf/...> like the other ports.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        * DumpRenderTree/blackberry/PNGImageEncoder.cpp:
        * DumpRenderTree/blackberry/PNGImageEncoder.h:
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.h:
        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp:

2012-08-29  Roger Fong  <roger_fong@apple.com>

        Update cygwin-downloader.zip to match modified downloader script.
        https://bugs.webkit.org/show_bug.cgi?id=76936

        Rubber Stamped by Jon Honeycutt.

        cygwin-downloader.py was modified in http://trac.webkit.org/changeset/126948.
        Updating zip to reflect changes.

        * CygwinDownloader/cygwin-downloader.zip:

2012-08-29  Dominik Röttsches  <dominik.rottsches@intel.com>

        Stylechecker warns about comparison to zero when comparing to 0.5
        https://bugs.webkit.org/show_bug.cgi?id=94913

        Reviewed by Dirk Pranke.

        According to the python documentation, \W is the character group with all
        non-alphanumeric characters, equivalent to [^a-zA-Z0-9_], which is equal to
        to [^\w]. We need to exclude the dot "." as well, so that floating point
        values do not trigger this warning. Adding a unit test that shows the problem.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_comparisons_to_zero): Modifying the regex to not get triggered by comparing to floats.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_null_false_zero): Unit test exposing this issue.

2012-08-29  Jon Lee  <jonlee@apple.com>

        WTR build fixes.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::showWebNotification): Make ML happier.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2012-08-29  Jon Lee  <jonlee@apple.com>

        [WK2] Basic WTR support for web notifications
        https://bugs.webkit.org/show_bug.cgi?id=95154
        <rdar://problem/12184492>

        Reviewed by Alexey Proskuryakov.

        Implement WTR support, without platform event output (bug 95233).

        Legacy APIs will not be supported, since many of the tests are skipped
        on ports that do test notifications, and the issue with using file:// as the origin means a lot of the permissions
        tests won't work. Bugs 81048 and 81697 will track migrating the existing tests to use the new testRunner API, and move
        the tests to http/tests/notifications.

        Permissions will be handled only in the injected bundle. This allows tests to set permission synchronously, and not
        require a chain of setTimeout()'s when writing a notification test. Clicking a notification, however, should
        be invoked from the UIProcess.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage): When told to "Reset", clear out all of the permissions.
        (WTR::InjectedBundle::postSimulateWebNotificationClick): Tell the bundle client to simulate a click based on the
        notification's internal ID.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::grantWebNotificationPermission): Manually set the permission using WKBundle SPI.
        (WTR::TestRunner::denyWebNotificationPermission): Manually set the permission using WKBundle SPI.
        (WTR::TestRunner::removeAllWebNotificationPermissions):
        (WTR::TestRunner::simulateWebNotificationClick): Post a message through the injected bundle.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        Because supporting web notifications goes beyond a couple functions, move all of the logic into a WebNotificationProvider
        class.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): When the injected bundle sends a message to simulate a click,
        TestInvocation forwards that request to the TestController.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Set the provider.
        (WTR::TestController::resetStateToConsistentValues): Tell the provider to reset.
        (WTR::TestController::simulateWebNotificationClick): Tell the provider to simulate a user clicking on a platform notification.
        * WebKitTestRunner/TestController.h: Holds an instance to the provider.

        The provider maintains a pointer to one notification manager (presumably the web process associated with WTR), and a set
        of notification IDs that have been "shown" by the platform. This allows us to simulate a click on a notification.
        * WebKitTestRunner/WebNotificationProvider.h: Added.
        * WebKitTestRunner/WebNotificationProvider.cpp: Added.
        (WTR::WebNotificationProvider::showWebNotification): Adds the notification to set of shown notifications. Notifies provider that
        the notification got shown.
        (WTR::WebNotificationProvider::closeWebNotification): Removes the notification from the set. Notifies provider that the notification
        got closed.
        (WTR::WebNotificationProvider::addNotificationManager): Maintains one manager, which is fine for testing purposes.
        (WTR::WebNotificationProvider::removeNotificationManager): Maintains one manager.
        (WTR::WebNotificationProvider::notificationPermissions): When the web process starts, it maintains an initial set of known
        permissions. For testing purposes, we always want this set to be empty.
        (WTR::WebNotificationProvider::simulateWebNotificationClick): Notifies provider that the notification got "clicked".
        (WTR::WebNotificationProvider::reset): To reset the state, we pretend that we closed all of the platform notifications.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Add WebNotificationProvider.

2012-08-29  Kamil Blank  <k.blank@samsung.com>

        [EFL] Add setting API for allow universal/file access from file URLs.
        https://bugs.webkit.org/show_bug.cgi?id=83121

        Reviewed by Eric Seidel.

        Implementation of setAllowUniversalAccessFromFileURLs and setAllowFileAccessFromFileURLs.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setAllowUniversalAccessFromFileURLs):
        (TestRunner::setAllowFileAccessFromFileURLs):

2012-08-29  Jon Lee  <jonlee@apple.com>

        Update TestRunner API for web notifications
        https://bugs.webkit.org/show_bug.cgi?id=95093
        <rdar://problem/12179649>

        Reviewed by Alexey Proskuryakov.

        As it turns out the patch for this accidentally got squashed into the commit for
        bug 95099 (r126909). This amendment patch adds some comments about the renaming
        of the older TestRunner API for web notifications.

        * DumpRenderTree/TestRunner.h:
        (TestRunner):

2012-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126972.
        http://trac.webkit.org/changeset/126972
        https://bugs.webkit.org/show_bug.cgi?id=95349

        accessibility/canvas-description-and-role.html has been
        failing consistently on several bots and Dominic needs some
        time to investigate why (Requested by jchaffraix on #webkit).

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString):

2012-08-29  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Resolve CMake warnings on overlapping search paths for EFL jhbuild-enabled build
        https://bugs.webkit.org/show_bug.cgi?id=84707

        Reviewed by Gustavo Noronha Silva.

        Most of the warnings have been fixed now that FindCairo.cmake and
        FindGLIB.cmake have been rewritten. The remaining one, related to
        FindFontconfig.cmake, shows up when building on a 64-bit
        Debian-based systems.

        jhbuild installs libraries into lib64/ by default on 64-bit Linux
        installations, while CMake does not look for libraries in lib64/
        when /etc/debian_version exists on the system. The FIND_LIBRARY()
        would then sometimes end up using the system installation instead of
        the jhbuild one, causing mismatches and, when pkg-config is not used
        at all, failing to find libraries altogether.

        * efl/jhbuildrc: Set the CMAKE_LIBRARY_PATH environment variable
        when use_lib64 is set to force CMake to look into lib64/ regardless
        of the presence of /etc/debian_version.

2012-08-29  Dominik Röttsches  <dominik.rottsches@intel.com>

        The 2d.imageData.object.round canvas test is failing
        https://bugs.webkit.org/show_bug.cgi?id=40272

        Reviewed by Benjamin Poulain.

        Updating patch to address Benjamin's review comments.
        Adding a WTF test to test lrint implementation.

        * TestWebKitAPI/CMakeLists.txt: Added MathExtras.cpp test file.
        * TestWebKitAPI/GNUmakefile.am: Added MathExtras.cpp test file.
        * TestWebKitAPI/TestWebKitAPI.gypi: Added MathExtras.cpp test file.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added MathExtras.cpp test file.
        * TestWebKitAPI/Tests/WTF/MathExtras.cpp: Added this test file containing a test for lrint().
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added MathExtras.cpp test file.

2012-08-29  Florin Malita  <fmalita@chromium.org>

        Unreviewed, updating Kelly Norton's email address at his request.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-29  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] The nrwt should check the contents of the skipped files with --lint-test-files
        https://bugs.webkit.org/show_bug.cgi?id=93723

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.expectation_for_skipped_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (SkippedTests.test_skipped_entry_dont_exist):

2012-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120113.
        http://trac.webkit.org/changeset/120113
        https://bugs.webkit.org/show_bug.cgi?id=95320

        Wrong fix for the problem, experimentally rolling it out for
        bug 95237. (Requested by rakuco on #webkit).

        * efl/jhbuildrc:

2012-08-29  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Canvas should have a distinct role
        https://bugs.webkit.org/show_bug.cgi?id=95248

        Reviewed by Chris Fleizach.

        Add support for canvas accessibility role.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString):

2012-08-28  Eric Seidel  <eric@webkit.org>

        cr-ews bot doesn't set CWD correctly when zipping layout test results
        https://bugs.webkit.org/show_bug.cgi?id=91265

        Reviewed by Kenneth Russell.

        This should make the zips slightly less cumbersome to deal with.

        * Scripts/webkitpy/common/system/workspace.py:
        (Workspace.create_zip):
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        (WorkspaceTest.test_create_zip):
        (WorkspaceTest.test_create_zip_exception):

2012-08-28  Benjamin Poulain  <benjamin@webkit.org>

        Fix the Commiters script

        Unreviewed.

        Remove Roger Fong from the Contributor list, he appears in the Commiter list since r126949.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-28  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-28  Roger Fong  <roger_fong@apple.com>

        Add minires to list of required cygwin install packages.
        https://bugs.webkit.org/show_bug.cgi?id=76936

        Reviewed by Tim Horton.

        * CygwinDownloader/cygwin-downloader.py:

2012-08-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Upstream layout test expectations (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=95212

        Reviewed by Adam Barth.

        - Now run both gpu path and non-gpu path of 2d canvas layout tests
        because both are used in chromium-android.

        - Exclude all webgl tests because webgl is not enabled yet.

        - Removed 'win' from the baseline fallback list. This was a mistake.

        - Moved some small directories to TestExpectations from skipped_layout_tests().

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.skipped_layout_tests):

2012-08-28  Joanmarie Diggs  <jdiggs@igalia.com>

        Implement AccessibilityUIElement::titleUIElement() and AccessibilityUIElement::stringValue()
        https://bugs.webkit.org/show_bug.cgi?id=95185

        Reviewed by Chris Fleizach.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::titleUIElement): Implemented
        Gets the ATK_RELATION_LABELLED_BY target.
        (AccessibilityUIElement::stringValue): Implemented for all roles but ATK_ROLE_PANEL.
        Gets the string from atk_text_get_text(). Will implement for ATK_ROLE_PANEL after
        bug 95180 is fixed.

2012-08-28  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Crash due to object getting deleted inside updateBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=94619

        Reviewed by Chris Fleizach.

        Change isValid to !isDetached after deleting isValid from
        chromium WebAccessibilityObject as being redundant.

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (AccessibilityUIElement::isValidGetterCallback):

2012-08-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126914.
        http://trac.webkit.org/changeset/126914
        https://bugs.webkit.org/show_bug.cgi?id=95239

        it breaks everything and fixes nothing (Requested by pizlo on
        #webkit).

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp:
        (CppBoundClass::~CppBoundClass):
        (CppBoundClass::invoke):
        (CppBoundClass::getProperty):
        (CppBoundClass::setProperty):
        (CppBoundClass::bindCallback):
        (CppBoundClass::bindProperty):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (applyFontMap):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printResourceDescription):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::winNotificationReceived):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyPage):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::worldIDForWorld):
        (WTR::TestRunner::evaluateScriptInIsolatedWorld):

2012-08-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp:
        (CppBoundClass::~CppBoundClass):
        (CppBoundClass::invoke):
        (CppBoundClass::getProperty):
        (CppBoundClass::setProperty):
        (CppBoundClass::bindCallback):
        (CppBoundClass::bindProperty):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (applyFontMap):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printResourceDescription):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::winNotificationReceived):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyPage):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::worldIDForWorld):
        (WTR::TestRunner::evaluateScriptInIsolatedWorld):

2012-08-27  Jon Lee  <jonlee@apple.com>

        Update TestRunner API for web notifications
        https://bugs.webkit.org/show_bug.cgi?id=95093
        <rdar://problem/12179649>

        Reviewed by Jessie Berlin.

        This is work toward providing Mac support for web notifications in DRT and WTR (77969).

        Some of the legacy APIs are less than ideal, and not tenable with the WTR infrastructure.
        This first patch renames the TestRunner calls to use the term "web notifications" instead of
        "desktop notifications", deprecates a couple API calls that are not used by anyone, and adds
        additional calls that will be used in the tests that test the standard API.

        * DumpRenderTree/TestRunner.h:
        (TestRunner): For consistency, rename a couple member variables. Remove unused checkDesktopNotificationPermission()
        and areDesktopNotificationPermissionRequestsIgnored(). Remove origin mapping since each port implements its own solution.
        * DumpRenderTree/TestRunner.cpp: Push grantWebNotificationPermission() to individual ports.
        (TestRunner::TestRunner):
        (ignoreLegacyWebNotificationPermissionRequestsCallback): Renamed.
        (simulateLegacyWebNotificationClickCallback): Renamed.
        (grantWebNotificationPermissionCallback): Renamed.
        (denyWebNotificationPermissionCallback): Added.
        (removeAllWebNotificationPermissionsCallback): Added.
        (simulateWebNotificationClickCallback): Added.
        (TestRunner::staticFunctions):
        (TestRunner::ignoreLegacyWebNotificationPermissionRequests):

        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        (DRTTestRunner::DRTTestRunner): Added bindings for new APIs.
        (DRTTestRunner::grantWebNotificationPermission):
        (DRTTestRunner::denyWebNotificationPermission): Stub.
        (DRTTestRunner::removeAllWebNotificationPermissions): Stub.
        (DRTTestRunner::simulateWebNotificationClick): Stub.
        (DRTTestRunner::simulateLegacyWebNotificationClick):
        * DumpRenderTree/chromium/DRTTestRunner.h:
        (DRTTestRunner):

        Added stubs.
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/TestRunnerMac.mm: Later patch will contain implementation of this API.
        * DumpRenderTree/qt/TestRunnerQt.cpp: Added Qt-based stubs.
        * DumpRenderTree/win/TestRunnerWin.cpp:

2012-08-28  Szilard Ledan  <szledan@inf.u-szeged.hu>

        [webkit-patch] gets stuck into an infinite loop if bugzilla doesn't respond in time.
        https://bugs.webkit.org/show_bug.cgi?id=94700

        Reviewed by Eric Seidel.

        Interrupting download with a timeout would be a possible solution.
        I imported the socket module and used the setdefaulttimeout() method.
        Fixing it is important, because EWS bots need to be restarted regularly
        because of this bug.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._get_browser):
        (Bugzilla.setdefaulttimeout):

2012-08-28  Gabor Rapcsanyi  <rgabor@webkit.org>

        [Qt] Keep QT_QPA_PLATFORM_PLUGIN_PATH environment variable in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=95194

        Reviewed by Simon Hausmann.

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

2012-08-28  Andras Becsi  <andras.becsi@nokia.com>

        [watchlist] Unreviewed, subscribe to Qt bugs.

        * Scripts/webkitpy/common/config/watchlist:

2012-08-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] New test introduced in r126611 fails: fast/css/image-set-setting.html
        https://bugs.webkit.org/show_bug.cgi?id=95054

        Reviewed by Eric Seidel.

        Enable CSS_IMAGE_SET for the Qt build.

        * qmake/mkspecs/features/features.pri:

2012-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable CSS sticky position
        https://bugs.webkit.org/show_bug.cgi?id=95172

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.pri:

2012-08-27  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Memory cache should be cleared in between test runs
        https://bugs.webkit.org/show_bug.cgi?id=95105

        Reviewed by Martin Robinson.

        Call the new DumpRenderTreeSupportGtk helper method after every test
        to clear the memory cache.

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

2012-08-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126836.
        http://trac.webkit.org/changeset/126836
        https://bugs.webkit.org/show_bug.cgi?id=95163

        Broke all Apple ports, EFL, and Qt. (Requested by tkent on
        #webkit).

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp:
        (CppBoundClass::~CppBoundClass):
        (CppBoundClass::invoke):
        (CppBoundClass::getProperty):
        (CppBoundClass::setProperty):
        (CppBoundClass::bindCallback):
        (CppBoundClass::bindProperty):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (applyFontMap):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printResourceDescription):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::winNotificationReceived):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyPage):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::worldIDForWorld):
        (WTR::TestRunner::evaluateScriptInIsolatedWorld):

2012-08-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp:
        (CppBoundClass::~CppBoundClass):
        (CppBoundClass::invoke):
        (CppBoundClass::getProperty):
        (CppBoundClass::setProperty):
        (CppBoundClass::bindCallback):
        (CppBoundClass::bindProperty):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (applyFontMap):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printResourceDescription):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::winNotificationReceived):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (worldIDForWorld):
        (TestRunner::evaluateScriptInIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyPage):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDestroyPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::worldIDForWorld):
        (WTR::TestRunner::evaluateScriptInIsolatedWorld):

2012-08-24  James Robinson  <jamesr@chromium.org>

        WebGL should not flip textures on presentation if contents are unchanged
        https://bugs.webkit.org/show_bug.cgi?id=94961

        Reviewed by Kenneth Russell.

        Run some compositing webgl tests in threaded mode to catch regressions specific to that mode.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.virtual_test_suites):

2012-08-27  Gavin Peters  <gavinp@chromium.org>

        [webkit-patch] Don't crash chrome-channels command when a previously unknown platform shows up.
        https://bugs.webkit.org/show_bug.cgi?id=95104

        Reviewed by Adam Barth.

        Today I found out this command was broken by the new iOS platform showing up on omahaproxy. Now the webkit-patch chrome-channels command gracefully handles new, previously unknown platforms. Also, it prints iOS in the proper mixed case.

        * Scripts/webkitpy/common/net/omahaproxy.py:
        (OmahaProxy):
        (OmahaProxy.get_revisions):
        * Scripts/webkitpy/common/net/omahaproxy_unittest.py:
        (OmahaProxyTest):
        (OmahaProxyTest.test_get_revisions):

2012-08-27  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL][WK2] Free Url_Bar on program exit
        https://bugs.webkit.org/show_bug.cgi?id=95086

        Reviewed by Eric Seidel.

        Fix a memory leak by freeing the Url_Bar on program exit.

        * MiniBrowser/efl/main.c:
        (main): Call url_bar_del() to free the Url_Bar.

2012-08-27  James Robinson  <jamesr@chromium.org>

        [chromium] Fix exit code status logic in run-chromium-webkit-unit-tests
        https://bugs.webkit.org/show_bug.cgi?id=95115

        Reviewed by Adam Barth.

        Use VCSUtils utility function to check if webkit_unit_tests terminates normally so we generate a non-zero exit
        code if the unit tests crash.

        * Scripts/run-chromium-webkit-unit-tests:

2012-08-27  Benjamin Poulain  <benjamin@webkit.org>

        Add ECMAScript Number to String conversion to WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=95016

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::testNumberToStringECMAScript):
        (TestWebKitAPI): Add tests for String's ECMAString number conversion.

2012-08-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Qt] WebAudio support
        https://bugs.webkit.org/show_bug.cgi?id=94806

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml: Enable WebAudio support.

2012-08-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Rename RegisterProtocolHandler API to NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=94920

        Reviewed by Adam Barth.

        Renamed 'register-protocol-handler' feature to 'navigator-content-utils'.

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

2012-08-24  Benjamin Poulain  <bpoulain@apple.com>

        Unify Number to StringImpl conversion
        https://bugs.webkit.org/show_bug.cgi?id=94879

        Reviewed by Geoffrey Garen.

        Add testing for the new IntegerToStringConversion.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IntegerToStringConversion.cpp: Added.

2012-08-23  James Robinson  <jamesr@chromium.org>

        [chromium] Convert WebLayerTreeView interface into pure virtual
        https://bugs.webkit.org/show_bug.cgi?id=94866

        Reviewed by Adrienne Walker.

        Updates DumpRenderTree's WebViewHost to vend a WebCompositorOutputSurface so DumpRenderTree can run compositing
        tests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createOutputSurface):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        * DumpRenderTree/chromium/WebViewHostOutputSurface.cpp: Copied from Source/WebKit/chromium/src/WebLayerTreeViewImpl.h.
        (WebKit):
        (WebKit::WebViewHostOutputSurface::WebViewHostOutputSurface):
        (WebKit::WebViewHostOutputSurface::~WebViewHostOutputSurface):
        (WebKit::WebViewHostOutputSurface::bindToClient):
        (WebKit::WebViewHostOutputSurface::capabilities):
        (WebKit::WebViewHostOutputSurface::context3D):
        (WebKit::WebViewHostOutputSurface::sendFrameToParentCompositor):
        * DumpRenderTree/chromium/WebViewHostOutputSurface.h: Copied from Source/WebKit/chromium/src/WebLayerTreeViewImpl.h.
        (WebKit):
        (WebViewHostOutputSurface):

2012-08-24  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Many 'Unexpected EOF ...' when a test crashes
        https://bugs.webkit.org/show_bug.cgi?id=94865

        Reviewed by Dirk Pranke.

        Android detects crash of test by checking if the return value of read() is None.
        Added a parameter 'treat_no_data_as_crash' to let ServerProcess know the special requirement of Android.
        If set, ServerProcess will set _crashed unconditionaly when there is no data.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._android_server_process_constructor):
        (ChromiumAndroidDriver._start_once):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.__init__):
        (ServerProcess._wait_for_data_and_update_buffers_using_select):

2012-08-24  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        build-webkit --gtk fails with Can't exec ""
        https://bugs.webkit.org/show_bug.cgi?id=94944

        Reviewed by Martin Robinson.

        When jhbuild wrapper is not needed, do unshift a blank string to build
        arguments.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):

2012-08-24  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add readyState functionality to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=94813

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::stop):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
        (MockWebRTCPeerConnectionHandler):

2012-08-24  Michael Brüning  <michaelbruening@gmail.com>

        Unreviewed. Adding myself to committers list.

        Also updated email information.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-24  Michael Brüning  <michaelbruening@gmail.com>

        [Qt][WK2] Make viewport related experimental.test properties encapsulated.
        https://bugs.webkit.org/show_bug.cgi?id=88320

        Reviewed by Kenneth Rohde Christiansen.

        Changed the access to the viewport attributes to use the viewport object that is introduced by this change.

        * MiniBrowser/qt/qml/ViewportInfoItem.qml:

2012-08-23  Dirk Pranke  <dpranke@chromium.org>

        leak detection broken after r126247 on mac
        https://bugs.webkit.org/show_bug.cgi?id=94893

        Unreviewed, build fix.

        Adds is_snowleopard(), is_lion back() in for the mac port. We'll
        probably need an is_mountainlion() or equivalent at some point,
        I'm guessing (but I've deleted the leopard code).

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        (MacPort.is_snowleopard):
        (MacPort.is_lion):

2012-08-23  Julien Chaffraix  <jchaffraix@webkit.org>

        [Chromium] Enable AtomicString && CString && WTFString && StringImpl unit tests
        https://bugs.webkit.org/show_bug.cgi?id=94871

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        Added the missing files to Chromium's build system.

2012-08-23  Raphael Kubo da Costa  <rakuco@webkit.org>

        [watchlist] Unreviewed, subscribe to WebKit2-EFL bugs.

        * Scripts/webkitpy/common/config/watchlist:

2012-08-23  Ryosuke Niwa  <rniwa@webkit.org>

        Replay tests take forever to load
        https://bugs.webkit.org/show_bug.cgi?id=94764

        Reviewed by Adam Barth.

        Don't load about:blank at the beginning. This appears to clog the DRT.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayPerfTest.run_single):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestReplayPerfTest.test_run_single):
        (TestReplayPerfTest.test_run_single_fails_when_output_has_error):

2012-08-23  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r126497.
        http://trac.webkit.org/changeset/126497
        https://bugs.webkit.org/show_bug.cgi?id=94764

        Caused webkitpy-test step to start failing.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayPerfTest.run_single):

2012-08-23  Emil A Eklund  <eae@chromium.org>

        Add saturation arithmetic support to FractionalLayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=94364

        Reviewed by Benjamin Poulain.

        Add test for new saturatedArithmetic functions.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/SaturatedArithmeticOperations.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2012-08-23  Ryosuke Niwa  <rniwa@webkit.org>

        Replay tests take forever to load
        https://bugs.webkit.org/show_bug.cgi?id=94764

        Reviewed by Adam Barth.

        Don't load about:blank at the beginning. This appears to clog the DRT.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayPerfTest.run_single):

2012-08-23  Wei Jia  <wjia@chromium.org>

        create different WebKit::WebMediaPlayer based on URL
        https://bugs.webkit.org/show_bug.cgi?id=91301

        Reviewed by Adam Barth.

        Pass URL to createMediaPlayer. This corresponds to change in base
        class WebKit::WebFrameClient.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createMediaPlayer): add URL as additional argument.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-08-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, upgrade gyuyoung to reviewer.
        http://lists.webkit.org/pipermail/webkit-dev/2012-August/022004.html

        * Scripts/webkitpy/common/config/committers.py:

2012-08-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r126306): it broke the plugin process
        https://bugs.webkit.org/show_bug.cgi?id=94797

        Reviewed by Xan Lopez.

        * GNUmakefile.am:

2012-08-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add url bar to EWebLauncher and MiniBrowser/Efl.
        https://bugs.webkit.org/show_bug.cgi?id=63966

        Reviewed by Kenneth Rohde Christiansen.

        EWebLauncher and MiniBrowser/Efl did not have functionality that users
        navigates the site which they want.
        This patch adds the urlbar and functionality to load url which users want.

        * CMakeLists.txt:
        Added to share urlbar theme for both EWebLauncher and MiniBrowser/Efl.
        * EWebLauncher/CMakeLists.txt:
        Added urlbar.c and dependency of urlbar theme.
        In addition, changed macro name to THEME_DIR to share the code easily.
        * EWebLauncher/ControlTheme/CMakeLists.txt: Added for urlbar theme.
        * EWebLauncher/ControlTheme/entry.edc: Implemented urlbar theme.
        * EWebLauncher/main.c:
        Implemented to use the urlbar.
        In addition, remove unnecessary border of webview to control webview and urlbar easily.
        (_ELauncher):
        (on_url_changed):
        (browserCreate):
        (closeWindow):
        (findThemePath):
        * EWebLauncher/url_bar.c: Implemented functionality of the urlbar.
        (_url_bar_url_get_with_protocol):
        (on_urlbar_key_down):
        (on_urlbar_mouse_down):
        (on_urlbar_focus_out):
        (url_bar_add):
        (url_bar_del):
        (url_bar_url_set):
        * EWebLauncher/url_bar.h: Added.
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c: Implemented to use the urlbar.
        (_MiniBrowser):
        (on_url_changed):
        (browserCreate):

2012-08-23  Balazs Kelemen  <kbalazs@webkit.org>

        [nrwt, WTR] Remove workaround for timeout handing from r126062
        https://bugs.webkit.org/show_bug.cgi?id=94609

        Reviewed by Dirk Pranke.

        Don't try to reset state if a timeout occured but inform
        the harness that the web process is no longer reliable.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test): Remove the workaround. Furthermore, handle the case when
        the pid is unknown.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::run):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):

2012-08-23  Ádám Kallai  <kadam@inf.u-szeged.hu>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-22  Alexis Menard  <alexis@webkit.org>

        Unreviewed update of my email.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/watchlist:

2012-08-22  Dirk Pranke  <dpranke@chromium.org>

        Fix typos in r126374
        https://bugs.webkit.org/show_bug.cgi?id=94665
        Unreviewed, build fix.

        Fix two issues that snuck in, one that caused a crash if there
        were no baselines to optimize and one that occurred as a result
        of failing to rename a variable when I changed the recursion to
        a loop in the previous patch.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer._optimize_by_pushing_results_up):

2012-08-22  Dirk Pranke  <dpranke@chromium.org>

        Baseline optimizer should try to optimize per-port if global optimization fails
        https://bugs.webkit.org/show_bug.cgi?id=94665

        Reviewed by Adam Barth.

        Add a fallback strategy for optimizing baselines if the default
        one fails; this one simply attempts to shift baselines up in the
        tree and consolidates them if a parent and child in the fallback
        path have the same result. This strategy is somewhat flawed in
        that we will always put something in a parent dir even if we
        "shouldn't"; for example, if chromium-mac produces a different
        result from chromium-win and chromium-linux, then the new
        algorithm will move the mac result into platform/chromium,
        leaving chromium-mac empty. This result is still correct, but
        perhaps confusing.

        I haven't done much testing of this algorithm yet, so it's not
        clear how many cases where this does a better job than the
        default algorithm and how many it'll do a worse job.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer._find_optimal_result_placement):
        (BaselineOptimizer._optimize_by_most_specific_common_directory):
        (BaselineOptimizer):
        (BaselineOptimizer._optimize_by_pushing_results_up):
        (BaselineOptimizer._find_in_fallbackpath):
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_platform_mac_different):

2012-08-22  Dirk Pranke  <dpranke@chromium.org>

        add debug info, another test to webkit-patch optimize-baselines
        https://bugs.webkit.org/show_bug.cgi?id=94762

        Reviewed by Adam Barth.

        This patch adds more debug logging for optimize-baselines so
        that you can tell the before and after states and figure out
        what the command is actually deciding to do.

        Also, this command adds a (disabled) test for the problem in bug
        94665. It's disabled because we don't have the fix yet (that
        will be posted in a patch to that bug).

        There should be no functional changes in this patch apart from
        the additional logging.

        Note that adding the debug logging exposed a bug in
        filesystem_mock.relpath() (that would return None if the path
        wasn't a subpath of the start); the real relpath computes a
        relpath with parent dirs. Fixing this revealed a bad check in
        the style checker's change_directory() call which was checking
        for None.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer._find_optimal_result_placement):
        (BaselineOptimizer):
        (BaselineOptimizer._optimize_by_most_specific_common_directory):
        (BaselineOptimizer._move_baselines):
        (BaselineOptimizer.optimize):
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.disabled_test_platform_mac_different):
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem):
        (MockFileSystem.__init__):
        (MockFileSystem.relpath):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_sep):
        * Scripts/webkitpy/style/main.py:
        (change_directory):

2012-08-22  Alejandro Piñeiro  <apinheiro@igalia.com>

        Dojo toggle buttons should expose ROLE_TOGGLE_BUTTON not ROLE_PUSH_BUTTON
        https://bugs.webkit.org/show_bug.cgi?id=73819

        Reviewed by Chris Fleizach.

        Added a new role, Toggle Button, based on whether aria-pressed is present.
        http://www.w3.org/TR/wai-aria/states_and_properties#aria-pressed

        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
        (roleToString): added "ToggleButton" string for WebAccessibilityRoleToggleButton

2012-08-23  Victor Carbune  <victor@rosedu.org>

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

        Reviewed by James Robinson.

        Added my email and IRC handle.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-22  Scott Graham  <scottmg@chromium.org>

        Don't unconditionally define NOMINMAX on Windows
        https://bugs.webkit.org/show_bug.cgi?id=94742

        Reviewed by Adrienne Walker.

        Avoids a warning when building on Windows when NOMINMAX is defined
        elsewhere or on the command line.

        * TestWebKitAPI/config.h:

2012-08-22  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION(r126189): Reftest mismatches are (again) run through ImageDiff with 0.1 tolerance
        https://bugs.webkit.org/show_bug.cgi?id=94704

        Reviewed by Dirk Pranke.

        Use tolerance=0 when acquiring diff image of reftest output.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_output_with_reference):

2012-08-22  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Add MockWebRTCPeerConnectionHandler
        https://bugs.webkit.org/show_bug.cgi?id=93091

        Reviewed by Adam Barth.

        Add a skeleton MockWebRTCPeerConnectionHandler to DumpRenderTree,
        to complete the infrastructure for RTCPeerConnection.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::createRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h:
        (MockWebKitPlatformSupport):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h:
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h.
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::initialize):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h.
        (WebKit):
        (MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):

2012-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Merge TestExpectationSerializer into TestExpectationLine
        https://bugs.webkit.org/show_bug.cgi?id=94638

        Reviewed by Dimitri Glazkov.

        Moved all methods except, list_to_string which was moved to TestExpectations
        from TestExpectationSerializer to TestExpectationLine and removed TestExpectationSerializer.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        (TestExpectationEditorTests.assert_remove_roundtrip):
        (TestExpectationEditorTests.assert_update_roundtrip):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (ParseError.__repr__):
        (TestExpectationLine):
        (TestExpectationLine.create_passing_expectation):
        (TestExpectationLine.to_string): Moved from TestExpectationSerializer.
        (TestExpectationLine.to_csv): Ditto.
        (TestExpectationLine._serialize_parsed_expectations): Ditto.
        (TestExpectationLine._serialize_parsed_modifiers): Ditto.
        (TestExpectationLine._format_line):
        (TestExpectations.remove_configuration_from_test):
        (TestExpectations.remove_rebaselined_tests):
        (TestExpectations.add_skipped_tests):
        (TestExpectations):
        (TestExpectations.list_to_string): Moved from TestExpectationSerializer.
        (TestExpectations.list_to_string.serialize):
        (TestExpectations.list_to_string.nones_out):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (TestExpectationSerializationTests): Renamed from TestExpectationSerializerTests.
        (TestExpectationSerializationTests.__init__):
        (TestExpectationSerializationTests.assert_round_trip):
        (TestExpectationSerializationTests.assert_list_round_trip):
        (TestExpectationSerializationTests.test_unparsed_to_string):
        (TestExpectationSerializationTests.test_unparsed_list_to_string):
        (TestExpectationSerializationTests.test_parsed_to_string):
        (TestExpectationSerializationTests.test_serialize_parsed_expectations):
        (TestExpectationSerializationTests.test_serialize_parsed_modifier_string):
        (TestExpectationSerializationTests.test_format_line):
        (TestExpectationSerializationTests.test_reconstitute_only_these):
        * Scripts/webkitpy/tool/commands/expectations.py:
        (OptimizeExpectations.execute):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.execute):
        (PrintExpectations._format_lines):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningExpectationsUpdater.update_expectations):

2012-08-22  Alexandre Elias  <aelias@chromium.org>

        Unreviewed, add aelias@chromium.org to committers

        I (aelias@chromium.org) have been approved for commit access and Apple
        has confirmed receipt of my committer agreement.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-22  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Support posting injected bundle messages to a page
        https://bugs.webkit.org/show_bug.cgi?id=94630

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        (TestWebKitAPI::InjectedBundleController::didReceiveMessageToPage):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleTest.h:
        (TestWebKitAPI::InjectedBundleTest::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        Updated for new client API call.

2012-08-22  Dominic Mazzoni  <dmazzoni@google.com>

        REGRESSION (r125710): accessibility/accessibility-node-reparent.html, accessibility/accessibility-node-memory-management.html failing on GTK Linux
        https://bugs.webkit.org/show_bug.cgi?id=94200

        Reviewed by Chris Fleizach.

        Adds reference counting for AtkObjects referenced by
        AccessibilityUIElementGtk. This prevents bogus results and
        assertion failures on AccessibilityUIElements whose underlying
        object has been deleted (as opposed to just made defunct).

        This fixes two tests that were previously failing because of this bug.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):

2012-08-22  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Split WebCore/platform into a separate library
        https://bugs.webkit.org/show_bug.cgi?id=94435

        Reviewed by Martin Robinson.

        More people have been reporting problems when linking WebCore because
        the command line limit is being exceeded. Splitting WebCore a bit more
        is in order.

        * GNUmakefile.am: link libWebCorePlatform into DRT

2012-08-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Unreviewed buildfix for Qt-minimal after r126291

        Disable smooth scrolling when request-animation-frame has been disabled either
        explicitly or as part of --minimal.

        * qmake/mkspecs/features/features.prf:

2012-08-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Optionally support smooth-scrolling on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=74926

        Reviewed by Simon Hausmann.

        Enabled SMOOTH_SCROLLING on Qt, and expose the enable scroll animator
        setting in QtTestBrowser so it can be tested.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleScrollAnimator):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        (WindowOptions):
        (LauncherWindow):
        * qmake/mkspecs/features/features.pri:

2012-08-22  Dominik Röttsches  <dominik.rottsches@intel.com>

        Unreviewed, adding myself to committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-21  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] contextClick and getMenuItemTitle callbacks are leaky in DRT's EventSender
        https://bugs.webkit.org/show_bug.cgi?id=94669

        Reviewed by Carlos Garcia Campos.

        Fix memory leaks in DRT's EventSender code.

        * DumpRenderTree/gtk/EventSender.cpp:
        (getMenuItemTitleCallback): Use JSRetainPtr and don't leak.
        (contextClickCallback): Use GOwnPtr to manage memory of a
        newly-allocated list automatically.

2012-08-21  Dirk Pranke  <dpranke@chromium.org>

        Add mountain lion to perf-tests, layout tests
        https://bugs.webkit.org/show_bug.cgi?id=94553

        Reviewed by Adam Barth.

        This patch adds support for the 'mac-mountainlion' platform and
        stamps out the last references to 'mac-leopard' as a supported
        name.
        
        This patch does a small amount of refactoring to try and make
        things a little clearer how we treat the "most recent version"
        specially for baselines and skipped files, and so you only
        should have to touch the VERSION_FALLBACK_ORDER constants on the
        ports, but unfortunately changing this list changes a bunch of
        the unit tests which are doing exact matches for correctness, so
        you have to touch more than a couple files :(. There's probably
        still more refactoring that can be done so that we don't have to
        do all of this functional testing to feel completely correct.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_mac_version):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_os_version):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        (ApplePort):
        (ApplePort._skipped_file_search_paths):
        (ApplePort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_mac):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        (MacPort._build_driver_flags):
        (MacPort.should_retry_crashes):
        (MacPort.default_baseline_search_path):
        (MacPort.operating_system):
        (MacPort.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_skipped_file_search_paths):
        (test_versions):
        (test_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        (WinPort.default_baseline_search_path):

2012-08-21  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=94617

        Reviewed by Martin Robinson.

        Set the 'enable-file-access-from-file-uris' setting to true when
        resetting default values. The other ports do this as well, giving
        documents with local security origin permission to load other
        local resources.

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

2012-08-21  Kent Tamura  <tkent@chromium.org>

        [Chromium] DRT produces wrong back-forward list
        https://bugs.webkit.org/show_bug.cgi?id=94575

        Reviewed by Adam Barth.

        DRT clears its history state before running every tests. However
        HistoryController in WebCore isn't reset. So, it is possible that
        'isNewNavigation' flag is false even though the navigation should be
        handled as "new" for DRT.

        This change might fix a problem of
        fast/forms/select/select-state-restore.html (Bug 90207).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::updateForCommittedLoad):
        Treat the first page load (m_pageID == -1) as new navigation except for about:blank.
        Without this change, a navigation entry for this loading won't be recorded.

2012-08-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Enable CSS Text Decoration by default
        https://bugs.webkit.org/show_bug.cgi?id=94483

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/webkitperl/FeatureList.pm:

2012-08-21  Benjamin Poulain  <bpoulain@apple.com>

        Store CString data in the CStringBuffer to avoid the double indirection
        https://bugs.webkit.org/show_bug.cgi?id=94562

        Reviewed by Darin Adler.

        Add test coverage for WTF::CString.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CString.cpp:

2012-08-21  Dirk Pranke  <dpranke@chromium.org>

        Text Autosizing: ::first-letter pseudo-element is incorrectly sized
        https://bugs.webkit.org/show_bug.cgi?id=94540

        Reviewed by Ojan Vafai.

        Revert the changes in bugs 94517 and 94396 so that we are
        actually looking for stderr output from ImageDiff and doing
        image compares on ref tests on the wk2 ports again.

        Also, do an actual diff_image() call if the hash checks fail on
        reftests, and only fail the test if we get real diffs (or don't,
        for mismatches).

        Lastly, clean up the log messages to be more helpful.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):

2012-08-21  Dirk Pranke  <dpranke@chromium.org>

        _compare_image() swaps actual and expected images by mistake
        https://bugs.webkit.org/show_bug.cgi?id=94567

        Reviewed by Ojan Vafai.

        Re-work the code so that we consistently pass (expected, actual)
        across all of the compare/diff routines.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_compare_test):
        (SingleTestRunner._compare_output):
        (SingleTestRunner._compare_text):
        (SingleTestRunner._compare_audio):
        (SingleTestRunner._compare_image):
        (SingleTestRunner._run_reftest):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):

2012-08-21  Adam Barth  <abarth@webkit.org>

        Unreviewed. Move the commit-queue to building release only. Previously,
        we built debug too, but for some reason the debug build doesn't work on
        the bots. We can re-enable debug builds once we fix the underlying
        problem.

        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.build_style):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        TestExpectationsParser doesn't warn about test files that don't exist.
        https://bugs.webkit.org/show_bug.cgi?id=94632

        Reviewed by Dirk Pranke.

        Exit early and warn when the test file doesn't exist as well when a test directory doesn't exist.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_line):
        (TestExpectationParser._check_test_exists):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_warning):

2012-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Move free functions in test_expectations to TestExpectations class
        https://bugs.webkit.org/show_bug.cgi?id=94557

        Reviewed by Dirk Pranke.

        Moved test_result_was_expected, test_remove_pixel_failures, and test_suffixes_for_expectations into TestExpectations
        to allow further refactoring.

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (JSONTestResult.did_run_as_expected):
        (JSONTestResult._tokenize):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):
        (TestExpectations.result_was_expected):
        (TestExpectations.remove_pixel_failures):
        (TestExpectations.has_pixel_failures):
        (TestExpectations.suffixes_for_expectations):
        (TestExpectations.matches_an_expected_result):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (MockBugManager.create_bug):
        (test_result_was_expected):
        (test_remove_pixel_failures):
        (test_suffixes_for_expectations):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations._tests_to_rebaseline):

2012-08-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix for newer Qt 5: The meaning of private_includes changed to be fully
        self-contained. The module name is not appended automatically anymore.

        * qmake/qt_webkit.pri:

2012-08-20  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Add stop_when_done parameter to ChromiumAndroidDriver.run_test()
        https://bugs.webkit.org/show_bug.cgi?id=94558

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.run_test):

2012-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup TestExpectationParser.parse
        https://bugs.webkit.org/show_bug.cgi?id=94545

        Reviewed by Dirk Pranke.

        Refactor TestExpectations to simplify the code.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.parse): Merged _tokenize_list.
        (TestExpectationParser._parse_line): Removed the call to _check_modifiers_against_expectations
        since the check is now done in _parser_modifiers.
        (TestExpectationParser._parse_modifiers): Merged _check_modifiers_against_expectations.
        (TestExpectationParser._tokenize_line): Renamed from _tokenize.
        (TestExpectationParser._split_space_separated): No longer calls lower() on all modifiers.
        This is done on a local variable in _parse_modifiers, preserving the original case.
        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier): Check the existence
        of 'rebaseline' against parsed modifiers.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (TestExpectationParserTests._tokenize):
        (TestExpectationParserTests.test_tokenize_valid_with_comment): Preserves case.
        (TestExpectationParserTests.test_tokenize_valid_with_multiple_modifiers): Ditto.
        (TestExpectationSerializerTests._tokenize):
        (TestExpectationSerializerTests.assert_list_round_trip): Call parse since _tokenize_list has
        been merged into parse.
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_csv): Preserves the case.

2012-08-20  Gustavo Noronha Silva  <gns@gnome.org>

        [jhbuild] EFL now runs jhbuild update for every build
        https://bugs.webkit.org/show_bug.cgi?id=94267

        Reviewed by Martin Robinson.

        Try to fix WinCE build by returning the empty string instead of
        env when no jhbuild infrastructure is found.

        * Scripts/webkitdirs.pm:
        (jhbuildWrapperPrefixIfNeeded):

2012-08-20  Benjamin Poulain  <benjamin@webkit.org>

        Add a watcher for WTF changes

        Unreviewed.

        Add myself as a watcher for changes in WTF.

        * Scripts/webkitpy/common/config/watchlist:

2012-08-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Move jhbuild dependencies based on SVN to tarballs
        https://bugs.webkit.org/show_bug.cgi?id=90374

        Reviewed by Kenneth Rohde Christiansen.

        Moved all the dependencies based on SVN to tarballs taken from a
        equivalent snapshot from the official git mirror. This will make
        update-webkitefl not dependent on network connection after the first
        run. The bots will not fail if EFL SVN server in unreachable.
        The reason why git mirror is not used directly is to minimize the
        total size of source code we need to download.

        * efl/jhbuild.modules:

2012-08-20  Simon Fraser  <simon.fraser@apple.com>

        Lots of "error, test and reference image have different properties" in pixel test output
        https://bugs.webkit.org/show_bug.cgi?id=92578

        Reviewed by Dirk Pranke.

        Improve ImageDiff's error reporting when test result image and expected image
        differ in their properties.

        * DumpRenderTree/cg/ImageDiffCG.cpp:

2012-08-20  Nate Chapin  <japhet@chromium.org>

        Unsafe vsprintf usage in TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=94522

        Reviewed by Adam Barth.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginLogWithArguments): Using vsnprintf instead of vsprintf to ensure we don't overflow
            the message buffer.
        (testDocumentOpen):
        (testWindowOpen):

2012-08-20  George Staikos  <staikos@webkit.org>

        [BlackBerry] Enable XHR Response BLOB
        https://bugs.webkit.org/show_bug.cgi?id=94525

        Reviewed by Rob Buis.

        Turn on the XHR response blob feature for the BlackBerry port.

        * Scripts/webkitperl/FeatureList.pm: Add the feature and enable it.

2012-08-20  Dirk Pranke  <dpranke@chromium.org>

        Fix change for timeout detection to not crash if we have no output :)
        https://bugs.webkit.org/show_bug.cgi?id=94505

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):

2012-08-20  Dirk Pranke  <dpranke@chromium.org>

        temporarily disable ImageDiff on WK2 ports for ref tests
        https://bugs.webkit.org/show_bug.cgi?id=94517

        Reviewed by Brady Eidson.

        ImageDiff appears to be unable to handle the pngs returned from
        WebKitTestRunner, so we disable checking images by default
        for ref tests on wk2 ports (unless pixel tests is explicitly enabled).

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_output_with_reference):

2012-08-20  Dirk Pranke  <dpranke@chromium.org>

        Add missing FIXME: to previous change.
        https://bugs.webkit.org/show_bug.cgi?id=94505

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):

2012-08-20  Dirk Pranke  <dpranke@chromium.org>

        Intermittenly, many WebKit2 tests have results from the wrong test compared to the test just run, giving false failures.
        https://bugs.webkit.org/show_bug.cgi?id=94505

        Reviewed by Ojan Vafai.

        It looks like if the webprocess times out, WTR may tell NRWT
        that the test completed, but not properly reset its internal
        state, and then return stale output for subsequent tests.

        This patch modifies NRWT temporarily to check for
        "Timed out waiting for final message from web process" in stdout
        and treat that as a timeout (and thus kill WTR); this seems
        to solve the cascade of failures, but of course there's probably
        still a bug in WTR that needs to be fixed.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):

2012-08-20  Dirk Pranke  <dpranke@chromium.org>

        NRWT reports unexpected EOF
        https://bugs.webkit.org/show_bug.cgi?id=94387

        Reviewed by Adam Barth.

        Stop logging "Unexpected EOF" when we are reading the last few
        bytes from stdout/stderr after stopping the subprocess.

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

2012-08-20  Brady Eidson  <beidson@apple.com>

        Temporarily disable the 20+ crash and 500+ failure options on WK2 bots.
        https://bugs.webkit.org/show_bug.cgi?id=94506

        Reviewed by Dirk Pranke.

        When running WK2 tests, don't add the "abort early" command line options.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ConfigureBuild.start):
        (RunWebKitTests):
        (RunWebKitTests.start):
        (RunWebKit2Tests.start):

2012-08-19  Stephanie Lewis  <slewis@apple.com>

        Add mountain lion to build config.
        https://bugs.webkit.org/show_bug.cgi?id=94441

        Reviewed by Adam Barth.

        Add Mountain Lion to the build trigger configurations.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build):
        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2012-08-17  Kiran Muppala  <cmuppala@apple.com>

        Add self to webkit contributors list
        https://bugs.webkit.org/show_bug.cgi?id=94409

        Reviewed by Dirk Pranke.

        Add name, email and irc handle to webkit contributors list.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-17  Ryosuke Niwa  <rniwa@webkit.org>

        Perfalizer should differentiate results with and without the patch
        https://bugs.webkit.org/show_bug.cgi?id=94399

        Reviewed by Dirk Pranke.

        Add "with 12345" and "without 12345" descriptions in results JSON so that graphs in
        the results page are labled accordingly.

        Also use _build_without_patch when building without a patch so that we get the right error message.

        * Scripts/webkitpy/tool/commands/perfalizer.py:
        (PerfalizerTask.run):
        (PerfalizerTask._run_perf_test):
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py:
        (PerfalizerTaskTest._create_and_run_perfalizer.run_perf_test):

2012-08-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: don't fail tests if ImageDiff fails on the wk2 ports
        https://bugs.webkit.org/show_bug.cgi?id=94396

        Reviewed by Ryosuke Niwa.

        It appears that WTR is generating PNGs that ImageDiff doesn't
        like, and so we're getting lots of "can not get ImageDiff"
        errors (see bug 81962). The change in r124581 made this a test
        failure, and this is causing the WK2 bots to frequently abort
        with 500+ failures. 

        This change makes ImageDiff errors not be test failures just for
        WK2 for now until we can better triage what's going on.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):

2012-08-17  James Robinson  <jamesr@chromium.org>

        [chromium] Add a style check for #include "cc/..." in chromium files
        https://bugs.webkit.org/show_bug.cgi?id=94382

        Reviewed by Adam Barth.

        Adds a style check to make sure new chromium code follows the correct convention for including cc files.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_include_line):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_cc_includes):

2012-08-17  Ojan Vafai  <ojan@chromium.org>

        Delete some dead code from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=94380

        Reviewed by Dirk Pranke.

        This code became dead in one of the refactors of how we handle BuilderGroups.
        There's no bug here, it's just dead code.
        * TestResultServer/static-dashboards/builders.js:
        (requestBuilderList):
        (loadBuildersList):

2012-08-17  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Add content shell bots to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=94369

        Reviewed by Ojan Vafai.

        The bots are named $OS (Content Shell).

        * TestResultServer/static-dashboards/builders.js:
        (isChromiumWebkitTipOfTreeTestRunner):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-08-17  Shadi Khalek  <shadi@chromium.org>

        Add AV perf layout tests to webkit flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=94255

        Reviewed by Ojan Vafai.

        Added missing mappings to LEGACY_BUILDER_MASTERS_TO_GROUPS.
        The isChromiumDepsAVTestRunner() filter does not work on current builder names. 
        It assumes the new names they are getting renamed to (AV Linux, AV Win7).

        * TestResultServer/static-dashboards/builders.js:
        (isChromiumTipOfTreeAVTestRunner):
        (loadBuildersList):

2012-08-17  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QtWebKit fails to build with OpenGL support on QNX
        https://bugs.webkit.org/show_bug.cgi?id=93278

        Reviewed by Noam Rosenthal.

        Change the order in which we define WTF_USE_3D_GRAPHICS and ENABLE_WEBGL.
        First, we now defined WTF_USE_3D_GRAPHICS=1, but only if QT_CONFIG
        contains opengl. Furthermore, we disable this feature on win32-* as usual,
        but now also disable it on QNX.

        Then, we set ENABLE_WEBGL=1 but only if we previously set WTF_USE_3D_GRAPHICS=1.

        * qmake/mkspecs/features/features.prf:

2012-08-16  Gustavo Noronha Silva  <gns@gnome.org>

        [jhbuild] EFL now runs jhbuild update for every build
        https://bugs.webkit.org/show_bug.cgi?id=94267

        Reviewed by Dirk Pranke.

        This change makes EFL's approach to jhbuild more in line with the one
        used by WebKitGTK+. update-webkitefl-libs will only be called by build-
        webkit if --update-efl is given explicitly. The EWS bot will do that
        from now on.

        * Scripts/webkitdirs.pm:
        (jhbuildWrapperPrefixIfNeeded): return jhbuild wrapper only if the
        Dependencies directory exists also for EFL
        (generateBuildSystemFromCMakeProject): no longer run update-webkitefl-libs
        (buildCMakeProjectOrExit): build update-webkitefl-libs if --update-efl is
        given
        * Scripts/webkitpy/common/config/ports.py:
        (EflPort.build_webkit_command): make EWS bots pass --update-efl to build-webkit
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_efl_port): add unit testing for EFL port

2012-08-16  Kent Tamura  <tkent@chromium.org>

        Add forms-bugs@chromium.org as a contributor.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-16  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed warning fix, sys.argv is a python construct.

        * Scripts/update-webkitefl-libs:

2012-08-16  Dirk Pranke  <dpranke@chromium.org>

        NRWT cutting off the output from LayoutTest run under Valgrind
        https://bugs.webkit.org/show_bug.cgi?id=94011

        Reviewed by Ojan Vafai.

        Make NRWT work with valgrind again ... I needed to rework the
        driver infrastructure so that we could get the stderr written
        between a test completing and a process being stopped and
        associate it with the DriverOutput for the test; this meant that
        run_test() needed to stop the driver at the end of the test
        directly if/when appropriate. This also entailed reworking
        run_test() so that we would gather stderr and stdout
        consistently regardless of whether this was a normal test, or
        stop_when_done, or a crash or timeout.

        Also, I had to rework the process_stop_time() (and renamed it to
        driver_stop_timeout) so that it would be longer if --time-out-ms
        was long as well (so that valgrind would get enough time to
        run), and I reworked driver.stop(kill_directly=True) to just
        driver.stop(timeout=0.0).

        Lastly, adding the new stop_when_done parameter entailed
        touching a lot of test mock functions :(.

        This change appeared to be well-covered by existing tests.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_test):
        (Worker._run_test_with_timeout):
        (Worker._run_test_in_another_thread):
        (Worker._run_test_in_another_thread.SingleTestThread.run):
        (Worker._run_test_in_this_thread):
        (Worker._run_single_test):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (run_single_test):
        (SingleTestRunner.__init__):
        (SingleTestRunner._run_compare_test):
        (SingleTestRunner._run_rebaseline):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.driver_stop_timeout):
        (Port.variable.default_configuration):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.driver_stop_timeout):
        (ChromiumAndroidDriver.stop):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):
        (Driver.stop):
        (DriverProxy.run_test):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.stop):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.write):
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        (ServerProcess.stop):
        (ServerProcess.kill):
        (ServerProcess):
        (ServerProcess._kill):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.__init__):
        (MockProc.wait):
        (TestServerProcess.test_basic):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.run_test):
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.run_single):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPageLoadingPerfTest.MockDriver.run_test):
        (TestReplayPerfTest.ReplayTestPort.__init__.ReplayTestDriver.run_test):
        (TestReplayPerfTest.test_run_single.run_test):
        (TestReplayPerfTest.test_run_single_fails_when_output_has_error.run_test):
        (TestReplayPerfTest.test_prepare.run_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):

2012-08-16  Roger Fong  <roger_fong@apple.com>

        Typo in old-run-webkit-tests script from https://bugs.webkit.org/show_bug.cgi?id=93904.
        https://bugs.webkit.org/show_bug.cgi?id=94228

        Reviewed by Tim Horton.

        I previously made the change but made a typo that causes the script not ignore mismatch ref tests.

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

2012-08-16  Peter Beverloo  <peter@chromium.org>

        [Chromium] Pass the --strip-binary argument to the apk test generator
        https://bugs.webkit.org/show_bug.cgi?id=94224

        Reviewed by Adam Barth.

        The native test generator currently relies on the $STRIP environment
        variable to be available, which it shouldn't do. Instead, pass it as an
        argument to the script. The $STRIP variable is being deprecated.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-08-16  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Update format of JS console message to keep consistent with other ports.
        https://bugs.webkit.org/show_bug.cgi?id=94058

        Reviewed by Yong Li.
        Reviewed internally by George Staikos.

        1. Remove line number if it's zero.
        2. Print only file name for "file://" URL.

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

2012-08-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make DRT results more reliable on X11

        Reviewed by Jocelyn Turcotte.

        Disable desktop setting awareness, to prevent QApplication on X11 from reading palette settings from
        the running desktop environment.

        * DumpRenderTree/qt/main.cpp:
        (main):

2012-08-16  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove FontQt4, HAVE_QRAWFONT flag and the related dead code
        https://bugs.webkit.org/show_bug.cgi?id=93960

        Reviewed by Simon Hausmann.

        Following the removal of Qt 4 support from trunk in r124879.

        * qmake/mkspecs/features/features.prf:

2012-08-16  Taiju Tsuiki  <tzik@chromium.org>

        Add deleteFileSystem support to DumpRenderTree for chromium
        https://bugs.webkit.org/show_bug.cgi?id=94071

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::deleteFileSystem): Added
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Rename LayoutTestController to TestRunner in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=93942

        Reviewed by Simon Fraser.

        Renamed the class and relevant files.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Copied from Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl.
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::testRunner):
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Removed.
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Copied from Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h.
        (TestRunner):
        * WebKitTestRunner/InjectedBundle/efl/LayoutTestControllerEfl.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/efl/LayoutTestControllerEfl.cpp.
        (WTR::waitToDumpWatchdogTimerCallback):
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::platformName):
        * WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp.
        (WTR::waitToDumpWatchdogTimerCallback):
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::platformName):
        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm: Removed.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm: Copied from Tools/WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm.
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::waitUntilDoneWatchdogTimerFired):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::platformName):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp.
        (WTR::WatchdogTimerHelper::timerFired):
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::platformName):
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp.
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::waitToDumpWatchdogTimerFired):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::platformName):
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2012-08-15  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] DumpRenderTree timeouts before NRWT timeouts
        https://bugs.webkit.org/show_bug.cgi?id=94155

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.create_driver): Force no_timeout=True

2012-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add a hyperlink to perf-o-matic from build.webkit.org/root.html
        https://bugs.webkit.org/show_bug.cgi?id=93749

        Reviewed by Csaba Osztrogonác.

        Added the hyperlink to webkit-perf.appspot.com. Also added hyperlinks to the waterfall display
        of performance tests.

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

2012-08-15  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css3-text] Add CSS3 Text decoration compile flag
        https://bugs.webkit.org/show_bug.cgi?id=93863

        Reviewed by Julien Chaffraix.

        This patch handles the compile flag implementation, which will come disabled by
        default, thus not exposing the CSS3 text decoration features to the web, unless
        when explicitly enabling it with "--css3-text-decoration" build parameter.

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

2012-08-15  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=93693
        [WK2] REGRESSION(125091): pixel results don't sow scrollbars 
        anymore

        Reviewed by Sam Weinig.

        Use new API WKBundlePageCreateSnapshotWithOptions().
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):

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

        Add rfong to Bugzilla CC "contributor" list.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-15  Scott Graham  <scottmg@chromium.org>

        Rename window.internals.fastMallocStatistics to mallocStatistics
        https://bugs.webkit.org/show_bug.cgi?id=94033

        Reviewed by Adam Barth.

        * GNUmakefile.am:
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_memory_test):

2012-08-15  Peter Beverloo  <peter@chromium.org>

        Fix a warning in TestWebKitAPI's MediaTime test-suite
        https://bugs.webkit.org/show_bug.cgi?id=94096

        Reviewed by Adam Barth.

        This warning is visible when building the file with certain GCC versions,
        including the one used by Chromium for Android. The warning is visible in
        the cr-android build bot output:

        MediaTime.cpp:152: warning: this decimal constant is unsigned only in ISO C90

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

2012-08-15  Kevin Funk  <kevin.funk@kdab.com>

        Fix the 'git log' call in VCSUtils.pm for Windows
        https://bugs.webkit.org/show_bug.cgi?id=94113

        Reviewed by Kenneth Rohde Christiansen.

        Failed because of invalid enquoting characters.

        * Scripts/VCSUtils.pm:

2012-08-14  Gustavo Noronha Silva  <gns@gnome.org>

        [jhbuild] move md5sum checking to update-webkit-libs-jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=93208

        Reviewed by Martin Robinson.

        This change makes the md5sum check and saving be done by the script
        that performs the dependencies update. build-webkit no longer prefixes
        calls to commands with jhbuild-wrapper if jhbuild has not been
        bootstrapped by the developer and --update-gtk is not given.

        * Scripts/update-webkit-libs-jhbuild:
        (getMD5HashForFile): moved from webkitdirs.
        (jhbuildConfigurationChanged): ditto.
        (saveJhbuildMd5): ditto.
        (cleanJhbuild): ditto, and changed to run jhbuild clean before removing
        jhbuild.
        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): use jhbuildWrapperPrefixIfNeeded.
        (buildAutotoolsProject): ditto.
        (jhbuildWrapperPrefixIfNeeded): add a code branch for GTK+.
        (generateBuildSystemFromCMakeProject): call update-webkitefl-libs
        unconditionally for EFL.
        * jhbuild/jhbuild-wrapper:
        (update_webkit_libs_jhbuild): removed, jhbuild-wrapper no longer runs the
        update script itself
        (ensure_jhbuild): remove update call.

2012-08-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add support for Web Intents MessagePorts
        https://bugs.webkit.org/show_bug.cgi?id=89072

        Reviewed by Kenneth Rohde Christiansen.

        Use WKBundleIntent instead of WebIntentData in
        WebKitTestRunner. WTR now prints the number of
        MessagePorts in received Web intents as
        expected by the following layout tests:
        webintents/web-intents-invoke-port.html
        webintents/web-intents-obj-constructor.html

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveIntentForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::deliverWebIntent):

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

        Build fix after r125516. Revert the erroneous rename since we need to keep exposing
        layoutTestController in Chromium port as explained r124785.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):

2012-08-14  Dan Bernstein  <mitz@apple.com>

        fast/events/overflow-scroll-fake-mouse-move.html and fast/events/frame-scroll-fake-mouse-move.html are failing in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=94045

        Reviewed by Geoff Garen.

        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow _hasKeyAppearance]): Added. Returns [self isKeyWindow]. This is
        needed now that WebView uses -_hasKeyAppearance instead of -isKeyWindow.

2012-08-14  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Fix some typos in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=94047

        Reviewed by Jon Honeycutt.

        * MiniBrowser/mac/AppDelegate.m:
        (didReceiveMessageFromInjectedBundle): (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didReceiveMessage):
        (WKBundleInitialize):

2012-08-14  Roger Fong  <roger_fong@apple.com>

        old-run-webkit-tests should skip all file extensions for ref tests, not just .html.
        https://bugs.webkit.org/show_bug.cgi?id=93904

        Reviewed by Tim Horton.

        old-run-webkit-tests ref test only skipped .html test.
        They need to skip .html, .shtml, .xml, .xhtml, .pl, .htm, .php, .svg, .mht.
        
        * Scripts/old-run-webkit-tests:
        (isUsedInReftest): Skip all extensions for ref tests.

2012-08-14  Lauro Neto  <lauro.neto@openbossa.org>

        Convert signals/slots to Q_* macros.

        [Qt] Use Q_SLOTS and Q_SIGNALS instead of slots and signals
        https://bugs.webkit.org/show_bug.cgi?id=93996

        Reviewed by Kenneth Rohde Christiansen.

        Change usage of keyword-conflicting 'signals' and 'slots' for
        Q_SIGNALS and Q_SLOTS macro.

        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (NetworkAccessManager):
        (WebPage):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):
        * DumpRenderTree/qt/GCControllerQt.h:
        (GCController):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunner):
        * DumpRenderTree/qt/TextInputControllerQt.h:
        (TextInputController):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions):
        * MiniBrowser/qt/UrlLoader.h:
        (UrlLoader):
        * QtTestBrowser/cookiejar.h:
        (TestBrowserCookieJar):
        * QtTestBrowser/fpstimer.h:
        (FpsTimer):
        * QtTestBrowser/launcherwindow.h:
        (LauncherWindow):
        * QtTestBrowser/locationedit.h:
        (LocationEdit):
        * QtTestBrowser/mainwindow.h:
        (MainWindow):
        * QtTestBrowser/urlloader.h:
        (UrlLoader):
        * QtTestBrowser/webinspector.h:
        (WebInspector):
        * QtTestBrowser/webpage.h:
        (WebPage):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WatchdogTimerHelper):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WrapperWindow):
        * WebKitTestRunner/qt/main.cpp:
        (Launcher):

2012-08-14  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs layoutTestController.dumpResourceLoadCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=42332

        Reviewed by Kenneth Rohde Christiansen.

        Added Resource Callbacks logging. Several aux dumping functions are added.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::isFileScheme):
        (WTR):
        (WTR::pathSuitableForTestResult):
        (WTR::urlSuitableForTestResult):
        (WTR::InjectedBundlePage::resetAfterTest):
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::dumpErrorDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        (WTR::InjectedBundlePage::didFinishLoadForResource):
        (WTR::InjectedBundlePage::didFailLoadForResource):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpResourceLoadCallbacks):
        (WTR::LayoutTestController::shouldDumpResourceLoadCallbacks):
        (LayoutTestController):

2012-08-14  Alexis Menard  <alexis.menard@openbossa.org>

        Update INdT build bot to Mountain Lion.
        https://bugs.webkit.org/show_bug.cgi?id=93963

        Reviewed by Csaba Osztrogonác.

        We updated the machine as well as the OS as the Qt port is now running
        on top of Qt5.

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

2012-08-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Remove unneeded build logic for Android
        https://bugs.webkit.org/show_bug.cgi?id=93962

        Reviewed by Dimitri Glazkov.

        The Android SDK and NDK have been checked in to the Chromium tree, which
        allows WebKit to leverage those as well. They will already be pulled in
        through a DEPS change made last week, and by not setting the ANDROID_NDK_ROOT
        environment variable, the envsetup.sh will set the project files up
        appropriately for us.

        * Scripts/webkitdirs.pm:

2012-08-14  Sergio Villar Senin  <svillar@igalia.com>

        [WK2] [GTK] Plugin tests failing in WK2 bot
        https://bugs.webkit.org/show_bug.cgi?id=93954

        Reviewed by Carlos Garcia Campos.

        Plugin tests are failing in the WK2 bot because we aren't exporting
        the Netscape plugin when creating the product archive.

        * BuildSlaveSupport/built-product-archive: added TestNetscapePlugin
        to the list of directories to export.
        (archiveBuiltProduct):

2012-08-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix apk generation for the Android platform
        https://bugs.webkit.org/show_bug.cgi?id=93841

        Unreviewed build fix.

        APK generation was broken as the configuration file assumed compilation
        would only occur in the Chromium tree. Pass the path to Chromium's source
        base directory as a property to ant.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-08-14  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] REGRESSION (r122428) WebKit2APITests/TestWebKitFindController fails "next" test
        https://bugs.webkit.org/show_bug.cgi?id=91083

        Reviewed by Carlos Garcia Campos.

        Unskipped a couple of API tests that should work fine from now on.

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

2012-08-14  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] Compare results between different platforms
        https://bugs.webkit.org/show_bug.cgi?id=90555

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_search_path):
        (Port):
        (Port.compare_baseline):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-08-13  Ryosuke Niwa  <rniwa@webkit.org>

        Rename LayoutTestController to TestRunner in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=93758

        Reviewed by Tony Chang.

        Renamed LayoutTestController to TestRunner. For Chromium port, it's renamed to DRTTestRunner
        since it already has TestRunner class shared between DumpRenderTree and content_shell.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/StorageTrackerDelegate.h:
        * DumpRenderTree/StorageTrackerDelegate.mm:
        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * DumpRenderTree/chromium/DRTTestRunner.cpp:
        * DumpRenderTree/chromium/DRTTestRunner.h:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        * DumpRenderTree/chromium/WebPermissions.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        * DumpRenderTree/efl/EditingCallbacks.cpp:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/HistoryDelegate.mm:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        * DumpRenderTree/wx/TestRunnerWx.cpp:

2012-08-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] String returned by g_path_get_dirname() must be freed
        https://bugs.webkit.org/show_bug.cgi?id=93885

        Reviewed by Philippe Normand.

        Fix a memory leak in GTK's DRT code.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (pathFromSoupURI): Free the string returned by g_path_get_dirname().

2012-08-14  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed GTK build fix after r125508.

        Do the renaming in GNUmakefile.am as well, LayoutTestController -> TestRunner.

        * GNUmakefile.am:

2012-08-13  Ryosuke Niwa  <rniwa@webkit.org>

        Rename files that declare and define LayoutTestController in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=93899

        Reviewed by Tony Chang.

        Renamed files and fixed style errors.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp: Removed.
        * DumpRenderTree/LayoutTestController.h: Removed.
        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/StorageTrackerDelegate.mm:
        * DumpRenderTree/TestRunner.cpp: Copied from Tools/DumpRenderTree/LayoutTestController.cpp.
        * DumpRenderTree/TestRunner.h: Copied from Tools/DumpRenderTree/LayoutTestController.h.
        (LayoutTestController):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp: Removed.
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp: Copied from Tools/DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp.
        * DumpRenderTree/chromium/DRTTestRunner.cpp: Copied from Tools/DumpRenderTree/chromium/LayoutTestController.cpp.
        * DumpRenderTree/chromium/DRTTestRunner.h: Copied from Tools/DumpRenderTree/chromium/LayoutTestController.h.
        * DumpRenderTree/chromium/LayoutTestController.cpp: Removed.
        * DumpRenderTree/chromium/LayoutTestController.h: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        * DumpRenderTree/efl/EditingCallbacks.cpp:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp: Removed.
        * DumpRenderTree/efl/TestRunnerEfl.cpp: Copied from Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp.
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Removed.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Copied from Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/HistoryDelegate.mm:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Removed.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm: Copied from Tools/DumpRenderTree/mac/LayoutTestControllerMac.mm.
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Removed.
        * DumpRenderTree/qt/LayoutTestControllerQt.h: Removed.
        * DumpRenderTree/qt/TestRunnerQt.cpp: Copied from Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp.
        * DumpRenderTree/qt/TestRunnerQt.h: Copied from Tools/DumpRenderTree/qt/LayoutTestControllerQt.h.
        (WebCore):
        (LayoutTestController):
        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
        (LayoutTestController::dumpSelectionRect):
        (LayoutTestController::setCallCloseOnWebViews):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::abortModal):
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Removed.
        * DumpRenderTree/win/PolicyDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/TestRunnerWin.cpp: Copied from Tools/DumpRenderTree/win/LayoutTestControllerWin.cpp.
        (LayoutTestController::setUserStyleSheetEnabled):
        (resolveCygwinPath):
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/wscript:
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Removed.
        * DumpRenderTree/wx/TestRunnerWx.cpp: Copied from Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp.

2012-08-13  Alex Christensen  <alex.christensen@flexsim.com>

        Windows 64 bit compliance
        https://bugs.webkit.org/show_bug.cgi?id=93275

        Reviewed by Brent Fulgham.

        Fixed a few compile and link problems for Win64

        * WinLauncher/WinLauncher.cpp:
        * win/DLLLauncher/DLLLauncherMain.cpp:

2012-08-13  MORITA Hajime  <morrita@google.com>

        Unreviewed update for webcomponents-bugzilla address.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-11  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Rewrite FindLibSoup2.cmake.
        https://bugs.webkit.org/show_bug.cgi?id=93191

        Reviewed by Rob Buis.

        * DumpRenderTree/efl/CMakeLists.txt: Use LIBSOUP_FOO instead of
        LIBSOUP24_FOO, and do not use LIBSOUP24_LDFLAGS, as it is not
        needed anymore.
        * EWebLauncher/CMakeLists.txt: Ditto.
        * MiniBrowser/efl/CMakeLists.txt: Ditto.
        * TestWebKitAPI/PlatformEfl.cmake: Ditto.
        * WebKitTestRunner/CMakeLists.txt: Ditto.
        * WebKitTestRunner/PlatformEfl.cmake: Ditto.

2012-08-13  Brady Eidson  <beidson@apple.com>

        With asynchronous plug-in initialization, WebProcess and PluginProcess can deadlock
        <rdar://problem/12062125> and https://bugs.webkit.org/show_bug.cgi?id=93894

        Reviewed by Alexey Proskuryakov.

        Add a test that calls out to NPP_Evaluate for some JS inside of NPP_New.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSWithinNPP_New.cpp: Added.
        (EvaluteJSWithinNPP_New):
        (EvaluteJSWithinNPP_New::EvaluteJSWithinNPP_New):
        (EvaluteJSWithinNPP_New::NPP_New):

2012-08-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r125422.
        http://trac.webkit.org/changeset/125422
        https://bugs.webkit.org/show_bug.cgi?id=93902

        Broke the Android canary build (Requested by fmalita on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-08-13  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Remove glib-related Find modules and write single new one instead.
        https://bugs.webkit.org/show_bug.cgi?id=93786

        Reviewed by Rob Buis.

        * DumpRenderTree/efl/CMakeLists.txt: Use GLIB_* instead of Glib_*.
        * EWebLauncher/CMakeLists.txt: Ditto.
        * MiniBrowser/efl/CMakeLists.txt: Ditto.
        * WebKitTestRunner/PlatformEfl.cmake: Ditto.

2012-08-13  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix apk generation for the Android platform
        https://bugs.webkit.org/show_bug.cgi?id=93841

        Reviewed by Dimitri Glazkov.

        APK generation was broken as the configuration file assumed compilation
        would only occur in the Chromium tree. Pass the path to Chromium's source
        base directory as a property to ant.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-08-13  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] InjectedBundlePage::didFailLoadForResource invokes wrong callback
        https://bugs.webkit.org/show_bug.cgi?id=93825

        Reviewed by Antonio Gomes.

        Corrected from didFinishLoadForResource() invoke to didFailLoadForResource() invoke. 

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

2012-08-13  Kwang Yul Seo  <skyul@company100.net>

        [Qt] Add gprof.prf to build WebKit with gprof enabled
        https://bugs.webkit.org/show_bug.cgi?id=90283

        Reviewed by Eric Seidel.

        * qmake/mkspecs/features/functions.prf:
        gprof does not support profiling a shared library.
        To profile WebKit, applications must link QtWebKit statically.

        * qmake/mkspecs/features/gprof.prf: Added.
        Add -pg option to both QMAKE_CXXFLAGS and QMAKE_LFLAGS.

2012-08-13  KwangYong Choi  <ky0.choi@samsung.com>

        [TestNetscapePlugin][X11] Additional key up event handler routine is required
        https://bugs.webkit.org/show_bug.cgi?id=91357

        Reviewed by Eric Seidel.

        Fixed key up event handler routine to pass http/tests/plugins/plugin-document-
        has-focus.html on X11 architecture. The test can not be done without this patch.
        All other ports implemented it already.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11): Modified key up event handler for X11

2012-08-13  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Replace Skipped list by TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=93796

        Reviewed by Kenneth Rohde Christiansen.

        Enable cascaded TestExpectations for EFL port so
        that we can use TestExpectations in WK2-EFL.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._search_paths):
        (EflPort):
        (EflPort.expectations_files):

2012-08-13  Peter Gal  <galpeter@inf.u-szeged.hu>

        REGRESSION(r125153): It broke the 'Unexpected no expected results' case
        https://bugs.webkit.org/show_bug.cgi?id=93789

        Reviewed by Csaba Osztrogonác.

        Fix the regex, so the text won't be a capturing group.

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

2012-08-12  MORITA Hajime  <morrita@google.com>

        Unreviewed, added a proxy address to contributors_who_are_not_committers.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-12  Loïc Yhuel  <loic.yhuel@softathome.com>

        [Qt] Make it possible to build without QtTest/QtPrintSupport
        https://bugs.webkit.org/show_bug.cgi?id=93492

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/DumpRenderTree.pro: Optional printsupport
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore):
        (WebCore::DumpRenderTree::dryRunPrint): Does nothing if no printsupport
        * QtTestBrowser/QtTestBrowser.pro: Optional printsupport
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome): No print menu if no printsupport
        (LauncherWindow::print): Does nothing if no printsupport
        * QtTestBrowser/launcherwindow.h:
        * Tools.pro: Disable DRT/WTR if QtTest not present
        * qmake/mkspecs/features/default_pre.prf: printsupport no more mandatory
        * qmake/mkspecs/features/features.prf: Qt module availability tests

2012-08-12  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg unittest cleanup: Show DeprecationWarnings with python >= 2.7 too
        https://bugs.webkit.org/show_bug.cgi?id=90161

        Reviewed by Eric Seidel.

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

2012-08-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed trivial build fix: Newer Qt versions don't implicitly include qwindowsysteminterface.h
        through the QTestLib headers anymore.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:

2012-08-11  Sam Weinig  <sam@webkit.org>

        Remove ability to run MiniBrowser in threaded mode, it hasn't worked for a long time
        https://bugs.webkit.org/show_bug.cgi?id=93774

        Reviewed by Dan Bernstein.

        Remove support for opening windows using the shared thread WKContextRef. WKContextGetSharedThreadContext()
        is going away, due to not working for a long time, and the first step is removing all the callers.

        While here, remove the BrowserStatisticsWindow, which was not providing interesting information.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate openPanelDidEnd:returnCode:contextInfo:]):
        * MiniBrowser/mac/BrowserStatisticsWindow.xib: Removed.
        * MiniBrowser/mac/BrowserStatisticsWindowController.h: Removed.
        * MiniBrowser/mac/BrowserStatisticsWindowController.m: Removed.
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2012-08-11  Sam Weinig  <sam@webkit.org>

        Enable XPC Service based WebProcess with runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=93773

        Reviewed by Dan Bernstein.

        Convert --use-web-process-xpc-service passed to run-safari (and similar scripts)
        to setting WEBKIT_USE_XPC_SERVICE_FOR_WEB_PROCESS=YES in the environment and setting
        up __XPC_DYLD_FRAMEWORK_PATH and __XPC_DYLD_INSERT_LIBRARIES variables. NOTE: using
        the XPC service is not the default code path.

        * Scripts/webkitdirs.pm:
        (shouldUseXPCServiceForWebProcess):
        (determineShouldUseXPCServiceForWebProcess):
        Add functions to extract --use-web-process-xpc-service from ARGV and set a
        global variable.

        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded):
        Add help text for --use-web-process-xpc-service.

        (runMacWebKitApp):
        Set the WEBKIT_USE_XPC_SERVICE_FOR_WEB_PROCESS environment variable and DYLD
        if --use-web-process-xpc-service was passed on the command line.

        (execMacWebKitAppForDebugging):
        Set the WEBKIT_USE_XPC_SERVICE_FOR_WEB_PROCESS environment variable and DYLD
        if --use-web-process-xpc-service was passed on the command line. Also, bail
        if both --use-web-process-xpc-service and --target-web-process are passed on
        the command line, as we don't currently support using both.

2012-08-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Bump harfbuzz dependency to v0.9.2
        https://bugs.webkit.org/show_bug.cgi?id=93762

        Reviewed by Eric Seidel.

        EFL port has used harfbuzz 0.9.0 ver. However, the 0.9.2 version was released on 10th Aug 2012.
        In addition, 0.9.0 ver. was disappeared. So, EFL port needs to use 0.9.2 ver. from now on.

        * efl/jhbuild.modules:

2012-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should upload memory statistics to perf-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=93690

        Reviewed by Dirk Pranke.

        Upload JS Heap and FastMalloc results for a test X/Y as: X/Y:JSHeap and X/Y:FastMalloc.
        Note "JS Heap" is converted to the CamelCase JSHeap.

        Also did some refactoring in PerfTest.parse_output and PerfTestRunnerTest and updated
        some helps in PerfTest.parse_output per arv's comments.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        (PerfTest.parse_output): Include JSHeap and FastMalloc statistics in results as well as of Time.
        Also refactored it to avoid hard-coding indices in _result_classes and moved complied regular
        exressions out of the function to avoid re-compiling them every time the method runs.
        (PerfTest.output_statistics): Convert ':' to ': ' as well as '/'.
        (ChromiumStylePerfTest.parse_output): Removed an unused variable.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Uploaded some helps per arv's feedback.
        (PerfTestsRunner._output_json_path): Extracted from _generate_and_show_results to be used in
        PerfTestRunnerTest.create_runner.
        (PerfTestsRunner._generate_and_show_results):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner): Extracted runner.load_output_json from various tests.
        (test_run_memory_test): Added.
        (PerfTestRunner): Extracted _event_target_wrapper_and_inspector_results from various tests.
        (test_run_with_json_output):
        (test_run_with_description):
        (test_run_generates_json_by_default):
        (test_run_generates_and_show_results_page):
        (test_run_with_json_source):
        (test_run_with_multiple_repositories):

2012-08-10  Benjamin Poulain  <bpoulain@apple.com>

        Add support for String initialization from literal to WTFString
        https://bugs.webkit.org/show_bug.cgi?id=93426

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-08-10  Xianzhu Wang  <wangxianzhu@chromium.org>

        NRWT crashes when DRT with --encode-binary crashes just before it dumps pixels
        https://bugs.webkit.org/show_bug.cgi?id=93728

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (ContentBlock.decode_content): Check self.content is not None before calling base64.b64decode().

2012-08-10  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android][NRWT] Executable might not be pushed correctly when there are multiple builds
        https://bugs.webkit.org/show_bug.cgi?id=93688

        Reviewed by Dirk Pranke.

        There might be other better methods, but this change is the smallest.
        I think the chance of equal timestamp can be ignored because we flock
        to avoid concurrent linkers.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._push_executable): Changed '<' to '!=' to compare the timestamp.

2012-08-09  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Skip layout tests directories that are not applicable
        https://bugs.webkit.org/show_bug.cgi?id=93670

        Reviewed by Dirk Pranke.

        Added back ChromiumAndroidPort.skipped_layout_tests to skip some whole directories.
        The method is more convenient to skip whole directories than SKIP in TestExpectations
        because its higher priority. Will still use TestExpectations to skip individual tests.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.skipped_layout_tests):

2012-08-09  Elliott Sprehn  <esprehn@chromium.org>

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

        Reviewed by Dirk Pranke.

        Add my email to the contributor list.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-09  Dirk Pranke  <dpranke@chromium.org>

        nrwt: should log progress like ninja does
        https://bugs.webkit.org/show_bug.cgi?id=93563

        Reviewed by Ojan Vafai.

        This change modifies the output of nrwt in the
        non--debug-rwt-logging modes.

        In non-verbose mode, the output changes from:
          "Testing (50%): 96 ran as expected, 4 didn't, 100 left"
        to:
          "[100/200] foo.html (+4)"
        or:
          "[100/200] foo.html failed  unexpectedly (text diff)"

        which indicates the earliest test currently running (optionally plus the
        count of other currently-executing tests if we're running tests in parallel)
        or the result of said test.

        If the test produces unexpected results, that line is flushed
        rather than erased (so we no longer need the %d didn't running
        tally).

        In --verbose mode, the output is similar, but every test gets a
        line (and tests are logged in order of them being started, not
        order of them being completed) (and in --details mode, the
        first line of each test matches --verbose but the other lines
        are unchanged).
        
        The overall result should be easier to read and is simpler to
        implement as well (apart from managing the number of tests that
        have started but not completed, which is slightly annoying).

        This also matches the output style for test-webkitpy, more-or-less.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._update_summary_with_result):
        (LayoutTestRunner._handle_started_test):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter):
        (FakePrinter.print_started_test):
        (FakePrinter.print_finished_test):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.__init__):
        (Printer.print_started_test):
        (Printer.print_finished_test):
        (Printer._print_test_trace):
        (Printer._print_progress):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (test_details):

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

        [WK2] Add a process model constant for multiple processes
        https://bugs.webkit.org/show_bug.cgi?id=93642

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/AppDelegate.h: Updated process model enum to match WebKit.

2012-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r125178.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.parse_output): Don't include non-time results in the JSON output.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py: Updated the test outputs so to match
        actual test outputs.
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Ditto.

2012-08-09  Zoltan Horvath  <zoltan@webkit.org>

        JSHeap and FastMallocStatistics based memory measurement for performance-tests
        https://bugs.webkit.org/show_bug.cgi?id=90858

        Reviewed by Ryosuke Niwa.

        Measure the memory usage of the performancetests with the help of the windows.memory.usedJSHeapSize
        object and the window.internals.fastMallocStatistics() function call.

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

2012-08-09  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] Build system bug revealed by r124835
        https://bugs.webkit.org/show_bug.cgi?id=93339

        Reviewed by Tor Arne Vestbø.

        Don't add "LC_ALL=c" on Windows in svnRevisionForDirectory() and in pathRelativeToSVNRepositoryRootForPath().

        * Scripts/VCSUtils.pm:
        (isWindows): Copied from webkitdirs.pm.
        (svnRevisionForDirectory):
        (pathRelativeToSVNRepositoryRootForPath):

2012-08-08  Dirk Pranke  <dpranke@chromium.org>

        update bot parsing of new-run-webkit-tests' output
        https://bugs.webkit.org/show_bug.cgi?id=93537

        Reviewed by Ryosuke Niwa.

        This change updates the way we parse the output from
        new-run-webkit-tests on the bots so that we can show a summary
        of the results properly after I re-land the changes that were
        reverted in r124994 and r124870.

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

2012-08-08  Shane Stephens  <shanestephens@google.com>

        Compile flag for CSS Hierarchies
        https://bugs.webkit.org/show_bug.cgi?id=92433

        Reviewed by Tony Chang.

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

2012-08-08  Benjamin Poulain  <bpoulain@apple.com>

        Use char* instead of LChar* for the public interface of String construction from literals
        https://bugs.webkit.org/show_bug.cgi?id=93402

        Reviewed by Michael Saboff.

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

2012-08-08  Dirk Pranke  <dpranke@chromium.org>

        nrwt: rename finder.py to layout_test_finder.py
        https://bugs.webkit.org/show_bug.cgi?id=93557

        Reviewed by Ryosuke Niwa.

        One last cleanup per old review feedback from rniwa.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py: Renamed from Tools/Scripts/webkitpy/layout_tests/controllers/finder.py.
        (LayoutTestFinder):
        (LayoutTestFinder.__init__):
        (LayoutTestFinder.find_tests):
        (LayoutTestFinder._strip_test_dir_prefixes):
        (LayoutTestFinder._strip_test_dir_prefix):
        (LayoutTestFinder._read_test_names_from_file):
        (LayoutTestFinder._strip_comments):
        (LayoutTestFinder.skip_tests):
        (LayoutTestFinder.split_into_chunks):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2012-08-08  Ryosuke Niwa  <rniwa@webkit.org>

        Add Perf EWS IRC bot
        https://bugs.webkit.org/show_bug.cgi?id=92913

        Reviewed by Dirk Pranke.

        Adds the preliminary implementation of perfalizer, a IRC bot that runs performance tests
        based on IRC requests.

        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.head_svn_revision): The actual implementation returns string, so match that.
        (MockSCM.svn_revision): Ditto.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.add_attachment_to_bug): Added mimetype.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.add_attachment_to_bug): Ditto.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.copytree): Added.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.copytree): Added.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Rebaselined tests
        that had assumed revision numbers were integers.
        (test_run_with_json_output):
        (test_run_with_description):
        (test_run_generates_json_by_default):
        (test_run_generates_and_show_results_page):
        (test_run_with_json_source):
        (test_run_with_multiple_repositories):
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/perfalizer.py: Added.
        (PerfalizerTask):
        (PerfalizerTask.__init__):
        (PerfalizerTask._copy_build_product_without_patch):
        (PerfalizerTask.run):
        (PerfalizerTask.parent_command):
        (PerfalizerTask.run_webkit_patch):
        (PerfalizerTask._json_path):
        (PerfalizerTask._results_page_path):
        (PerfalizerTask._run_perf_test):
        (PerfalizerTask.run_command):
        (PerfalizerTask.command_passed):
        (PerfalizerTask.command_failed):
        (PerfalizerTask.refetch_patch):
        (PerfalizerTask.expected_failures):
        (PerfalizerTask.build_style):
        (PerfTest): IRC command.
        (PerfTest.execute):
        (Perfalizer): IRC bot.
        (Perfalizer.begin_work_queue):
        (Perfalizer.work_item_log_path):
        (Perfalizer._is_old_failure):
        (Perfalizer.next_work_item):
        (Perfalizer.process_work_item):
        (Perfalizer.handle_unexpected_error):
        (Perfalizer.handle_script_error):
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py: Added.
        (PerfalizerTaskTest):
        (PerfalizerTaskTest._create_and_run_perfalizer):
        (PerfalizerTaskTest._create_and_run_perfalizer.logger):
        (PerfalizerTaskTest._create_and_run_perfalizer.run_webkit_patch):
        (PerfalizerTaskTest._create_and_run_perfalizer.run_perf_test):
        (PerfalizerTaskTest.test_run):
        (PerfalizerTaskTest.test_run_with_clean_fails):
        (PerfalizerTaskTest.test_run_with_update_fails):
        (PerfalizerTaskTest.test_run_with_build_fails):
        (PerfalizerTaskTest.test_run_with_perf_test_fails):
        (PerfalizerTaskTest.test_run_without_results_page):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractPatchQueueTest.test_upload_results_archive_for_patch): Rebaselined.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_attach_to_bug): Ditto.
        (test_attach_to_bug_no_description_or_comment): Ditto.

2012-08-08  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations needs to support multiple expectations files
        https://bugs.webkit.org/show_bug.cgi?id=89051

        Reviewed by Adam Barth.

        fixed the bug described above, added unit test in
        test_expectations_unittest, and updated the tool tests
        to not contain all of the "missing skia expectations" warnings.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.remove_rebaselined_tests):
        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RebaseliningTest.assertRemove):
        (RebaseliningTest.test_remove):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations._update_expectations_files):
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_expectations):

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

        [WK2] MiniBrowser crashes on quit if any windows were previously closed
        https://bugs.webkit.org/show_bug.cgi?id=93529

        Reviewed by John Sullivan.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate browserWindowWillClose:]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        (-[BrowserAppDelegate frontmostBrowserWindowController]):
        Track browser windows explicitly, not relying on [NSApp windows]. Closed windows
        are not automatically removed from the list until deallocated, so a refcounting
        error can result in working on a closed window.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController dealloc]): Moved code from -windowWillClose: here.
        Releasing data members is -dealloc's job.
        (-[BrowserWindowController windowWillClose:]): Notify BrowserAppDelegate that
        the window is no longer open. Autorelease self, making sure that WKView and
        then WebPageProxy get released.
        (-[BrowserWindowController applicationTerminating]): Don't release _webView.pageRef.
        WKView is responsible for its lifetime.
        (closePage): Ditto.

2012-08-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Apply all Linux layout test expectations
        https://bugs.webkit.org/show_bug.cgi?id=92653

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.skipped_layout_tests): Removed. Skip these tests in TestExpectations instead.

2012-08-08  Josh Hawn  <jhawn@apple.com>

        Add MountainLion WebKit Bots.
        https://bugs.webkit.org/show_bug.cgi?id=93417

        Reviewed by Stephanie Lewis.

        Mountain Lion is now available, so we've added the appropriate Apple bots,
        mirroring the configuration of the Lion bots.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Added 10 "apple-mini-###" slaves.
        Added MountainLion Builders and Schedulers.

2012-08-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Coding style violation was brought with r125031
        https://bugs.webkit.org/show_bug.cgi?id=93503

        Reviewed by Alexey Proskuryakov.

        WKURLResponseCopyMimeType is corrected to WKURLResponseCopyMIMEType.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpProgressFinishedCallback): Removed trailing whitespace that was brought with the same revision.

2012-08-08  Peter Beverloo  <peter@chromium.org>

        Buildmaster changes in preparation of a Chromium Android tester
        https://bugs.webkit.org/show_bug.cgi?id=92251

        Reviewed by Adam Barth.

        Slightly update the build master's configuration in preparation of adding
        a Chromium Android tester.

        The change in built-product-archive is required as the out/ directory
        for Android has a number of unstripped .so binaries and unaligned APKs,
        causing the default release.zip file to be 2.7 gigabytes. By excluding
        these file types, the file is only 59.7 megabytes. We can't disable
        them for all of Chromium, as Mac and Linux do use their .so files.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ArchiveBuiltProduct): Pass the full platform name instead of just the
            generic type, i.e. chromium-android instead of chromium.
        (ExtractBuiltProduct): Dito, stay consistent for this script.
        (RunUnitTests): Pass --chromium-android as well as --chromium. Since we
            now read the full platform name, stay on the safe side with 'win'
            even though there (as far as I know) is no win-* platform.
        (RunChromiumWebKitUnitTests): Dito. The platform wasn't being passed
            at all, but we'll be needing different handling here.
        (unitTestsSupported): Next to refactoring work required, as we'll be
            running this test on a device, there is no reason to disable this
            in the master's configuration.
        * BuildSlaveSupport/built-product-archive:
        (main): Determine the generic platform.
        (archiveBuiltProduct): Use an identical set of ignorePatterns, but
            extend the list with .so, .pak and -unaligned.apk for Android.

2012-08-08  Adam Barth  <abarth@webkit.org>

        Unreviewed. Stop running tests on the mac-ews while we wait for more
        hardware. As requested by lforschler.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2012-08-08  Peter Beverloo  <peter@chromium.org>

        The cr-android EWS should actually be building Chromium for Android
        https://bugs.webkit.org/show_bug.cgi?id=93489

        Reviewed by Adam Barth.

        The cr-android EWS bots should be building Chromium for Android, which
        requires some additional flags to Chromium's default configuration.

        * Scripts/webkitdirs.pm:
        (buildChromium):
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.update_webkit_command):
        (ChromiumAndroidPort.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_chromium_android_port):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (ChromiumAndroidEWS):
        * Scripts/webkitpy/tool/steps/update_unittest.py:
        (UpdateTest.test_update_command_non_interactive):
        (UpdateTest.test_update_command_interactive):

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

        [WK2] MiniBrowser crashes on window.open()
        https://bugs.webkit.org/show_bug.cgi?id=93413

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/BrowserWindowController.m: (createNewPage): This is a "create"
        API, so it needs to return a retained result.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m: (didClearWindowObjectForFrame):
        When this function is called, URL appears to be poorly defined. Sometimes, it's
        the new URL, other times it's the old one. An "old" URL is null in a new page.

2012-08-08  Loïc Yhuel  <loic.yhuel@softathome.com>

        [Qt] Compile errors with OpenGLES2
        https://bugs.webkit.org/show_bug.cgi?id=93206

        Reviewed by Noam Rosenthal.

        Fix build with OpenGLES2 on Linux desktop

        * qmake/mkspecs/features/features.prf: Don't use GLX with OpenGLES2

2012-08-08  Peter Beverloo  <peter@chromium.org>

        Introduce cr-android bots in the EWS system
        https://bugs.webkit.org/show_bug.cgi?id=93472

        Reviewed by Adam Barth.

        This adds the queue to the EWS scripts. Two builders are ready to be
        attached to the queue. All webkitpy tests pass with this change applied.

        * QueueStatusServer/model/queues.py:
        (Queue):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (ChromiumAndroidEWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest.test_builder_ewses):

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

        Unreviewed. Fix GTK+ build with GTK2 after r121475.

        * TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp: Add missing
        include required when building with GTK2.

2012-08-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] Provide Resource Response dumping.
        https://bugs.webkit.org/show_bug.cgi?id=93454

        Reviewed by Kenneth Rohde Christiansen.

        Added missing dumpResourceResponseMIMETypes() method to testRunner. Provided resource response dumping.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpProgressFinishedCallback):
        (WTR::LayoutTestController::dumpResourceResponseMIMETypes):
        (WTR::LayoutTestController::shouldDumpResourceResponseMIMETypes):
        (LayoutTestController):

2012-08-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][Win] Fix compilation of DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=93461

        Reviewed by Tor Arne Vestbø.

        DRT includes stdint.h, for which we have wrappers in Source/JavaScriptCore/os-win32. Use these not only
        for libraries but any building template.

        * qmake/mkspecs/features/default_post.prf:

2012-08-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] Refactoring: LayoutTestController::shouldDumpProgressFinishedCallback() should be const
        https://bugs.webkit.org/show_bug.cgi?id=93457

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpProgressFinishedCallback): Added constness.

2012-08-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after r124988.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):

2012-08-07  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][EFL] Implement accelerated compositing on WK2 Efl port
        https://bugs.webkit.org/show_bug.cgi?id=89840

        Reviewed by Noam Rosenthal.

        Implement accelerated composition with TiledBackingStore on WK2 Efl port.
        Add OPENGL_LIBRARIES in CMakeList.txt.

        * MiniBrowser/efl/CMakeLists.txt:
        * WebKitTestRunner/PlatformEfl.cmake:

2012-08-07  Csaba Osztrogonác  <ossy@webkit.org>

        [NRWT] REGRESSION(r124967): New tests without expected results handled as failures
        https://bugs.webkit.org/show_bug.cgi?id=93434

        Reviewed by Tony Chang.

        Change back "missing results" to "no expected result found", because master.cfg's results parser expects it.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):

2012-08-07  Csaba Osztrogonác  <ossy@webkit.org>

        buildbot: Remove the configuration of hfreyther*
        https://bugs.webkit.org/show_bug.cgi?id=91849

        Unreviewed typo fix after r123757.

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

2012-08-07  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION: PrettyPatchTest.test_pretty_diff_encodings has been failing on Chromium Windows
        https://bugs.webkit.org/show_bug.cgi?id=93192

        Unreviewed, build fix.

        Disabling the test for now as PrettyPatch is just broken on win32.

        * Scripts/webkitpy/common/prettypatch_unittest.py:
        (test_pretty_diff_encodings):

2012-08-07  Dirk Pranke  <dpranke@chromium.org>

        [NRWT] Would like an output mode similar to ORWT verbose one
        https://bugs.webkit.org/show_bug.cgi?id=88702

        Reviewed by Ryosuke Niwa.

        Change the --verbose logging for new-run-webkit-tests so that
        it matches ORWT more; we just print one line per test. Use
        --debug-rwt-logging to get the full debug stream (aka old ORWT
        --verbose).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_retrying_and_flaky_tests):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (print_options):
        (Printer._print_result_summary_entry):
        (Printer._print_one_line_summary):
        (Printer._print_test_result):
        (Printer._print_baseline):
        (Printer._print_unexpected_results):

2012-08-07  Dirk Pranke  <dpranke@chromium.org>

        nrwt: handle errors from image diff better
        https://bugs.webkit.org/show_bug.cgi?id=92934

        Reviewed by Ojan Vafai.

        Re-land the change in r124801 with a fix ... in the case where
        the ImageDiff is passed a tolerance and passes the fuzzy check,
        we were returning the wrong value (missing an empty error
        string) and crashing; this patch fixes that and adds a test for
        that case (TestImageDiffer.test_image_diff_passed).

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image.ImageDiffTestPort.diff_image):
        (TestResultWriterTest):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_diff_image_crashed):
        * Scripts/webkitpy/layout_tests/port/image_diff.py:
        (ImageDiffer.diff_image):
        (ImageDiffer._read):
        * Scripts/webkitpy/layout_tests/port/image_diff_unittest.py:
        (TestImageDiffer.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_diff_image_crashed):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image_crashed):
        (PortTestCase.test_diff_image_crashed.make_proc):
        * Scripts/webkitpy/layout_tests/port/server_process_mock.py:
        (MockServerProcess.__init__):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.diff_image):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_tolerance.ImageDiffTestPort.diff_image):

2012-08-07  Dirk Pranke  <dpranke@chromium.org>

        nrwt: --no-build isn't working
        https://bugs.webkit.org/show_bug.cgi?id=93415

        Reviewed by Ryosuke Niwa.

        Turns out our optimization to avoid calling
        webkit-build-directory N times for each worker broke --no-build.

        Fixing, and adding a test.

        Also, the gtk port wasn't using the default check_build() logic,
        but I don't know why not. Removing their custom hook and will
        verify that this is okay in the review ...

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.check_build):
        (Port._build_path):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_check_build):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_path_to_apache_config_file):
        (test_check_build):
        (test_check_build.build_driver_called):

2012-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support --no-show-results
        https://bugs.webkit.org/show_bug.cgi?id=93409

        Reviewed by Dirk Pranke.

        Add the support for --no-show-results.

        Also replace only local paths to jquery and flot instead of embedding them.
        The results page is still standalone in that it tries to load scripts
        from both webkit.org and local filesystem.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_and_show_results):
        (PerfTestsRunner._generate_output_files):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner_and_setup_results_template):
        (test_run_generates_and_show_results_page):
        (test_run_respects_no_show_results):

2012-08-07  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy hangs in a new checkout on snow leopard
        https://bugs.webkit.org/show_bug.cgi?id=93301

        Reviewed by Ryosuke Niwa.

        This change works around what appears to be a bug in Python
        2.6.1 (the version that ships on Mac Snow Leopard) that causes
        the multiprocessing module to hang after we use the
        autoinstaller; I'm guessing it's some sort of python sockets
        issue. I was unable to reproduce this with 2.6.5 or newer
        versions of Python.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller.install):
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize):
        (AutoinstallImportHook._install_pep8):
        (AutoinstallImportHook._install_pylint):
        (AutoinstallImportHook._install_buildbot):
        (AutoinstallImportHook._install_coverage):
        (AutoinstallImportHook._install_eliza):
        (AutoinstallImportHook._install_irc):
        (AutoinstallImportHook._install_webpagereplay):
        (AutoinstallImportHook._install):
        (autoinstall_everything):

2012-08-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android][NRWT] Fix 2 FIXMEs in chromium_android.py
        https://bugs.webkit.org/show_bug.cgi?id=93381

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._push_executable): Remove temporary lines as the chromium change has been landed: http://src.chromium.org/viewvc/chrome?view=rev&revision=150371
        (ChromiumAndroidDriver._setup_performance): Update all scaling governor files.
        (ChromiumAndroidDriver._teardown_performance): Update all scaling governor files.

2012-08-07  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Add support to DumpRenderTree [EventSender] for GestureTapDown events.
        https://bugs.webkit.org/show_bug.cgi?id=93286

        Reviewed by James Robinson.

        Adds support to generate GestureTapDown events from EventSender, to facilitate
        link highlighting layout tests.
 
        Added a GestureTapEvent to one existing test, more tests to follow when LinkHighlight CLs start to land.

        * DumpRenderTree/chromium/TestRunner/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureTapDown):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/TestRunner/EventSender.h:
        (EventSender):

2012-08-07  Marcelo Lira  <marcelo.lira@openbossa.org>

        [Qt] Add support for the Gamepad API
        https://bugs.webkit.org/show_bug.cgi?id=90637

        Reviewed by Alexis Menard.

        If the libudev library is present, the GAMEPAD flag is
        turned on by default for the Qt port.

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

2012-08-07  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Turn on CSS Variables
        https://bugs.webkit.org/show_bug.cgi?id=93376

        Reviewed by Antonio Gomes.

        Turn on CSS Variables for BlackBerry port.

        * Scripts/webkitperl/FeatureList.pm:

2012-08-07  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Make it possible to build without QtQuick

        Reviewed by Simon Hausmann.

        * Tools.pro:
        * qmake/mkspecs/features/features.prf:

2012-08-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove Qt 4 specific code paths
        https://bugs.webkit.org/show_bug.cgi?id=88161

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::touchCancel):
        (EventSender::sendTouchEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/main.cpp:
        (main):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::setDiskCache):
        * qmake/configure.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/qtwebkit.prf: Removed.
        * qmake/mkspecs/features/unix/default_pre.prf:

2012-08-07  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] MiniBrowser should only synthesize multiple touch points if Ctrl is pressed
        https://bugs.webkit.org/show_bug.cgi?id=93277

        Reviewed by Jocelyn Turcotte.

        MiniBrowser's multi-touch mocking does not check if Ctrl is pressed
        when registering multiple touch points based on pressed mouse buttons
        and sends inconsistent touch events to the WebView which triggers an
        assert in the pinch gesture recognizer.
        MiniBrowserApplication::updateTouchPoint should only register multiple
        touch points if the Ctrl button is pressed else it should ignore the
        update request.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::updateTouchPoint):

2012-08-07  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r124800): It broke NRWT result parsing of build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=93346

        Rubber-stamped by Simon Hausmann.

        Change back "unexpected" to "Unexpected", because master.cfg's results parser expects it.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_retrying_and_flaky_tests):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_unexpected_results):

2012-08-06  Balazs Kelemen  <kbalazs@webkit.org>

        [NRWT] runs platform specific tests that it shouldn't with --force
        https://bugs.webkit.org/show_bug.cgi?id=91089

        Reviewed by Dirk Pranke.

        Ignore other platform's directories from platform/.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._expanded_paths):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_platform_tests_are_found):
        Updated integration test in accordance to the new behavior.

2012-08-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Enable link prefetch
        https://bugs.webkit.org/show_bug.cgi?id=93281

        Reviewed by Kentaro Hara.

        * Scripts/webkitperl/FeatureList.pm: Enable LINK_PREFETCH feature.

2012-08-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r124801.
        http://trac.webkit.org/changeset/124801
        https://bugs.webkit.org/show_bug.cgi?id=93338

        It broke NRWT (Requested by Ossy on #webkit).

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image.ImageDiffTestPort.diff_image):
        (TestResultWriterTest):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/image_diff.py:
        (ImageDiffer.diff_image):
        (ImageDiffer._read):
        * Scripts/webkitpy/layout_tests/port/image_diff_unittest.py:
        (TestImageDiffer.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/server_process_mock.py:
        (MockServerProcess.__init__):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.diff_image):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_tolerance.ImageDiffTestPort.diff_image):

2012-08-06  Wei James  <james.wei@intel.com>

        [Chromium]duplicated command line options in Android LayoutTest
        https://bugs.webkit.org/show_bug.cgi?id=93233

        Reviewed by Tony Chang.

        Duplicated options found in Android layout test command line:
        --encode-binary and --enable-hardware-gpu.

        If there are multiple ChromiumAndroidPort instances,
        these two options will be appended for multiple times.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.additional_drt_flag):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.additional_drt_flag):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidTwoPortsTest):
        (ChromiumAndroidTwoPortsTest.test_options_with_two_ports):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line):

2012-08-03  Brady Eidson  <beidson@apple.com>

        Out-of-process plug-ins should support asynchronous initialization
        <rdar://problem/10598594> and https://bugs.webkit.org/show_bug.cgi?id=92919

        Reviewed by Anders Carlsson.

        Add a plug-in with an NPP_New that takes 550ms (a reasonable trade-off between a solid test and a slow running test)
        for testing asynchronous plug-in initialization.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/SlowNPPNew.cpp: Copied from Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h.
        (SlowNPPNew):
        (SlowNPPNew::SlowNPPNew):
        (SlowNPPNew::NPP_New):

2012-08-06  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Virtual test suites fail
        https://bugs.webkit.org/show_bug.cgi?id=92515

        Reviewed by Dirk Pranke.

        The failure is because our bypassing of DriverProxy.
        Repeat the logic of virtual tests in DriverProxy in ChromiumAndroidDriver
        and restart DRT when the command line changes.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver.cmd_line): Added comments about why we override this and have _drt_cmd_line().
        (ChromiumAndroidDriver.run_test): Repeat the logic of virtual tests in DriverProxy.
        (ChromiumAndroidDriver.start): Restart DRT when the command line changes.
        (ChromiumAndroidDriver._start_once):

2012-08-06  Xianzhu Wang  <wangxianzhu@chromium.org>

        Remove NRWT --shard-ref-tests
        https://bugs.webkit.org/show_bug.cgi?id=91539

        This is basically a revert of "[Chromium-Android] Run ref tests together to avoid expensive driver restarts"
        (https://bugs.webkit.org/show_bug.cgi?id=91533, http://trac.webkit.org/changeset/122914),
        with some conflicts resolved (because of refactory of Manager/LayoutTestRunner/Sharder classes).

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        (Sharder.shard_tests):
        (Sharder._shard_in_two):
        (Sharder._shard_by_directory):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (SharderTests):
        (SharderTests.get_test_input):
        (SharderTests.get_shards):
        (SharderTests.test_shard_by_dir):
        (SharderTests.test_shard_in_two):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._test_input_for_file):
        (Manager._test_is_slow):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-08-06  Luciano Wolf  <luciano.wolf@openbossa.org>

        [Qt] Default sizes for input-text and text-area are different when running DRT/WTR
        https://bugs.webkit.org/show_bug.cgi?id=91990

        Reviewed by Kenneth Rohde Christiansen.

        Initializing TestFonts information into WTR binary. Doing it 
        later leads to wrong font names usage (Dejavu Serif instead
        of Liberation Serif).

        * WebKitTestRunner/Target.pri:
        * WebKitTestRunner/qt/main.cpp:
        (main):

2012-08-06  Jeff Timanus  <twiz@chromium.org>

        Add twiz@{chromium|google}.org to the set of non-committer contributors.
        https://bugs.webkit.org/show_bug.cgi?id=93288

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-06  Adam Barth  <abarth@webkit.org>

        REGRESSION(124789): EWS errors out because --print option is missing
        https://bugs.webkit.org/show_bug.cgi?id=93299

        Unreviewed.

        The --print option doesn't exist anymore.  Let's try --quiet instead.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2012-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        run-webkit-tests should have ability to add description to its JSON output
        https://bugs.webkit.org/show_bug.cgi?id=93296

        Reviewed by Dirk Pranke.

        Add --description option.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._generate_and_show_results):
        (PerfTestsRunner._generate_results_dict):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_with_description):

2012-08-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: handle errors from image diff better
        https://bugs.webkit.org/show_bug.cgi?id=92934

        Reviewed by Ojan Vafai.

        Currently if ImageDiff crashes, returns a weird exit code, or
        produces any stderr output, it's basically swallowed. This
        change ensures that we log errors to stderr, and also appends
        the error to the stderr for the test (so it'll show up in
        results.html).

        Most importantly, it'll cause diff_image() to fail and we'll
        report ImageHashMismatch ... this may be kinda untrue, but I
        think it's better than ignoring the error.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image.ImageDiffTestPort.diff_image):
        (TestResultWriterTest):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.diff_image):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_diff_image_crashed):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):
        * Scripts/webkitpy/layout_tests/port/image_diff.py:
        (ImageDiffer.diff_image):
        (ImageDiffer._read):
        * Scripts/webkitpy/layout_tests/port/image_diff_unittest.py:
        (TestImageDiffer.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_diff_image_crashed):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_diff_image):
        (PortTestCase):
        (PortTestCase.test_diff_image_crashed):
        (PortTestCase.test_diff_image_crashed.make_proc):
        * Scripts/webkitpy/layout_tests/port/server_process_mock.py:
        (MockServerProcess.__init__):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.diff_image):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_tolerance.ImageDiffTestPort.diff_image):

2012-08-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up printing.py
        https://bugs.webkit.org/show_bug.cgi?id=93026

        Reviewed by Dirk Pranke.

        This patch cleans up the implementation of printing.py now
        that we're not using all the original complexity.

        There should be no changes in functionality and everything
        should be covered by the existing tests.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.__init__):
        (Printer.__del__):
        (Printer.print_config):
        (Printer.print_found):
        (Printer.print_expected):
        (Printer.print_workers_and_shards):
        (Printer):
        (Printer._print_expected_results_of_type):
        (Printer.print_results):
        (Printer._print_timing_statistics):
        (Printer._print_aggregate_test_statistics):
        (Printer._print_individual_test_times):
        (Printer._print_test_list_timing):
        (Printer._print_directory_timings):
        (Printer._print_statistics_for_test_timings):
        (Printer._print_result_summary):
        (Printer._print_result_summary_entry):
        (Printer._print_one_line_summary):
        (Printer.print_finished_test):
        (Printer._print_test_result):
        (Printer._print_test_trace):
        (Printer._print_baseline):
        (Printer._print_unexpected_test_result):
        (Printer._print_progress):
        (Printer._print_unexpected_results):
        (Printer._print_unexpected_results.add_result):
        (Printer._print_quiet):
        (Printer._print_default):
        (Printer._print_debug):
        (Printer._print_for_bot):
        (Printer.write_update):
        (Printer.writeln):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_printer):
        (Testprinter.test_print_config):
        (Testprinter.test_print_one_line_summary):
        (Testprinter.test_print_unexpected_results):
        (test_details):

2012-08-06  Dirk Pranke  <dpranke@chromium.org>

        change bots to pass --debug-rwt-logging instead of --verbose to new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=93043

        Reviewed by Ryosuke Niwa.

        in preparation for the cleanup of the logging flags in new-run-webkit-tests.

        * Scripts/run-webkit-tests:

2012-08-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up logging, part 1
        https://bugs.webkit.org/show_bug.cgi?id=93018

        Reviewed by Ojan Vafai.

        remove --print, --help-printing from nrwt, add three new options:
        --quiet, which just logs warnings,errors, and unexpected results
        --debug-rwt-logging, a new name for --verbose
        --details, to get the old --print trace-everything behavior

        This patch does not implement the new "one line per test"
        --verbose behavior specified in bug 88702, and there's a bunch
        of internal cleanup I can do in printing.py that I'll defer to
        a later patch to make things easier to review.

        This patch deletes a lot of unit tests that are no longer
        necessary since there aren't so many logging combinations.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (parse_args):
        (passing_run):
        (StreamTestingMixin.assertContains):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_full_results_html):
        (MainTest.test_no_tests_found):
        (MainTest.test_no_tests_found_2):
        (MainTest.test_repeat_each_iterations_num_tests):
        (MainTest.test_additional_platform_directory):
        (RebaselineTest.assertBaselines):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (print_options):
        (Printer.__init__):
        (Printer.enabled):
        (Printer.print_unexpected_results):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (TestUtilityFunctions.test_print_options):
        (Testprinter.get_result_summary):
        (Testprinter.test_configure_and_cleanup):
        (Testprinter.test_print_config):
        (Testprinter.test_print_one_line_summary):
        (Testprinter.test_print_unexpected_results):
        (test_details):
        (test_default):
        (test_quiet):
        (test_verbose):

2012-08-06  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Store test executable, data and fonts in /data/local/tmp
        https://bugs.webkit.org/show_bug.cgi?id=91910

        /data/local/tmp is a directory with permission 0777 by default.
        Place DumpRenderTree resources here so that both the native test app and
        the NRWT script can access them even if adb shell isn't running as root.

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (createFIFO): Set fifo mode to 0666 to allow unrooted adb shell to access.
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.driver_cmd_line):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._setup_test):
        (ChromiumAndroidDriver._push_executable):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest.make_port):
        (ChromiumAndroidPortTest.test_expectations_files):
        (ChromiumAndroidDriverTest.test_drt_cmd_line):

2012-08-06  Abhishek Arya  <inferno@chromium.org>

        [Chromium] Re-expose layoutTestController as various fuzzers depend on it
        https://bugs.webkit.org/show_bug.cgi?id=93282

        Reviewed by Ryosuke Niwa.

        Unfortunately, various fuzzers used in the Chromium project still depends on
        window.layoutTestController. Re-expose the object while they're making the transition.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):

2012-08-06  Balazs Kelemen  <kbalazs@webkit.org>

        WTR should be able to load external resources
        https://bugs.webkit.org/show_bug.cgi?id=89382

        Reviewed by Ryosuke Niwa.

        Allow to load an external resource as the main frame
        and allow all subsequent external loads for such a main
        frame. This behavior is necessary for being able to run
        performance tests (https://bugs.webkit.org/show_bug.cgi?id=84008).

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::isLocalHost):
        (WTR):
        (WTR::isHTTPOrHTTPSScheme):
        (WTR::InjectedBundlePage::willSendRequestForFrame):

2012-08-06  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] REGRESSION(124596) lot of web process unresponsiveness appears on Apple bots
        https://bugs.webkit.org/show_bug.cgi?id=93120

        Reviewed by Csaba Osztrogonác.

        Set the short timeout back to 15 seconds and add more time to WebKitTestRunner
        so it will be able to detect an unresponsive web process.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_timeout_ms):
        * WebKitTestRunner/TestController.cpp:
        (WTR):

2012-08-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add jhbuildutils.py to EXTRA_DIST.

2012-08-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] EFL's LayoutTestController needs removeAllVisitedLinks implementation
        https://bugs.webkit.org/show_bug.cgi?id=82724

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::removeAllVisitedLinks):

2012-08-06  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement a new spell checker API for WebKit2GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90268

        Reviewed by Martin Robinson.

        Ignore WebKitTextChecker.* private files for gtk-doc.

        * gtk/generate-gtkdoc:
        (get_webkit2_options):

2012-08-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Roll out r124728 because of build bot test fail.

        * Scripts/webkitpy/common/config/watchlist:

2012-08-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Change my email address for watch list.

        * Scripts/webkitpy/common/config/watchlist:

2012-08-04  Nico Weber  <thakis@chromium.org>

        [Chromium Mac] Tests are exiting early due to failures to load missingImage.png
        https://bugs.webkit.org/show_bug.cgi?id=93186

        Reviewed by Ryosuke Niwa.

        Add missingImage.png to DumpRenderTree.app's Resource folder.
        Depends on http://crrev.com/150037 rolling into webkit first.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-08-03  Ryosuke Niwa  <rniwa@webkit.org>

        Stop exposing window.layoutTestController in layout tests in favor of window.testRunner
        https://bugs.webkit.org/show_bug.cgi?id=93173

        Reviewed by Adam Barth.

        Don't expose window.layoutTestController since all layout tests use window.testRunner
        instead of window.layoutTestController as of r124685.

        We can safely rename classes and files to use TestRunner once this patch is landed.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::makeWindowObject):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (notifyTestCompletion):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::waitUntilDone):
        (PluginTest::notifyDone):
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp:
        (ConvertPoint::NPP_SetWindow):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon):
        (handleEventCocoa):
        (handleEventWin):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::initJSObjects):
        * Scripts/bencher:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::makeWindowObject):

2012-08-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed: Web Inspector: extend instrumenting methods set in ReportMemoryUsage clang plugin
        Three methods addString, addVectorPtr and addInstrumentedVectorPtr were added to the list of instrumentation methods.

        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp:
        (clang::ReportMemoryUsageConsumer::ReportMemoryUsageConsumer):

2012-08-03  Yaron Friedman  <yfriedman@chromium.org>

        [Chrome-Android] - Prepare apk tests for switch to checked in SDK.
        https://bugs.webkit.org/show_bug.cgi?id=92931

        Reviewed by Adam Barth.

        Pass Android-specific gyp variables to the native test generator,
        avoiding any dependencies on environment variables during build time.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-08-03  Rick Byers  <rbyers@chromium.org>

        Double tap gesture should send dblclick event
        https://bugs.webkit.org/show_bug.cgi?id=92412

        Reviewed by Adam Barth.

        Enable EventSender to set the tap count on tap gesture events.  The
        delta X/Y parameters were not actually being used anymore (used to be
        used for radius information).

        * DumpRenderTree/chromium/TestRunner/EventSender.cpp:
        (EventSender::gestureEvent):

2012-08-03  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should generate JSON output and results page by default
        https://bugs.webkit.org/show_bug.cgi?id=93042

        Reviewed by Eric Seidel.

        Generate results JSON and page named PerfTestResults.json and PerfTestResults.html by default.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.perf_results_directory): Added.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner): Added _DEFAULT_JSON_FILENAME.
        (PerfTestsRunner._parse_args): Added --no-results option in the case a user doens't want to generate
        results JSON or results page.
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_and_show_results): Extracted from run. Set the default json file path using
        port's perf_results_directory and call show_results_html_file at the end if the results page is generated.
        (PerfTestsRunner._generate_results_dict): Renamed from _generate_output to disambiguate it from
        _generate_and_show_results.
        (PerfTestsRunner._generate_output_files): Takes results page's path instead of a boolean indicating
        whether results page should be generated or not.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner_and_setup_results_template):
        (test_run_respects_results_output): Added.
        (test_run_generates_json_by_default): Added.
        (test_run_generates_and_show_results_page): Added a check to ensure show_results_html_file is called.

2012-08-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r124628.
        http://trac.webkit.org/changeset/124628
        https://bugs.webkit.org/show_bug.cgi?id=93155

        Causes random crashes of DRT on Chromium bots (Requested by
        dimich on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::createMediaStreamCenter):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h:
        (MockWebKitPlatformSupport):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h:
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp: Removed.
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h: Removed.

2012-08-03  Brady Eidson  <beidson@apple.com>

        Small part of "Out-of-process plug-ins should support asynchronous initialization."
        <rdar://problem/10598594> and https://bugs.webkit.org/show_bug.cgi?id=92919

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Reset all preferences related to asynchronous plugin initialization.

2012-08-02  Jeffrey Pfau  <jpfau@apple.com>

        Add API for enabling blanket third-party data blocking
        https://bugs.webkit.org/show_bug.cgi?id=93022

        Reviewed by Anders Carlsson.

        Added test for default setting of new third-party storage blocking API.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2012-08-03  Arvid Nilsson  <anilsson@rim.com>

        Unreviewed, adding self to committers.py after becoming committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-08-03  Ádám Kallai  <kadam@inf.u-szeged.hu>

        Limited the number of queried cached build infos in URLs used by Garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=92992.

        Reviewed by Adam Barth.

        I added a limit to the cached builds that are included in the URL to avoid too long URLs in Garden-o-matic.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-08-03  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Add MockWebRTCPeerConnectionHandler
        https://bugs.webkit.org/show_bug.cgi?id=93091

        Reviewed by Adam Barth.

        Add a skeleton MockWebRTCPeerConnectionHandler to DumpRenderTree,
        to complete the infrastructure for RTCPeerConnection.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::createRTCPeerConnectionHandler):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h:
        (MockWebKitPlatformSupport):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp:
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h:
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h.
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::initialize):
        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h.
        (WebKit):
        (MockWebRTCPeerConnectionHandler):
        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):

2012-08-03  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] There's no way to test the gesture tap on WTR
        https://bugs.webkit.org/show_bug.cgi?id=92895

        Reviewed by Kenneth Rohde Christiansen.

        WTR doesn't create the QQuickItem from C++, not from QML, so a call
        to componentComplete() was added to mimic the QML behaviour.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed, rolling out r124567.
        http://trac.webkit.org/changeset/124567
        https://bugs.webkit.org/show_bug.cgi?id=89382

        Broke some tests with external resources

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

2012-08-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r124614.
        http://trac.webkit.org/changeset/124614
        https://bugs.webkit.org/show_bug.cgi?id=91727

        gstreamer core .po files mess up the build again

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        * gtk/jhbuild.modules:

2012-08-03  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] Switch to GStreamer 0.11 build
        https://bugs.webkit.org/show_bug.cgi?id=91727

        Reviewed by Gustavo Noronha Silva.

        Switch build-webkit --gtk to GStreamer 0.11 support and build the
        necessary GStreamer git modules from JHBuild.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Build WebKit with GStreamer 0.11 support.
        * gtk/jhbuild.modules: GStreamer build support.

2012-08-03  Nico Weber  <thakis@chromium.org>

        [chromium mac] DumpRenderTree compile fails with warning/error in LayoutTestHelper.mm with 10.7sdk
        https://bugs.webkit.org/show_bug.cgi?id=92820

        Reviewed by Jochen Eisinger.

        When building with the 10.7 SDK, use newer functions to switch color
        profiles. Note that these newer functions aren't available on 10.6,
        but we don't intend to ship DRT to users, and no bots that currently
        build with the 10.7 SDK ship their binaries to 10.6 testers.

        The new code was copied from Apple's DRT/mac/LayoutTestHelper.m.

        * DumpRenderTree/chromium/LayoutTestHelper.mm:
        (installLayoutTestColorProfile):
        (restoreUserColorProfile):
        (saveCurrentColorProfile):

2012-08-03  Benjamin Poulain  <benjamin@webkit.org>

        StringImpl created from literal should be BufferInternal
        https://bugs.webkit.org/show_bug.cgi?id=92940

        Reviewed by Anders Carlsson.

        Add tests for the contruction of strings from literal.

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

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        [nrwt] fix unit tests after turned pixel testing to be a per test setting
        https://bugs.webkit.org/show_bug.cgi?id=93112

        Reviewed by Csaba Osztrogonác.

        Change unit tests in accordance of per test switching of pixel testing.

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_command_from_driver_input):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_no_timeout):

2012-08-03  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Populate .qmake.cache from the top-level project file

        This makes it possible to build webkit without using the perl build
        script. The duplicated logic in build-webkit will be removed when we
        remove the Qt4 code paths. The build-webkit script will then simply
        call 'qmake WebKit.pro' from WEBKITOUTPUTDIR.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/win32/default_pre.prf:

2012-08-03  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Move build config default to build-webkit instead of default_pre

        Allows the qmake buildsystem have its own default.

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):
        * qmake/mkspecs/features/default_pre.prf:

2012-08-03  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed build fix for GTK after r124581.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): Fix wrong variable name in ASSERT.

2012-08-03  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Always save CONFIG & DEFINES in default_pre

        Always doing it is cheaper than checking whether it needs to be done.
        apart from that, it would break configuration initiated from another
        project.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_pre.prf:

2012-08-03  Joone Hur  <joone.hur@intel.com>

        [EFL][DRT] fast/loader/stop-provisional-loads.html fails
        https://bugs.webkit.org/show_bug.cgi?id=92219

        Reviewed by Kenneth Rohde Christiansen.

        This patch adds the ability to tell DRT to call ewk_frame_stop 
        inside of a didStartProvisionalLoadForFrame signal handler.
        It allows to pass fast/loader/stop-provisional-loads.html.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameProvisionalLoad):

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        [WTR] process unresponsiveness is reported to the wrong test
        https://bugs.webkit.org/show_bug.cgi?id=88404

        2nd unreviewed buildfix.

        * WebKitTestRunner/TestInvocation.cpp:

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        [WTR] process unresponsiveness is reported to the wrong test
        https://bugs.webkit.org/show_bug.cgi?id=88404

        Unreviewed buildfix. Also made the change on the array size
        suggested on review because I forgot it when landed.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        [WTR] process unresponsiveness is reported to the wrong test
        https://bugs.webkit.org/show_bug.cgi?id=88404

        Reviewed by Zoltan Herczeg.

        Do resetting to consistent state after the finished test,
        not before the next. This way we can report unresponsiveness
        to the test that triggered it, and we do a restart before the
        next test so it will start in a functional state.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._check_for_driver_crash):
        Print the error line for unresponsive web process, otherwise
        it's hard to tell what happened.
        * WebKitTestRunner/TestController.cpp:
        (WTR):
        Decreased the default short timeout so we can detect unresponsiveness
        before the timer of the test harness times out. It was unnecessarily
        high anyway, we should get answer from the web process in those cases
        when the short timeout is used in less than a second.
        (WTR::TestController::runTest):
        (WTR::TestController::run):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation): Make the dump function static as it doesn't need an object.

2012-08-03  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] (REGRESSION 124581) : EFL 64-bit Debug bot is red and build is exiting early after 20 test crashes
        https://bugs.webkit.org/show_bug.cgi?id=93084

        Reviewed by Csaba Osztrogonác.

        Fix regression introduced in r124581.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (getFinalTestURL): Convert the path into a full file URL.
        (runTest):

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        All ports should support per test switching of pixel testing
        https://bugs.webkit.org/show_bug.cgi?id=92398

        Reviewed by Dirk Pranke.

        Teach all test drivers to accept a per test control of whether
        to dump pixels. Drivers now accept a -p/--pixel-test argument
        on the standart input that means that running the current
        test as pixel test is allowed (even if the expected hash is
        missing). Removed the --pixel-tests command line option since
        there is no need for it anymore.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.h:
        (TestCommand::TestCommand):
        (TestCommand):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeCommon.cpp: Added.
        (CommandTokenizer):
        (CommandTokenizer::CommandTokenizer):
        (CommandTokenizer::pump):
        (CommandTokenizer::next):
        (CommandTokenizer::hasNext):
        (die):
        (parseInputLine):
        Common logic to parse the input line from the standard input (or from the command line
        in standalone mode). Made it somewhat general so we can easily add more arguments if
        there is a need.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):
        (main):

        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityController.cpp.
        * DumpRenderTree/chromium/TestRunner/AccessibilityControllerChromium.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityController.h.
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElement.cpp.
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h: Renamed from Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElement.h.
        Renamed these files with a Chromium suffix because they were clashing with the common ones used by other ports after adding the root
        DumpRenderTree directory to the include path.

        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):
        (TestShell):
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (parseCommandLineOptions):
        (runTest):
        (shouldDumpPixelsAndCompareWithExpected):
        (main):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGlobalsFromCommandLineOptions):
        (dump):
        (runTest):
        (main):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/main.cpp:
        (isOption):
        (printUsage):
        (main):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (runTest):
        (dllLauncherEntryPoint):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/wscript:
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (dump):
        (runTest):
        (MyApp::OnInit):
        * GNUmakefile.am:

        * Scripts/old-run-webkit-tests:
        * Scripts/old-run-webkit-tests:
        Pass --pixel-test before the hash.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.should_run_as_pixel_test): Removed now that all ports supports it.
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line): Don't pass --pixel-tests anymore.
        (Driver._command_from_driver_input):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.should_run_as_pixel_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.should_run_as_pixel_test):

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestCommand::TestCommand):
        (TestCommand):
        (WTR):
        (CommandTokenizer):
        (WTR::CommandTokenizer::CommandTokenizer):
        (WTR::CommandTokenizer::pump):
        (WTR::CommandTokenizer::next):
        (WTR::CommandTokenizer::hasNext):
        (WTR::die):
        (WTR::parseInputLine):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):
        Duplicate the logic for parsing the command line because
        unfortunately there is no way to share code between
        WebKitTestRunner and DumpRenderTree.

2012-08-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: clang plugin for checking native memory instrumentation coverage.
        https://bugs.webkit.org/show_bug.cgi?id=92650

        Reviewed by Yury Semikhatsky.

        This is the clang plugin for checking native memory instrumentation coverage.
        The idea: InspectorMemoryAgent traverses through instrumented objects and collects pointers and their sizes and types.
        It is doing that with help of reportMemoryUsage function that needs to be implemented in each, significant
        from native memory footprint point of view, WebCore class.
        This plugin checks that the list of class members is matching with the list of members reported in reportMemoryUsage function
        and makes a warning for the each member that needs to be reported.

        * clang/ReportMemoryUsagePlugin/CMakeLists.txt: Added.
        * clang/ReportMemoryUsagePlugin/Makefile: Added.
        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp: Added.
        (clang):
        (AddMemberCallVisitor):
        (clang::AddMemberCallVisitor::VisitCallExpr):
        (clang::AddMemberCallVisitor::instrumentedMembers):
        (ReportMemoryUsageVisitor):
        (clang::ReportMemoryUsageVisitor::ReportMemoryUsageVisitor):
        (clang::ReportMemoryUsageVisitor::VisitCXXMethodDecl):
        (clang::ReportMemoryUsageVisitor::emitWarning):
        (clang::ReportMemoryUsageVisitor::findInstrumentationMethod):
        (clang::ReportMemoryUsageVisitor::needsToBeInstrumented):
        (clang::ReportMemoryUsageVisitor::CheckMembersCoverage):
        (ReportMemoryUsageConsumer):
        (clang::ReportMemoryUsageConsumer::ReportMemoryUsageConsumer):
        (clang::ReportMemoryUsageConsumer::HandleTranslationUnit):
        (ReportMemoryUsageAction):
        (clang::ReportMemoryUsageAction::CreateASTConsumer):
        (clang::ReportMemoryUsageAction::ParseArgs):
        * clang/ReportMemoryUsagePlugin/tests/Source/WebCore/Test.cpp: Added.
        (aNamespace):
        (MemoryInstrumentation):
        (MemoryClassInfo):
        (aNamespace::MemoryClassInfo::MemoryClassInfo):
        (aNamespace::MemoryClassInfo::addMember):
        (aNamespace::MemoryClassInfo::addInstrumentedMember):
        (OwnPtr):
        (aNamespace::OwnPtr::OwnPtr):
        (RefPtr):
        (aNamespace::RefPtr::RefPtr):
        (Vector):
        (String):
        (NotInstrumentedClass):
        (InstrumentedClass):
        (aNamespace::InstrumentedClass::reportMemoryUsage):
        (InstrumentedChildClass):
        (aNamespace::InstrumentedChildClass::reportMemoryUsage):
        (InstrumentedChildChildClass):
        (InstrumentedChildChildClass::reportMemoryUsage):
        (main):

2012-08-03  Joone Hur  <joone.hur@intel.com>

        [EFL][DRT] WebKitAnimation API compile-time disabled
        https://bugs.webkit.org/show_bug.cgi?id=84593

        Reviewed by Laszlo Gombos.

        Enable ENABLE_ANIMATION_API by default on the Efl port.

        * Scripts/webkitperl/FeatureList.pm:

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        WTR should be able to load external resources
        https://bugs.webkit.org/show_bug.cgi?id=89382

        Reviewed by Ryosuke Niwa.

        Allow to load an external resource as the main frame
        and allow all subsequent external loads for such a main
        frame. This behavior is necessary for being able to run
        performance tests (wkb.ug/84008).

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::isLocalHost):
        (WTR):
        (WTR::isHTTPOrHTTPSScheme):
        (WTR::InjectedBundlePage::willSendRequestForFrame):

2012-08-02  Joone Hur  <joone.hur@intel.com>

        [GTK] Build break when building DumpRenderTree/gtk/EditingCallbacks.cpp
        https://bugs.webkit.org/show_bug.cgi?id=93061

        Unreviewed, Fix build break for WebKitGtk+.

        Use webkit_dom_element_get_class_name instead of webkit_dom_html_element_get_class_name.

        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        (shouldShowDeleteInterfaceForElement):

2012-08-02  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy can fail on a clean checkout
        https://bugs.webkit.org/show_bug.cgi?id=93039

        Reviewed by Adam Barth.

        Now that we run tests in parallel that can cause the installer
        to try and install packages in parallel (even the same package),
        and that probably won't work. We fix this by autoinstalling
        everything up front (serially).

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (autoinstall_everything):

2012-06-15  David Barton  <dbarton@mathscribe.com>

        MathML: nested square root symbols have varying descenders
        https://bugs.webkit.org/show_bug.cgi?id=43819

        Reviewed by Eric Seidel.

        Allow the STIXGeneral font to be used during layout tests, especially for MathML.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):

2012-08-02  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: some tests need to run by themselves
        https://bugs.webkit.org/show_bug.cgi?id=92926

        Reviewed by Ojan Vafai.

        Due to timing issues some of the executive tests will collide
        and fail if they're run concurrently. This patch adds support
        for writing tests that will be executed one at a time
        (serially); to get them, add "serial_" to the front of the test
        method name. 

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_kill_process):
        (ExecutiveTest.serial_test_kill_all):
        (ExecutiveTest.serial_test_check_running_pid):
        (ExecutiveTest.serial_test_running_pids):
        (ExecutiveTest.serial_test_run_in_parallel):
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        (Tester._test_names):

2012-08-02  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: integrate proper support for integration tests
        https://bugs.webkit.org/show_bug.cgi?id=92925

        Reviewed by Ojan Vafai.

        This patch merges the custom loader I used for integration tests
        into the main test-webkitpy code. Integration tests are not run
        by default yet, but at least they can be run.

        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockTestShellTest.test_test_shell_parse_options):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (test_path_to_apache_config_file):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (WebsocketserverTest):
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester._run_tests):
        (Tester._test_names):
        (Tester._log_exception):
        (_Loader):
        (_Loader.getTestCaseNames):
        (_Loader.getTestCaseNames.isTestMethod):

2012-08-02  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up runner in preparation for running tests serially as necessary
        https://bugs.webkit.org/show_bug.cgi?id=92922

        Reviewed by Ojan Vafai.

        In order to run some tests by themselves (serially, rather than
        in parallel with other tests), we will need to be able to run
        multiple test suites; this causes us to move loading the logic
        for finding test method names out of the runner and into main.

        I'm taking advantage of this to simplify some other stuff from
        the runner as well; it is now very simple and doesn't expose its
        dependency on unittest.TestResult at all (nor will the Printer
        use TestResult).

        Subsequent patches will move the custom loader from
        port_testcase so that we can properly choose whether to run
        integration tests and/or serial tests, and then update the
        appropriate tests to run only serially.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        (Tester):
        (Tester._check_imports):
        (Tester._test_names):
        (Tester._all_test_names):
        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer.write_update):
        (Printer):
        (Printer.print_finished_test):
        (Printer.print_result):
        * Scripts/webkitpy/test/runner.py:
        (unit_test_name):
        (Runner.__init__):
        (Runner.run):
        (Runner.handle):
        (_Worker.handle):
        * Scripts/webkitpy/test/runner_unittest.py:
        (FakeLoader.loadTestsFromName):
        (RunnerTest.test_run):

2012-08-02  Adam Barth  <abarth@webkit.org>

        Turn on tests for the mac-ews, for realz this time.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):

2012-08-02  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Run layout tests on multiple devices in parallel
        https://bugs.webkit.org/show_bug.cgi?id=92877

        Reviewed by Dirk Pranke.

        Moved methods that run command on a particular device from ChromiumAndroidPort to ChromiumAndroidDriver.
        The drivers run adb commands with the '-s serial_number' parameter which specifies the device according to the work_number.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.default_child_processes): Default to the number of attached devices.
        (ChromiumAndroidPort.test_expectations): Removed because it is unused. 
        (ChromiumAndroidPort.setup_test_run): Most contents moved into ChromiumAndroidDriver._setup_test()
        (ChromiumAndroidPort.clean_up_test_run): Now the http server is stopped here.
        (ChromiumAndroidPort._get_devices):
        (ChromiumAndroidPort._get_device_serial):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver.__del__):
        (ChromiumAndroidDriver._setup_test): Original contents of ChromiumAndroidPort.setup_test_run().
        (ChromiumAndroidDriver._push_executable): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver._push_fonts): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver._push_test_resources): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver._synchronize_datetime): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver._run_adb_command): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver._teardown_performance): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver._get_crash_log): Moved from ChromiumAndroidPort.
        (ChromiumAndroidDriver.cmd_line):
        (ChromiumAndroidDriver._file_exists_on_device):
        (ChromiumAndroidDriver._remove_all_pipes):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver._start_once):
        (ChromiumAndroidDriver.stop):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (MockRunCommand):
        (MockRunCommand.__init__):
        (MockRunCommand.mock_run_command_fn):
        (MockRunCommand.mock_no_device):
        (MockRunCommand.mock_one_device):
        (MockRunCommand.mock_two_devices):
        (MockRunCommand.mock_no_tombstone_dir):
        (MockRunCommand.mock_no_tombstone_file):
        (MockRunCommand.mock_ten_tombstones):
        (MockRunCommand.mock_logcat):
        (ChromiumAndroidPortTest):
        (ChromiumAndroidPortTest.make_port):
        (ChromiumAndroidPortTest.test_driver_cmd_line):
        (ChromiumAndroidPortTest.test_get_devices_no_device):
        (ChromiumAndroidPortTest.test_get_devices_one_device):
        (ChromiumAndroidPortTest.test_get_devices_two_devices):
        (ChromiumAndroidPortTest.test_get_device_serial_no_device):
        (ChromiumAndroidPortTest.test_get_device_serial_one_device):
        (ChromiumAndroidPortTest.test_get_device_serial_two_devices):
        (ChromiumAndroidDriverTest):
        (ChromiumAndroidDriverTest.setUp):
        (ChromiumAndroidDriverTest.test_get_last_stacktrace):
        (ChromiumAndroidDriverTest.test_get_crash_log):
        (ChromiumAndroidDriverTest.test_cmd_line):
        (ChromiumAndroidDriverTwoDriversTest):
        (ChromiumAndroidDriverTwoDriversTest.test_two_drivers):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):
        (Driver._get_crash_log): Added to allow subclasses to override.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Removed the --adb-args command-line parameter because now we select device automatically. Added --adb-device to specify devices.

2012-08-02  Dinu Jacob  <dinu.jacob@nokia.com>

        WebKitTestRunner needs layoutTestController.setUserStyleSheetEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42679

        Reviewed by Eric Seidel.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added 
        setUserStyleSheetEnabled and setUserStyleSheetLocation.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize new members added.
        (WTR::LayoutTestController::setUserStyleSheetEnabled): Added.
        (WTR::LayoutTestController::setUserStyleSheetLocation): Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added members
        userStyleSheetEnabled, and m_userStyleSheetLocation and methods
        setUserStyleSheetEnabled, and setUserStyleSheetLocation.

2012-08-02  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Fire speech start event at the same time as sound start event
        https://bugs.webkit.org/show_bug.cgi?id=92971

        Reviewed by Adam Barth.

        Update the MockWebSpeechRecognizer to not fire "speech started" events
        separately.

        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:
        (MockWebSpeechRecognizer::start):

2012-08-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] make sometimes using a single core
        https://bugs.webkit.org/show_bug.cgi?id=92998

        Reviewed by Martin Robinson.

        In the GTK 64-bit Release buildbot some builds use a single core
        for the make process. I suspect this is because in those cases
        nproc reports a single core available. The proposed solution is to
        always rely on all the cores available in the machine.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs):

2012-08-02  Adam Barth  <abarth@webkit.org>

        Re-land http://trac.webkit.org/changeset/94441 now that lforschler is ready.

        This patch enables testing on the mac-ews bots.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2012-08-02  Adam Barth  <abarth@webkit.org>

        [Chromium] Merge final nits to DumpRenderTree.gyp for Android
        https://bugs.webkit.org/show_bug.cgi?id=90920

        Reviewed by Tony Chang.

        This patch contains the last few small changes to DumpRenderTree.gyp
        from the chromium-android branch. After this change, this file will be
        fully merged.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-08-02  Peter Beverloo  <peter@chromium.org>

        [Chromium] Toggle the type of ant compile for webkit_unit_tests and TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=92858

        Reviewed by Adam Barth.

        Now that the sdk_build variable is available, we can remove these two differences
        as well. This goes together with Adam's bug 90920.

        After this patch, the whole Tools/ directory will be unforked :-).

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-08-02  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] MSVC specific buildfix for DRT.
        https://bugs.webkit.org/show_bug.cgi?id=92978

        Reviewed by Simon Hausmann.

        DumpRenderTree/qt subdirectory is missing from generated makefile under MSVC build, need to be added to the pro file.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2012-08-02  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][WK2] WTR is failing when X server is not running
        https://bugs.webkit.org/show_bug.cgi?id=92719

        Reviewed by Hajime Morita.

        EFL's WebKitTestRunner doesn't execute tests when X server is not running.
        This patch fixes the problem by checking environment variable before ecore x initialization.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.setup_environ_for_server):
        * WebKitTestRunner/efl/main.cpp:
        (main):

2012-08-01  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION(r123893): Reftest mismatches are run through ImageDiff with 0.1 tolerance
        https://bugs.webkit.org/show_bug.cgi?id=92847

        Reviewed by Ojan Vafai.

        I was failing to distinguish between 'None' and 0 :(. Fixed and added tests.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_diff_image.make_proc):
        (PortTestCase.test_diff_image):

2012-08-01  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up handling of tests to skip
        https://bugs.webkit.org/show_bug.cgi?id=92909

        Reviewed by Ryosuke Niwa.

        This change moves the handling of tests to skip into main.py
        where it is at least slightly more findable and generic.

        Also fix a couple of lint nits.

        * Scripts/webkitpy/test/finder.py:
        (Finder.__init__):
        (Finder.skip):
        (Finder._default_names):
        * Scripts/webkitpy/test/main.py:
        (main):
        (Tester.skip):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found):
        * Scripts/webkitpy/test/runner_unittest.py:

2012-08-01  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: remove --skip-integrationtests flag
        https://bugs.webkit.org/show_bug.cgi?id=92907

        Reviewed by Ryosuke Niwa.

        This flag is no longer used since the tests complete quickly.
        
        Also clean up the unused skip_if_parallel arg in finder, and
        make a couple of lint fixes.

        * Scripts/webkitpy/test/finder.py:
        (Finder.find_names):
        (Finder._default_names):
        * Scripts/webkitpy/test/finder_unittest.py:
        (FinderTest.check_names):
        (FinderTest.test_default_names):
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester.run):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found):

2012-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        Generalize SheriffIRCBot to prepare for PerfBot
        https://bugs.webkit.org/show_bug.cgi?id=92912

        Reviewed by Adam Barth.

        Renamed SheriffIRCBot to IRCBot and generalized to support non-sheriffbot IRC bot in the future.
        This will be useful when I add an experimental perf EWS IRC bot.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Whois.execute):
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest):
        * Scripts/webkitpy/tool/bot/ircbot.py: Moved from Tools/Scripts/webkitpy/tool/bot/sheriffircbot.py.
        (Eliza): Moved from irc_command.
        (Eliza.__init__):
        (Eliza.execute):
        (IRCBot):
        (IRCBot.__init__):
        (IRCBot.irc_delegate):
        (IRCBot._parse_command_and_args):
        (IRCBot.process_message):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py: Moved from Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py.
        (run):
        (IRCBotTest):
        (IRCBotTest.test_eliza): Moved from IRCCommandTest.
        (IRCBotTest.test_parse_command_and_args):
        (IRCBotTest.test_exception_during_command):
        * Scripts/webkitpy/tool/bot/sheriffircbot.py: Removed.
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot.begin_work_queue):
        * Scripts/webkitpy/webkitpy.pyproj:

2012-08-01  Dirk Pranke  <dpranke@chromium.org>

        nrwt: reenable the test for --verbose working in child processes
        https://bugs.webkit.org/show_bug.cgi?id=92894

        Reviewed by Ryosuke Niwa.

        This change rewrites the test to not use outputcapture, meaning
        that the MockHost can propagate to Worker properly and things
        work again :).

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_verbose_in_child_processes):

2012-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests --build-directory doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=92051

        Reviewed by Dirk Pranke.

        The bug was caused by not prepending build_directory even when one is defined.
        Fixed that.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._build_path):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_build_path):

2012-08-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123865.
        http://trac.webkit.org/changeset/123865
        https://bugs.webkit.org/show_bug.cgi?id=92891

        This patch is causing the style-queue to fall behind
        (Requested by abarth on #webkit).

        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractReviewQueue.begin_work_queue):
        (StyleQueue.__init__):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):

2012-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests throws an exception when the output json is malformed
        https://bugs.webkit.org/show_bug.cgi?id=92887

        Reviewed by Dirk Pranke.

        Catch exceptions and gracefully fail. Also split _generate_json into smaller methods.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_output): Extracted from _generate_json.
        (PerfTestsRunner._merge_source_json): Ditto; catch all exceptions since they are too many
        exceptions to consder here.
        (PerfTestsRunner._merge_outputs): Ditto.
        (PerfTestsRunner._generate_output_files): Extracted from _generate_json.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (_test_run_with_json_output): Don't assert logs when we except an non-zero exit code.
        (create_runner_and_setup_results_template): Extracted from test_run_generates_results_page.
        (test_run_generates_results_page):
        (test_run_with_bad_output_json): Added.
        (test_run_with_bad_json_source): Added.
        (test_run_with_upload_json):

2012-08-01  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Regression(r124135): nrwt: --verbose logging does not work right on windows
        https://bugs.webkit.org/show_bug.cgi?id=92845

        Reviewed by Dirk Pranke.

        Disabled the failing test. The Workers spawned by this test are using Host()
        instead of MockHost() and trying to access the real filesystem instead of the
        MockFilesytem.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.disabled_test_verbose):

2012-08-01  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        keyring.get_password may raise an exception.
        https://bugs.webkit.org/show_bug.cgi?id=92876

        Reviewed by Dirk Pranke.

        keyring.get_password sometimes raises an exception. We wrap this call,
        and also set_password to avoid breaking webkit-patch in that case.

        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._offer_to_store_credentials_in_keyring):
        (Credentials.read_credentials):

2012-08-01  Xianzhu Wang  <wangxianzhu@chromium.org>

        Layout Test fast/text/descent-clip-in-scaled-page.html is failing on linux since it was added
        https://bugs.webkit.org/show_bug.cgi?id=91386

        Reviewed by Tony Chang.

        Added font mapping from SubpixelPositioningAhem to Ahem on Linux and Android
        (used in layout test fast/text/descent-clip-in-scaled-page.html).
        Added font mapping from SubpixelPositioning to Times New Roman on Android to match Linux
        (used in platform/chromium-linux/fast/text/chromium-linux-text-subpixel-positioning.html)

        * DumpRenderTree/chromium/android_main_fonts.xml:
        * DumpRenderTree/chromium/fonts.conf:

2012-08-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r124325.
        http://trac.webkit.org/changeset/124325
        https://bugs.webkit.org/show_bug.cgi?id=92865

        broke android build (Requested by mnaganov on #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-08-01  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Dump a backtrace in case of a crash on the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=92843

        Reviewed by Csaba Osztrogonác.

        We are already dumping the backtraces when automated tests are
        crashing, but only for the WebProcess. This patch adds the same
        hooks for the UIProcess.

        * TestWebKitAPI/efl/main.cpp:
        (main):
        * WebKitTestRunner/efl/main.cpp:
        (main):

2012-08-01  Adam Barth  <abarth@webkit.org>

        [Chromium] Merge final nits to DumpRenderTree.gyp for Android
        https://bugs.webkit.org/show_bug.cgi?id=90920

        Reviewed by Tony Chang.

        This patch contains the last few small changes to DumpRenderTree.gyp
        from the chromium-android branch. After this change, this file will be
        fully merged.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-08-01  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] ImageDiff should use float division instead of integer
        https://bugs.webkit.org/show_bug.cgi?id=92859

        Reviewed by Zoltan Herczeg.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2012-08-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r124313.
        http://trac.webkit.org/changeset/124313
        https://bugs.webkit.org/show_bug.cgi?id=92855

        Compilation failed on Chromium ports (Requested by yosin on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeCommon.cpp: Removed.
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams):
        (TestParams::TestParams):
        (TestShell):
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (parseCommandLineOptions):
        (getFinalTestURL):
        (getExpectedPixelHash):
        (runTest):
        (shouldDumpPixelsAndCompareWithExpected):
        (main):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGlobalsFromCommandLineOptions):
        (dump):
        (runTest):
        (main):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (dumpRenderTree):
        (dump):
        (runTest):
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processLine):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (runTest):
        (dllLauncherEntryPoint):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/wscript:
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (dump):
        (runTest):
        (MyApp::OnInit):
        * GNUmakefile.am:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.supports_switching_pixel_tests_per_test):
        (Port):
        (Port._supports_switching_pixel_tests_per_test):
        (Port.should_run_as_pixel_test):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line):
        (Driver._command_from_driver_input):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._supports_switching_pixel_tests_per_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.supports_switching_pixel_tests_per_test):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-08-01  Balazs Kelemen  <kbalazs@webkit.org>

        All ports should support per test switching of pixel testing
        https://bugs.webkit.org/show_bug.cgi?id=92398

        Reviewed by Dirk Pranke.

        Teach all test drivers to accept a per test control of whether
        to dump pixels. Drivers now accept a -p/--pixel-test argument
        on the standart input that means that running the current
        test as pixel test is allowed (even if the expected hash is
        missing). Removed the --pixel-tests command line option since
        there is no need for it anymore.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.h:
        (TestCommand::TestCommand):
        (TestCommand):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeCommon.cpp: Added.
        (CommandTokenizer):
        (CommandTokenizer::CommandTokenizer):
        (CommandTokenizer::pump):
        (CommandTokenizer::next):
        (CommandTokenizer::hasNext):
        (die):
        (parseInputLine):
        Common logic to parse the input line from the standard input (or from the command line
        in standalone mode). Made it somewhat general so we can easily add more arguments if
        there is a need.
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):
        (TestShell):
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (parseCommandLineOptions):
        (runTest):
        (shouldDumpPixelsAndCompareWithExpected):
        (main):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGlobalsFromCommandLineOptions):
        (dump):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (dumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processLine):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (runTest):
        (dllLauncherEntryPoint):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/wscript:
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (dump):
        (runTest):
        (MyApp::OnInit):
        * Scripts/old-run-webkit-tests: Pass --pixel-test before the hash.
        Changed the separator form ' to : because it don't need to be escaped
        when passing manually on the comand line.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.should_run_as_pixel_test): Removed now that all ports supports it.
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line): Don't pass --pixel-tests anymore.
        (Driver._command_from_driver_input):

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestCommand::TestCommand):
        (TestCommand):
        (WTR):
        (CommandTokenizer):
        (WTR::CommandTokenizer::CommandTokenizer):
        (WTR::CommandTokenizer::pump):
        (WTR::CommandTokenizer::next):
        (WTR::CommandTokenizer::hasNext):
        (WTR::die):
        (WTR::parseInputLine):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):
        Duplicate the logic for parsing the command line because
        unfortunately there is no way to share code between
        WebKitTestRunner and DumpRenderTree.

2012-08-01  Martin Robinson  <mrobinson@igalia.com>

        Add the jhbuild source directory to the __builtin__ object

        Reviewed by Philippe Normand.

        It seems that the jhbuild script explicitly looks for the SRCDIR __builtin__ when
        initializing. This is necessary for loading the jhbuild from the checkout directory.

        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available): Set SRCDIR to the source directory.

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move actual test-running code into layout_test_runner.py
        https://bugs.webkit.org/show_bug.cgi?id=92806

        Reviewed by Ryosuke Niwa.

        This is the final patch in manager-refactoring series (for now).
        This moves all of the logic to actually run the tests into
        layout_test_runner (in a new LayoutTestRunner) class. Now
        the mechanics of actually executing all of  the tests are
        contained in one file (of course the actual work of talking to
        DRT/WTR and diff'ing the results is still in single_test_runner).

        Now manager is left with setting up and tearing down the test
        environment, finding the tests to run, and processing the
        results of the tests, which is a pretty managable amount of code
        (no pun intended).

        The unit tests for manager were split in two and all of the
        runner-specific tests moved into layout_test_runner_unittest.
        They were significantly cleaned up to be easier to read and
        maintain as a part of this.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (TestRunInterruptedException):
        (TestRunInterruptedException.__init__):
        (TestRunInterruptedException.__reduce__):
        (LayoutTestRunner):
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.test_key):
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner.run_tests.worker_factory):
        (LayoutTestRunner.run_tests.instead):
        (LayoutTestRunner._mark_interrupted_tests_as_skipped):
        (LayoutTestRunner._interrupt_if_at_failure_limits):
        (LayoutTestRunner._interrupt_if_at_failure_limits.interrupt_if_at_failure_limit):
        (LayoutTestRunner._update_summary_with_result):
        (LayoutTestRunner.start_servers_with_lock):
        (LayoutTestRunner.stop_servers_with_lock):
        (LayoutTestRunner.handle):
        (LayoutTestRunner._handle_started_test):
        (LayoutTestRunner._handle_finished_test_list):
        (LayoutTestRunner._handle_finished_test_list.find):
        (LayoutTestRunner._handle_finished_test):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter):
        (FakePrinter.print_workers_and_shards):
        (FakePrinter.print_finished_test):
        (FakePrinter.write):
        (FakePrinter.write_update):
        (FakePrinter.flush):
        (LockCheckingRunner):
        (LockCheckingRunner.__init__):
        (LockCheckingRunner.handle_finished_list):
        (LayoutTestRunnerTests):
        (LayoutTestRunnerTests._runner):
        (LayoutTestRunnerTests._result_summary):
        (LayoutTestRunnerTests._run_tests):
        (LayoutTestRunnerTests.test_http_locking):
        (LayoutTestRunnerTests.test_perf_locking):
        (LayoutTestRunnerTests.test_interrupt_if_at_failure_limits):
        (LayoutTestRunnerTests.test_update_summary_with_result):
        (LayoutTestRunnerTests.test_servers_started):
        (LayoutTestRunnerTests.test_servers_started.start_http_server):
        (LayoutTestRunnerTests.test_servers_started.start_websocket_server):
        (LayoutTestRunnerTests.test_servers_started.stop_http_server):
        (LayoutTestRunnerTests.test_servers_started.stop_websocket_server):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        (Manager.__init__):
        (Manager._is_http_test):
        (Manager):
        (Manager._is_websocket_test):
        (Manager._websocket_tests):
        (Manager._prepare_lists):
        (Manager._is_ref_test):
        (Manager.run):
        (Manager._run_tests):
        (Manager._look_for_new_crash_logs):
        (Manager._show_results_html_file):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_look_for_new_crash_logs):
        (ResultSummaryTest.summarized_results):
        (ResultSummaryTest.test_summarized_results_wontfix):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move sharding logic into layout_test_runner.py
        https://bugs.webkit.org/show_bug.cgi?id=92805

        Reviewed by Ryosuke Niwa.

        The sharding logic is specific to how we actually run the tests,
        so it belongs in this file instead of manager.py or finder.py.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_single_test):
        (TestShard):
        (TestShard.__init__):
        (TestShard.__repr__):
        (TestShard.__eq__):
        (Sharder):
        (Sharder.__init__):
        (Sharder.shard_tests):
        (Sharder.shard_tests.or):
        (Sharder._shard_in_two):
        (Sharder._shard_every_file):
        (Sharder._shard_by_directory):
        (Sharder._resize_shards):
        (Sharder._resize_shards.divide_and_round_up):
        (Sharder._resize_shards.extract_and_flatten):
        (Sharder._resize_shards.split_at):
        (Sharder._dir_for_test_input):
        (Sharder.test_key):
        (Sharder.natural_sort_key):
        (Sharder.natural_sort_key.tryint):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py: Added.
        (SharderTests):
        (SharderTests.get_test_input):
        (SharderTests.get_shards):
        (SharderTests.get_shards.split):
        (SharderTests.assert_shards):
        (SharderTests.test_shard_by_dir):
        (SharderTests.test_shard_by_dir_sharding_ref_tests):
        (SharderTests.test_shard_every_file):
        (SharderTests.test_shard_in_two):
        (SharderTests.test_shard_in_two_sharding_ref_tests):
        (SharderTests.test_shard_in_two_has_no_locked_shards):
        (SharderTests.test_shard_in_two_has_no_unlocked_shards):
        (SharderTests.test_multiple_locked_shards):
        (NaturalCompareTest):
        (NaturalCompareTest.assert_cmp):
        (NaturalCompareTest.test_natural_compare):
        (KeyCompareTest):
        (KeyCompareTest.setUp):
        (KeyCompareTest.setUp.split):
        (KeyCompareTest.assert_cmp):
        (KeyCompareTest.test_test_key):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._prepare_lists):
        (Manager._is_ref_test):
        (Manager._run_tests):
        (Manager._handle_finished_test):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.get_options):
        (ManagerTest.test_interrupt_if_at_failure_limits):
        (ManagerTest.test_update_summary_with_result):
        (ManagerTest.test_needs_servers.get_manager_with_tests):
        (ManagerTest.integration_test_needs_servers.get_manager_with_tests):
        (ManagerTest.test_look_for_new_crash_logs.get_manager_with_tests):
        (ManagerTest.test_servers_started):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: rename worker.py to layout_test_runner.py
        https://bugs.webkit.org/show_bug.cgi?id=92804

        Reviewed by Ojan Vafai.

        Home stretch of this round of manager refactoring ... I will be
        moving all of the actual test-running code (which includes the
        code that shards the tests for the workers) into a different
        module, and it makes sense for that module to contain the actual
        worker code, so I'm renaming worker.py to layout_test_runner.py.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py: Renamed from Tools/Scripts/webkitpy/layout_tests/controllers/worker.py.
        (Worker):
        (Worker.__init__):
        (Worker.__del__):
        (Worker.start):
        (Worker.handle):
        (Worker._update_test_input):
        (Worker._run_test):
        (Worker.stop):
        (Worker._timeout):
        (Worker._kill_driver):
        (Worker._run_test_with_timeout):
        (Worker._clean_up_after_test):
        (Worker._run_test_in_another_thread):
        (Worker._run_test_in_another_thread.SingleTestThread):
        (Worker._run_test_in_another_thread.SingleTestThread.__init__):
        (Worker._run_test_in_another_thread.SingleTestThread.run):
        (Worker._run_test_in_this_thread):
        (Worker._run_single_test):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests.worker_factory):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up names in sharding code
        https://bugs.webkit.org/show_bug.cgi?id=92785

        Reviewed by Ryosuke Niwa.

        More refactoring ... this makes the methods use TestInputs
        consistently (and updates the names accordingly) and improves
        encapsulation a bit. The sharding code is now pretty
        self-contained.

        This change adds no new functionality and is covered by the
        existing (updated) tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (TestShard.visible.__init__):
        (TestShard.visible.__repr__):
        (Manager._dir_for_test_input):
        (Manager._shard_tests):
        (Manager._shard_in_two):
        (Manager._shard_every_file):
        (Manager._shard_by_directory):
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerWrapper._test_input_for_file):
        (ShardingTests.get_shards):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__):
        (TestInput.__repr__):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up TestInputs in preparation for cleaning up sharding
        https://bugs.webkit.org/show_bug.cgi?id=92784

        Reviewed by Ryosuke Niwa.

        Currently, in order to shard the tests you need to refer to
        state in the manager as well as the state in the TestInputs;
        this change embeds the necessary state into the TestInputs so
        sharding them can be a standalone operation.

        The actual clean up of the sharding will follow in a subsequent patch.

        Covered by existing tests; no new functionality. However, I did
        rework the sharding tests to be less dependent on the test
        scaffolding and easier to follow.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._test_input_for_file):
        (Manager._shard_in_two):
        (Manager._shard_every_file):
        (Manager._shard_by_directory):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerWrapper._test_input_for_file):
        (ShardingTests.assert_shards):
        (ShardingTests.test_shard_by_dir):
        (ShardingTests.test_shard_by_dir_sharding_ref_tests):
        (ShardingTests.test_shard_every_file):
        (ShardingTests.test_shard_in_two):
        (ShardingTests.test_shard_in_two_sharding_ref_tests):
        (ShardingTests.test_shard_in_two_has_no_unlocked_shards):
        (ShardingTests.test_multiple_locked_shards):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__):
        (TestInput.__repr__):

2012-07-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Dump a backtrace in case of a crash
        https://bugs.webkit.org/show_bug.cgi?id=92489

        Reviewed by Csaba Osztrogonác.

        Dump a stack trace in case of a unexpected signal. This should
        provide a better report at the build bots when WTR crashes.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (main):
        * TestWebKitAPI/efl/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * WebKitTestRunner/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WTR::InjectedBundle::platformInitialize):

2012-07-31  Joshua Netterfield  <jnetterfield@rim.com>

        [BlackBerry] Enable CSS Filter Effects
        https://bugs.webkit.org/show_bug.cgi?id=92685

        Reviewed by Rob Buis.

        Enable CSS filter effects, with the exception of custom effects (CSS shaders) and reference effects (SVG effects)

        Internally reviewed by Arvid Nilsson <anilsson@rim.com> and Antonio Gomes <agomes@rim.com>.

        * Scripts/webkitperl/FeatureList.pm: Acknowledge CSS filter effects.

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up prepare_lists_and_print_output, run, set_up_run a bit
        https://bugs.webkit.org/show_bug.cgi?id=92781

        Reviewed by Ryosuke Niwa.

        More refactoring ... rename prepare_lists_and_print_output to
        just prepare_lists so that it only has a single purpose, and
        clean up the surrounding code a bit as well.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._collect_tests):
        (Manager._prepare_lists):
        (Manager._set_up_run):
        (Manager.run):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up self._test_files_list vs. self._test_files, other nits
        https://bugs.webkit.org/show_bug.cgi?id=92702

        Reviewed by Ojan Vafai.

        Get rid of self._test_files, rename self._test_files_list to
        self._test_names (removing the confusion between the two fields).

        Also inline the one call to _parse_expectations, remove the one
        use of more_tests_to_skip, and fix a couple of minor nits.

        * Scripts/webkitpy/layout_tests/controllers/finder.py:
        (LayoutTestFinder.split_into_chunks):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._collect_tests):
        (Manager._http_tests):
        (Manager._websocket_tests):
        (Manager._is_perf_test):
        (Manager.prepare_lists_and_print_output):
        (Manager.needs_servers):
        (Manager.run):
        (Manager._mark_interrupted_tests_as_skipped):
        (Manager._update_summary_with_result):
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_interrupt_if_at_failure_limits):
        (ManagerTest.test_needs_servers.get_manager_with_tests):
        (ManagerTest.test_servers_started):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: --verbose logging does not work right on windows
        https://bugs.webkit.org/show_bug.cgi?id=92673

        Reviewed by Ojan Vafai.

        Add a test for r124090.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_verbose):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION(124116): Number of skipped tests isn't printed anymore
        https://bugs.webkit.org/show_bug.cgi?id=92736

        Reviewed by Tony Chang.

        Add the skipped number back in; it was useful ... also clean up
        the formatting a little bit.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):

2012-07-31  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Throw exception for start() when already started
        https://bugs.webkit.org/show_bug.cgi?id=92756

        Reviewed by Adam Barth.

        Fix the task queue in MockWebSpeechRecognizer.
        It's important that we remove the task from the queue before we run
        it, as running the task could alter the queue's state.

        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:
        (MockWebSpeechRecognizer::abort):
        (MockWebSpeechRecognizer::setError):
        (MockWebSpeechRecognizer::clearTaskQueue):
        (MockWebSpeechRecognizer::StepTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h:
        (MockWebSpeechRecognizer):

2012-07-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move handling the initial list of tests to skip to finder
        https://bugs.webkit.org/show_bug.cgi?id=92701

        Reviewed by Ryosuke Niwa.

        More refactoring of manager ...

        * Scripts/webkitpy/layout_tests/controllers/finder.py:
        (LayoutTestFinder.skip_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._collect_tests):
        (Manager.prepare_lists_and_print_output):

2012-07-31  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Kill the concept of secondary shared process
        https://bugs.webkit.org/show_bug.cgi?id=92676

        Reviewed by Sam Weinig.

        * MiniBrowser/win/BrowserView.cpp: (BrowserView::create): Update Windows build fix.
        Don't create a new context for every view.

2012-07-31  Peter Beverloo  <peter@chromium.org>

        [Chromium] Don't use ninja for building Chromium for Android
        https://bugs.webkit.org/show_bug.cgi?id=92764

        Reviewed by Adam Barth.

        When Ninja projects files are generated (which will be done for Android),
        make sure that the Android builder doesn't unintentionally switch to
        using Ninja. We should make that switch at a predetermined time.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2012-07-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add a mechanism to dump the stack trace in case of a crash
        https://bugs.webkit.org/show_bug.cgi?id=92666

        Reviewed by Csaba Osztrogonác.

        Move crash signal handlers to WTFInstallReportBacktraceOnCrashHook()
        and eliminate some duplicated code.

        * DumpRenderTree/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize):

2012-07-31  Jochen Eisinger  <jochen@chromium.org>

        [chromium] move EventSender into TestRunner.a
        https://bugs.webkit.org/show_bug.cgi?id=92277

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestRunner/EventSender.cpp: Renamed from Tools/DumpRenderTree/chromium/EventSender.cpp.
        * DumpRenderTree/chromium/TestRunner/EventSender.h: Renamed from Tools/DumpRenderTree/chromium/EventSender.h.
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::Internal::eventSender):
        (TestInterfaces::Internal):
        (TestInterfaces::Internal::Internal):
        (TestInterfaces::Internal::~Internal):
        (TestInterfaces::Internal::setWebView):
        (TestInterfaces::Internal::setDelegate):
        (TestInterfaces::Internal::bindTo):
        (TestInterfaces::Internal::resetAll):
        (TestInterfaces::eventSender):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::eventSender):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:

2012-07-31  Jochen Eisinger  <jochen@chromium.org>

        Unreviewed. Update watchlist

        * Scripts/webkitpy/common/config/watchlist: Turned out to be less useful than I had hoped

2012-07-31  Kent Tamura  <tkent@chromium.org>

        Unreviewed, update watchlist

        * Scripts/webkitpy/common/config/watchlist:
        - Improve "Forms" filename pattern.
        - tkent stops watching Chromium DRT. It was not so helpful.

2012-07-31  Martin Robinson  <mrobinson@igalia.com>

        [jhbuild] Also try to load jhbuild Python module from the source checkout

        Reviewed by Philippe Normand.

        JHBuild also seems to have an installation mode where it prefers to load its
        Python modules from the source checkout. This seems to be used particularly
        on the GTK+ 64-bit release bot. We should fall back to this mode.

        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available): Use the source checkout if there
        is no installation path.

2012-07-30  Ryosuke Niwa  <rniwa@webkit.org>

        Revert r124153 and land the "right" build fix per ap's comment on the bug 92676.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2012-07-30  Sam Weinig  <sam@webkit.org>

        Rename WebKit2.h to WebKit2_C.h
        https://bugs.webkit.org/show_bug.cgi?id=92704

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/win/BrowserView.h:
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/config.h:
        Update for changed header file name.

2012-07-30  Dirk Pranke  <dpranke@chromium.org>

        chromium win compile broken after removing webkit.py
        https://bugs.webkit.org/show_bug.cgi?id=92549

        Reviewed by Ryosuke Niwa.

        Remove the stub file for webkit.py now that it's no longer
        necessary.

        * Scripts/webkitpy/layout_tests/port/webkit.py: Removed.

2012-07-30  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r124092.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2012-07-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove erroneously committed debugging print call from a test.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_generates_results_page):

2012-07-30  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        webkit-patch: system keyring is not used to read my password
        https://bugs.webkit.org/show_bug.cgi?id=92532

        Reviewed by Dirk Pranke.

        In case no username can be fetched from environment, git or keychain,
        prompt for username, and try to get password from keyring associated
        with that username.

        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials.read_credentials):
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        (test_keyring_without_git_repo_nor_keychain):
        (test_keyring_without_git_repo_nor_keychain.MockKeyring):
        (test_keyring_without_git_repo_nor_keychain.MockKeyring.get_password):
        (test_keyring_without_git_repo_nor_keychain.FakeCredentials):
        (test_keyring_without_git_repo_nor_keychain.FakeCredentials._credentials_from_keychain):
        (test_keyring_without_git_repo_nor_keychain.FakeCredentials._credentials_from_environment):
        (test_keyring_without_git_repo_nor_keychain.FakeUser):
        (test_keyring_without_git_repo_nor_keychain.FakeUser.prompt):
        (test_keyring_without_git_repo_nor_keychain.FakeUser.prompt_password):

2012-07-30  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move the code that identifies the chunk of tests to run into finder
        https://bugs.webkit.org/show_bug.cgi?id=92694

        Reviewed by Ryosuke Niwa.

        Another patch to make manager.py smaller and clearer; this patch moves
        the handling of breaking the list of tests into chunks (--run-part,
        --run-chunk) from manager.py to finder.py.

        There are no functional changes and this is covered by existing tests.

        * Scripts/webkitpy/layout_tests/controllers/finder.py:
        (Finder.__init__):
        (Finder._read_test_files):
        (Finder):
        (Finder.split_into_chunks_if_necessary):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._collect_tests):
        (Manager._parse_expectations):
        (Manager.prepare_lists_and_print_output):

2012-07-30  Dirk Pranke  <dpranke@chromium.org>

        nrwt: split test-finding code out from manager.py
        https://bugs.webkit.org/show_bug.cgi?id=92693

        Reviewed by Ryosuke Niwa.

        In the interest of making manager.py smaller, this patch moves
        the code that actually takes the command line arguments and
        --test-file lists of tests to run and expands them into an
        actual list of tests out into a separate module.

        * Scripts/webkitpy/layout_tests/controllers/finder.py: Added.
        (LayoutTestFinder):
        (LayoutTestFinder.__init__):
        (LayoutTestFinder.find_tests):
        (LayoutTestFinder._strip_test_dir_prefixes):
        (LayoutTestFinder._strip_test_dir_prefix):
        (LayoutTestFinder._read_test_names_from_file):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._collect_tests):
        (Manager._handle_finished_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (strip_comments):

2012-07-30  Adam Barth  <abarth@webkit.org>

        commit-queue is corrupting ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=92681

        Reviewed by Tony Chang.

        Some commits made with the commit-queue are ending up with duplicate
        ChangeLog entries. I've hot-patched the servers to not use a special
        merge driver for ChangeLogs, which should fix this issue. This patch
        removes the merge driver from our cold-boot.sh script so that we won't
        use it on new commit-queue instances.

        * EWSTools/cold-boot.sh:

2012-07-28  Sam Weinig  <sam@webkit.org>

        Add ability to load from a string to the ObjC WK API
        https://bugs.webkit.org/show_bug.cgi?id=92590

        Reviewed by Dan Bernstein.

        Add tests for [WKBrowsingContextController loadHTMLString:baseURL:]. We will be able
        to greatly improve these tests (to test more than just not crashing) when methods to
        access page content are added (soon!).

        Adds:
            Test: WKBrowsingContextLoadDelegateTest_SimpleLoadOfHTMLString
            Test: WKBrowsingContextLoadDelegateTest_SimpleLoadOfHTMLString_NilBaseURL
            Test: WKBrowsingContextLoadDelegateTest_SimpleLoadOfHTMLString_NilHTMLStringAndBaseURL

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        Adds tests and refactors delegates to not use global state.

2012-07-30  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [CMake] TestWebKitAPI bundle should link with WTF
        https://bugs.webkit.org/show_bug.cgi?id=92616

        Reviewed by Antonio Gomes.

        Fixes build when shared core is disabled.

        * TestWebKitAPI/CMakeLists.txt:

2012-07-30  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up handling of 'expected' stats
        https://bugs.webkit.org/show_bug.cgi?id=92527

        Reviewed by Tony Chang.

        This patch alters the way we compute and log the "expected"
        results and how we treat skipped tests; we will now log the
        number of skipped tests separately from the categories, e.g.:

        Found 31607 tests; running 24464.
        Expect: 23496 passes   (23496 now,    0 wontfix)
        Expect:   548 failures (  543 now,    5 wontfix)
        Expect:   420 flaky    (  245 now,  175 wontfix)

        (so that the "expect" totals add up to the "running" totals);
        in addition, the totals in the one-line-progress reflect the
        number of tests we will actually run. If --iterations or
        --repeat-each are specified, the number of tests we run are
        multiplied as appropriate, but the "expect" numbers are
        unchanged, since we don't count multiple invocations of the same
        test multiple times. In addition, if we are using --run-part or
        --run-chunk, the tests we don't run are treated as skipped
        for consistency. We will also log the values for --iterations
        and --repeat each as part of the found/running line.

        Previously the code had parsed and re-parsed the
        TestExpectations files several times in an attempt to come up
        with some sane statistics, but this was expensive and lead to
        confusing layer; treating files as skipped in the way described
        above is more consistent and cleaner.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._split_into_chunks_if_necessary):
        (Manager.prepare_lists_and_print_output):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_interrupt_if_at_failure_limits):
        (ManagerTest.test_update_summary_with_result):
        (ManagerTest.test_look_for_new_crash_logs):
        (ResultSummaryTest.get_result_summary):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectations.__init__):
        (TestExpectations.add_skipped_tests):
          Here we make add_skipped_tests() public, so that we can update
          the expectations for tests that we are skipping due to
          --run-part or --run-chunk; we use the wontfix flag so that
          the tests that are intentionally skipped aren't considered
          "fixable".
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (SkippedTests.check):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):
        (Printer):
        (Printer.print_expected):
        (Printer._print_result_summary):
        (Printer._print_result_summary_entry):
          Here we split out printing the number of tests found and run
          from the expected results, to be clearer and so that we don't
          have to reparse the expectations to update the stats.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.get_result_summary):

2012-07-30  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Propagate gesture events to plugins.
        https://bugs.webkit.org/show_bug.cgi?id=92281

        Reviewed by Adam Barth.

        Update TestWebPlugin to receive events, and output logs for the events.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::handleInputEvent):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin::acceptsInputEvents):
        (TestWebPlugin):

2012-07-30  Raphael Kubo da Costa  <rakuco@webkit.org>

        [jhbuild] gnutls 2.12.14 does not build with glibc 2.16.0
        https://bugs.webkit.org/show_bug.cgi?id=90643

        Reviewed by Gustavo Noronha Silva.

        The 2.x series of gnutls has a version of Gnulib that is
        incompatible with glibc 2.16.0, which now does not define gets()
        by default.

        After talking to kov, mrobinson and philn, it looks like it makes
        sense to simply remove gnutls from jhbuild.modules and rely on the
        version installed on the system being recent enough.

        This means at least version 2.12.8 for PKCS11 support, or at the
        very least 2.11.0 (these are the minimum versions enforced by
        glib-networking's configure.ac).

        * efl/jhbuild.modules: Do not build gnutls anymore, make
        glib-networking depend on glib instead, and move the libgcrypt
        dependency to eet, which is what currently needs it.
        * gtk/jhbuild.modules: Do not build gnutls anymore.

2012-07-30  Dirk Pranke  <dpranke@chromium.org>

        nrwt: --verbose logging does not work right on windows
        https://bugs.webkit.org/show_bug.cgi?id=92673

        Unreviewed, build fix.

        The --verbose log level is not being propagated to the worker
        processes on windows properly; this has been broken ever since I
        refactored logging into the message pool directly :(.

        Also, fixing this revealed that outputcapture wasn't saving and
        restoring log levels correctly, so I had to fix that as well.

        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool._start_workers):
        (_MessagePool._worker_log_level):
        (_Worker.__init__):
        (_Worker._set_up_logging):
        (_WorkerLogHandler.__init__):
        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.capture_output):
        (OutputCapture.restore_output):

2012-07-30  Dirk Pranke  <dpranke@chromium.org>

        After r123895, new-run-webkit-tests can fail with TypeError when a test crashes
        https://bugs.webkit.org/show_bug.cgi?id=92664

        Reviewed by Michael Saboff.

        Updated to handle crash_logs being returned as a tuple of (stderr, crash_log).

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.look_for_new_crash_logs):

2012-07-30  Stephen White  <senorblanco@chromium.org>

        Added a SkiaGraphics definition to the watchlist file; cc'ed myself
        to that group.  Unreviewed.

        * Scripts/webkitpy/common/config/watchlist:

2012-07-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123966 and r123967.
        http://trac.webkit.org/changeset/123966
        http://trac.webkit.org/changeset/123967
        https://bugs.webkit.org/show_bug.cgi?id=92656

        This patch is causing assertion failures on the debug bot
        (also rolling out a dependent patch) (Requested by mrobinson
        on #webkit).

        * gtk/generate-gtkdoc:
        (get_webkit2_options):

2012-07-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add a non-subprocess jhbuild environment and use it for run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=92626

        Reviewed by Gustavo Noronha Silva.

        Instead of always shelling out to enter a jhbuild environment, add a Python
        hook for entering a jhbuild environment directly. This avoids requiring a
        script to be wrapped in jhbuild.

        * GNUmakefile.am: Remove gtk/run-api-tests from the distribution list.
        * Scripts/run-gtk-tests: Move most of the logic from run-api-tests here
        with additional code for entering a jhbuild environment directly.
        * gtk/run-api-tests: Removed.
        * jhbuild/jhbuild-wrapper: Use the new helper methods defined in jhbuildutils.py.
        * jhbuild/jhbuildutils.py: Add some new helper methods here including
        a method which can transform the current environment into a jhbuild-ified one.

2012-07-30  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, upgrade apavlov to reviewer.
        http://lists.webkit.org/mailman/private/webkit-committers/2012-July/000184.html

        * Scripts/webkitpy/common/config/committers.py:

2012-07-30  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Adapt to changes in the SharedArray platform API
        https://bugs.webkit.org/show_bug.cgi?id=92631

        Reviewed by Rob Buis.

        Adapt to changes in the SharedArray platform API. No behavioural change.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::webHistoryItemCount):

2012-07-30  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][NRWT] REGRESSION(123729): Forcing pixel tests with -p doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=92627

        Reviewed by Noam Rosenthal.

        Remove the default behavior I added in r123729 so that we run all tests as pixel
        test with -p. It was intentional but it seems like we don't have consensus on
        that we want it.

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

2012-07-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WTR] Enforce SHIFT modifier to upper case keys in event sender.
        https://bugs.webkit.org/show_bug.cgi?id=92366

        Reviewed by Antonio Gomes.

        Add SHIFT modifier for capital letters as VK_
        codes do not distinguish between lows and caps and also to be consistent
        with other ports which send caps as lowercase letters with the shift key down.

        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::keyDown):

2012-07-29  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL][jhbuild] Make run-with-jhbuild become the jhbuild process itself.
        https://bugs.webkit.org/show_bug.cgi?id=92592

        Reviewed by Eric Seidel.

        Adapt to the changes made to GTK+'s run-with-jhbuild in r123979
        and make EFL's run-with-jhbuild call os.execve() instead of
        launching a subprocess as well.

        This should make it possible to interrupt execution of jhbuild
        cleanly.

        * efl/run-with-jhbuild:

2012-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should generate a results page
        https://bugs.webkit.org/show_bug.cgi?id=92575

        Reviewed by Eric Seidel.

        Added the ability to generate a results page that summarizes performance test results from
        multiple runs of run-perf-tests when --output-json-path is specified and --test-results-server
        is not specified. We cannot generate a results page when --test-results-server is specified
        because perf-o-matic cannot parse the new JSON format.

        The new JSON format is simply an array of the old JSON output. This JSON is then merged into
        results-template.html along with jQuery and copied as a HTML file of the same filename as
        the output JSON file with a .html extension.

        We merge all scripts and the JSON output into the results page as opposed to including them
        with the src content attribute to make it standalone so that we may post it on Bugzilla or
        e-mail it to someone else without breaking it.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_json): Merge "contents" with the existing JSON file when generating
        a results page, and generate the results page from results-template.html merged with jQuery and
        the generated JSON output.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (_test_run_with_json_output): Extracted from test_run_with_upload_json to be shared with
        several test cases.
        (_test_run_with_json_output.mock_upload_json): Ditto.
        (test_run_with_json_output): Refactored to use _test_run_with_json_output.
        (test_run_generates_results_page): Added. Tests the new feature.
        (test_run_with_json_source): Refactored to use _test_run_with_json_output.
        (test_run_with_multiple_repositories): Ditto.
        (test_run_with_upload_json): Ditto.

2012-07-29  Rik Cabanier  <cabanier@adobe.com>

        Add ENABLE_CSS_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=92553

        Reviewed by Dirk Schulze.

        Adds compiler flag CSS_COMPOSITING to build systems to enable CSS blending and compositing. See spec https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html

        * Scripts/webkitperl/FeatureList.pm:

2012-07-29  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        Make the jhbuild wrapper scripts become the jhbuild process
        instead of starting it as a child. This should make it possible to
        interrupt execution of jhbuild cleanly.

        * gtk/run-with-jhbuild:
        * jhbuild/jhbuild-wrapper:

2012-07-29  Mike West  <mkwst@chromium.org>

        Extend `application/x-webkit-test-netscape` plugins to better support multiple frames.
        https://bugs.webkit.org/show_bug.cgi?id=92478

        Reviewed by Adam Barth.

        DumpRenderTree currently understands
        `<object src="data:application/x-webkit-test-netscape,alertwhenloaded">`.
        It would be useful if it understood `logifloaded`, which could give
        more context regarding test expectations, and can be written in such
        as way as to support plugins loaded into multiple iframes in a single
        test.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
            Adding support for `logifloaded`.

2012-07-28  Peter Kasting  <pkasting@google.com>

        Fix Chromium/Win compile.
        https://bugs.webkit.org/show_bug.cgi?id=88787

        Unreviewed, build fix.

        Chromium/Win needs _USE_MATH_DEFINES but doesn't define PLATFORM(WIN).
        The other files in WebKit that define this macro (both in
        WebCore/platform/graphics/cg) do it by unconditionally #defining it to 1
        above the #include of "config.h", so copy that pattern here.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:

2012-07-28  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement a new spell checker API for WebKit2GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90268

        Reviewed by Martin Robinson.

        Ignore WebKitTextChecker.* private files for gtk-doc.

        * gtk/generate-gtkdoc:
        (get_webkit2_options):

2012-07-28  Philippe Normand  <pnormand@igalia.com>

        [GTK] Transparent Media controls timeline and panel
        https://bugs.webkit.org/show_bug.cgi?id=85279

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Provide gnome-themes-standard build
        support, this is necessary so the media controls panel colors are
        properly initialized from the GTK+ theme.

2012-07-27  Kihong Kwon  <kihong.kwon@samsung.com>

        [EFL] Support for HTML media capture
        https://bugs.webkit.org/show_bug.cgi?id=91842

        Reviewed by Ryosuke Niwa.

        Add HTML media capture feature to the feature list.
        In addition, enable that on the Efl port.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-27  Dirk Pranke  <dpranke@chromium.org>

        "webkit-patch rebaseline <test>" fails with exit_code 1
        https://bugs.webkit.org/show_bug.cgi?id=91560

        Reviewed by Adam Barth.

        webkit-patch rebaseline-json crashes in an svn checkout if it
        tries to add files and there are no files to add; arguably
        svn.add() should be robust against this, but rebaseline-json
        shouldn't be calling it, either. This patch fixes the latter and
        adds better debugging info to garden-o-matic so we can see what
        caused the crash.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand._rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaselineall):
        (GardeningHTTPRequestHandler.rebaselineall.error_handler):
        (GardeningHTTPRequestHandler):

2012-07-27  Brady Eidson  <beidson@apple.com>

        Plugins should not be allowed to override standard properties/attributes in non-standard worlds
        <rdar://problem/11975252> and https://bugs.webkit.org/show_bug.cgi?id=92519

        Reviewed by Anders Carlsson.

        Add a test plugin which overrides all properties it is asked about:
        * DumpRenderTree/TestNetscapePlugIn/Tests/PluginScriptableObjectOverridesAllProperties.cpp: Added.
        (PluginScriptableObjectOverridesAllProperties):
        (PluginScriptableObjectOverridesAllProperties::PluginScriptableObjectOverridesAllProperties):
        (PluginObject):
        (PluginScriptableObjectOverridesAllProperties::PluginObject::PluginObject):
        (PluginScriptableObjectOverridesAllProperties::PluginObject::~PluginObject):
        (PluginScriptableObjectOverridesAllProperties::PluginObject::hasProperty):
        (PluginScriptableObjectOverridesAllProperties::PluginObject::getProperty):
        (PluginScriptableObjectOverridesAllProperties::NPP_GetValue):

        Expose NPN_MemAlloc to the test plugin:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_MemAlloc):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest):

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2012-07-27  Rafael Brandao  <rafael.lobo@openbossa.org>

        "webkit-patch upload" should strip colors from patch if necessary
        https://bugs.webkit.org/show_bug.cgi?id=92306

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/git.py: Explicity remove colors from diff.

2012-07-27  Eric Seidel  <eric@webkit.org>

        clean-pending-commit throws exception when encountering Ossy
        https://bugs.webkit.org/show_bug.cgi?id=92534

        Reviewed by Adam Barth.

        Mark a couple strings as unicode so that reviewers with unicode names do not cause
        clean-pending-commit to barf.

        * Scripts/webkitpy/tool/commands/upload.py:
        (CleanPendingCommit._flags_to_clear_on_patch):
        (CleanPendingCommit.execute):
        (AssignToCommitter._assign_bug_to_last_patch_attacher):

2012-07-27  Dirk Pranke  <dpranke@chromium.org>

        chromium win compile broken after removing webkit.py
        https://bugs.webkit.org/show_bug.cgi?id=92549

        Unreviewed, build fix.

        It turns out that this file is listed in the chromium downstream
        'browser_tests.isolate' file, and so deleting it broke gyp.
        Adding a stub file back in until we can remove the entry from
        the file.

        * Scripts/webkitpy/layout_tests/port/webkit.py: Added.

2012-07-27  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove 'webkit.py' and the 'WebKitPort'
        https://bugs.webkit.org/show_bug.cgi?id=92450

        Reviewed by Ryosuke Niwa.

        This patch finishes the work of merging WebKitPort into Port.
        Now Port is way too big :).

        This is all cutting and pasting; no new functionality and
        no changes in the tests.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort):
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_layout_tests):
        (Port):
        (Port._port_flag_for_scripts):
        (Port._arguments_for_configuration):
        (Port._run_script):
        (Port._build_driver):
        (Port._build_driver_flags):
        (Port._tests_for_other_platforms):
        (Port._runtime_feature_list):
        (Port.nm_command):
        (Port._modules_to_search_for_symbols):
        (Port._symbols_string):
        (Port._missing_feature_to_skipped_tests):
        (Port._missing_symbol_to_skipped_tests):
        (Port._has_test_in_directories):
        (Port._skipped_tests_for_unsupported_features):
        (Port._wk2_port_name):
        (Port._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_check_build):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort):
        (EflPort.__init__):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort):
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (TestWebKitPort):
        (TestWebKitPort.__init__):
        (TestWebKitPort.all_test_configurations):
        (TestWebKitPort._symbols_string):
        (TestWebKitPort._tests_for_other_platforms):
        (TestWebKitPort._tests_for_disabled_features):
        (PortTestCase):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_path_to_test_expectations_file):
        (PortTestCase.test_skipped_directories_for_symbols):
        (test_skipped_directories_for_features):
        (test_skipped_directories_for_features_no_matching_tests_in_test_list):
        (test_skipped_tests_for_unsupported_features_empty_test_list):
        (test_skipped_layout_tests):
        (test_skipped_file_search_paths):
        (test_root_option):
        (test_test_expectations):
        (test_build_driver):
        (_assert_config_file_for_platform):
        (test_linux_distro_detection):
        (test_apache_config_file_name_for_platform):
        (test_path_to_apache_config_file):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.__init__):
        (QtPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/webkit.py: Removed.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Removed.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort):
        (get_test_baselines.AllPlatformsPort.__init__):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort):

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] LayoutTestController.deliverWebIntent() needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=92228

        Reviewed by Anders Carlsson.

        Implement LayoutTestController.deliverWebIntent() to
        allow test cases to deliver a Web intent and test this
        functionality.

        This functionality is needed by:
        - webintents/web-intents-delivery.html

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::deliverWebIntent):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-07-27  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Wrap MSVC-specific fixes is a COMPILER() check, not a PLATFORM() check.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:

2012-07-27  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] NRWT better handling of DRT deadlocks and crashes
        https://bugs.webkit.org/show_bug.cgi?id=92299

        Reviewed by Dirk Pranke.

        1. Changed the deadlock detector thread target from a method of driver to a function to avoid its reference to the
           current driver (see the bug for the problem of the reference.
        2. Let the deadlock detector thread exit early when the normal_startup_event is set to avoid it from blocking the main thread when the main thread is exiting.
        3. Extracted common loop until timeout logic into ChromiumAndroidDriver._loop_with_timeout().
        4. Use the "for i in range(n)" style suggested by dpranke in https://bugs.webkit.org/show_bug.cgi?id=89124 in several functions.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort._run_adb_command): Reduced the verbose output.
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._loop_with_timeout): Extracted common loop until timeout logic here.
        (ChromiumAndroidDriver._all_pipes_created):
        (ChromiumAndroidDriver._remove_all_pipes):
        (ChromiumAndroidDriver._start): Changed the retry loop style.
        (ChromiumAndroidDriver._start_once): Changed the loop style and code related to deadlock detector.
        (ChromiumAndroidDriver._start_once.deadlock_detector): Moved the original ChromiumAndroidDriver._deadlock_detector() here.
        (ChromiumAndroidDriver.stop): Changed the loop style.

2012-07-27  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move collect_tests(), parse_expectations() into manager
        https://bugs.webkit.org/show_bug.cgi?id=92423

        Reviewed by Ojan Vafai.

        This is the first in a series of patches refactoring
        run_webkit_tests.py and manager.py to make them more
        maintainable; all this patch does is move a couple of functions
        into manager.run_tests() so manager's public interface is
        simple.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._collect_tests):
        (Manager._parse_expectations):
        (Manager._split_into_chunks_if_necessary):
        (Manager.run):
        (read_test_files):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_http_locking):
        (ManagerTest.test_perf_locking):
        (ManagerTest.integration_test_needs_servers.get_manager_with_tests):
        (ManagerTest.test_look_for_new_crash_logs.get_manager_with_tests):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):

2012-07-27  Dirk Pranke  <dpranke@chromium.org>

        nrwt: print filtered stderr after a crash correctly
        https://bugs.webkit.org/show_bug.cgi?id=92428

        Reviewed by Adam Barth.

        Some ports will run the stderr output from DRT/WTR through a
        filter after a crash in order to print a more useful stack
        trace; while that gets written to the crash log correctly, we
        don't log it to the debug output properly. This change fixes
        that and makes it clearer that we're logging stderr, not the
        crash log.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest.test_get_crash_log):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.run_test):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort._get_crash_log):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_get_crash_log):

2012-07-27  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move image diffing code to a separate module
        https://bugs.webkit.org/show_bug.cgi?id=92447

        Reviewed by Ryosuke Niwa.

        This patch moves the code to talk to ImageDiff into its own
        module, and adds more tests for it. In addition, the patch
        modifies diff_image() so that we don't automatically stop
        ImageDiff after a single invocation, and thus subsequent
        diffs may be slightly faster. (Note that the chromium ports
        don't use any of this code; that is not changed by this patch).

        The main motivation for this change is to move more "generic"
        code out of the port/* classes, and in particular to move more
        code out of webkit.py so that we can eventually eliminate it by
        merging it into base.py.

        This patch also splits MockServerProcess out from driver_unittest.py
        so that it can be re-used.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.diff_image):
        (Port.clean_up_test_run):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        (Driver._start):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_stop_cleans_up_properly):
        (DriverTest.test_two_starts_cleans_up_properly):
        (DriverTest.test_start_actually_starts):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.clean_up_test_run):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.clean_up_test_run):
        * Scripts/webkitpy/layout_tests/port/image_diff.py: Added.
        (ImageDiffer):
        (ImageDiffer.__init__):
        (ImageDiffer.diff_image):
        (ImageDiffer._start):
        (ImageDiffer._read):
        (ImageDiffer.stop):
        * Scripts/webkitpy/layout_tests/port/image_diff_unittest.py: Added.
        (for):
        (FakePort):
        (FakePort.__init__):
        (FakePort._path_to_image_diff):
        (FakePort.setup_environ_for_server):
        (TestImageDiffer):
        (TestImageDiffer.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_diff_image):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_diff_image__missing_both):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image.make_proc):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._start):
        * Scripts/webkitpy/layout_tests/port/server_process_mock.py: Added.
        (MockServerProcess):
        (MockServerProcess.__init__):
        (MockServerProcess.write):
        (MockServerProcess.has_crashed):
        (MockServerProcess.read_stdout_line):
        (MockServerProcess.read_stdout):
        (MockServerProcess.pop_all_buffered_stderr):
        (MockServerProcess.read_either_stdout_or_stderr_line):
        (MockServerProcess.start):
        (MockServerProcess.stop):
        (MockServerProcess.kill):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_driver_flags):
        (WebKitPort._symbols_string):

2012-07-27  Tom Hudson  <hudson@google.com>

        Activate committer bit granted April 6th so I can garden.
        https://bugs.webkit.org/show_bug.cgi?id=92500

        Reviewed by Jochen Eisinger.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-27  Jer Noble  <jer.noble@apple.com>

        Support a rational time class for use by media elements.
        https://bugs.webkit.org/show_bug.cgi?id=88787

        Add unit tests for the WTF::MediaTime class.

        Reviewed by Eric Carlson.

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MediaTime.cpp: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        (WTF::operator<<):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-07-27  Balazs Kelemen  <kbalazs@webkit.org>

        [NRWT] should have a way to restrict pixel tests for individual directories
        https://bugs.webkit.org/show_bug.cgi?id=91754

        Unreviewed attempt to fix the chaos I introduced.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processLine):

2012-07-27  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][EFL] Add an ACCELERATED_COMPOSITING implementation for Efl WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=91581

        Reviewed by Noam Rosenthal.

        Add a MiniBrowser's option for selecting evas engine.

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

2012-07-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123869.
        http://trac.webkit.org/changeset/123869
        https://bugs.webkit.org/show_bug.cgi?id=92501

        "it did not fix anything but made things even worst"
        (Requested by kbalazs on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::setDumpPixelsForAllTests):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/main.cpp:
        (main):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._should_fetch_expected_checksum):
        (SingleTestRunner._overwrite_baselines):
        (SingleTestRunner._compare_output):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker._update_test_input):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.supports_switching_pixel_tests_per_test):
        (Port):
        (Port._supports_switching_pixel_tests_per_test):
        (Port.should_run_as_pixel_test):
        (Port._should_run_as_pixel_test):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line):
        (Driver._command_from_driver_input):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.check_sys_deps):
        (QtPort):
        (QtPort._supports_switching_pixel_tests_per_test):
        (QtPort._should_run_as_pixel_test):
        (QtPort._default_pixel_test_directories):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.supports_switching_pixel_tests_per_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_pixel_test_directories):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-07-27  Balazs Kelemen  <kbalazs@webkit.org>

        [NRWT] should have a way to restrict pixel tests for individual directories
        https://bugs.webkit.org/show_bug.cgi?id=91754

        Reviewed by Zoltan Herczeg.

        Rollout r123729 because it made Qt debug bots crasy.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::setDumpPixels):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/main.cpp:
        (main):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._should_fetch_expected_checksum):
        (SingleTestRunner._overwrite_baselines):
        (SingleTestRunner._compare_output):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker._update_test_input):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.lookup_virtual_test_args):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line):
        (Driver._command_from_driver_input):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_missing_and_unexpected_results):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):

2012-07-27  Adam Barth  <abarth@webkit.org>

        webkit.review.bot should run clean-review-queue and clean-pending-commit periodically
        https://bugs.webkit.org/show_bug.cgi?id=92472

        Reviewed by Eric Seidel.

        We need to run these command periodically to keep cruft from
        accumulating in bugs.webkit.org. Rather than running them manually, we
        should just have a bot run them. This patch has the style-queue run the
        commands, which admittedly is a bit odd but it doesn't seem worthwhile
        to create another bot specifically for this purposes.

        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractReviewQueue):
        (StyleQueue.begin_work_queue):
        (StyleQueue):
        (StyleQueue.clean_bugzilla):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):

2012-07-27  Dominik Röttsches  <dominik.rottsches@intel.com>

        [Cairo] Add complex font drawing using HarfbuzzNG
        https://bugs.webkit.org/show_bug.cgi?id=91864

        Reviewed by Simon Hausmann and Martin Robinson.

        Bringing Harfbuzz support to EFL with this patch, so we need HarfBuzz in the pulled in jhbuild dependencies.

        * WebKitTestRunner/CMakeLists.txt: Adding additional header include directories.
        * efl/jhbuild.modules: Adding source for HarfBuzz release version 0.9.0.

2012-07-27  KwangYong Choi  <ky0.choi@samsung.com>

        [WK2][EFL][WTR] TestNetscapePlugin is required.
        https://bugs.webkit.org/show_bug.cgi?id=88756

        Reviewed by Simon Hausmann.

        libTestNetscapePlugin.so should be required for DRT/WTR/EFL.

        * CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugin/CMakeList.txt:

2012-07-27  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Memory leaks in EFL DRT
        https://bugs.webkit.org/show_bug.cgi?id=92347

        Reviewed by Simon Hausmann.

        Fix a memory leak in EFL's DRT code by adopting an allocation
        of JSString created with JSStringCreateWithUTF8CString.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWindowObjectCleared):

2012-07-27  Adam Barth  <abarth@webkit.org>

        Simplify ExpectedFailures
        https://bugs.webkit.org/show_bug.cgi?id=92216

        Reviewed by Eric Seidel.

        This patch simplifies the ExpectedFailures class we use to remember
        which tests are currently failing on the bots. When we wrote this code
        originally, we weren't entirely sure how it would work. Now that we
        understand it more clearly, we can write the code more clearly.

        * Scripts/webkitpy/tool/bot/expectedfailures.py:
        (_has_failures):
        (_is_trustworthy):
        (ExpectedFailures.__init__):
        (ExpectedFailures.failures_were_expected):
        (ExpectedFailures.unexpected_failures_observed):
        (ExpectedFailures.update):
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py:
        (ExpectedFailuresTest._assert_can_trust):
        (ExpectedFailuresTest.test_failures_were_expected):
        (ExpectedFailuresTest.test_unexpected_failures_observed):
        (ExpectedFailuresTest.test_unexpected_failures_observed_when_tree_is_hosed):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._test):
        (PatchAnalysisTask._build_and_test_without_patch):
        (PatchAnalysisTask._test_patch):

2012-07-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] REGRESSION(r119127): resetting window.internals settings between tests doesn't work properly
        https://bugs.webkit.org/show_bug.cgi?id=88064

        Reviewed by Zoltan Herczeg.

        Use resetInternalsObject() instead of injectInternalsObject().

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

2012-07-26  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove forwarding headers from MiniBrowser/Efl.
        https://bugs.webkit.org/show_bug.cgi?id=91627

        Reviewed by Kentaro Hara.

        * MiniBrowser/efl/CMakeLists.txt: Remove unnecessary forwarding headers.

2012-07-26  Yoshifumi Inoue  <yosin@chromium.org>

        [Forms] Introduce runtime feature flags for input type datetime, datetimelocal, month, time, week
        https://bugs.webkit.org/show_bug.cgi?id=92339

        Reviewed by Kent Tamura.

        This patch enables runtime features for input type datetime, datetime-local,
        month, time and week for Chromium DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Call enableInputType{DateTime,DateTimeLocal,Month,Time,Week}.

2012-07-26  Jeffrey Pfau  <jpfau@apple.com>

        Reloading substitute-data/alternate html string for unreachableURL will add an item to the back-forward-history for each reload
        https://bugs.webkit.org/show_bug.cgi?id=84041

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/BackForwardList.mm: Added.
        (-[BackForwardListTest webView:didFinishLoadForFrame:]):
        (-[BackForwardListTest webView:didFailProvisionalLoadWithError:forFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-07-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123799.
        http://trac.webkit.org/changeset/123799
        https://bugs.webkit.org/show_bug.cgi?id=92431

        broke the Apple Mac build (Requested by bweinstein on
        #webkit).

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin::acceptsInputEvents):
        (TestWebPlugin::handleInputEvent):

2012-07-26  Dirk Pranke  <dpranke@chromium.org>

        nrwt: pass --verbose twice on the bots to ensure getting the debug output for now
        https://bugs.webkit.org/show_bug.cgi?id=92172

        Reviewed by Tony Chang.

        Right now new-run-webkit-tests --verbose prints out too much
        information (it's like --verbose + debugging). I plan to fix
        this in bug 88702, and also clean up and simplify all of the
        --print options, but in preparation for these changes I need to
        pass --verbose twice to get the same level of output
        temporarily (for compatibility).

        * Scripts/run-webkit-tests:

2012-07-26  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Propagate gesture events to plugins.
        https://bugs.webkit.org/show_bug.cgi?id=92281

        Reviewed by Adam Barth.

        Update TestWebPlugin to receive events, and output logs for the events.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::handleInputEvent):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin::acceptsInputEvents):
        (TestWebPlugin):

2012-07-26  Balazs Kelemen  <kbalazs@webkit.org>

        [nrwt] get rid of --skip-pixel-test-if-no-baseline
        https://bugs.webkit.org/show_bug.cgi?id=92377

        Reviewed by Adam Barth.

        Remove the option and all code paths that handled it.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.should_run_as_pixel_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_repeat_each):

2012-07-26  Olivier Blin  <olivier.blin@softathome.com>

        Add FastMalloc statistics in window.internals
        https://bugs.webkit.org/show_bug.cgi?id=91274

        Reviewed by Ryosuke Niwa.

        * GNUmakefile.am:

2012-07-26  Olivier Blin  <olivier.blin@softathome.com>

        Add FastMalloc statistics in window.internals
        https://bugs.webkit.org/show_bug.cgi?id=91274

        Reviewed by Ryosuke Niwa.

        * GNUmakefile.am:

2012-07-20  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        buildbot: Remove the configuration of hfreyther*
        https://bugs.webkit.org/show_bug.cgi?id=91849

        Reviewed by Adam Roben.

        The machine running these configs was decommissioned and
        there is no replacement at this point. Remove them from the
        configuration.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove hfreyther* from
        the config. The Qt Linux SH4 and Qt Linux MIPS schedulers are orphaned, remove
        them too.

2012-07-26  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed speculative Mac buildfix after r123729 - 2nd attempt.

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

2012-07-26  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed speculative buildfix after r123729.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest): Fix sign errors.

2012-07-26  Zoltan Nyul  <zoltan.nyul@intel.com>

        [EFL] EFL port should use XDG paths
        https://bugs.webkit.org/show_bug.cgi?id=91719

        Reviewed by Kenneth Rohde Christiansen.

        The appcache/localstorage/webdatabase path should be set in the
        ewk_main.cpp instead of the DumpRenderTree, and the XDG_DATA_HOME and
        XDG_CACHE_HOME should be set to different directory for each processes
        for the layout-tests.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.setup_environ_for_server):
        * efl/jhbuild.modules:

2012-07-26  Balazs Kelemen  <kbalazs@webkit.org>

        [NRWT] should have a way to restrict pixel tests for individual directories
        https://bugs.webkit.org/show_bug.cgi?id=91754

        Reviewed by Dirk Pranke.

        Added --pixel-test-directories option to nrwt. It implies --pixel-tests.
        If the platform supports this option only tests from these directories will
        be executed as pixel tests. Furthermore, platforms can have a default set of
        pixel test directories. To support the feature the test harness have to be
        able to inform the driver whether to dump pixels for each tests. For this
        purpose I changed WTR and the Qt DRT to handle a --pixel-test argument from
        the standard output and made NRWT use this argument with these drivers.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::setDumpPixelsForAllTests):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/main.cpp:
        (main):
        Handle the --pixel-test argument.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._should_fetch_expected_checksum):
        (SingleTestRunner._overwrite_baselines):
        (SingleTestRunner._compare_output):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker._update_test_input):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.supports_switching_pixel_tests_per_test): Ports can override this to inform
        the harness that --pixel-test argument is supported. True for WTR, otherwise calls
        private version that can be overridden by the actual platform. Only true with WTR
        and Qt DRT currently. This supposed to exist only temporary until there are ports
        that doesn't support the feature in their DRT's.
        (Port):
        (Port._supports_switching_pixel_tests_per_test):
        (Port.should_run_as_pixel_test):
        (Port._should_run_as_pixel_test): Ports can override this to define their
        default set of pixel tests directories.
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line): Don't pass --pixel-tests if the platform supports per test
        --pixel-test.
        (Driver._command_from_driver_input): Pass --pixel-test if it is supported and pixel
        tests are enabled.
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.check_sys_deps):
        (QtPort):
        (QtPort._supports_switching_pixel_tests_per_test):
        (QtPort._should_run_as_pixel_test):
        (QtPort._default_pixel_test_directories): Only compositing will be our default pixel
        test directory for the time being.
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.supports_switching_pixel_tests_per_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        Handle the --pixel-test-directory option. It expect a directory below LayoutTests
        and can be specified multiple times. Added fixme's that we should improve how we
        handle these arguments.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_pixel_test_directories):
        Added an integration test for the feature.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):
        Handle the --pixel-test argument.

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Regression(r123604): webintents/web-intents-obj-constructor.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=92349

        Reviewed by Kentaro Hara.

        Fix crash occurring after r123604, which replaced strdup()
        usage with eina_stringshare_add(). Unfortunately, the DRT
        was not updated accordingly to use eina_stringshare_del()
        instead of free() on the values returned by Ewk_Intent
        getters and it was causing
        webintents/web-intents-obj-constructor.html to crash.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameIntentNew):

2012-07-26  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the chromium-win build.

        * DumpRenderTree/chromium/TestRunner/TestRunner.cpp:

2012-07-26  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: pageNumberForElementById() could be moved to Internals
        https://bugs.webkit.org/show_bug.cgi?id=92091

        Reviewed by Adam Barth.

        Move the pageNumberForElementById from LayoutTestCotroller to Internals and
        remove the old platform specific implementations as it exclusively tests WebCore functionality.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setPrinting):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-07-25  Adam Barth  <abarth@webkit.org>

        TestRunner.a should contain a TestRunner object
        https://bugs.webkit.org/show_bug.cgi?id=92313

        Reviewed by Kent Tamura.

        This patch adds a stub implementation of TestRunner, which is the new
        home for our implementation of window.testRunner. A future patch will
        migrate functions from LayoutTestController to TestRunner.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestRunner/TestRunner.cpp: Added.
        * DumpRenderTree/chromium/TestRunner/TestRunner.h: Added.

2012-07-25  Wei James  <james.wei@intel.com>

        [Chromium] Fix infinite loop issue for chromium android layout test
        https://bugs.webkit.org/show_bug.cgi?id=92197

        Reviewed by Adam Barth.

        The change brought in by r123530 will cause infinite loop when running
        Chromium Android Layout Test.
        Revert the change for this line only.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort._build_path):

2012-07-25  Adam Barth  <abarth@webkit.org>

        Jochen is our a newest reviewer!

        * Scripts/webkitpy/common/config/committers.py:

2012-07-25  Jochen Eisinger  <jochen@chromium.org>

        [chromium] don't use webkit_support methods directly from test runners but through the test delegate
        https://bugs.webkit.org/show_bug.cgi?id=92256

        Reviewed by Adam Barth.

        This will allow for the content_shell to provide its own implementation
        for setting the Gamepad data instead.

        * DumpRenderTree/chromium/TestRunner/GamepadController.cpp:
        (GamepadController::setDelegate):
        (GamepadController::reset):
        (GamepadController::connect):
        (GamepadController::disconnect):
        (GamepadController::setId):
        (GamepadController::setButtonCount):
        (GamepadController::setButtonData):
        (GamepadController::setAxisCount):
        (GamepadController::setAxisData):
        * DumpRenderTree/chromium/TestRunner/GamepadController.h:
        (GamepadController):
        * DumpRenderTree/chromium/TestRunner/TestDelegate.h:
        (WebKit):
        (TestDelegate):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::Internal):
        (TestInterfaces::Internal::~Internal):
        (TestInterfaces::Internal::setDelegate):
        (TestInterfaces::setDelegate):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::setGamepadData):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-07-25  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] LayoutTestController.sendWebIntentResponse() needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=92227

        Reviewed by Kenneth Rohde Christiansen.

        Implement LayoutTestController.sendWebIntentResponse() so
        that a test case can reply to a Web intent request and
        test this functionality.

        In order to support this functionality, we need to keep
        a pointer to the current intent request in
        InjectedBundlePage::didReceiveIntentForFrame() so that
        we can reuse it later in
        LayoutTestController::sendWebIntentResponse().

        The following tests need this functionality:
        - webintents/web-intents-failure.html
        - webintents/web-intents-reply.html

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveIntentForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        (WTR::InjectedBundlePage::currentIntentRequest):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::sendWebIntentResponse):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-07-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2][WTR] Alt, Shift and Ctrl keys are not handled by EventSenderProxy.
        https://bugs.webkit.org/show_bug.cgi?id=92241

        Reviewed by Kenneth Rohde Christiansen.

        Alt, Shift and Ctrl keys were not handled by EventSenderProxy.
        It caused failure of fast/events/keydown-leftright-keys.html test.

        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp: Added handling of Alt, Shift and Ctrl keys.
        (WTR::keyName):

2012-07-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Fix timeout issues when debugging WebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=92245

        Reviewed by Dirk Pranke.

        Fix timeout issues when debugging the WebProcess
        under valgrind or gdb.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.default_timeout_ms):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformInitialize):

2012-07-25  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] NRWT driver should not restart between reftests
        https://bugs.webkit.org/show_bug.cgi?id=92267

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver.start): Resets self._pixel_tests when the pixel_tests parameter changes.

2012-07-25  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update MediaStreamTrack to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=90180

        Reviewed by Adam Barth.

        Adding a Mock WebMediaStreamCenter to enable better LayoutTests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::createMediaStreamCenter):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp: Added.
        (WebKit):
        (WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
        (WebKit::MockWebMediaStreamCenter::queryMediaStreamSources):
        (WebKit::MockWebMediaStreamCenter::didEnableMediaStreamTrack):
        (WebKit::MockWebMediaStreamCenter::didDisableMediaStreamTrack):
        (WebKit::MockWebMediaStreamCenter::didStopLocalMediaStream):
        (WebKit::MockWebMediaStreamCenter::didCreateMediaStream):
        (WebKit::MockWebMediaStreamCenter::constructSDP):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp.
        (WebKit):
        (MockWebMediaStreamCenter):
        (WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):

2012-07-25  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] Rename baseline_search_path() to default_baseline_search_path()
        https://bugs.webkit.org/show_bug.cgi?id=92122

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_version_dir):
        (Port.baseline_search_path):
        (Port):
        (Port.default_baseline_search_path):
        (Port.expected_baselines):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_additional_platform_directory):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.default_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.default_baseline_search_path):

2012-07-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Use eina_stringshare_add instead of strdup.
        https://bugs.webkit.org/show_bug.cgi?id=92072

        Reviewed by Kentaro Hara.

        Eina of EFL libraries supports a string functionality that replaces strdup. So, EFL port needs
        to replace strdup with eina_stringshare_add function.

        DumpRenderTree also needs to be modified according to ewk APIs's parameter change.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (dumpFramesAsText):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameIntentNew):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onJavaScriptPrompt):

2012-07-25  Alexander Shalamov  <alexander.shalamov@intel.com>

        [WTR][EFL] Wheel events are not emitted
        https://bugs.webkit.org/show_bug.cgi?id=92094

        Reviewed by Csaba Osztrogonác.

        Wheel events are not emitted, therefore, layout tests that use mouseScrollBy method are failing.

        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::dispatchMouseScrollByEvent):
        (WTR::EventSenderProxy::mouseScrollBy):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::focus):

2012-07-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add ewk_main.{cpp,h} to EFL WK2
        https://bugs.webkit.org/show_bug.cgi?id=92101

        Reviewed by Kenneth Rohde Christiansen.

        Added a centralized place for general initialization in UI process for EFL WK2.

        * MiniBrowser/efl/main.c: Added using of newly added ewk_init() and ewk_shutdown() functions.
        (main):
        * WebKitTestRunner/efl/main.cpp: Ditto.
        (main):

2012-07-24  Benjamin Poulain  <bpoulain@apple.com> && Joseph Pecoraro  <pecoraro@apple.com>

        QualifiedName's HashSet should be big enough to hold at least all the static names
        https://bugs.webkit.org/show_bug.cgi?id=91891

        Reviewed by Darin Adler.

        Add a test for WTF::hashTableCapacityForSize.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/HashSet.cpp: Added.
        (InitialCapacityTestHashTraits):
        (TestWebKitAPI::testInitialCapacity):
        (TestWebKitAPI::generateTestCapacityUpToSize):
        (TestWebKitAPI::TEST):

2012-07-24  Adam Barth  <abarth@webkit.org>

        The EWS bots get flaky when we hit the failure limit
        https://bugs.webkit.org/show_bug.cgi?id=92212

        Reviewed by Eric Seidel.

        Previously we were missing some failure types, which means we didn't
        notice that the bots were hitting the failure limit.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        (LayoutTestResults.failing_test_results):
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        (LayoutTestResultsTest.test_results_from_string):
        (LayoutTestResultsTest.test_tests_matching_failure_types):

2012-07-24  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Unreviewed build fix.

        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp: Include unistd.h
        for usleep(3).

2012-07-24  Dirk Pranke  <dpranke@chromium.org>

        make test-webkitpy at least kinda work in parallel on win32
        https://bugs.webkit.org/show_bug.cgi?id=91700

        Reviewed by Adam Barth.

        This change makes the hoop-jumping we have to do to make running
        new-run-webkit-tests in parallel on win32 generic so that we can
        re-use it for test-webkitpy as well.

        * Scripts/new-run-webkit-tests:
        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/multiprocessing_bootstrap.py: Copied from Tools/Scripts/new-run-webkit-tests.
        (run):
        * Scripts/webkitpy/test/main.py:
        (main):
        (Tester._log_exception):

2012-07-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123499.
        http://trac.webkit.org/changeset/123499
        https://bugs.webkit.org/show_bug.cgi?id=92161

        Android fails to compile (Requested by zhenyao on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::createMediaStreamCenter):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h:
        (MockWebKitPlatformSupport):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp: Removed.
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h: Removed.

2012-07-24  Dirk Pranke  <dpranke@chromium.org>

        nrwt: never finds binaries in the 'out' dir on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=91890

        Reviewed by Tony Chang.

        Attempt to fix this bug yet again; it turns out that --root and
        --build-directory don't have the same meaning (--root should
        include the configuration, --build-directory should not).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._build_path):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._static_build_path):
        (ChromiumPort.default_results_directory):
        (ChromiumPort._build_path):
        (ChromiumPort):
        (ChromiumPort._build_path_with_configuration):
        (ChromiumPort._build_path_with_configuration.does):
        (ChromiumPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort._build_path):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._build_path_with_configuration):
        (ChromiumAndroidPort._path_to_driver):
        (ChromiumAndroidPort._path_to_forwarder):
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidPort._push_fonts):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._determine_driver_path_statically):
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        (ChromiumLinuxPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort._modules_to_search_for_symbols):
        (ChromiumMacPort._path_to_driver):
        (ChromiumMacPort._path_to_helper):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._path_to_driver):
        (ChromiumWinPort._path_to_helper):
        (ChromiumWinPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_build_path):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-07-24  Peter Beverloo  <peter@chromium.org>

        Android-chromium layout tests failing with GPU related crash
        https://bugs.webkit.org/show_bug.cgi?id=92126

        Reviewed by Adam Barth.

        Remove support for the "--enable-hardware-gpu" flag from run_webkit_tests,
        as it's not being used by any port anymore, and neither is being passed
        on to the test runner. Instead, append the flag directly to DRT for the
        Chromium Android port, which does rely on this functionality.

        The ChromiumAndroidUnitTest tests didn't catch this as the property was
        set to True, but it's unable to detect whether they'll actually be used.
        No occurrances of "--enable-hardware-gpu" exist in either Tools/Scripts/
        or Tools/BuildSlaveSupport/, so nothing upstream seems to rely on the flag.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest.test_attributes):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-07-24  Alexander Shalamov  <alexander.shalamov@intel.com>

        [WTR][EFL] Multiple mouse clicks are not emitted in EventSenderProxyEfl
        https://bugs.webkit.org/show_bug.cgi?id=92107

        Reviewed by Kenneth Rohde Christiansen.

        Fixes mouse click events in EventSenderProxyEfl.

        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::dispatchMouseDownEvent):
        (WTR::EventSenderProxy::dispatchEvent):

2012-07-24  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update MediaStreamTrack to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=90180

        Reviewed by Adam Barth.

        Adding a Mock WebMediaStreamCenter to enable better LayoutTests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::createMediaStreamCenter):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp: Added.
        (WebKit):
        (WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):
        (WebKit::MockWebMediaStreamCenter::queryMediaStreamSources):
        (WebKit::MockWebMediaStreamCenter::didEnableMediaStreamTrack):
        (WebKit::MockWebMediaStreamCenter::didDisableMediaStreamTrack):
        (WebKit::MockWebMediaStreamCenter::didStopLocalMediaStream):
        (WebKit::MockWebMediaStreamCenter::didCreateMediaStream):
        (WebKit::MockWebMediaStreamCenter::constructSDP):
        * DumpRenderTree/chromium/MockWebMediaStreamCenter.h: Copied from Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp.
        (WebKit):
        (MockWebMediaStreamCenter):
        (WebKit::MockWebMediaStreamCenter::MockWebMediaStreamCenter):

2012-07-23  Ryosuke Niwa  <rniwa@webkit.org>

        Fix regressions in replay performance tests
        https://bugs.webkit.org/show_bug.cgi?id=92052

        Reviewed by Dirk Pranke.

        Fix regression that accumulated over time to make replay tests work again.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest): Use the main document URL in the request since the main frame's
        URL hadn't been updated yet When requesting a new URL on the main frame.
        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayServer.wait_until_ready): Waiting for 6 seconds (3 tries) seems enough.
        (ReplayPerfTest.prepare): Pass self._archive_path to run_signle as that is the current contract.
        (ReplayPerfTest.run_single): Use the archive path to generate -expected.png path.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestReplayPerfTest.test_run_single):
        (TestReplayPerfTest.test_prepare):
        (TestReplayPerfTest.test_prepare_calls_run_single.run_single):
        (TestReplayPerfTest):

2012-07-24  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] MSVC: unresolved external symbol __DllMainCRTStartup@12
        https://bugs.webkit.org/show_bug.cgi?id=91229

        Reviewed by Jocelyn Turcotte.

        In order to successfully link a DLL on Windows we need to have at least
        one object file (or compilation unit). The forward export header files were
        supposed to be that, but unfortunately the rule in win32/default_post.prf for
        creating the header files had some bugs, among others that it did an exists()
        check on the depending static library. At the time qmake is ran those libraries
        do not exist yet and therefore the corresponding extra compiler rules were never
        created, resulting in empty OBJECTS/SOURCES.

        Even without such an exists() check, qmake extra compilers require the files
        referred to in the .input variable to exist at qmake time. In this case the input
        files were the static libraries, which do not exist yet.

        This patch solves this by using a qmake extra target instead of extra
        compiler, which does not have this limitation. The target is referenced
        through the extension of GENERATED_SOURCES.

        The patch also adds a d/_debug suffix for debug builds, do allow for separate
        symbol exports if necessary.

        * Scripts/generate-win32-export-forwards: Support multiple input files, i.e.
        consider the last argument to be the output file and everything else input.
        * qmake/mkspecs/features/win32/default_post.prf:

2012-07-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add quirks for running the web process in a profiler shell, like valgrind
        https://bugs.webkit.org/show_bug.cgi?id=87672

        Reviewed by Jocelyn Turcotte.

        Add --no-timeout-at-all command line switch to not time out no matter how
        long the web process does it's job. --no-timeout is not enough for profiling
        purposes because it only affects the timeout when we are waiting for the end
        of the test. We use another timeout to control how much we wait for the web
        process to initialize before and reset after the test and it could also easily
        expire when running under valgrind. We should keep the behavior of --no-timeout
        to not disable this timout check because --no-timeout is used by performace tests
        and those should not wait for the web process to initialize and reset more than
        normal tests.

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

2012-07-24  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix a class/struct mismatch error in TestDelegate.h (showing up on clang)
        https://bugs.webkit.org/show_bug.cgi?id=92097

        Unreviewed build fix.

        WebContextMenuData is declared as a struct in Source/WebKit/chromium/public/WebContextMenuData.h,
        but TestDelegate.h forward declares it as a class.

        * DumpRenderTree/chromium/TestRunner/TestDelegate.h:
        (WebKit):

2012-07-23  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Fix compilation against namespaced Qt

        Reviewed by Simon Hausmann.

        * QtTestBrowser/launcherwindow.h:
        * WebKitTestRunner/PlatformWebView.h:

2012-07-24  Peter Beverloo  <peter@chromium.org>

        Update a few Chromium Android contributors in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=92090

        Reviewed by Kent Tamura.

        Add Sami Kyostila, who has been doing significant work on Chromium's
        compositor. Add IRC nicknames for John Mellor and Tien-Ren Chen, and
        remove John Grabowski who changed projects, and add my webkit.org alias.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-24  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Enable touch slider when touch events are enabled
        https://bugs.webkit.org/show_bug.cgi?id=91013

        Reviewed by Kenneth Rohde Christiansen.

        TOUCH_SLIDER guards are used in WebCore, so we should really
        be setting the corresponding ENABLE define in features.prf.

        * qmake/mkspecs/features/features.prf:

2012-07-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] EWebLauncher should not require config.h in the style check
        https://bugs.webkit.org/show_bug.cgi?id=92070

        Reviewed by Kentaro Hara.

        * Scripts/webkitpy/style/checker.py:
        Remove the include rules from the style-check for EWebLauncher because
        EWebLauncher is simple EFL application.

2012-07-24  Jochen Eisinger  <jochen@chromium.or>

        [Chromium] EventSender shouldn't know about TestShell
        https://bugs.webkit.org/show_bug.cgi?id=91449

        Reviewed by Adam Barth.

        Original patch by Adam Barth.

        This patch removes the dependency from EventSender to TestShell.  Most
        of EventSender works directly with a WebView, but there are a handful
        of references to WebViewHost.  We don't want to re-use WebViewHost in
        ContentShell because we want to use the multi-process embedding
        environment for WebViews.

        To avoid the dependency on WebViewHost, this patch introduces
        TestDelegate, which is an abstract base class for WebViewHost.  In
        ContentShell, we'll need another object to implement these functions.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::keyDown):
        (makeMenuItemStringsFor):
        (EventSender::contextClick):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):
        (EventSender::setDelegate):
        (EventSender::setWebView):
        (EventSender::webview):
        * DumpRenderTree/chromium/TestRunner/TestDelegate.h: Added.
        (WebKit):
        (TestDelegate):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::fillSpellingSuggestionList):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-07-24  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Make WebIntents and WebIntentsTag a build option for the build-webkit script
        https://bugs.webkit.org/show_bug.cgi?id=91841

        Reviewed by Philippe Normand.

        And it will also be disabled when building with --minimal.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-23  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r123360.
        http://trac.webkit.org/changeset/123360
        https://bugs.webkit.org/show_bug.cgi?id=91890

        broke the chromium bots

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._static_build_path):
        (ChromiumPort.default_results_directory):
        (ChromiumPort._build_path):
        (ChromiumPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort._build_path):
        (ChromiumAndroidPort._path_to_driver):
        (ChromiumAndroidPort._path_to_forwarder):
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidPort._push_fonts):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._determine_driver_path_statically):
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        (ChromiumLinuxPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort._modules_to_search_for_symbols):
        (ChromiumMacPort._path_to_driver):
        (ChromiumMacPort._path_to_helper):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._path_to_driver):
        (ChromiumWinPort._path_to_helper):
        (ChromiumWinPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_build_path):

2012-07-23  Adam Barth  <abarth@webkit.org>

        [Chromium] TestInterfaces should be responsible for owning and binding AccessibilityController and TextInputController
        https://bugs.webkit.org/show_bug.cgi?id=91459

        Reviewed by Ryosuke Niwa.

        Rather than having TestShell own and bind each of these JavaScript APIs
        individually, TestShell should delegate that work to TestInterfaces.
        This patch moves AccessibilityController and TextInputController to be
        the responsibility of TestInterfaces.

        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::TestInterfaces):
        (TestInterfaces::~TestInterfaces):
        (TestInterfaces::setWebView):
        (TestInterfaces::bindTo):
        (TestInterfaces::resetAll):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (WebKit):
        (TestInterfaces):
        (TestInterfaces::accessibilityController):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::accessibilityController):
        (TestShell):

2012-07-23  Balazs Kelemen  <kbalazs@webkit.org>

        nrwt swallows early exceptions
        https://bugs.webkit.org/show_bug.cgi?id=91884

        Reviewed by Dirk Pranke.

        Put everything in a try block so we won't miss any error.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):

2012-07-23  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] WebKitTestRunner needs to print information about Web intents
        https://bugs.webkit.org/show_bug.cgi?id=90873

        Reviewed by Anders Carlsson.

        Print out information about new intents requests and intent
        services registrations in WebKitTestRunner. This is expected
        by tests under webintents/*.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didReceiveIntentForFrame):
        (WTR):
        (WTR::InjectedBundlePage::registerIntentServiceForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):

2012-07-23  Dirk Pranke  <dpranke@chromium.org>

        nrwt: never finds binaries in the 'out' dir on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=91890

        Reviewed by Tony Chang.

        We were figuring out which directory look in for binaries by
        testing for the base directory (the directory above
        Debug/Release). In chromium-win's case, we look in src/build,
        which always exists because there are checked-in files in it,
        which means we'd always pick that directory over src/out. All of
        the other ports' build_path() implementation was including
        Debug/Release. If we matched that, we wouldn't have a problem,
        so this change fixes that and updates all of the callers of the
        chromium ports' implementation to not pass configuration as part
        of the path to look up; we still need to pass configuration in
        some cases (to test if the build is out of date between debug
        and release) so the implementation gets slightly more
        complicated.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._static_build_path):
        (ChromiumPort.default_results_directory):
        (ChromiumPort._build_path):
        (ChromiumPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort._build_path):
        (ChromiumAndroidPort._path_to_driver):
        (ChromiumAndroidPort._path_to_forwarder):
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidPort._push_fonts):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._determine_driver_path_statically):
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        (ChromiumLinuxPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort._modules_to_search_for_symbols):
        (ChromiumMacPort._path_to_driver):
        (ChromiumMacPort._path_to_helper):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._path_to_driver):
        (ChromiumWinPort._path_to_helper):
        (ChromiumWinPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_build_path):

2012-07-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123339.
        http://trac.webkit.org/changeset/123339
        https://bugs.webkit.org/show_bug.cgi?id=92006

        massive media tests failure (Requested by philn on #webkit).

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        * gtk/jhbuild.modules:

2012-07-23  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Clean up the MockWebKitPlatformSupport object at shutdown
        https://bugs.webkit.org/show_bug.cgi?id=91857

        Reviewed by Adam Barth.

        Made a few changes so that the destructor could be called at shutdown.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (WebKitSupportTestEnvironment::WebKitSupportTestEnvironment):
        (WebKitSupportTestEnvironment):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp:
        (MockWebKitPlatformSupport::create):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h:
        (MockWebKitPlatformSupport):
        (MockWebKitPlatformSupport::~MockWebKitPlatformSupport):

2012-07-23  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] Switch to GStreamer 0.11 build
        https://bugs.webkit.org/show_bug.cgi?id=91727

        Reviewed by Gustavo Noronha Silva.

        Switch build-webkit --gtk to GStreamer 0.11 support and build the
        necessary GStreamer git modules from JHBuild.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Build WebKit with GStreamer 0.11 support.
        * gtk/jhbuild.modules: GStreamer build support.

2012-07-23  Christophe Dumez  <christophe.dumez@intel.com>

        WebKit2 needs layoutTestController.setAlwaysAcceptCookies
        https://bugs.webkit.org/show_bug.cgi?id=42778

        Reviewed by Kenneth Rohde Christiansen.

        Add support for layoutTestController.setAlwaysAcceptCookies()
        since it is required by some tests.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAlwaysAcceptCookies):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-07-23  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_METER_TAG and ENABLE_PROGRESS_TAG to ENABLE_METER_ELEMENT and ENABLE_PROGRESS_ELEMENT respectively
        https://bugs.webkit.org/show_bug.cgi?id=91941

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

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

2012-07-22  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_DETAILS to ENABLE_DETAILS_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=91928

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

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

2012-07-20  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_DATALIST to ENABLE_DATALIST_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=91846

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

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

2012-07-20  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Store test pipes in /data/local/tmp
        https://bugs.webkit.org/show_bug.cgi?id=91909

        In the previous change (bug 91873, r123258) we placed the pipes in /sdcard/native_tests.
        However after tests we found some devices don't allow the app to create pipes there.
        So /data/local/tmp is a better place for the pipes.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:

2012-07-20  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chomium-Android] Place DRT input/output pipes where both app and unrooted shell can read/write
        https://bugs.webkit.org/show_bug.cgi?id=91873

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:

2012-07-20  Han Shen  <shenhan@google.com>

        [Chromium] Compilation fails under gcc 4.7
        https://bugs.webkit.org/show_bug.cgi?id=90227

        Reviewed by Tony Chang.

        Disable warnings about c++0x compatibility in gcc newer than 4.6.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-07-20  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION: run-perf-tests --pause-before-testing is broken
        https://bugs.webkit.org/show_bug.cgi?id=91789

        Reviewed by Ryosuke Niwa.

        Turns out start() wasn't actually starting things :(. Fixed, and
        added tests.

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_read_prompt):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        (Driver._start):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_read_block):
        (DriverTest.test_read_binary_block):
        (DriverTest.test_read_base64_block):
        (DriverTest.test_stop_cleans_up_properly):
        (DriverTest.test_two_starts_cleans_up_properly):
        (DriverTest.test_start_actually_starts):
        (MockServerProcess.__init__):
        (MockServerProcess.start):

2012-07-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Don't include WebCore headers in TestInterfaces so it's safe to include from outside of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=91847

        Reviewed by Adam Barth.

        This allows for including the TestIntefaces.h from content shell
        without introducing a dependency to WebCore/wtf

        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::Internal):
        (TestInterfaces::Internal::Internal):
        (TestInterfaces::Internal::~Internal):
        (TestInterfaces::Internal::bindTo):
        (TestInterfaces::Internal::resetAll):
        (TestInterfaces::TestInterfaces):
        (TestInterfaces::~TestInterfaces):
        (TestInterfaces::bindTo):
        (TestInterfaces::resetAll):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (TestInterfaces):

2012-07-20  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Make WTR use the same color palette as DRT
        https://bugs.webkit.org/show_bug.cgi?id=91870

        Reviewed by Noam Rosenthal.

        Make sure that WebKitTestRunner and DumpRenderTree use the same palette: the
        standard from QWindowsStyle.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts): Moved code to platformInitialize since setting style is not
        exactly font related.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize): Force the usage of the style's
        palette.  Because at this point QApplication was already instantiated, the
        default palette was already initialized to be the system one, so we need to
        explicitly set the palette to be the standard from style. This is not needed in
        DRT because there we set the style before instantiating QApplication.

2012-07-20  Tony Chang  <tony@chromium.org>

        Baseline align text in the flakiness dashboard toolbar
        https://bugs.webkit.org/show_bug.cgi?id=91784

        Reviewed by Ojan Vafai.

        Baseline align the flex items.

        * TestResultServer/static-dashboards/flakiness_dashboard.css:
        (.forms): Add box-align: baseline
        (.forms > *): Use block display to force flex items rather than box.
        (#tests-form): Add box-align: baseline
        (#tests-form > *): Use block display to force flex items rather than box.

2012-07-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123220.
        http://trac.webkit.org/changeset/123220
        https://bugs.webkit.org/show_bug.cgi?id=91880

        broke Debug build (Requested by philn on #webkit).

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        * gtk/jhbuild.modules:

2012-07-20  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] Switch to GStreamer 0.11 build
        https://bugs.webkit.org/show_bug.cgi?id=91727

        Reviewed by Gustavo Noronha Silva.

        Switch build-webkit --gtk to GStreamer 0.11 support and build the
        necessary GStreamer git modules from JHBuild.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Build WebKit with GStreamer 0.11 support.
        * gtk/jhbuild.modules: GStreamer build support.

2012-07-20  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Proxy configuration should honor the no_proxy environment variable
        https://bugs.webkit.org/show_bug.cgi?id=91747

        Reviewed by Kenneth Rohde Christiansen.

        Add ProxyResolverSoup to the list of classes that contain GObjects
        in style checker script so that it does not complain about naming
        convention issues that are mandated by GObject.

        * Scripts/webkitpy/style/checker.py:

2012-07-20  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Add configure tests for Xrender and GLX.
        https://bugs.webkit.org/show_bug.cgi?id=91845

        GraphicsSurface on linux requires Xcomposite, Xrender
        and GLX. If any of these requirements is not met,
        we should disable GraphicsSurface.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/config.tests/glx/glx.cpp: Added.
        (main):
        * qmake/config.tests/glx/glx.pro: Added.
        * qmake/config.tests/libXrender/libXrender.cpp: Added.
        (main):
        * qmake/config.tests/libXrender/libXrender.pro: Added.
        * qmake/configure.pri:
        * qmake/mkspecs/features/features.prf:

2012-07-20  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2][WTR] Implement EventSenderProxy
        https://bugs.webkit.org/show_bug.cgi?id=91731

        Reviewed by Kentaro Hara.

        This is an initial EFL port implementation of EventSenderProxy.

        * WebKitTestRunner/EventSenderProxy.h:
        (WTR):
        (EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp: Added.
        (WTR):
        (WTREvent):
        (WTR::WTREvent::WTREvent):
        (WTR::KeyEventInfo::KeyEventInfo):
        (KeyEventInfo):
        (WTR::evasMouseButton):
        (WTR::setEvasModifiers):
        (WTR::dispatchMouseDownEvent):
        (WTR::dispatchMouseUpEvent):
        (WTR::dispatchMouseMoveEvent):
        (WTR::dispatchMouseScrollByEvent):
        (WTR::keyPadName):
        (WTR::keyName):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::dispatchEvent):
        (WTR::EventSenderProxy::replaySavedEvents):
        (WTR::EventSenderProxy::sendOrQueueEvent):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::touchCancel):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::cancelTouchPoint):
        (WTR::EventSenderProxy::setTouchPointRadius):

2012-07-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r123085.
        http://trac.webkit.org/changeset/123085
        https://bugs.webkit.org/show_bug.cgi?id=91719

        r123085 causes crashes on EFL layout test bot.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/InjectedBundle/efl/LayoutTestControllerEfl.cpp:
        (WTR::LayoutTestController::platformInitialize):

2012-07-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WTR] Add *explicit* keyword to constructor which has a parameter
        https://bugs.webkit.org/show_bug.cgi?id=91745

        Reviewed by Adam Barth.

        Add *explicit* keyword to contructor which has a parameter in order to avoid implicit type conversion.

        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/TestInvocation.h:
        (TestInvocation):

2012-07-19  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Add methods to get/set a custom text encoding
        https://bugs.webkit.org/show_bug.cgi?id=90604

        Reviewed by Kenneth Rohde Christiansen.

        Added support for setting custom character encoding in MiniBrowser.
        Use 'F3' to set the custom character encoding.

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

2012-07-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: executive_unittest still failing when run in parallel
        https://bugs.webkit.org/show_bug.cgi?id=91795

        Reviewed by Adam Barth.

        It turns out that test_kill_process and test_kill_all are both
        launching the same process, and so if they're run at the same
        time, test_kill_all interferes w/ test_kill_process.

        Merging the two tests solves the issue :).

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_kill_process):
        (ExecutiveTest._assert_windows_image_name):
        (ExecutiveTest):
        (ExecutiveTest.test_windows_image_name):

2012-07-19  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Add a callback to handle delete request in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=91483

        Reviewed by Dirk Pranke.

        Add a callback to handle delete request and quit the main loop when
        window is asked to be deleted so that all the resources allocated
        for the window will be freed properly.

        * MiniBrowser/efl/main.c:
        (closeWindow):
        (browserCreate):

2012-07-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS shaders in Qt (software mode)
        https://bugs.webkit.org/show_bug.cgi?id=85140

        Reviewed by Simon Hausmann.

        Enable CSS_SHADERS when WEBGL and CSS_FILTERS are enabled.

        * qmake/mkspecs/features/features.prf:

2012-07-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS shaders in Qt (software mode)
        https://bugs.webkit.org/show_bug.cgi?id=85140

        Reviewed by Simon Hausmann.

        Enable CSS_SHADERS when WEBGL and CSS_FILTERS are enabled.

        * qmake/mkspecs/features/features.prf:

2012-07-19  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: fix executive_unittest nits, including a missing 'errno' import
        https://bugs.webkit.org/show_bug.cgi?id=91770

        Reviewed by Adam Barth.

        The missing errno import is causing a flaky failure when run in
        parallel on the bots.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.assert_interpreter_for_content):

2012-07-19  Oliver Hunt  <oliver@apple.com>

        Make style bot handle underscores in names more reasonably
        https://bugs.webkit.org/show_bug.cgi?id=91777

        Reviewed by Gavin Barraclough.

        This patch adds a naming/readability/underscores category for style errors.
        That allows us to use underscores in those portions of JSC (and potentially
        gtk?) without turning off all naming checks for the effected directories.
        We also filter out the DFG_OPERATION warning, and a few other minor changes
        to make the style bot less noisy when running over JSC at least.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2012-07-19  Dirk Pranke  <dpranke@chromium.org>

        config_standalone.py is crashing on apple win's cygwin port
        https://bugs.webkit.org/show_bug.cgi?id=91682

        Reviewed by Adam Roben.

        Work around a weird interaction of ctypes and cygwin that
        is causing unit tests to crash for me locally.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._win32_check_running_pid):

2012-07-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] WebKit test runner ignores all system environment variables
        https://bugs.webkit.org/show_bug.cgi?id=90284

        Reviewed by Dirk Pranke.

        Added support in unit test framework to pass a custom environment
        variable to the tests by using the --additional-env-var parameter.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.setup_environ_for_server): Adding environment variables
        that come through the additional_env_var option.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_additional_env_var): Added unit test for the
        additional_env_var option
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Added the --additional-env-var parameter.

2012-07-19  Joshua Bell  <jsbell@chromium.org>

        Roll out r121610 and r122487 which may have been causing flaky crashes
        https://bugs.webkit.org/show_bug.cgi?id=91637

        Reviewed by Kentaro Hara.

        Flaky crashes started in random tests following r121610. It's not clear
        that r121610 is to blame, but we'd like to prove or disprove it.
        If this doesn't resolve the crashes, this patch should be rolled out.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest):
        * DumpRenderTree/TestNetscapePlugIn/Tests/LeakWindowScriptableObject.cpp: Removed.

2012-07-19  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt][WK2] Map the elementRect exposed in QML to the view for popup menu
        https://bugs.webkit.org/show_bug.cgi?id=91645

        Reviewed by Simon Hausmann.

        Also improved the logic slightly for edge cases.

        * MiniBrowser/qt/qml/ItemSelector.qml:

2012-07-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Bump libsoup dependency to v2.39.4.1 to fix cookie issues
        https://bugs.webkit.org/show_bug.cgi?id=91741

        Reviewed by Kenneth Rohde Christiansen.

        Bump libsoup dependency in jhbuild to v2.39.4.1 to fix issues
        with cookies in non-suffixed/private domains [GNOME #679230].

        * efl/jhbuild.modules:

2012-07-19  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove support for Qt versions before 4.8.0
        https://bugs.webkit.org/show_bug.cgi?id=91730

        Reviewed by Kenneth Rohde Christiansen.

        Remove Qt version check #ifdefs for Qt versions before 4.8.0.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setAlwaysBlockCookies):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):

2012-07-19  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Enable MHTML support by default at build time
        https://bugs.webkit.org/show_bug.cgi?id=89987

        Reviewed by Carlos Garcia Campos.

        Enable MHTML support by default for GTK in build-webkit.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-19  Zoltan Nyul  <zoltan.nyul@intel.com>

        [EFL][WK2] Using different cache directory for each WTR process
        https://bugs.webkit.org/show_bug.cgi?id=91719

        Reviewed by Kenneth Rohde Christiansen.

        The testrunner script may be running multiple processes in
        parallel, and it makes appcache tests fail if they are using the same
        directory. I modified the EFL's LayoutTestController to use the
        DUMPRENDERTREE_TEMP for application cache directory because it's
        different for each process.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/InjectedBundle/efl/LayoutTestControllerEfl.cpp:
        (WTR::LayoutTestController::platformInitialize):

2012-07-19  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Complete implementation of AccessibilityController in WKTR for GTK
        https://bugs.webkit.org/show_bug.cgi?id=89224

        Reviewed by Chris Fleizach.

        Implement logAccessibilityEvents() and resetToConsistentState(),
        so we can ask WKTR from the layout tests for logging all the
        accessibility related events into the result.

        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::AccessibilityController):
        (WTR):
        (WTR::AccessibilityController::logAccessibilityEvents):
        (WTR::AccessibilityController::resetToConsistentState):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (AccessibilityController):
        * WebKitTestRunner/InjectedBundle/gtk/AccessibilityControllerGtk.cpp: Added.
        (WTR):
        (WTR::printAccessibilityEvent):
        (WTR::axObjectEventListener):
        (WTR::AccessibilityController::logAccessibilityEvents):
        (WTR::AccessibilityController::resetToConsistentState):

        Ensure we reset the accessibility controller to a consistent
        whenever a test has finished running.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):

2012-07-19  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL][Wk2] Add a bot that runs WTR / WebKit2 tests
        https://bugs.webkit.org/show_bug.cgi?id=90788

        Reviewed by Kentaro Hara.

        Adding EFL 64bit WK2 BuildAndTest bot. At this point, we cannot transfer
        the build product from one bot to the other due to link path issues with jhbuild,
        so we do a full build and test cycle for WebKit2 on this bot.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Adding the new slave.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Adding a new factory for building and testing WebKit2.
        (BuildAndTestWebKit2Factory):

2012-07-18  Mihnea Ovidenie  <mihnea@adobe.com>

        Unreviewed. Adding Andrei Bucur, Mihai Balan and Raul Hudea to the contributors list.
        They are Adobe contributors working on CSSRegions.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [CMake][EFL] Should try to find the same libsoup version pulled by jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=91626

        Reviewed by Kenneth Rohde Christiansen.

        Update jhbuild to pull libsoup 2.39.3 tarball from Gnome FTP instead
        of fetching a tag from Gnome GIT. We need to do this to map the version
        of libsoup that is required by our CMake config.

        * efl/jhbuild.modules:

2012-07-18  MORITA Hajime  <morrita@google.com>

        Add window resize benchmark
        https://bugs.webkit.org/show_bug.cgi?id=91070

        Reviewed by Ryosuke Niwa.

        Added some more output filters to take care of html5.html output.

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

2012-07-18  Dirk Pranke  <dpranke@chromium.org>

        nrwt: merge WebKitDriver into Driver
        https://bugs.webkit.org/show_bug.cgi?id=91696

        Reviewed by Adam Barth.

        As part of merging WebKitPort into Port, we also should merge
        WebKitDriver into Driver, since all of the non-test Drivers now
        inherit from WebKitDriver.

        There are no functional changes in this patch, and all the changes should
        be covered by the existing tests.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._driver_class):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._check_file_exists):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._drt_cmd_line):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_read_prompt):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver):
        (Driver.__init__):
        (Driver.__del__):
        (Driver.run_test):
        (Driver.has_crashed):
        (Driver.start):
        (Driver._start):
        (Driver.stop):
        (Driver.cmd_line):
        (Driver._check_for_driver_crash):
        (Driver._command_from_driver_input):
        (Driver._read_first_block):
        (Driver._read_optional_image_block):
        (Driver._read_header):
        (Driver._process_stdout_line):
        (Driver._strip_eof):
        (Driver._read_block):
        (ContentBlock):
        (ContentBlock.__init__):
        (ContentBlock.decode_content):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.make_port):
        (DriverTest._assert_wrapper):
        (DriverTest.test_read_block):
        (DriverTest):
        (DriverTest.test_read_binary_block):
        (DriverTest.test_read_base64_block):
        (DriverTest.test_no_timeout):
        (DriverTest.test_check_for_driver_crash):
        (DriverTest.test_check_for_driver_crash.FakeServerProcess):
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.__init__):
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.pid):
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.name):
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.has_crashed):
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.stop):
        (DriverTest.test_check_for_driver_crash.assert_crash):
        (DriverTest.test_creating_a_port_does_not_write_to_the_filesystem):
        (DriverTest.test_stop_cleans_up_properly):
        (DriverTest.test_two_starts_cleans_up_properly):
        (MockServerProcess):
        (MockServerProcess.__init__):
        (MockServerProcess.has_crashed):
        (MockServerProcess.read_stdout_line):
        (MockServerProcess.read_stdout):
        (MockServerProcess.read_either_stdout_or_stderr_line):
        (MockServerProcess.start):
        (MockServerProcess.stop):
        (MockServerProcess.kill):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._read_image_diff):
        (WebKitPort.skipped_layout_tests):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_path_to_apache_config_file):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver):
        (XvfbDriver.stop):

2012-07-18  Dirk Pranke  <dpranke@chromium.org>

        webkitpy.common.system.executive_unittest.ExecutiveTest.test_kill_process is flaky
        https://bugs.webkit.org/show_bug.cgi?id=91698

        Unreviewed, build fix.

        This is a workaround for the test failing (apparently mostly?)
        when run in parallel with other tests. The underlying bug still
        needs to be diagnosed as we shouldn't be getting ECHILD from
        process.wait().

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_kill_process):

2012-07-18  Dirk Pranke  <dpranke@chromium.org>

        Disable running python unit tests in parallel on win32 for now.
        https://bugs.webkit.org/show_bug.cgi?id=91697

        Unreviewed, build fix.

        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):

2012-07-18  Dave Tu  <dtu@chromium.org>

        [chromium] Add gl_tests to flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=91680

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/builders.js:
        (loadBuildersList):
        * TestResultServer/static-dashboards/dashboard_base.js:
        (currentBuilderGroupCategory):

2012-07-18  Dirk Pranke  <dpranke@chromium.org>

        fix python unit tests failing under cygwin
        https://bugs.webkit.org/show_bug.cgi?id=91678

        Reviewed by Adam Barth.

        Fix a case where executive.kill_process was failing under cygwin
        (apple win port) in an unexpected way.
        
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_process):

2012-07-18  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: run tests in parallel by default
        https://bugs.webkit.org/show_bug.cgi?id=91422

        Reviewed by Adam Barth.

        We use multiprocessing.cpu_count() for the default number of
        jobs to run; memory overhead should be very low, so this should
        be fine.

        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):

2012-07-18  Ryosuke Niwa  <rniwa@webkit.org>

        Add Pravin D to the list of contributors.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-18  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] feature detection in orwt/nrwt does not work with force_static_libs_as_shared
        https://bugs.webkit.org/show_bug.cgi?id=91514

        Reviewed by Dirk Pranke.

        Analyzing libQtWebKit.so is not enough in the case of force_static_libs_as_shared.
        We need to analyze all the shared library or at least the WebCore one.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName):
        In orwt it is hard coded to search for symbols in the WebCore library.
        While in theory it is possible that symbols for a given feature are not
        located in that, it doesn't happen in practice, so returning the path of
        the WebCore library for a force_static_libs_as_shared build is enough to
        fix the bug and it doesn't require a bigger refactoring. For a default
        build we still return the path of the QtWebKit lib.
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._modules_to_search_for_symbols):
        Enumerate all dynamic libraries, not just the QtWebKit one.

2012-07-18  Tony Chang  <tony@chromium.org>

        [chromium] Unreviewed, more compile fixes on Chromium Win.

        * DumpRenderTree/chromium/TestShellWin.cpp:
        (TestShell::waitTestFinished):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add central error management to EFL port
        https://bugs.webkit.org/show_bug.cgi?id=91598

        Reviewed by Kenneth Rohde Christiansen.

        Map WebKitNetworkError to NSURLErrorDomain when
        printing in DumpRenderTree so that the output
        matches the expected one.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (descriptionSuitableForTestResult):

2012-07-18  Dirk Pranke  <dpranke@chromium.org>

        nrwt: start merging port/webkit.py into port/base.py
        https://bugs.webkit.org/show_bug.cgi?id=91559

        Reviewed by Ojan Vafai.

        Since all the non-test port implementations now derive from
        WebKitPort, there's no real point in keeping WebKitPort distinct
        from Port. This patch starts merging the two by moving nearly
        all of the webkit implementations of routines with no default
        behavior into base.py. The few that didn't move rely on
        additional infrastructure that should be refactored differently
        (like the image diffing, which should probably be its own
        class) and deserve their own patches.

        This patch should just be moving code around, and require no
        additional tests; in fact, we can delete the tests that were
        asserting virtual methods in the base class.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_search_path):
        (Port.check_build):
        (Port):
        (Port._check_driver):
        (Port._check_port_build):
        (Port.check_image_diff):
        (Port.driver_name):
        (Port.default_results_directory):
        (Port.to.setup_environ_for_server):
        (Port._path_to_apache):
        (Port._is_redhat_based):
        (Port._is_debian_based):
        (Port._apache_config_file_name_for_platform):
        (Port._path_to_apache_config_file):
        (Port._build_path):
        (Port._path_to_driver):
        (Port._path_to_webcore_library):
        (Port._path_to_helper):
        (Port._path_to_image_diff):
        (Port._path_to_wdiff):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_httpd_returns_error_code):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort):
        (WebKitPort._build_driver_flags):
        (WebKitPort._read_image_diff):
        (WebKitPort.skipped_layout_tests):

2012-07-18  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Moving the mock create* WebRTC calls into a shadow Platform class
        https://bugs.webkit.org/show_bug.cgi?id=86215

        Reviewed by Adam Barth.

        Adding a shadow Platform object that is used to override some WebKit::Platform funtions to
        instead create mock objects. No actual mock objects created yet.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (WebKitSupportTestEnvironment::WebKitSupportTestEnvironment):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp: Copied from Tools/DumpRenderTree/chromium/config.h.
        (MockWebKitPlatformSupport::create):
        (MockWebKitPlatformSupport::MockWebKitPlatformSupport):
        (MockWebKitPlatformSupport::cryptographicallyRandomValues):
        (MockWebKitPlatformSupport::createMediaStreamCenter):
        * DumpRenderTree/chromium/MockWebKitPlatformSupport.h: Copied from Tools/DumpRenderTree/chromium/config.h.
        (MockWebKitPlatformSupport):
        * DumpRenderTree/chromium/config.h:

2012-07-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [CMake][EFL] Build and run TestWebKitAPI unit tests
        https://bugs.webkit.org/show_bug.cgi?id=90671

        Reviewed by Daniel Bates.

        This patch enables almost for free a significant amount of test for the
        WebKit C API, WTF and KURL. It makes easy for CMake based ports to
        enable TestWebKitAPI since the missing bits to implement are
        relatively simple.

        * CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt: Added.
        * TestWebKitAPI/PlatformEfl.cmake: Added.
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/efl/InjectedBundleController.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/efl/PlatformUtilities.cpp: Added.
        (TestWebKitAPI):
        (Util):
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::sleep):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        * TestWebKitAPI/efl/PlatformWebView.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::initEcoreEvas):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page):
        * TestWebKitAPI/efl/main.cpp: Added.
        (checkForUseX11WindowArgument):
        (main):

2012-07-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [CMake][EFL] Building jsc causes reconfiguration
        https://bugs.webkit.org/show_bug.cgi?id=91387

        Reviewed by Daniel Bates.

        We should remove CMakeCache only when running build-webkit script,
        otherwise it will cause a reconfiguration every time someone calls
        generateBuildSystemFromCMakeProject(). We were re-building "jsc" and
        not running WebKit2 unit tests on the bots because the project was
        reconfigured with default values by the scripts that run these tests.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (removeCMakeCache):
        (generateBuildSystemFromCMakeProject):

2012-07-18  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][DRT] Add support for Web Inspector in WebKit-EFL DRT
        https://bugs.webkit.org/show_bug.cgi?id=87935

        Reviewed by Andreas Kling.

        Web Inspector will be shown when path or url contains "inspector/".
        Dumprendertree should wait util web inspector resources are loaded totally
        and handle the signals for creating or removing a view of web inspector.
        ("inspector,view,create" and "inspector,view,close")

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (shouldOpenWebInspector):
        (createLayoutTestController):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::createWebInspectorView):
        (DumpRenderTreeChrome::removeWebInspectorView):
        (DumpRenderTreeChrome::waitInspectorLoadFinished):
        (DumpRenderTreeChrome::onInspectorViewCreate):
        (DumpRenderTreeChrome::onInspectorViewClose):
        (DumpRenderTreeChrome::onInspectorFrameLoadFinished):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onConsoleMessage):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):

2012-07-18  Simon Hausmann  <simon.hausmann@nokia.com>

        [ANGLE] On QT, use Bison and Flex during ANGLE build
        https://bugs.webkit.org/show_bug.cgi?id=91108

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/default_post.prf: Add support for variable_out to our generators, to allow
        generating not only for SOURCES but also ANGLE_SOURCES (in this bug)

2012-07-18  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] plugin tests should not be disabled for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=91604

        Reviewed by Simon Hausmann.

        Instead of not building TestNetscapePlugIn, we could programatically
        disable actually loading it from WTR until https://bugs.webkit.org/show_bug.cgi?id=86620
        has been solved, so we can still test plugins on WebKit1.

        * Tools.pro:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeTestPluginDirectory):

2012-07-18  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement AccessibilityUIElement in WKTR for GTK
        https://bugs.webkit.org/show_bug.cgi?id=89223

        Reviewed by Chris Fleizach.

        Implemented AccessibilityUIElement in WKTR for GTK, based in the
        implementation present in DumpRenderTree.

        Added new files in gtk/ and updated the cross-platform ones.

        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/gtk/AccessibilityUIElementGtk.cpp: Added.
        (WTR):
        (WTR::attributeSetToString):
        (WTR::checkElementState):
        (WTR::indexRangeInTable):
        (WTR::alterCurrentValue):
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::hierarchicalLevel):
        (WTR::AccessibilityUIElement::speak):
        (WTR::AccessibilityUIElement::ariaIsGrabbed):
        (WTR::AccessibilityUIElement::ariaDropEffects):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::accessibilityValue):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::isVisible):
        (WTR::AccessibilityUIElement::isOffScreen):
        (WTR::AccessibilityUIElement::isCollapsed):
        (WTR::AccessibilityUIElement::isIgnored):
        (WTR::AccessibilityUIElement::hasPopup):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):

        Add documentEncoding and documentURI to AccessibilityUIElement.idl.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:

2012-07-18  Alexis Menard  <alexis.menard@openbossa.org>

        [EFL] Build fix in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=91567

        Reviewed by Kentaro Hara.

        sleep() is defined in unistd.h, we need to include it.

        * WebKitTestRunner/efl/TestControllerEfl.cpp:

2012-07-18  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] Unreviewed gardening after r122913
        https://bugs.webkit.org/show_bug.cgi?id=91601

        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.process_kill_time):

2012-07-17  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Run ref tests together to avoid expensive driver restarts
        https://bugs.webkit.org/show_bug.cgi?id=91533

        Reviewed by Dirk Pranke.

        Though DriverProxy maintains two drivers to support pixel tests and non-pixel tests,
        chromium-android uses another way because it can't support multiple drivers.
        It restarts the driver when pixel-test mode changes (e.g. when running a ref test after
        a normal test in --no-pixel-tests mode). However restarting driver is expensive on
        Android (several seconds each time). To reduce the cost, a command line option
        '--shard-ref-tests' is added to group ref tests in dedicated shards.
        The option is by default enabled on Android.

        Will remove the option once DRT supports switching pixel test mode during one run.
        (https://bugs.webkit.org/show_bug.cgi?id=91538, https://bugs.webkit.org/show_bug.cgi?id=91539)

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._shard_tests):
        (Manager._shard_in_two):
        (Manager._shard_by_directory):
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker._update_test_input):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-07-17  Don Olmstead  <don.olmstead@am.sony.com>

        NRWT The time before server_process kills DRT should be variable
        https://bugs.webkit.org/show_bug.cgi?id=91542

        Reviewed by Dirk Pranke.

        Added the ability to configure the amount of time
        server_process waits before killing the DRT process
        during the call to stop.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.variable.process_kill_time):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.stop):

2012-07-17  Alexis Menard  <alexis.menard@openbossa.org>

        webkitdirs.pm should fallback to uname -m if arch is not present.
        https://bugs.webkit.org/show_bug.cgi?id=91543

        Reviewed by Martin Robinson.

        It seems that coreutils is moving away from the 'arch' command. Archlinux
        for example doesn't ship it anymore (coreutils 8.17). We can then fallback
        to 'uname -m' to find out the architecture.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2012-07-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: rename printer.print_update to printer.write_update to match metered_stream
        https://bugs.webkit.org/show_bug.cgi?id=91557

        Reviewed by Ojan Vafai.

        Now that all of the printing logic is in printer.py, I want the
        public interface to printer to follow the meteredstream
        interface where possible. renaming write_update() gets us close.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        (Manager._set_up_run):
        (Manager.start_servers_with_lock):
        (Manager.stop_servers_with_lock):
        (Manager._clobber_old_results):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.write_update):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_write_update):

2012-07-17  Tony Chang  <tony@chromium.org>

        Fix a bug where optimize-baselines would incorrectly fail to optimize
        https://bugs.webkit.org/show_bug.cgi?id=91551

        Reviewed by Adam Barth.

        In some cases, optimize-baseline would correctly optimize the results, but because
        we weren't filtering the virtual ports out of _results_by_port_name, we thought
        that we had failed to optimize.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer._find_optimal_result_placement): No virtual filtering here.
        (BaselineOptimizer._filtered_results_by_port_name): New function that filters out virtual directories.
        (BaselineOptimizer.optimize): Filter out virtual ports.
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (TestBaselineOptimizer._move_baselines): Add a stub so we don't actual move results.
        (BaselineOptimizerTest._assertOptimization): Call optimize and verify that the right files were moved.
        (BaselineOptimizerTest._assertOptimizationFailed): Add a method for when optimization should fail.
        (BaselineOptimizerTest.test_common_directory_includes_root): Update since this test should fail.
        (BaselineOptimizerTest.test_virtual_ports_filtered): New test case that demonstrates the bug.

2012-07-17  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Add --encode-binary command line option for DRT
        https://bugs.webkit.org/show_bug.cgi?id=91532

        Reviewed by Adam Barth.

        When the option presents, DRT will encode binary output data in base64.
        ChromiumAndroidPort will pass the option because 'adb shell' doesn't support
        binary data output.

        This change is a refactoring to replace the original hard-coded code for Android.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::TestEventPrinter):
        (TestEventPrinter::handleAudio): New function replacing the original handleAudioHeader
        (TestEventPrinter::handleImage):
        (TestEventPrinter::handleBinary): Extracted common function for handleAudio and handleImage
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::initialize):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        (TestShell::setEncodeBinary):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py: Add --encode-binary to additional_drt_flags
        (ChromiumAndroidPort.__init__):

2012-07-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move per-test result output into printing.py
        https://bugs.webkit.org/show_bug.cgi?id=91465

        Reviewed by Ojan Vafai.

        This moves the last substantive logging/printing code from the
        manager into printing.py. Subsequent patches in this thread can
        largely focus on cleaning up printing.py and will leave the rest
        of the code alone.

        This patch also removes manager.update() and
        manager.update_summary(), two routines that were no longer being
        used or needed (they have been dead for a long time but I didn't
        notice them until now).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.results_directory):
        (Manager._look_for_new_crash_logs):
        (Manager._update_summary_with_result):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_finished_test):

2012-07-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move config-specific logging to printing.py
        https://bugs.webkit.org/show_bug.cgi?id=91450

        Reviewed by Ojan Vafai.

        More refactoring ... this moves the 'config' output to
        printing.py.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._resize_shards):
        (Manager._run_tests):
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.get_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config):
        (Printer.print_workers_and_shards):
        (Printer._print_config):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_fallback_path_in_config):
        (Testprinter.test_print_config):

2012-07-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up logging when we're only running one chunk of the tests
        https://bugs.webkit.org/show_bug.cgi?id=91447

        Reviewed by Ojan Vafai.

        Apparently we were creating a 'tests_run.txt' in the results
        directory if we were only running one chunk of the tests; after
        3+ years of hacking on this code, that was news to me, so I'm
        guessing no one uses this. I'm removing this, and changing the
        _print_expected calls to debug messages to simplify the
        layering.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._split_into_chunks_if_necessary):

2012-07-17  Dirk Pranke  <dpranke@chromium.org>

        Fix regression in style checker introduced in r122868.
        https://bugs.webkit.org/show_bug.cgi?id=91470

        Unreviewed, build fix.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FileState.__init__):

2012-07-17  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move the bulk of the "expected" output to printing.py
        https://bugs.webkit.org/show_bug.cgi?id=91442

        Reviewed by Ojan Vafai.

        More printing-related refactoring. This moves all of the code
        that prints the results we expect to get, but doesn't move a few
        dangling printfs (those'll get hit in a later patch).
        
        No functional changes; covered by existing tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._split_into_chunks_if_necessary):
        (Manager.prepare_lists_and_print_output):
        (Manager.print_config):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_expected):
        (Printer):
        (Printer._print_expected_results_of_type):
        (Printer._num_digits):
        (Printer._print_expected):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_expected):

2012-07-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Replace 0 by NULL in public headers documentation
        https://bugs.webkit.org/show_bug.cgi?id=91470

        Reviewed by Dirk Pranke.

        Fix style checking to properly detect C headers as C
        files. Without this change, the style script would
        complain if we use NULL (instead of 0 / null) in C
        headers.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FileState.__init__):
        (_FileState.is_c):
        (_FileState.is_c_or_objective_c):

2012-07-17  Xianzhu Wang  <wangxianzhu@chromium.org>

        [chromium] remove --test-shell support from DRT
        https://bugs.webkit.org/show_bug.cgi?id=86927

        Reviewed by Adam Barth.

        Now no one use --test-shell. All of us use the standard DRT mode.

        * DumpRenderTree/chromium/DumpRenderTree.cpp: Removed support of --test-shell and --pixel-tests=filename options. (--pixel-tests without '=' is kept for DRT mode.)
        (runTest):
        (main):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::TestEventPrinter):
        (TestEventPrinter::~TestEventPrinter):
        (TestEventPrinter::handleTestHeader):
        (TestEventPrinter::handleTimedOut):
        (TestEventPrinter::handleTextHeader):
        (TestEventPrinter::handleTextFooter):
        (TestEventPrinter::handleAudioHeader):
        (TestEventPrinter::handleAudioFooter):
        (TestEventPrinter::handleImage): Removed the unused filename parameter.
        (TestEventPrinter::handleTestFooter):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        (TestEventPrinter): Made it a concrete class because we have only one implementation.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::initialize):
        (TestShell::dumpImage):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams): Removed pixelFileName field.
        (TestShell):

2012-07-17  Xianzhu Wang  <wangxianzhu@chromium.org>

        remove ChromiumDriver from NRWT
        https://bugs.webkit.org/show_bug.cgi?id=88478

        Now WebKitDriver has replaced ChromiumDriver since test_shell mode is deperecated.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py: Removed ChromiumDriver code.
        (ChromiumPort._driver_class): Removed. WebKitPort._driver_class() will be used.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2012-07-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Unreviewed. Add QtGraphics, TextureMapper and OpenGL to watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2012-07-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122828.
        http://trac.webkit.org/changeset/122828
        https://bugs.webkit.org/show_bug.cgi?id=91516

        DumpRenderTree crashes after printing test results. (Requested
        by vsevik on #webkit).

        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::TestInterfaces):
        (TestInterfaces::~TestInterfaces):
        (TestInterfaces::bindTo):
        (TestInterfaces::resetAll):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (TestInterfaces):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::accessibilityController):
        (TestShell):

2012-07-17  Gabor Ballabas  <gaborb@inf.u-szeged.hu>

        [Qt][V8] Remove the V8 related codepaths and configuration
        https://bugs.webkit.org/show_bug.cgi?id=90863

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit: Remove --v8 option.

2012-07-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122834.
        http://trac.webkit.org/changeset/122834
        https://bugs.webkit.org/show_bug.cgi?id=91492

        it broke the chromium (Requested by kkristof on #webkit).

        * Scripts/build-webkit:

2012-07-17  Gabor Ballabas  <gaborb@inf.u-szeged.hu>

        [Qt][V8] Remove the V8 related codepaths and configuration
        https://bugs.webkit.org/show_bug.cgi?id=90863

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit: Remove --v8 option.

2012-07-17  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add --use-test-fonts option to Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=91402

        Reviewed by Tor Arne Vestbø.

        Same stuff that already exists for QtTestBrowser.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2012-07-17  Adam Barth  <abarth@webkit.org>

        [Chromium] TestInterfaces should be responsible for owning and binding AccessibilityController and TextInputController
        https://bugs.webkit.org/show_bug.cgi?id=91459

        Reviewed by Ryosuke Niwa.

        Rather than having TestShell own and bind each of these JavaScript APIs
        individually, TestShell should delegate that work to TestInterfaces.
        This patch moves AccessibilityController and TextInputController to be
        the responsibility of TestInterfaces.

        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp:
        (TestInterfaces::TestInterfaces):
        (TestInterfaces::~TestInterfaces):
        (TestInterfaces::setWebView):
        (TestInterfaces::bindTo):
        (TestInterfaces::resetAll):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h:
        (WebKit):
        (TestInterfaces):
        (TestInterfaces::accessibilityController):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::accessibilityController):
        (TestShell):

2012-07-17  Adam Barth  <abarth@webkit.org>

        [Chromium] Move TextInputController into TestRunner.a
        https://bugs.webkit.org/show_bug.cgi?id=91457

        Reviewed by Ryosuke Niwa.

        This patch is purely moving code. TextInputController is one of the
        objects exposed to JavaScript and so should be in the TestRunner
        library.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/TextInputController.cpp: Renamed from Tools/DumpRenderTree/chromium/TextInputController.cpp.
        * DumpRenderTree/chromium/TestRunner/TextInputController.h: Renamed from Tools/DumpRenderTree/chromium/TextInputController.h.

2012-07-17  Adam Barth  <abarth@webkit.org>

        [Chromium] TextInputController shouldn't know about TestShell
        https://bugs.webkit.org/show_bug.cgi?id=91455

        Reviewed by Kent Tamura.

        This patch uses the same pattern we used for the
        AccessibilityController to remove the dependency on TestShell.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::insertText):
        (TextInputController::doCommand):
        (TextInputController::setMarkedText):
        (TextInputController::unmarkText):
        (TextInputController::hasMarkedText):
        (TextInputController::markedRange):
        (TextInputController::selectedRange):
        (TextInputController::firstRectForCharacterRange):
        (TextInputController::validAttributesForMarkedText):
        (TextInputController::setComposition):
        * DumpRenderTree/chromium/TextInputController.h:
        (WebKit):
        (TextInputController):
        (TextInputController::setWebView):

2012-07-17  David Barr  <davidbarr@chromium.org>

        Introduce ENABLE_CSS_IMAGE_ORIENTATION compile flag
        https://bugs.webkit.org/show_bug.cgi?id=89055

        Reviewed by Kent Tamura.

        The css3-images module is at candidate recommendation.
        http://www.w3.org/TR/2012/CR-css3-images-20120417/#the-image-orientation

        Add a configuration option for CSS image-orientation support, disabling it by default.

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

2012-07-16  Adam Barth  <abarth@webkit.org>

        [Chromium] Move Task.(cpp|h) into TestRunner.a
        https://bugs.webkit.org/show_bug.cgi?id=91446

        Reviewed by Ryosuke Niwa.

        Task is a dependency of EventSender, which needs to move into TestRunner.a.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/Task.cpp: Renamed from Tools/DumpRenderTree/chromium/Task.cpp.
        * DumpRenderTree/chromium/TestRunner/Task.h: Renamed from Tools/DumpRenderTree/chromium/Task.h.

2012-07-16  Adam Barth  <abarth@webkit.org>

        [Chromium] Move AccessibilityController and AccessibilityUIElement into TestRunner.a
        https://bugs.webkit.org/show_bug.cgi?id=91443

        Reviewed by Tony Chang.

        Purely a file move (and a sorting of #includes).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/AccessibilityController.cpp: Renamed from Tools/DumpRenderTree/chromium/AccessibilityController.cpp.
        * DumpRenderTree/chromium/TestRunner/AccessibilityController.h: Renamed from Tools/DumpRenderTree/chromium/AccessibilityController.h.
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElement.cpp: Renamed from Tools/DumpRenderTree/chromium/AccessibilityUIElement.cpp.
        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElement.h: Renamed from Tools/DumpRenderTree/chromium/AccessibilityUIElement.h.

2012-07-16  Adam Barth  <abarth@webkit.org>

        [Chromium] AccessibilityController shouldn't know anything about TestShell
        https://bugs.webkit.org/show_bug.cgi?id=91441

        Reviewed by Tony Chang.

        This patch is a precursor to moving AccessibilityController.cpp into TestRunner.a.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::getFocusedElement):
        (AccessibilityController::getRootElement):
        * DumpRenderTree/chromium/AccessibilityController.h:
        (WebKit):
        (AccessibilityController):
        (AccessibilityController::setWebView):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::createMainWindow):
        (TestShell::~TestShell):

2012-07-16  Adam Barth  <abarth@webkit.org>

        [Chromium] Introduce TestInterfaces to hold all the JavaScript interfaces needed for LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=91312

        Reviewed by Ryosuke Niwa.

        Looking forward to moving more objects into TestRunner.a, we're going
        to need an object to own all the interfaces and to put them through
        their lifecycle.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.cpp: Added.
        * DumpRenderTree/chromium/TestRunner/TestInterfaces.h: Added.

2012-07-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add APIs to support theme.
        https://bugs.webkit.org/show_bug.cgi?id=90107

        Reviewed by Hajime Morita.

        Override default theme path for MiniBrowser and WebKitTestRunner.

        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (browserCreate):
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2012-07-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][DRT] Implement dumpFrameScrollPosition
        https://bugs.webkit.org/show_bug.cgi?id=87638

        Reviewed by Hajime Morita.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (dumpFrameScrollPosition): Implemented.
        (shouldDumpFrameScrollPosition): Fixed wrong condition like other ports.

2012-07-16  Don Olmstead  <don.olmstead@am.sony.com>

        NRWRT Should provide a VS project to work on
        https://bugs.webkit.org/show_bug.cgi?id=91436

        Reviewed by Dirk Pranke.

        Adding VS2010 project for modifying webkitpy. Uses pytools
        <http://pytools.codeplex.com> which integrates python into 
        Visual Studio.

        * Scripts/webkitpy/webkitpy.pyproj: Added.
        * Scripts/webkitpy/webkitpy.sln: Added.

2012-07-16  Adam Barth  <abarth@webkit.org>

        [Chromium] Move GamepadController into TestRunner.a
        https://bugs.webkit.org/show_bug.cgi?id=91311

        Reviewed by Tony Chang.

        GamepadController looks like a simple class to move into TestRunner.a
        because it has almost zero dependence on TestShell.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.cpp: Renamed from Tools/DumpRenderTree/chromium/CppBoundClass.cpp.
        * DumpRenderTree/chromium/TestRunner/CppBoundClass.h: Renamed from Tools/DumpRenderTree/chromium/CppBoundClass.h.
        * DumpRenderTree/chromium/TestRunner/CppVariant.cpp: Renamed from Tools/DumpRenderTree/chromium/CppVariant.cpp.
        * DumpRenderTree/chromium/TestRunner/CppVariant.h: Renamed from Tools/DumpRenderTree/chromium/CppVariant.h.
            - GamepadController depends on these bindings helpers.
        * DumpRenderTree/chromium/TestRunner/GamepadController.cpp: Renamed from Tools/DumpRenderTree/chromium/GamepadController.cpp.
        * DumpRenderTree/chromium/TestRunner/GamepadController.h: Renamed from Tools/DumpRenderTree/chromium/GamepadController.h.
            - Just moved these files and removed the unused TestShell
              references.
        * DumpRenderTree/chromium/TestRunner/Stub.cpp: Removed.
            - No longer needed.
        * DumpRenderTree/chromium/TestShell.cpp:
            - Update call to constructor to avoid passing in this.

2012-07-16  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-android] Don't use test_shell mode of DRT
        https://bugs.webkit.org/show_bug.cgi?id=88542

        Reviewed by Dirk Pranke.

        Test shell mode is about to be removed.
        Switch to use DRT mode for chromium-android.

        Summary of changes:
        1. ChromiumAndroidDriver now inherits from WebKitDriver instead of ChromiumDriver (to be deprecated).
        2. Conforms to the DRT mode protocol for input/output of DumpRenderTree.
        3. Added support for Android 'adb shell' input/output (base64, newline mode, etc.)

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleImage): Outputs base64 on Android.
        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (platformInit): Changed err_file to err_fifo, required by python ServerProcess.
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.create_driver): Override to create driver without DriverProxy to ensure 1 Driver per run.
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver.cmd_line):
        (ChromiumAndroidDriver._deadlock_detector):
        (ChromiumAndroidDriver._drt_cmd_line):
        (ChromiumAndroidDriver.start):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver._start_once):
        (ChromiumAndroidDriver.run_test):
        (ChromiumAndroidDriver.stop):
        (ChromiumAndroidDriver._command_from_driver_input):
        (ChromiumAndroidDriver._read_prompt):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest.test_driver_cmd_line):
        (ChromiumAndroidDriverTest.test_cmd_line):
        (ChromiumAndroidDriverTest):
        (ChromiumAndroidDriverTest.test_drt_cmd_line):
        (ChromiumAndroidDriverTest.test_read_prompt):
        (ChromiumAndroidDriverTest.test_command_from_driver_input):
        (ChromiumAndroidDriverTest.test_write_command_and_read_line):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.__init__): Added universal_newlines to handle Android 'adb shell' line ends.
        (ServerProcess._start):
        (ServerProcess._wait_for_data_and_update_buffers_using_select): Handles unexpected EOF which indicates crash on Android.
        (ServerProcess.stop): Added kill_directly parameter to kill the process without waiting it (which always timeouts for Android).
        (ServerProcess.replace_outputs): Added to combine different input/output pipes into one ServerProcess.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._command_from_driver_input):
        (WebKitDriver.run_test): Changed timeout origin so that slow start() on Android won't cause timeout of layout test case.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (MockServerProcess.read_stdout):
        (MockServerProcess.start):
        (MockServerProcess):
        (MockServerProcess.stop):
        (MockServerProcess.kill):
        (WebKitDriverTest.test_read_block):
        (WebKitDriverTest.test_read_binary_block):
        (WebKitDriverTest.test_read_base64_block):

2012-07-16  Dirk Pranke  <dpranke@chromium.org>

        nrwt: move a bunch of printing code from manager.py to printing.py
        https://bugs.webkit.org/show_bug.cgi?id=91439

        Reviewed by Ojan Vafai.

        All of the logic that handles what gets logged should eventually
        live in printing.py; this patch moves a large chunk of code that
        prints all of the stuff after the run completes.

        There are no functional changes, this is just moving code
        around. Covered by existing tests (updated as necessary).

        This code is all pretty messy and most of it should be deleted
        (or extracted after the fact from results.json), but I'm saving
        that for further patches. My goal is just to manager.py to a
        more manageable state.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.prepare_lists_and_print_output):
        (Manager.run):
        (Manager._mark_interrupted_tests_as_skipped):
        (Manager._update_summary_with_result):
        (Manager._num_digits):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_interrupt_if_at_failure_limits):
        (ResultSummaryTest.summarized_results):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        (ResultSummary.add):
        Here we had to add a list of the slow tests to the result
        summary so that we didn't need to call back into the manager and
        the test expectations object to figure out if a test is SLOW.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_results):
        (Printer):
        (Printer._print_timing_statistics):
        (Printer._print_aggregate_test_statistics):
        (Printer._print_individual_test_times):
        (Printer._print_test_list_timing):
        (Printer._print_directory_timings):
        (Printer._print_statistics_for_test_timings):
        (Printer._print_result_summary):
        (Printer._print_result_summary_entry):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_unexpected_results.get_unexpected_results):
        (Testprinter):

2012-07-16  Adam Barth  <abarth@webkit.org>

        [Chromium] Create a stub TestRunner.a target
        https://bugs.webkit.org/show_bug.cgi?id=91309

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestRunner/Stub.cpp: Added.

2012-07-16  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up logging to make it ninja-esque
        https://bugs.webkit.org/show_bug.cgi?id=91297

        Reviewed by Adam Barth.

        This patch changes the output of test-webkitpy to be closer to
        what ninja produces. Namely:

        If you are running with stderr writing to a tty (and not -v), we
        will no longer print '...' as tests complete. Instead, we use a
        metered stream and print entries of the form:
           '[X/Y] test_name passed/failed/erred'
        where X is the current test # and Y is the total number of tests.

        If you are running with stderr piped to a file or other non-tty
        object (or with -v), you get the same output, one per line for
        every test.

        In addition, if tests fail or err out, you get the stack trace
        immediately; you don't have to wait until the end of the run.

        Lastly, this change cleans up the unit tests for test-webkitpy
        itself to not confuse the logger and to work cleanly w/ multiple
        processes. It looks like between this and all the clean up in
        MessagePool that happened as it landed, we can now run
        multiprocessing tests in parallel.

        * Scripts/webkitpy/test/finder.py:
        (Finder._default_names):
        * Scripts/webkitpy/test/finder_unittest.py:
        (FinderTest.setUp):
        (FinderTest.tearDown):
        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer.configure):
        (Printer.print_started_test):
        (Printer.print_finished_test):
        (Printer._test_line):
        (Printer.print_result):
        * Scripts/webkitpy/test/runner.py:
        (Runner.run):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.setUp):
        (RunnerTest):
        (RunnerTest.tearDown):
        (RunnerTest.assert_run):
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):
        (RunnerTest.test_timing):

2012-07-16  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: handle failures properly when running in parallel
        https://bugs.webkit.org/show_bug.cgi?id=91416

        Reviewed by Adam Barth.

        It turns out that unittest.TestResults contain a handle to the
        test method itself, which isn't picklable; it's sufficient to just
        store the test name instead of the actual method. By doing so
        we can move the test_name() method from the printer to the
        runner where it belongs (so the printer is less dependent on the
        unittest framework's data structures).

        This change should really have a test but I don't know how to
        write one that properly captures the behavior and won't cause
        test-webkitpy itself to fail. I've verified the fix by hand, at
        least, in the meantime.

        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer.print_result):
        * Scripts/webkitpy/test/runner.py:
        (_test_name):
        (Runner.all_test_names):
        (_Worker.handle):

2012-07-16  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: handle failures properly when running in parallel
        https://bugs.webkit.org/show_bug.cgi?id=91416

        Reviewed by Tony Chang.

        It turns out that unittest.TestResults contain a handle to the
        test method itself, which isn't picklable; it's sufficient to just
        store the test name instead of the actual method. By doing so
        we can move the test_name() method from the printer to the
        runner where it belongs (so the printer is less dependent on the
        unittest framework's data structures).

        This change should really have a test but I don't know how to
        write one that properly captures the behavior and won't cause
        test-webkitpy itself to fail. I've verified the fix by hand, at
        least, in the meantime.

        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer.print_result):
        * Scripts/webkitpy/test/runner.py:
        (_test_name):
        (Runner.all_test_names):
        (_Worker.handle):

2012-07-16  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: run tests in parallel
        https://bugs.webkit.org/show_bug.cgi?id=91294

        Reviewed by Ojan Vafai.

        This change adds support for running tests in parallel. This is
        not yet on by default, since the logging isn't very pretty w/
        parallel tests.

        Also, there are some (multiprocessing-related) tests that can't be
        run in parallel and so we skip them in that situation; I need to
        come up with a mechanism for dealing with this, since you
        apparently can't use multiprocessing as both a parent and a
        child process.

        * Scripts/webkitpy/test/finder.py:
        (Finder.find_names):
        (Finder._default_names):
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester.run):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found):
        * Scripts/webkitpy/test/runner.py:
        (Runner.run):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):
        (RunnerTest.test_timing):

2012-07-16  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: use message pools
        https://bugs.webkit.org/show_bug.cgi?id=91292

        Reviewed by Ojan Vafai.

        Restructure the test-running code to be message-driven and
        use a MessagePool; note that this does not yet actually run the
        tests in parallel.

        Also clean up the unit tests so that the fake loader is passed
        to the _Worker properly, and reduce a lot of the cut&pasted code
        in the tests.

        No functional changes; covered by existing tests.

        * Scripts/webkitpy/test/printer.py:
        (Printer.print_started_test):
        (Printer.print_finished_test):
        * Scripts/webkitpy/test/runner.py:
        (Runner.__init__):
        (Runner.run):
        (Runner.handle):
        (_Worker):
        (_Worker.__init__):
        (_Worker.handle):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.assert_run):
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):
        (RunnerTest.test_timing):

2012-07-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix Qt5 module dependencies
        https://bugs.webkit.org/show_bug.cgi?id=91388

        Reviewed by Laszlo Gombos.

        Removed ancient qtscript and qtxmlpatterns module dependencies.

        * qmake/qt_webkit.pri:

2012-07-16  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        run-webkit-test returns 254 at exit even when it succeeds
        https://bugs.webkit.org/show_bug.cgi?id=91370

        Reviewed by Simon Hausmann.

        sys.exit() is implemented by raising SystemExit which inherits from
        BaseException. Since we are catching BaseException, run_webkit_tests.py
        was always returning an error code.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2012-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add missing file to compilation.

2012-07-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Add EFLWebKit2PublicAPI, EFLWebKit2PlatformSpecific to watch list.

        * Scripts/webkitpy/common/config/watchlist:

2012-07-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Add gyuyoung.kim@samsung.com to watch list.

        * Scripts/webkitpy/common/config/watchlist:

2012-07-15  Joseph Pecoraro  <pecoraro@apple.com>

        Windowless WebView not firing JavaScript load event if there is a media element
        https://bugs.webkit.org/show_bug.cgi?id=91331

        Reviewed by Eric Carlson.

        Test a windowless WebView loading a page with a media element. The load
        event should happen on the next spin of the run loop, but we spin check
        the page, with a timeout of 250ms.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WindowlessWebViewWithMedia.html: Added.
        * TestWebKitAPI/Tests/mac/WindowlessWebViewWithMedia.mm: Added.
        (-[WindowlessWebViewWithMediaFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::spinLoop): Spin check with timeout. Runs a block each spin to early bail.
        (TestWebKitAPI::TEST):

2012-07-14  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Do not try to update the cache model for every WebPreferences change
        https://bugs.webkit.org/show_bug.cgi?id=91302

        Reviewed by Joseph Pecoraro.

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

2012-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122665.
        http://trac.webkit.org/changeset/122665
        https://bugs.webkit.org/show_bug.cgi?id=91321

        Broke Mac builds (Requested by rniwa on #webkit).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm: Removed.

2012-07-13  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Do not try to update the cache model for every WebPreferences change
        https://bugs.webkit.org/show_bug.cgi?id=91302

        Reviewed by Joseph Pecoraro.

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

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-test outputs the wrong number of tests executed when some are skipped.
        https://bugs.webkit.org/show_bug.cgi?id=89894

        Reviewed by Ojan Vafai.

        Fix the logging of the actual number of tests run so that tests
        that are skipped aren't included.

        Also revamp the 'expected' output so we distinguish the number
        of tests found from the number of tests run (to account for
        --repeat-each and --iterations).

        Covered by existing tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.prepare_lists_and_print_output):
        (Manager._log_num_workers):
        (Manager.run):
        (Manager._print_result_summary):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        (ResultSummary.add):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_one_line_summary):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_one_line_summary):

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        nrwt: actually print the exception name and message for otherwise unhandled exceptions
        https://bugs.webkit.org/show_bug.cgi?id=91305

        Reviewed by Adam Barth.

        Two more places where I was printing the stack trace but not the
        exception itself :(. These two spots can't easily be
        unit-tested, but I tested them by hand.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):

2012-07-13  Josh Hawn  <jhawn@apple.com>

        Fix for WebContext::getWebCoreStatistics() causes crash if no m_process
        https://bugs.webkit.org/show_bug.cgi?id=91116

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
            Added new test file.
        * TestWebKitAPI/Tests/WebKit2/WebCoreStatisticsWithNoWebProcess.cpp: Added.
        (TestWebKitAPI::wkContextGetStatisticsCallback):
            Tests that callback function receives an error.
        (TestWebKitAPI::TEST):
            Creates a dummy web context object (no web process).
            Calls WKContextGetStatistics with the web context and test callback.
            The test callback should get an expected error.

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: move printing-related code out of the runner
        https://bugs.webkit.org/show_bug.cgi?id=91289

        Reviewed by Ryosuke Niwa.

        More refactoring ... this moves all printing-related stuff out
        of runner.py and into printer.py.

        No functional changes; covered by existing tests.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer):
        (Printer.test_name):
        (Printer.print_started_test):
        (Printer.print_finished_test):
        (Printer.print_result):
        * Scripts/webkitpy/test/runner.py:
        (Runner.__init__):
        (Runner.all_test_names):
        (Runner.run):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):
        (RunnerTest.test_timing):

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: split printing/logging code for test-webkitpy out into a new class
        https://bugs.webkit.org/show_bug.cgi?id=91282

        Reviewed by Ojan Vafai.

        This patch is the first step at splitting all of the
        printing/logging code out separately from the actual
        test-running code.

        This is just moving stuff around; no new functionality and no
        new tests needed.

        * Scripts/webkitpy/test/finder_unittest.py:
        (FinderTest.setUp):
        * Scripts/webkitpy/test/main.py:
        (Tester.__init__):
        (Tester._parse_args):
        (Tester.run):
        (Tester._run_tests):
        (Tester._log_exception):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found):
        * Scripts/webkitpy/test/printer.py: Added.
        (Printer):
        (Printer.__init__):
        (Printer.configure):
        (Printer.configure.filter):
        (_CaptureAndPassThroughStream):
        (_CaptureAndPassThroughStream.__init__):
        (_CaptureAndPassThroughStream.write):
        (_CaptureAndPassThroughStream._message_is_from_pdb):
        (_CaptureAndPassThroughStream.flush):
        (_CaptureAndPassThroughStream.getvalue):

2012-07-13  James Simonsen  <simonjam@chromium.org>

        [Navigation Timing] Imported W3C tests contain duplicates and are DOS formatted
        https://bugs.webkit.org/show_bug.cgi?id=91184

        Reviewed by Adam Barth.

        The upstream 'html5' tests are just duplicates of the 'html' tests.

        * Scripts/import-w3c-performance-wg-tests:

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: hide yield_to_caller from callers in MessagePool :)
        https://bugs.webkit.org/show_bug.cgi?id=91269

        Reviewed by Adam Barth.

        yield_to_caller() was an optimization/hack to allow us to run
        both manager and worker in a single process/loop without
        starving the manager while the worker is running tests. The
        worker was required to call yield_to_caller() periodically. It
        turns out that I can get equivalent responsiveness by yielding
        inside the MessagePool every time the worker posts a message, and this
        allows me to no longer need the worker to call the routine. Thus
        I rename yield_to_caller() to _yield_to_manager() to be a little
        clearer about its purpose.

        Tested by existing tests.

        * Scripts/webkitpy/common/message_pool.py:
        (_Worker.run):
        (_Worker.post):
        (_Worker._yield_to_manager):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.handle):

2012-07-13  Adam Barth  <abarth@webkit.org>

        EWSTools should be able to build a commit-queue instance from scratch
        https://bugs.webkit.org/show_bug.cgi?id=91264

        Reviewed by Eric Seidel.

        I've been using this script to build commit-queue instances on Google
        Compute Engine and it seems to work.

        * EWSTools/GoogleComputeEngine/build-commit-queue.sh: Added.

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: make worker.start() and worker.stop() optional in the messagepool
        https://bugs.webkit.org/show_bug.cgi?id=91170

        Reviewed by Ojan Vafai.

        test-webkitpy will use messagepool workers that don't actually
        have any per-worker state, so they don't need start() and stop()
        methods. Now we will only call the methods if they exist; this
        means that workers only need to expose a handle() method.

        * Scripts/webkitpy/common/message_pool.py:
        (_Worker.terminate):
        (_Worker.run):

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        NRWT doesn't print exceptions
        https://bugs.webkit.org/show_bug.cgi?id=91129

        Reviewed by Ojan Vafai.

        Although we printed exceptions in most cases, if an unexpected
        exception (like a runtime error) was raised when creating a
        port, we wouldn't. This patch fixes that, and also cleans up
        how we were logging exceptions from the workers to be less
        verbose.

        Because of the corner cases where these errors are occurring,
        it's difficult to write automated unit tests for them. I've
        tested it quite a bit by hand, though.

        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool._close):
        (_MessagePool._handle_worker_exception):
        (_Worker.run):
        (_Worker._raise):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-07-13  Wei James  <james.wei@intel.com>

        enable TestWebKitAPI/webkit_unit_tests apk on x86 android platform by adding abi support
        https://bugs.webkit.org/show_bug.cgi?id=91194

        Reviewed by Adam Barth.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-07-13  Simon Pena  <spena@igalia.com>

        [GTK] Gardening: update API tests skipped list
        https://bugs.webkit.org/show_bug.cgi?id=91224

        Unreviewed gardening.

        Skip "next" and "previous" tests of FindController until bug #91083
        is fixed.

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

2012-07-13  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Implement GraphicsSurface for Linux/GLX.
        https://bugs.webkit.org/show_bug.cgi?id=90881

        Enable GraphicsSurface for Linux based platforms
        whenever the Xcomposite extension is available.

        Reviewed by Noam Rosenthal.

        * qmake/config.tests/libXcomposite/libXcomposite.cpp: Added.
        (main):
        * qmake/config.tests/libXcomposite/libXcomposite.pro: Added.
          Add a configure test to detect Xcomposite extension and
          activate GraphicsSurface on linux in case the extension is available.
        * qmake/configure.pri:
        * qmake/mkspecs/features/features.prf:

2012-07-13  David Grogan  <dgrogan@chromium.org>

        nrwt: don't choke when printing invalid utf-8 to stderr
        https://bugs.webkit.org/show_bug.cgi?id=91181

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.write_stderr):

2012-07-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: more class renaming cleanup
        https://bugs.webkit.org/show_bug.cgi?id=91182

        Reviewed by Adam Barth.

        More removing of the unnecessary "Test" prefix.

        * Scripts/webkitpy/test/finder.py:
        (_DirectoryTree):
        (Finder.add_tree):
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/test/runner.py:
        (Runner):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_regular):
        (RunnerTest.test_verbose):
        (RunnerTest.test_timing):

2012-07-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Facilitate debugging of the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=90768

        Reviewed by Kenneth Rohde Christiansen.

        Add a new --webprocess-cmd-prefix argument to
        run-webkit-tests script for EFL port. If provided,
        the prefix will be prepended to the command used
        to spawn the Web process. This can be used for
        debugging purposes with prefixes such as:
        "xterm -title renderer -e gdb --args".

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort.__init__):
        (EflPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformRunUntil): Implement support for
        m_noTimeout timeout value.

2012-07-12  Adam Barth  <abarth@webkit.org>

        Fix crash in the commit-queue.  We need to initialize self.port during __init__.

        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.__init__):
        (CommitQueue.begin_work_queue):

2012-07-12  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: rename test_finder to finder
        https://bugs.webkit.org/show_bug.cgi?id=91175

        Reviewed by Adam Barth.

        Rename test_finder -> finder, TestFinder -> Finder to remove
        some of the stutter in the names.

        * Scripts/webkitpy/test/finder.py: Renamed from Tools/Scripts/webkitpy/test/test_finder.py.
        * Scripts/webkitpy/test/finder_unittest.py: Renamed from Tools/Scripts/webkitpy/test/test_finder_unittest.py.
        * Scripts/webkitpy/test/main.py:
        (Tester.__init__):

2012-07-12  Adam Barth  <abarth@webkit.org>

        CommitQueue is confused about what port it is using
        https://bugs.webkit.org/show_bug.cgi?id=91040

        Reviewed by Dirk Pranke.

        On EC2, we explicitly pass --port to the commit-queue, but that
        requires editing the start-queue.sh script locally on each bot. In
        moving to Google Compute Engine, we're try to avoid any local edits to
        the EWSTools.

        Rather than passing --port to the commit-queue, this patch teaches the
        CommitQueue which port its running, which is the approach we use for
        the EWS bots.

        Mutating tool._deprecated_port is a bit ugly, but it's what we're doing
        currently for the EWS bots.

        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue):
        (CommitQueue.begin_work_queue):
        (CommitQueue.run_command):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest.test_commit_queue):
        (mock_run_webkit_patch):
        (test_rollout):
        (test_rollout_lands):
        (test_manual_reject_during_processing):

2012-07-12  James Simonsen  <simonjam@chromium.org>

        [Navigation Timing] Import the W3C Navigation Timing test suite
        https://bugs.webkit.org/show_bug.cgi?id=84887

        Reviewed by Tony Gentilcore.

        * Scripts/import-w3c-performance-wg-tests: Added.

2012-07-12  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Nit: git config files use tabs, not spaces.

        * EWSTools/cold-boot.sh:

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

        Unreviewed. Add Dongsung Huang to the list of contributors. He
        has submitted over 30 patches on texture mapper, canvas and image decoders.

        * Scripts/webkitpy/common/config/committers.py:

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

        Unreviewed. Change my irc nickname to kseo.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up logging handlers, lint common.message_pool
        https://bugs.webkit.org/show_bug.cgi?id=91152

        Reviewed by Ojan Vafai.

        The unix implementation of multiprocessing clones any logging
        handlers from the parent process into the child; we currently
        don't want this behavior in our code, so I was hand-removing the
        installed handlers in the child process I knew about. After thinking
        about it further, I think it was simpler and safe enough to just
        remove all handlers in the child, since the message pool
        propagates any message from the child back into the parent.
        
        We can always change this in the future if it turns out to be an issue.

        I'm also fixing a couple of other lint warnings while I'm at it.

        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.__exit__):
        (_MessagePool._handle_worker_exception):
        (_Worker._set_up_logging):

2012-07-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: rename manager_worker_broker to message_pool
        https://bugs.webkit.org/show_bug.cgi?id=91145

        Reviewed by Ojan Vafai.

        Since the MessagePool interface is more generic (and simpler)
        now and will be reused by test-webkitpy, I'm renaming it and
        moving it to webkitpy.common.

        * Scripts/webkitpy/common/message_pool.py: Renamed from Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (TestRunInterruptedException.__reduce__):
        (Manager._run_tests.worker_factory):
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2012-07-12  Dirk Pranke  <dpranke@chromium.org>

        nrwt crashes saving the output for a platform-specific expected test reference
        https://bugs.webkit.org/show_bug.cgi?id=90872

        Reviewed by Ojan Vafai.

        The expected output for a test is copied alongside the test
        itself in the layout-test-results directory; in other words, for
        foo/bar-expected.txt sits alongside foo/bar.html even if we're
        actually using platform/mac/foo/bar-expected.txt.

        Unless the test is a reftest, in which case we would copy the
        output to platform/mac/foo/bar-expected.html and set a
        'ref_file' parameter in results.json to indicate the path. This
        can be useful in the cases where we have multiple references for
        a single test or when multiple tests share the same reference.

        We found a bug where we weren't creating platform/mac/foo under
        the results directory, and so this wasn't actually working.
        However, treating reftests differently seems like a bad thing,
        so we should probably be consistent. This change puts the
        -expected.html next to the test, and reworks test_result_writer
        so that we create directories uniformly and consistently.

        Note that we weren't catching this problem in unit tests because
        the MockFileSystem creates a directory automatically if it
        doesn't exist; this was done intentionally for convenience, but
        is really a bug and should be fixed; see https://bugs.webkit.org/show_bug.cgi?id=91028.

        I have not added additional tests here since fixing that bug
        should be sufficient.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (interpret_test_failures):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_interpret_test_failures):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        (TestResultWriter._write_binary_file):
        (TestResultWriter):
        (TestResultWriter._write_text_file):
        (TestResultWriter.write_output_files):
        (TestResultWriter.write_stderr):
        (TestResultWriter.write_crash_log):
        (TestResultWriter.create_text_diff_and_write_result):
        (TestResultWriter.write_image_diff_files):
        (write_reftest):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (EndToEndTest.test_reftest_with_two_notrefs):

2012-07-12  Dirk Pranke  <dpranke@chromium.org>

        nrwt: reimplement manager_worker_broker in a much simpler form
        https://bugs.webkit.org/show_bug.cgi?id=90513

        Reviewed by Ojan Vafai.

        This is a wholesale replacement of the MessagePool() implementation
        and the other classes in manager_worker_broker.py. All of the
        BrokerConnection*, Broker*, etc. classes are gone, and there are now
        just a MessagePool class and a _Worker class. Happiness ensues.
 
        I'm removing manager_worker_broker_unittest.py as well; we get
        nearly complete coverage from the integration tests, and will
        get more coverage when test-webkitpy moves to use this as well,
        so having unit tests seems like unnecessary overhead. (running
        coverage numbers with test-webkitpy shows that pretty much the only
        uncovered lines are lines that are only run in the child processes,
        which coverage doesn't handle at the moment).
 
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_MessagePool.__init__):
        (_MessagePool.run):
        (_MessagePool._start_workers):
        (_MessagePool):
        (_MessagePool.wait):
        (_MessagePool._close):
        (_MessagePool._handle_done):
        (_MessagePool._can_pickle):
        (_MessagePool._loop):
        (WorkerException):
        (_Message.__init__):
        (_Message.__repr__):
        (_Worker):
        (_Worker.__init__):
        (_Worker.terminate):
        (_Worker._close):
        (_Worker.run):
        (_Worker.post):
        (_Worker.yield_to_caller):
        (_Worker._post):
        (_Worker._raise):
        (_Worker._set_up_logging):
        (_WorkerLogHandler.__init__):
        (_WorkerLogHandler.emit):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py: Removed.

2012-07-12  Tony Chang  <tony@chromium.org>

        [chromium] Remove drag and drop API methods that are no longer used
        https://bugs.webkit.org/show_bug.cgi?id=90996

        Reviewed by Adam Barth.

        Migrate DRT to use the methods that take modifier keys.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::doDragDrop):
        (EventSender::doMouseUp):
        (EventSender::doMouseMove):
        (EventSender::beginDragWithFiles):

2012-07-12  Ojan Vafai  <ojan@chromium.org>

        Allow putting ranges in user.py list prompts
        https://bugs.webkit.org/show_bug.cgi?id=91115

        Reviewed by Adam Barth.

        Ranges are inclusive and denoted by a dash. This is useful for rebaselining a whole port
        since the items are listed with each port's builders being contiguous.

        * Scripts/webkitpy/common/system/user.py:
        (User._wait_on_list_response):
        * Scripts/webkitpy/common/system/user_unittest.py:
        (UserTest.test_prompt_with_multiple_lists.run_prompt_test):
        (UserTest.test_prompt_with_multiple_lists):

2012-07-12  Arnaud Renevier  <arno@renevier.net>

        [GTK] Implement disableImageLoading in DRT
        https://bugs.webkit.org/show_bug.cgi?id=87973

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::disableImageLoading):

2012-07-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Internal symbols are exported on Linux
        https://bugs.webkit.org/show_bug.cgi?id=90981

        Reviewed by Jocelyn Turcotte.

        I should've re-enabled ELF symbol visibility when removing the symbol map in
        r106650.

        * qmake/mkspecs/features/default_post.prf:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91024> Build against the latest SDK when targeting older OS X versions.

        Reviewed by Dan Bernstein.

        The deployment target is already set to the version that we're targeting, and it's that setting
        which determines which functionality from the SDK is available to us.

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

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Replace definitions of BUILDING_ON / TARGETING macros with macros that will error when used.

        Part of <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros.

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Remove the macros completely from here since
        they're completely unused in TestNetscapePlugIn.
        * DumpRenderTree/config.h:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros

        This removal was handled by a script that translates the relevant macros in to the equivalent checks
        using the system availability macros.

        Reviewed by Filip Pizlo.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        * DumpRenderTree/mac/CheckedMalloc.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/TextInputController.m:
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:

2012-07-11  Robert Kroeger  <rjkroege@chromium.org>

        Suppress horizontal conversion of PlatformWheelEvents when hasPreciseScrollingDeltas is true
        https://bugs.webkit.org/show_bug.cgi?id=89580

        WebKit GTK and Chromium Linux force vertical wheel events to
        scroll horizontally when over horizontal scroll bars.  This is
        undesirable for touchpad scrolling with
        hasPreciseScrollingDeltas() == true. Modified DumpRenderTree to
        let a layout test specify this attribute so that the change's impact
        on scrolling can be tested in a layout test.

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::handleMouseWheel):

2012-07-11  Simon Fraser  <simon.fraser@apple.com>

        Fix the build by declaring -isPaginated before use.

        * MiniBrowser/mac/BrowserWindowController.m:

2012-07-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122358.
        http://trac.webkit.org/changeset/122358
        https://bugs.webkit.org/show_bug.cgi?id=91037

        Build break on WebKit Win (Requested by hayato on #webkit).

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::doDragDrop):
        (EventSender::doMouseUp):
        (EventSender::doMouseMove):
        (EventSender::beginDragWithFiles):

2012-07-03  Dirk Pranke  <dpranke@chromium.org>

        nrwt: add a MessagePool abstraction that the manager will call to replace the broker
        https://bugs.webkit.org/show_bug.cgi?id=90511

        Reviewed by Ojan Vafai.

        This change introduces the new MessagePool abstraction that will
        replace the classes in manager_worker_broker. It is a minimal
        interface that tries to follow the conventions in
        multiprocessing.Pool and concurrency.futures ... it provides a
        context manager and a run() method that sends N messages to M
        workers processes (starting workers as necessary) and waits for
        them all to complete, handling cleanup as necessary. The caller
        is responsible for providing a handle() method to handle
        messages received from the workers.
        
        This interface basically hides all of the multiprocessing logic from
        the manager class.

        The initial implementation of MessagePool is a simple shim
        around the existing broker classes; a subsequent change will
        replace all the other classes with a much simpler
        implementation.

        No additional tests are provided for now; existing tests should
        provide adequate coverage, and I will add new unit tests for the
        MessagePool class when I replace the existing implementation.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (TestRunInterruptedException.__reduce__):
        (Manager.__init__):
        (Manager._run_tests):
        (Manager._run_tests.instead):
        (Manager.handle):
        (Manager._handle_started_test):
        (Manager._handle_finished_test_list):
        (Manager._handle_finished_test):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_MessagePool):
        (_MessagePool.__init__):
        (_MessagePool.__enter__):
        (_MessagePool.__exit__):
        (_MessagePool.run):
        (_MessagePool.wait):
        (_MessagePool.is_done):
        (_MessagePool._worker_is_done):
        (_MessagePool._close):
        (_MessagePool.handle_done):
        (_MessagePool.handle_started_test):
        (_MessagePool.handle_finished_test):
        (_MessagePool.handle_finished_test_list):
        (_MessagePool.handle_exception):
        (_MessagePool._log_messages):
        (_MessagePool._handle_worker_exception):
        (_WorkerState):
        (_WorkerState.for):
        (_WorkerState.__init__):
        (_WorkerState.__repr__):
        (_get_broker):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (make_broker):

2012-07-11  Simon Fraser  <simon.fraser@apple.com>

        Add an option to enter paginated mode in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=91035

        Reviewed by Dan Bernstein.

        Add an item to the Debug menu for MiniBrowser that puts
        the web view into paginated mode. For now, we only
        do left-to-right pagination, with a fixed column width.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController validateMenuItem:]): Update the checked
        state of the menu item.
        (-[BrowserWindowController isPaginated]): Return YES if paginated.
        (-[BrowserWindowController togglePaginationMode:]): Toggle in
        and out of pagination mode.
        * MiniBrowser/mac/MainMenu.xib: Add the debug menu item.

2012-07-11  Adam Barth  <abarth@webkit.org>

        commit-queue instances on Compute Engine are missing git-svn
        https://bugs.webkit.org/show_bug.cgi?id=91034

        Reviewed by Eric Seidel.

        git-svn is needed to actually commit to SVN from a git working copy.

        * EWSTools/cold-boot.sh:

2012-07-11  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: lint code in webkitpy.layout_tests.models
        https://bugs.webkit.org/show_bug.cgi?id=90416

        Reviewed by Ojan Vafai.

        Cleaning up errors reported from lint-webkitpy.

        Also, suppress the warnings about wildcard imports in pylintrc;
        we have nothing particularly against them.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.combinations):
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        (TestConfigurationTest.test_hash.query_unknown_key):
        (TestConfigurationTest.test_eq):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (ParseError.__init__):
        (TestExpectationLine.__init__):
        (TestExpectationsModel.get_expectations_string):
        (TestExpectationsModel):
        (TestExpectationsModel.expectation_to_string):
        (TestExpectationsModel.add_expectation_line):
        (TestExpectationsModel._clear_expectations_for_test):
        (TestExpectationsModel._remove_from_sets):
        (TestExpectations.get_expectations_string):
        (TestExpectations.expectation_to_string):
        (TestExpectations._report_warnings):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (Base.__init__):
        (parse_exp):
        (SkippedTests.check):
        (TestExpectationParserTests.test_parse_empty_string):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureTimeout.__init__):
        (FailureCrash.__init__):
        (FailureImageHashMismatch.__init__):
        (FailureReftestMismatch.__init__):
        (FailureReftestMismatchDidNotOccur.__init__):
        (FailureReftestNoImagesGenerated.__init__):
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py:
        (TestFailuresTest.test_unknown_failure_type.UnknownFailure.message):
        (TestFailuresTest.test_unknown_failure_type):
        (TestFailuresTest):
        (TestFailuresTest.test_message_is_virtual):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.loads):
        (TestResult.has_failure_matching_types):
        * Scripts/webkitpy/pylintrc:

2012-07-11  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up names in worker.py
        https://bugs.webkit.org/show_bug.cgi?id=90510

        Reviewed by Ojan Vafai.

        This is the last patch in the series of refactoring worker.py;
        all this does is change some names of methods, instance
        variables, and method parameters to be clearer (it also changes
        some code in manager.py and manager_worker.py to be consistent).

        There are no functional changes in this patch and the existing
        tests should cover everything.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.prepare_lists_and_print_output):
        (Manager._run_tests.worker_factory):
        (Manager._run_tests):
        (Manager._show_results_html_file):
        (Manager.handle_finished_test_list):
        (_WorkerState.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_Broker.post_message):
        (_Broker._dispatch_message):
        (AbstractWorker.__init__):
        (AbstractWorker.run):
        (AbstractWorker.yield_to_caller):
        (AbstractWorker.post):
        (_WorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestWorker.start):
        (_TestWorker.handle):
        (_TestWorker.stop):
        (_TestsMixin):
        (_TestsMixin.test_name):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.__del__):
        (Worker.start):
        (Worker.handle):
        (Worker._run_test):
        (Worker.stop):
        (Worker._timeout):
        (Worker._kill_driver):
        (Worker._run_test_with_timeout):
        (Worker._clean_up_after_test):
        (Worker._run_test_in_another_thread.SingleTestThread.run):
        (Worker._run_test_in_this_thread):
        (Worker._run_single_test):

2012-07-11  Adam Barth  <abarth@webkit.org>

        The commit-queue needs some extra git config to be able to commit
        https://bugs.webkit.org/show_bug.cgi?id=91025

        Reviewed by Eric Seidel.

        In order for the commit-queue to actually commit, it needs to know the
        location of the SVN server.

        * EWSTools/cold-boot.sh:

2012-07-11  Adam Barth  <abarth@webkit.org>

        Teach EWSTools how to configure SVN auth credentials
        https://bugs.webkit.org/show_bug.cgi?id=91021

        Reviewed by Eric Seidel.

        To move the commit-queue over to Google Compute Engine, we need a way
        to configure the commit-queue's credentials during the machine build
        process. There doesn't seem to be a nice command line way of
        configuring SVN auth credentials. I tried doing a bogus commit and
        supplying the credentials that way, but that's super hacky.

        The approach in this patch is to write the config file directly. The
        format of these configurations files is documented in the SVN book, so
        this approach doesn't see too sketchy.

        * EWSTools/configure-svn-auth.sh: Added.

2012-07-11  Ojan Vafai  <ojan@chromium.org>

        Dedupe suffixes passed to webkit-patch rebaseline
        https://bugs.webkit.org/show_bug.cgi?id=91017

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (Rebaseline._suffixes_to_update):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_multiple_builders_and_tests_command_line):

2012-07-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add new directories and a new LayoutTestController method.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setStorageDatabaseIdleInterval):
        * waf/build/settings.py:

2012-07-11  Tony Chang  <tony@chromium.org>

        [chromium] Remove drag and drop API methods that are no longer used
        https://bugs.webkit.org/show_bug.cgi?id=90996

        Reviewed by Adam Barth.

        Migrate DRT to use the methods that take modifier keys.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::doDragDrop):
        (EventSender::doMouseUp):
        (EventSender::doMouseMove):
        (EventSender::beginDragWithFiles):

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Add a Mountain Lion version of libWebKitSystemInterface.a.

        Reviewed by John Sullivan.

        * Scripts/copy-webkitlibraries-to-product-directory: Include libWebKitSystemInterfaceMountainLion.a in the list of libraries to copy.

2012-07-09  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/90835> Teach bisect-builds to work with a Safari.app that has entitlements.

        Reviewed by Dan Bernstein.

        * Scripts/bisect-builds: Use safariPathFromSafariBundle to determine which binary within the application
        should be invoked.

2012-07-11  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] fast/events/keydown-function-keys.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=90891

        Reviewed by Martin Robinson.

        Work around the context menu being shown on F10 key being pressed by
        unbiding the key when running tests in DumpRenderTree. The problem
        appears when using a recent version of the xkeyboard-config package.

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

2012-07-11  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] QRawWebView should notify when rendering is done, so that pixel results can be grabbed at the appropriate moment.
        https://bugs.webkit.org/show_bug.cgi?id=90641

        Reviewed by Jocelyn Turcotte.

        * MiniBrowser/qt/raw/View.h: Comment used old class name (WKView).
        (View):

2012-07-11  Min Qin  <qinmin@chromium.org>

        [Android] sending an extra to the DRT apk so that DRT can be run in a seperate thread
        https://bugs.webkit.org/show_bug.cgi?id=90831

        Reviewed by Adam Barth.

        On android, DRT needs to run in a background thread to avoid ANR.
        However, the java tests are running on UI thread by default.
        We need to send an intent extra to the apk so that it can run on a sub thread.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._start_once):

2012-07-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(r107171): Fix --timeout option of Qt's DRT
        https://bugs.webkit.org/show_bug.cgi?id=90966

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/qt/main.cpp:
        (main): Don't remove the argument, because takeOptionValue() did it before.

2012-07-11  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        First commit; moving myself to commiters.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-11  Balazs Ankes  <bank@inf.u-szeged.hu>

        webkit-patch land should automatically add svn:mime-type for .png files
        https://bugs.webkit.org/show_bug.cgi?id=75825

        Reviewed by Dirk Pranke.

        Refactor the png.py to avoid code duplication.

        * Scripts/webkitpy/common/checksvnconfigfile.py: Added.
        (check):
        (config_file_path):
        (errorstr_autoprop):
        (errorstr_png):
        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.check):
        * Scripts/webkitpy/tool/commands/download.py:
        (Land):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng.py: Added.
        (AddSvnMimetypeForPng):
        (AddSvnMimetypeForPng.__init__):
        (AddSvnMimetypeForPng.run):
        (AddSvnMimetypeForPng._check_pngs):
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py: Added.
        (MockSCMDetector):
        (MockSCMDetector.__init__):
        (MockSCMDetector.display_name):
        (AddSvnMimetypeForPngTest):
        (AddSvnMimetypeForPngTest.test_run):

2012-07-11  Hayato Ito  <hayato@chromium.org>

        Unreviewed gardening.
        One more fix for r122292.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-07-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122301.
        http://trac.webkit.org/changeset/122301
        https://bugs.webkit.org/show_bug.cgi?id=90947

        Android builder started to fail (Requested by hayato on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-07-10  Adam Barth  <abarth@webkit.org>

        [Chromium] Merge final nits to DumpRenderTree.gyp for Android
        https://bugs.webkit.org/show_bug.cgi?id=90920

        Reviewed by Tony Chang.

        This patch contains the last few small changes to DumpRenderTree.gyp
        from the chromium-android branch. After this change, this file will be
        fully merged.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-07-10  Adam Barth  <abarth@webkit.org>

        [Chromium-Android] Add apk test targets for webkit_unit_tests and TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=90918

        Reviewed by Tony Chang.

        The rules are similar to what we have added for DumpRenderTree apk.
        All references to gtest_target_type can be removed once we enable APK
        tests on the all bots.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp:

2012-07-10  Kenneth Russell  <kbr@google.com>

        Add --no-build option to perf test runner
        https://bugs.webkit.org/show_bug.cgi?id=90916

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
            Support --no-build option to perf tests, as in layout tests.

2012-07-10  Adam Barth  <abarth@webkit.org>

        EWSTools should be able to build a chromium-ews bot from scratch
        https://bugs.webkit.org/show_bug.cgi?id=90912

        Reviewed by Eric Seidel.

        I've been using this script to kick off the build process for the
        chromium-ews bots on Google Compute Engine.

        * EWSTools/GoogleComputeEngine: Added.
        * EWSTools/GoogleComputeEngine/build-chromium-ews.sh: Added.

2012-07-10  Alec Flett  <alecflett@chromium.org>

        Add alecflett to the list of committers
        https://bugs.webkit.org/show_bug.cgi?id=90903

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-10  Xianzhu Wang  <wangxianzhu@chromium.org>

        Unreviewed fix of webkitpy unittest break about chromium_android.py
        caused by r122251.

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidDriverTest.test_cmd_line):

2012-07-10  Ojan Vafai  <ojan@chromium.org>

        webkit-patch rebaseline doesn't work for audio/pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=90905

        Reviewed by Adam Barth.

        We just need to pass the correct suffix list to rebaseline-test-internal
        and optimize-baselines. By default, pass all suffixes.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (Rebaseline):
        (Rebaseline.__init__):
        (Rebaseline._suffixes_to_update):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_multiple_builders_and_tests_command_line):

2012-07-10  Adam Barth  <abarth@webkit.org>

        Remove LayoutTestController and WebKitTestRunner support for Hixie76 WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=90853

        Reviewed by Eric Seidel.

        WebKit no longer implements the Hixie76 version of the WebSocket
        protocol. We don't need to support it in our test framework.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2012-07-10  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Fix typos in chromium_android.py in r151492
        https://bugs.webkit.org/show_bug.cgi?id=90904

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.setup_test_run):

2012-07-10  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Use setup_test_runner() instead of start_helper() to setup test environment
        https://bugs.webkit.org/show_bug.cgi?id=90894

        Reviewed by Adam Barth.

        start_helper() is actually start_pixel_test_helper() since r115601 (bug 81729).
        Should use setup_test_runner() to setup test environment for chromium-android.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.setup_test_run): Renamed from start_helper(). Added cache cleanup code.
        (ChromiumAndroidPort.clean_up_test_run): Renamed from stop_helper().
        (ChromiumAndroidPort._path_to_helper): Returns None as we don't have a helper now.
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._path_to_forwarder): Original _path_to_helper().
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver.cmd_line):

2012-07-09  Ojan Vafai  <ojan@chromium.org>

        Improve webkit-patch rebaseline to work for more cases
        https://bugs.webkit.org/show_bug.cgi?id=90504

        Reviewed by Adam Barth.

        -Makes it work for the build.chromium.org bots.
        -Lets you rebaseline all builders instead of just one.
        -Lets you pass in the builders or tests to rebaseline.

        * Scripts/webkitpy/common/host.py:
        (Host.buildbot_for_builder_name):
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.__init__):
        (Builder.latest_layout_test_results):
        Provide a way to get to the LayoutTestResults of the latest build.
        Most of the time we only need to get the latest one and the Chromium bots
        only expose the full_results.json file for the latest build.

        (Builder):
        (Builder._fetch_file_from_results):
        (Builder.fetch_layout_test_results):
        Move these functions into Builder so that Builder and Build can both
        fetch layout test results.

        (Build.results_zip_url):
        (Build.layout_test_results):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuilderTest.test_latest_layout_test_results):
        (BuildTest.test_layout_test_results):
        * Scripts/webkitpy/common/system/user.py:
        (User.prompt_with_multiple_lists):
        Prompt with multiple sublists, but still have a global numbering.
        This lets the build.chromium.org bots be clearly separated from the
        build.webkit.org bots, which helps understand the builder names.

        (User):
        (User._wait_on_list_response):
        (User.prompt_with_list):
        * Scripts/webkitpy/common/system/user_unittest.py:
        (UserTest.test_prompt_with_multiple_lists):
        (UserTest.test_prompt_with_multiple_lists.run_prompt_test):
        (UserTest.test_prompt_with_multiple_lists.run_prompt_test.mock_raw_input):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.is_chromium):
        Provide a way to tell if a port is a Chromium port that doesn't involve string
        manipulation on the port name or builder name.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (builder_path_from_name):
        (all_builder_names):
        Memoizing here is incorrect because the test override _exact_matches,
        so these can return different values. In either case, I'm pretty sure these
        are not remotely hot codepaths. I manually inspected all call sites and they're
        all in high-level calls (e.g. execute calls for webkit-patch commands) and not
        called in a loop.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.is_chromium):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._results_url):
        (AbstractParallelRebaselineCommand.__init__):
        (Rebaseline.__init__):
        (Rebaseline):
        (Rebaseline._builders_to_pull_from):
        (Rebaseline._tests_to_update):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline.mock_builders_to_pull_from):
        (test_rebaseline):
        (test_rebaseline_command_line_flags):
        (test_rebaseline_multiple_builders):
        (test_rebaseline_multiple_builders.mock_builders_to_pull_from):
        (test_rebaseline_multiple_builders.mock_tests_to_update):
        (test_rebaseline_multiple_builders_and_tests_command_line):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.irc):
        (MockTool):
        (MockTool.buildbot_for_builder_name):

2012-07-10  Alice Cheng  <alice_cheng@apple.com>

        Editing: Reproducible crasher when pasting a 0x0 image into Mail
        https://bugs.webkit.org/show_bug.cgi?id=90640
        <rdar://problem/11141920>

        Reviewed by Brady Eidson.

        Test cases for the patch. 0x0 images don't get a resource representation in the WebArchive, so we need a null check.

        * TestWebKitAPI/Tests/mac/0.png: Added.
        * TestWebKitAPI/Tests/mac/WebViewCanPasteZeroPng.mm: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-07-10  Leandro Gracia Gil  <leandrogracia@chromium.org>

        WebSurroundingText layout tests should use the same code path as the rest of the feature.
        https://bugs.webkit.org/show_bug.cgi?id=90807

        Reviewed by Adam Barth.

        Make the textSurroundingNode method take a pair of point coordinates
        instead of a node offset.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::textSurroundingNode):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):

2012-07-10  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(r122175): It broke the Windows build
        https://bugs.webkit.org/show_bug.cgi?id=90850

        Reviewed by Noam Rosenthal.

        * qmake/mkspecs/features/features.prf: Disable USE(3D_GRAPHICS) on Windows temporarily until proper fix.

2012-07-10  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt][NRWT] Enable cascaded TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=89108

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_expectations_files):
        (QtPortTest.test_expectations_files):

2012-07-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] WebKit DRT and WTR fail to build due to undefined reference to WTF::MD5::*
        https://bugs.webkit.org/show_bug.cgi?id=90868

        Unreviewed EFL build fix.

        Correct CMake configuration to have EFL's DRT and WebKitTestRunner link
        WTF library. This is needed to resolve undefined reference to WTF::MD5::*.

        * DumpRenderTree/efl/CMakeLists.txt:
        * WebKitTestRunner/PlatformEfl.cmake:

2012-07-10  Adam Barth  <abarth@webkit.org>

        LayoutTestController.dumpConfigurationForViewport should move to Internals
        https://bugs.webkit.org/show_bug.cgi?id=45652

        Reviewed by Eric Seidel.

        Remove dumpConfigurationForViewport from LayoutTestController. This API
        has been replaced by an API on Internals that does the same thing in a
        port-agnostic way.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-07-09  Matt Falkenhagen  <falken@chromium.org>

        Add ENABLE_DIALOG_ELEMENT and skeleton files
        https://bugs.webkit.org/show_bug.cgi?id=90521

        Reviewed by Kent Tamura.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-09  Kent Tamura  <tkent@chromium.org>

        Improve the boilerplate generated by prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=89560

        Reviewed by Ryosuke Niwa.

        Produce the following boilerplate:

        > 2012-06-20  Kent Tamura  <tkent@chromium.org>
        >
        >         Need a short description (Oops!).
        >         Need the bug URL (Oops!).
        >
        >         Reviewed by NOBODY (Oops!).
        >
        >         Additional information of the change such as approach, rationale. Please add per-function descriptions below. (Oops!).
        >
        >         No new tests (Oops!).

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs): Generate the updated template.
        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.update_with_unreviewed_message):
        Update the pattern for the beginning of the boilerplate.
        (ChangeLog.set_short_description_and_bug_url):
        - Use self._changelog_indent
        - Update the pattern for the description line
        - Skip the bug boilerplate.
        We substitute the specified bug URL to the description boilerplate
        because we need to add it even if the bug URL boilerplate is missing.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Update the boilerplate data.
        (test_set_short_description_and_bug_url):
        - Update the description boilerplate.
        - Add a test for a case with both of the description boilerplace and the
          bug URL boilerplate.
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest.test_ensure_bug_url): Update the expected boilerplate.

2012-07-09  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Shared code that is guarded with ENABLE(WEBGL) should be guarded with USE()
        https://bugs.webkit.org/show_bug.cgi?id=90506

        Reviewed by Martin Robinson.

        Always enable the WTF_USE_3D_GRAPHICS flag in features.prf if we're compiling with Qt5
        or if the OpenGL module is enabled.

        * qmake/mkspecs/features/features.prf:

2012-07-09  Yongjun Zhang  <yongjun_zhang@apple.com>

        Consider closing unused localStorage database after a timeout.
        https://bugs.webkit.org/show_bug.cgi?id=90713

        For a localStorage, if there is no active document referencing to it for certain amount of time (300 seconds),
        we can close the underlying sqlite database.

        Reviewed by Brady Eidson.

        * DumpRenderTree/LayoutTestController.cpp: add a JS method setStorageDatabaseIdleInterval to testRunner
            to set a different timeout value for closing localStorage database.
        (setStorageDatabaseIdleIntervalCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setStorageDatabaseIdleInterval): add empty method.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setStorageDatabaseIdleInterval): ditto.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setStorageDatabaseIdleInterval): ditto.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setStorageDatabaseIdleInterval): ditto.

2012-07-09  Adam Klein  <adamk@chromium.org>

        Rename WebCore::WebKitMutationObserver to WebCore::MutationObserver
        https://bugs.webkit.org/show_bug.cgi?id=90810

        Reviewed by Ojan Vafai.

        * DumpRenderTree/gtk/EventSender.cpp:

2012-07-09  Mihai Parparita  <mihaip@chromium.org>

        Handle missing results in TestResultsServer better
        https://bugs.webkit.org/show_bug.cgi?id=90816

        Reviewed by Ojan Vafai.

        If we can't load the results JSON, don't try to wrap it with the JSONP
        callback invocation.

        * TestResultServer/handlers/testfilehandler.py:
        (GetFile.get):

2012-07-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122124.
        http://trac.webkit.org/changeset/122124
        https://bugs.webkit.org/show_bug.cgi?id=90815

        It broke NRWT on Qt (Requested by Ossy_HOME on #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_skipped_path):
        (QtPortTest.test_skipped_file_search_path):

2012-07-09  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Implement dumpFrameScrollPosition in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=89356

        Reviewed by Martin Robinson.

        Implement dumpFrameScrollPosition, acquiring the scroll position
        through WebKitDOMDOMWindow of the WebKitDOMDocument loaded in the frame
        whose scroll position is being dumped.

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

2012-07-09  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt][NRWT] Enable cascaded TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=89108

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_expectations_files):
        (QtPortTest.test_expectations_files):

2012-07-09  Dan Bernstein  <mitz@apple.com>

        Fixed clean builds of the All target in the DumpRenderTree project.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Let Xcode know that the
        DumpRenderTree Perl Support target depends on the DumpRenderTree target.

2012-07-09  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Unskip the CSS Regions layout tests
        https://bugs.webkit.org/show_bug.cgi?id=90771

        Reviewed by Martin Robinson.

        Use the DumpRenderTreeSupportGtk method for enabling the CSS Regions,
        calling it when resetting the defaults in DumpRenderTree or when the
        settings value is overriden through the testRunner.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference):

2012-07-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122107.
        http://trac.webkit.org/changeset/122107
        https://bugs.webkit.org/show_bug.cgi?id=90794

        Build failure on Mac debug bots (Requested by falken_ on
        #webkit).

        * Scripts/webkitperl/FeatureList.pm:

2012-07-09  Matt Falkenhagen  <falken@chromium.org>

        Add ENABLE_DIALOG_ELEMENT and skeleton files
        https://bugs.webkit.org/show_bug.cgi?id=90521

        Reviewed by Kent Tamura.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-08  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r122076.
        http://trac.webkit.org/changeset/122076
        https://bugs.webkit.org/show_bug.cgi?id=89560

        Broke sheriffbot rollout

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs):

2012-07-08  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Update the description of LayoutTestController::textSurroundingElement
        https://bugs.webkit.org/show_bug.cgi?id=90620

        Reviewed by Adam Barth.

        Rename and fix the description of the method as its behaviour changed
        during the review of https://bugs.webkit.org/show_bug.cgi?id=82461

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::textSurroundingNode):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):

2012-07-08  Kent Tamura  <tkent@chromium.org>

        Improve the template generated by prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=89560

        Reviewed by Ryosuke Niwa.

        Produce the following template:

        > 2012-06-20  Kent Tamura  <tkent@chromium.org>
        >
        >         Need a short description (Oops!).
        >         Need the bug URL (Oops!).
        >
        >         Reviewed by Ryosuke Niwa.
        >
        >         Additional information of the change such as approach, rationale. Please add per-function descriptions below. (Oops!).
        >
        >         No new tests (Oops!).

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs):

2012-07-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [wx] Unreviewed. Fix notificaitons directory path after notifications move.

        * waf/build/settings.py:

2012-07-07  Nuno Lopes  <nlopes@apple.com>

        Fix build with recent clang.
        https://bugs.webkit.org/show_bug.cgi?id=90712

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (DOMWindowExtensionBasic):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (DOMWindowExtensionNoCache):
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):

2012-07-06  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Add a configuration option for disabling unstable features in releases
        https://bugs.webkit.org/show_bug.cgi?id=87995

        Reviewed by Martin Robinson.

        Pass the --enable-unstable-features flag when building the Gtk port through build-webkit.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2012-07-06  Jessie Berlin  <jberlin@apple.com>

        WKContext should ask for its initialization data when it needs it so the client doesn't have
        to keep it up to date.
        https://bugs.webkit.org/show_bug.cgi?id=90627

        Reviewed by Anders Carlsson.

        Add tests and update other WKContextInjectedBundleClients.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        Updated for the change to WKContextInjectedBundleClient.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Ditto.

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createInitializationDictionaryForInjectedBundleTest):
        Moved the logic to create the initialization dictionary here ...
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        ... from here so that it can be used without automatically using
        WKContextSetInitializationUserDataForInjectedBundle.
        * TestWebKitAPI/PlatformUtilities.h:

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the new test files.
        * TestWebKitAPI/GNUmakefile.am:
        Ditto.

        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        Check that the message received from the injected bundle matches the user data it was
        initialized with.
        (TestWebKitAPI::getInjectedBundleInitializationUserData):
        Return the user data that the injected bundle should be initialized with.
        (TestWebKitAPI::TEST):
        Set up WKContextInjectedBundleClient and load a page.
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback_Bundle.cpp: Added.
        (TestWebKitAPI::GetInjectedBundleInitializationUserDataCallbackTest::initialize):
        Send the initialization user data back up to the UI Process.

        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        Check that the message received from the injected bundle matches the user data it was
        initialized with in the callback.
        (TestWebKitAPI::getInjectedBundleInitializationUserData):
        Return the user data that the injected bundle should be initialized with.
        (TestWebKitAPI::TEST):
        Set up the context and use WKContextSetInitializationUserDataForInjectedBundle to set the
        initialization user data (which should be overridden by the user data returned in
        getInjectedBundleInitializationUserData).
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins_Bundle.cpp: Added.
        (TestWebKitAPI::InjectedBundleInitializationUserDataCallbackWinsTest::initialize):
        Send the initialization user data back up to the UI Process.

2012-07-06  Dongwoo Im  <dw.im@samsung.com>

        [EFL][GTK] jhbuild : Disable pixman demos build depending on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90593

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules: Give '--enable-gtk=no' option to pixman.
        * gtk/jhbuild.modules: Give '--enable-gtk=no' option to pixman.

2012-07-06  Luciano Wolf <luciano.wolf@openbossa.org>

        [Qt] DumpRenderTree does not use 'monospace' font when directed
        https://bugs.webkit.org/show_bug.cgi?id=85203

        The test fonts used for Qt tests were moved to the Liberation font family.

        Due to this change we are skipping tons of tests. They will be gradually
        unskipped in batches, ASAP.

        Also, the now unneeded special font configuration for Qt5 WK1 was removed.

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):

2012-07-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Buildfix for newer Qt5
        https://bugs.webkit.org/show_bug.cgi?id=90519

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.pro: We also need to depend on gui-private in the MiniBrowser to get access to these headers.
        * MiniBrowser/qt/MiniBrowserApplication.h: Include qpa/qwindowsysteminterface.h instead of deprecated qwindowsysteminterface_qpa.h
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp: Include qpa/qwindowsysteminterface.h instead of deprecated qwindowsysteminterface_qpa.h

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Make use of Qt5 qmake's changed makefile recursion behavior

        When not using the -r option, qmake now interleaves qmake and make calls,
        so we don't need custom logic for this. There's also an option to supress
        the effect of the -r option, which we use to make WebKit.pro the only
        project file parsed in a recursive qmake-run.

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

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Remove custom qmake logic for module creation

        Qmake now has the necessary hooks to cleanly override the build locations.

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

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_pre.prf:

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Add top-level .qmake.conf

        With Qt5, this makes setting $QMAKEPATH externally unnecessary.

        The magic in the perl scripts to set QMAKEPATH is still there, as it doesn't
        hurt, and is still required for Qt4.

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

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_pre.prf:

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Unify qtFeatureDefaults code paths

        There's no reason to run qmake on features.prf directly anymore, as we
        can selectivly run configure tests in the project file now.

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

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        * qmake/configure.pri:
        * qmake/mkspecs/features/features.prf:

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Don't let qt_webkit.pri proclaim its own location

        This won't work any more with recent Qt5 versions, as the forwarding
        pri is created by qt_module_config, which needs MODULE_PRI to be set
        up already.

        We also need to load build_config, not qt_module.

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

        Reviewed by Tor Arne Vestbø.

        * qmake/qt_webkit.pri:

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Remove redundant CONFIG+=module

        qt_module_config takes care of that.

        In api.pri we are actually testing the flag ourselves, so now we need to
        test a related flag qt_module_config sets instead.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf:

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Switch to new-style Qt 5 configure tests

        Use explicit project file action instead of syncqt magic.

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

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):
        * qmake/configure.pri: Copied from Tools/qmake/configure.pro.
        * qmake/configure.pro:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile: Removed.

2012-07-05  Jason Liu  <jason.liu@torchmobile.com.cn>

        Add Jason Liu to committers.py.
        https://bugs.webkit.org/show_bug.cgi?id=90654

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-05  Benjamin Poulain  <bpoulain@apple.com>

        Double release of resources if the load is canceled in a callback of ResourceLoader::didFinishLoading
        https://bugs.webkit.org/show_bug.cgi?id=90431

        Reviewed by Anders Carlsson.

        Add a Mac API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/CancelLoadFromResourceLoadDelegate.html: Added.
        * TestWebKitAPI/Tests/mac/CancelLoadFromResourceLoadDelegate.mm: Added.
        (-[CancelLoadFromResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[CancelLoadFromResourceLoadDelegateFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-07-05  Dave Tharp  <dtharp@codeaurora.org>

        Adding myself as committer to committers.py

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-05  Alexey Proskuryakov  <ap@apple.com>

        [Mac][WK2] Enable HTTPS tests
        https://bugs.webkit.org/show_bug.cgi?id=90600

        Reviewed by Brady Eidson.

        * DumpRenderTree/mac/DumpRenderTree.mm: (dumpRenderTree): Removed a misleading comment.
        It explained why we were doing this here instead of a frame load delegate, but that's
        just history, not an explanation of why we need this code.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm: (WTR::InjectedBundle::platformInitialize):
        Ignore certificate errors for localhost and 127.0.0.1. Since this is only needed
        for tests, it seems appropriate to have platform specific solutions in every WTR,
        and not add a WebKit2 API.

2012-07-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove rpath-hacks in qt_webkit.pri

        Having it in qt_webkit.pri meant that all client apps would inherit the rpath,
        even if they were not using QtWebKit.

        This is a regression for people who build client apps against a non-installed
        QtWebKit, as the client app will be missing a rpath to the standalone WebKit
        build dir. This can be solved by LD_LIBRARY_PATH or custom QMAKE_RPATHDIR
        logic, until the real issue is fixed in Qt.

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/rpath.prf:
        * qmake/qt_webkit.pri:

2012-07-05  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Enable the CUSTOM_SCHEME_HANDLER feature as default.
        https://bugs.webkit.org/show_bug.cgi?id=88608

        Reviewed by Hajime Morita.

        * Scripts/webkitperl/FeatureList.pm: Enable the CUSTOM_SCHEME_HANDLER feature as default.

2012-07-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [Wk2][EFL] EFL needs a WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=87659

        Reviewed by Kenneth Rohde Christiansen.

        Add an implementation of WebKitTestRunner for Efl port.

        * CMakeLists.txt: Includes WebKitTestRunner build script.
        * Scripts/build-webkittestrunner: Added knowledge of WebKitTestRunner/Efl.
        * Scripts/webkitpy/layout_tests/port/efl.py: Ditto.
        (EflPort.setup_environ_for_server):
        * WebKitTestRunner/CMakeLists.txt: Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/efl/ActivateFontsEfl.cpp: Added.
        * WebKitTestRunner/InjectedBundle/efl/InjectedBundleEfl.cpp: Added.
        * WebKitTestRunner/InjectedBundle/efl/LayoutTestControllerEfl.cpp: Added.
        * WebKitTestRunner/PlatformEfl.cmake: Added.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/config.h: Added knowledge of WebKitTestRunner/Efl.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp: Added.
        * WebKitTestRunner/efl/TestControllerEfl.cpp: Added.
        * WebKitTestRunner/efl/main.cpp: Added.
        (main):

2012-07-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View needs API to load HTML data
        https://bugs.webkit.org/show_bug.cgi?id=90540

        Reviewed by Kenneth Rohde Christiansen.

        Update EFL MiniBrowser to catch the "load,error" signal
        on the view and display an error page.

        * MiniBrowser/efl/main.c:
        (on_error):
        (browserCreate):

2012-07-05  Sergio Villar Senin  <svillar@igalia.com>

        Hidden dirs are not copied when creating the built product archive
        https://bugs.webkit.org/show_bug.cgi?id=90559

        Reviewed by Carlos Garcia Campos.

        Hidden dirs are not copied inside the built product archive
        because the recursive copy command was ignoring them. We need those
        hidden directories for the GTK WebKit2 testing bot to work fine.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): replaced "*" by "." to include hidden
        dirs/files.

2012-07-04  Yoshifumi Inoue  <yosin@chromium.org>

        Unreviewed Chromium gardening, Disable always failed python tests on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=90587

        PortTest.qt_linux and mac_lion are always failed on Chromium Windows at
        creating child process.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (PortTest.disabled_test_qt_linux):
        (PortTest.disabled_test_mac_lion):

2012-07-04  Yoshifumi Inoue  <yosin@chromium.org>

        [Tools] webkit_unittest.py got assertion
        https://bugs.webkit.org/show_bug.cgi?id=90579

        Reviewed by Hajime Morita.

        This patch updates expectation of assertion in test_skipped_directories_for_symbols().
        r121874 added new (exclude) directory (inspector/styles/variables), however it didn't
        update one of two assertions.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2012-07-04  Balazs Ankes  <bank@inf.u-szeged.hu>

        webkit-patch should add reviewer if "Reviewed by NOBODY ..." is missing
        https://bugs.webkit.org/show_bug.cgi?id=67935

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.set_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_set_reviewer):
        (test_set_short_description_and_bug_url):

2012-07-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121862.
        http://trac.webkit.org/changeset/121862
        https://bugs.webkit.org/show_bug.cgi?id=90569

        It broke built-product-archive for GTK, Qt and EFL (Requested
        by svillar on #webkit).

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

2012-07-04  Sergio Villar Senin  <svillar@igalia.com>

        Hidden dirs are not copied when creating the built product archive
        https://bugs.webkit.org/show_bug.cgi?id=90559

        Reviewed by Carlos Garcia Campos.

        Hidden dirs are not copied inside the built product archive because
        the recursive copy command was ignoring them. We need those hidden
        directories for the GTK WebKit2 testing bot to work fine.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): removed the trailing "*" from the copy
        command.

2012-07-04  John Mellor  <johnme@chromium.org>

        Text Autosizing: Add compile flag and runtime setting
        https://bugs.webkit.org/show_bug.cgi?id=87394

        This patch renames Font Boosting to Text Autosizing.

        Reviewed by Adam Barth.

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

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Replace deprecated IN_PWD with PWD

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/default_pre.prf:

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't try to build WTR twice

        Reviewed by Csaba Osztrogonác.

        * Tools.pro:

2012-07-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121821.
        http://trac.webkit.org/changeset/121821
        https://bugs.webkit.org/show_bug.cgi?id=90551

        This patch did not receive a high-quality review and has a
        number of errors (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Build.results_url):
        * Scripts/webkitpy/common/net/buildbot/chromiumbuildbot.py:
        (ChromiumBuilder.accumulated_results_url):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand.__init__):
        (Rebaseline):
        (Rebaseline._builder_to_pull_from):
        (Rebaseline._tests_to_update):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline.mock_builder_to_pull_from):
        (test_rebaseline):

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of un-needed QT += declarative for Qt 5

        The declarative module has been renamed to quick1 in Qt 5, and the
        engine-only module for Qt 5 is named 'qml'. For many of the instances
        we could just remove 'declarative', since the project file was only
        used for Qt5/WebKit2 builds. In the other cases the module was wrapped
        in a haveQt(4) scope.

        Reviewed by Csaba Osztrogonác.

        * MiniBrowser/qt/MiniBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove a few un-needed load(features) after r121777

        The features are computed by configure.pro and cached in .qmake.cache.

        Reviewed by Jocelyn Turcotte..

        * MiniBrowser/qt/raw/Target.pri:

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use haveQtModule() in project files instead of manual checks

        Reviewed by Jocelyn Turcotte.

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

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix haveQtModule() check

        Without {} brackets we were pulling out the value of the module.name variable.

        Reviewed by Jocelyn Turcotte.

        * qmake/mkspecs/features/functions.prf:

2012-07-04  Sergio Villar Senin  <svillar@igalia.com>

        [WK2] [GTK] WK2 testing bot unable to find the InjectedBundle library
        https://bugs.webkit.org/show_bug.cgi?id=90541

        Reviewed by Carlos Garcia Campos.

        We must add the contents of WebKitBuild/*/Libraries/ directory to
        the file to be uploaded to b.w.o to successfully run WebKit2 tests
        in the WebKit2 testing bot.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): appended Libraries to the list of
        neededDirectories.

2012-07-04  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] WebKit2 testing bot unable to find the build directory
        https://bugs.webkit.org/show_bug.cgi?id=90523

        Reviewed by Carlos Garcia Campos.

        The presence of GNUmakefile was used to determine whether a given
        directory was a valid build directory or not. That's not correct for
        testing bots as we export only the minimum required stuff to run the
        tests.

        * gtk/common.py:
        (get_build_path.is_valid_build_directory): added an extra check.:

2012-07-04  Joe Thomas  <joethomas@motorola.com>

        Adding myself to committers list.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-03  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View should report the load progress
        https://bugs.webkit.org/show_bug.cgi?id=90457

        Reviewed by Kenneth Rohde Christiansen.

        Update EFL MiniBrowser so that it listens for the
        "load,progress" on the Ewk_View and updates its
        window title accordingly.

        * MiniBrowser/efl/main.c:
        (title_set):
        (on_title_changed):
        (on_progress):
        (browserCreate):

2012-07-03  Dirk Pranke  <dpranke@chromium.org>

        disable failing mock-chromium-mac python unit tests

        Unreviewed, build fix.

        Disable these tests until I can figure out why they're failing
        on the bots.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (PortTest.disabled_test_chromium_mac_lion):
        (PortTest.disabled_test_chromium_mac_lion_in_test_shell_mode):

2012-07-03  Ian Vollick  <vollick@chromium.org>

        Add vollick to the list of committers
        https://bugs.webkit.org/show_bug.cgi?id=90512

        Reviewed by Adrienne Walker.

        * Scripts/webkitpy/common/config/committers.py:

2012-07-03  Ojan Vafai  <ojan@chromium.org>

        Improve webkit-patch rebaseline to work for more cases
        https://bugs.webkit.org/show_bug.cgi?id=90504

        Reviewed by Dirk Pranke.

        -Makes it work for the build.chromium.org bots.
        -Lets you rebaseline all builders instead of just one.
        -Lets you pass in the builder or test to rebaseline.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Build.results_url):
        Make this work for build.chromium.org builders as well.

        * Scripts/webkitpy/common/net/buildbot/chromiumbuildbot.py:
        (ChromiumBuilder):
        (ChromiumBuilder.latest_cached_build):
        ChromiumBuilder doesn't support large parts of the Builder interface.
        This provides the bare minimum for this patch to work. Eventually,
        we should create a single interface that can be supported for both
        sets of buildbots.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (builder_path_from_name):
        (all_builder_names):
        memoizing here is incorrect because the test override _exact_matches,
        so these can return different values. In either case, I'm pretty sure these
        are not remotely hot codepaths.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand.__init__):
        (Rebaseline):
        (Rebaseline.__init__):
        (Rebaseline._builders_to_pull_from):
        (Rebaseline._builder_with_name):
        (Rebaseline._tests_to_update):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline.mock_builders_to_pull_from):
        (test_rebaseline):
        (test_rebaseline_command_line_flags):
        (test_rebaseline_multiple_builders):
        (test_rebaseline_multiple_builders.mock_builders_to_pull_from):
        (test_rebaseline_multiple_builders.mock_tests_to_update):

2012-07-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable CSS variables support at compile time
        https://bugs.webkit.org/show_bug.cgi?id=90448

        Reviewed by Kenneth Rohde Christiansen.

        Turn on CSS_VARIABLES flag by default on EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-03  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up exception handling and make sure we log some more failures
        https://bugs.webkit.org/show_bug.cgi?id=90503

        Reviewed by Ojan Vafai.

        There were several places where exceptions weren't getting
        logged, most notably if you passed a bad value to --platform.
        This change tests that and cleans things up a bit; more cleanup
        will be possible when we rework the manager_worker_broker code.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_BrokerConnection.raise_exception):
        (_InlineWorkerConnection.raise_exception):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.run):
        (Worker.kill_driver):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_unsupported_platfrom):

2012-07-03  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix mock port
        https://bugs.webkit.org/show_bug.cgi?id=90500

        Reviewed by Ojan Vafai.

        The MockDRT code was never updated when we switched the chromium
        ports to using "drt mode" by default. This change updates that
        code, fixes a typo in the chromium port that went undetected
        (default_test_timeout_ms -> default_timeout_ms), and adds tests
        that actually exercise some of the mock ports. These tests are
        useful in that they will exercise the port-specific code in an
        end-to-end-manner, but they are a bit slow for some reason (>1s
        each) that I need to look into.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.stop):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (TestChromiumAndroidPort.test_default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (main):
        (parse_options):
        (MockTestShell):
        (MockTestShell.output_for_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTTest.assertTest):
        (MockTestShellTest):
        (MockTestShellTest.make_drt):
        (MockTestShellTest.test_test_shell_parse_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (PortTest):
        (PortTest.assert_mock_port_works):
        (PortTest.test_chromium_mac_lion):
        (PortTest.test_chromium_mac_lion_in_test_shell_mode):
        (PortTest.test_qt_linux):
        (PortTest.test_mac_lion):

2012-07-03  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make the worker class stand alone with a cleaner interface
        https://bugs.webkit.org/show_bug.cgi?id=90409

        Reviewed by Ojan Vafai.

        Currently the Worker class derives from AbstractWorker, which is
        kind of crufty and awkward; it would be better if we did not
        rely on shared state.

        This change changes that so that Worker derives from object, and
        exposes the following interface:
          __init__() - called in the manager process
          safe_init() - called in the worker process to initialize
            unpicklable state
          handle() - a single routine to handle all messages
          cleanup() - called so the worker can clean up

        Also, all of the "administrative" messages that are handled by
        the worker (notification of start/stop/etc.) move into
        manager_worker_broker - this reduces worker.py to just handling
        the mechanics of actually running each test.

        For the moment, we do this by creating Yet Another wrapper/proxy
        class in manager_worker_broker, but this will get simpler
        shortly when the rest of m_w_b is cleaned up.

        With this change worker is now in its new form but there will be
        a follow-on change that cleans up some names and other minor
        things.

        This change is again mostly just moving things around and should
        be covered by the (updated) existing tests.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (AbstractWorker.__init__):
        (AbstractWorker.run):
        (AbstractWorker):
        (AbstractWorker.handle_stop):
        (AbstractWorker.handle_test_list):
        (AbstractWorker.yield_to_broker):
        (AbstractWorker.post_message):
        (_WorkerConnection.__init__):
        (_Process.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker):
        (_TestWorker.__init__):
        (_TestWorker.name):
        (_TestWorker.cleanup):
        (_TestWorker.handle):
        (_TestWorker.safe_init):
        (_TestWorker.stop):
        (_TestsMixin.handle_finished_test):
        (_TestsMixin.setUp):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker):
        (Worker.__init__):
        (Worker.safe_init):
        (Worker.handle):

2012-07-03  Dirk Pranke  <dpranke@chromium.org>

        nrwt: moving child process logging code into manager_worker_broker
        https://bugs.webkit.org/show_bug.cgi?id=90408

        Reviewed by Ojan Vafai.

        Users of manager_worker_broker should not have to be aware of
        whether they're in the same process or different processes and
        configure logging themselves; mwb should hide this complexity.
        We can't quite do this completely/correctly yet, since the
        manager expects to get a list of messages to log, but this
        change fixes the worker side of it, at least.

        This is just moving code around, there is no new functionality
        and this should be covered by existing tests.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.__init__):
        (_WorkerConnection.__init__):
        (_WorkerConnection.post_message):
        (_WorkerConnection):
        (_WorkerConnection.set_up_logging):
        (_WorkerConnection.clean_up_logging):
        (_InlineWorkerConnection.run):
        (_MultiProcessWorkerConnection.run):
        (_WorkerLogHandler):
        (_WorkerLogHandler.__init__):
        (_WorkerLogHandler.emit):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.run):
        (_TestsMixin.handle_done):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.run):
        (Worker._run_test):
        (Worker.cleanup):
        (Worker.run_single_test):

2012-07-03  Tony Chang  <tony@chromium.org>

        [chromium] Don't archive build files generated by VS2010
        https://bugs.webkit.org/show_bug.cgi?id=90493

        Reviewed by Ojan Vafai.

        In particular, the pch (pre compiled header) files are gigantic, making
        release.zip almost a 1gb in size.

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

2012-07-03  Tony Chang  <tony@chromium.org>

        [chromium] Unreviewed, update .gitignore to handle VS2010 files.

        * .gitignore:
        * DumpRenderTree/DumpRenderTree.gyp/.gitignore:
        * TestWebKitAPI/TestWebKitAPI.gyp/.gitignore:

2012-07-03  Ojan Vafai  <ojan@chromium.org>

        Have webkit-patch rebaseline use rebaseline-test-internal
        https://bugs.webkit.org/show_bug.cgi?id=90491

        Reviewed by Dirk Pranke.

        This lets it handle new files, reduces duplicate code and lays the
        groundwork for making rebaseline have a richer interface.

        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuild):
        (MockBuild.__init__):
        (MockBuilder.build):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand._files_to_add):
        (Rebaseline):
        (Rebaseline._builder_to_pull_from):
        (Rebaseline._tests_to_update):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_overrides_are_included_correctly):
        (test_rebaseline):
        (test_rebaseline.mock_builder_to_pull_from):
        (test_rebaseline.mock_tests_to_update):

2012-07-03  Ojan Vafai  <ojan@chromium.org>

        Rename rebaseline-test to rebaseline-test-internal
        https://bugs.webkit.org/show_bug.cgi?id=90485

        Reviewed by Adam Barth.

        It's now only used by other rebaseline commands. It's still useful to leave it
        as it's own command to aid in debugging when something goes wrong. In a followup
        patch, I'll make webkit-patch rebaseline cover any use-cases that rebaseline-test
        might have covered.

        We no longer need the --print-scm-changes option since the only caller always passes
        that option in.

        Also, make all the arguments command-line flags instead. Simplifies the code
        a bit in my opinion.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest):
        (RebaselineTest.__init__):
        (RebaselineTest.execute):
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_all):

2012-07-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Get rid of using DumpRenderTreeSupportQt
        https://bugs.webkit.org/show_bug.cgi?id=90262

        Unreviewed build fix.

        Reverting r121550 manually because it caused build
        break on ARM and Mac. It turned out that the Qt build
        system is too broken for this change now, first we have
        to address two issues:
            * symbol hiding was forbidden accidentally on x86 Linux
            * Qt lacks a separate library for test support

        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::resetAfterTest):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2012-07-03  Tony Chang  <tony@chromium.org>

        [chromium] Handle trailing backslash on %VSINSTALLDIR%
        https://bugs.webkit.org/show_bug.cgi?id=90410

        Reviewed by Ojan Vafai.

        * Scripts/webkitdirs.pm:
        (buildChromiumVisualStudioProject): Handle VSINSTALLDIR ending in a backslash, the backslash escapes the closing double quote.

2012-07-02  Ojan Vafai  <ojan@chromium.org>

        Make the skia_test_expectations.txt file optional.
        https://bugs.webkit.org/show_bug.cgi?id=90400

        Reviewed by Dirk Pranke.

        It used to be optional. This regressed at some point. It's important that it be
        optional so that webkit-patch commands work in a pure-webkit checkout for chromium bots.
        Specifically, this was breaking webkit-patch rebaseline-test when it would go to update
        TestExpectations.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_expectations_dict):

2012-07-03  Raphael Kubo da Costa  <rakuco@webkit.org>

        [jhbuild][EFL] Bump libffi dependency.
        https://bugs.webkit.org/show_bug.cgi?id=85373

        Reviewed by Gustavo Noronha Silva.

        Update libffi to 3.0.11, which fixes the build on some platforms
        where 3.0.10 had problems.

        * efl/jhbuild.modules:

2012-07-03  George Staikos  <staikos@webkit.org>

        [BlackBerry] Enable microdata support for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=90429

        Reviewed by Rob Buis.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make use of .qmake.cache for caching features

        Instead of loading() features from the files that need them (and re-running
        a bunch of checks), we now run feature detection as part of configure.pro,
        and have build-webkit write the computed feature-defines and CONFIG to
        .qmake.cache, which is then loaded by qmake _before_ even defaults_pre
        when building WebKit.pro.

        At some point we'll be able to selectivly prevent running of config tests
        in configure.pro, which means we don't need a separate code-path for
        the build-webkit --help case.

        We should also move the code in build-webkit that now uses .webkit.config
        to detect clean builds, to use .qmake.cache, since we now store the same
        thing there.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (buildQMakeProjects):
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/.qmake.conf: Added.
        * qmake/configure.pro:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:

2012-07-03  Nico Weber  <thakis@chromium.org>

        -Wunused-private-field cleanup, linux edition
        https://bugs.webkit.org/show_bug.cgi?id=90463

        Reviewed by Stephen White.

        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/GamepadController.h:
        (GamepadController):
        * DumpRenderTree/chromium/NotificationPresenter.h:
        (NotificationPresenter::NotificationPresenter):
        (NotificationPresenter):

2012-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121766.
        http://trac.webkit.org/changeset/121766
        https://bugs.webkit.org/show_bug.cgi?id=90465

        It caused flakey build errors on the bots (Requested by Ossy
        on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (buildQMakeProjects):
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/.qmake.conf: Removed.
        * qmake/configure.pro:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:

2012-07-03  George Staikos  <staikos@webkit.org>

        [BlackBerry] Enable Custom Scheme Handlers for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=90422

        Reviewed by Rob Buis.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-03  George Staikos  <staikos@webkit.org>

        [BlackBerry] Enable RegisterProtocolHandler for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=90422

        Reviewed by Rob Buis.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-03  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Add run API tests as a step on the build bots
        https://bugs.webkit.org/show_bug.cgi?id=87252

        Reviewed by Daniel Bates.

        Run EFL API test suite on the build bots.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunEflAPITests):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        * Scripts/run-efl-tests: Added.

2012-07-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make use of .qmake.cache for caching features

        Instead of loading() features from the files that need them (and re-running
        a bunch of checks), we now run feature detection as part of configure.pro,
        and have build-webkit write the computed feature-defines and CONFIG to
        .qmake.cache, which is then loaded by qmake _before_ even defaults_pre
        when building WebKit.pro.

        At some point we'll be able to selectivly prevent running of config tests
        in configure.pro, which means we don't need a separate code-path for
        the build-webkit --help case.

        We should also move the code in build-webkit that now uses .webkit.config
        to detect clean builds, to use .qmake.cache, since we now store the same
        thing there.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (buildQMakeProjects):
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/.qmake.conf: Added.
        * qmake/configure.pro:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:

2012-07-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>  Joel Dillon <joel.dillon@codethink.co.uk>

        [Qt][Win] Fix broken QtWebKit5.lib linking
        https://bugs.webkit.org/show_bug.cgi?id=88321

        Reviewed by Kenneth Rohde Christiansen.

        On windows the import/export definition is part of the symbol's signature.
        Define STATICALLY_LINKED_WITH_$$library for each dependend module
        that is being linked statically to make sure that they can be linked together
        later on.

        Also do not compile Assertions.cpp in DumpRenderTree anymore since all the
        used symbols are exported and it would cause a duplicate symbols error.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * qmake/mkspecs/features/default_post.prf:

2012-07-03  Szilard Ledan  <szledan@inf.u-szeged.hu>

        master.cfg cleanup, pass BuildStep instances instead of BuildStep subclasses
        https://bugs.webkit.org/show_bug.cgi?id=89001

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (UploadBuiltProduct.__init__):
        (UploadTestResults.__init__):
        (ExtractTestResults.__init__):
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (BuildAndPerfTestWebKit2Factory.__init__):
        (DownloadAndPerfTestFactory.__init__):

2012-07-03  Ádám Kallai  <kadam@inf.u-szeged.hu>

        Update unit test after r121724.
        https://bugs.webkit.org/show_bug.cgi?id=90444

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline_new_port):

2012-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121749.
        http://trac.webkit.org/changeset/121749
        https://bugs.webkit.org/show_bug.cgi?id=90441

        Tests crash on the paralel NRWT Qt bot (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._build_driver):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):
        (XvfbDriver._start.x_filter):
        (XvfbDriver.stop):

2012-07-03  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] XvfbDriver should choose the next free display
        https://bugs.webkit.org/show_bug.cgi?id=88414

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver.__init__):
        (XvfbDriver._start):
        (XvfbDriver._start.next_free_id):
        (XvfbDriver.stop):

2012-07-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable MICRODATA support
        https://bugs.webkit.org/show_bug.cgi?id=90377

        Reviewed by Kenneth Rohde Christiansen.

        Turn on MICRODATA flag for EFL port by default.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-02  George Staikos  <staikos@webkit.org>

        [BlackBerry] Enable scoped style for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=90418

        Reviewed by Rob Buis.

        * Scripts/webkitperl/FeatureList.pm:

2012-07-02  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Use PUBLIC_BUILD to enable/disable DRT
        https://bugs.webkit.org/show_bug.cgi?id=90271

        Reviewed by George Staikos.

        RIM PR #154707

        Currently DRT code will be compiled only if ENABLE_DRT is set, and it's not
        defined by default.
        We should enable DRT by default unless PUBLIC_BUILD is set. In this way we don't
        need to rebuild webkit before running DRT.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2012-07-02  Ojan Vafai  <ojan@chromium.org>

        webkit-patch rebaseline-expectations should share code with rebaseline-all
        https://bugs.webkit.org/show_bug.cgi?id=90413

        Reviewed by Dirk Pranke.

        Make them share code. In addition to reducing code duplication this makes
        rebaseline-expectations considerably faster by rebaselining in parallel.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand):
        (AbstractParallelRebaselineCommand._run_webkit_patch):
        (AbstractParallelRebaselineCommand._rebaseline):
        (RebaselineJson):
        (RebaselineJson.execute):
        (RebaselineExpectations):
        (RebaselineExpectations._update_expectations_file):
        (RebaselineExpectations._tests_to_rebaseline):
        (RebaselineExpectations._add_tests_to_rebaseline_for_port):
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_all):
        (test_rebaseline_expectations.run_in_parallel):
        (test_rebaseline_expectations):

2012-07-02  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] Update DumpRenderTree to have it work interactively in parallel
        https://bugs.webkit.org/show_bug.cgi?id=88326

        Reviewed by Rob Buis.

        1. Test name is sent to torch-launcher via PPS message(from host machine).
           So we get test list by monitoring and receiving PPS message instead of
           reading file index.drt.
        2. Torch-launcher create a <test file>.done file when it finished a test.
        3. We don't need to search for Ref-tests in DumpRenderTree.cpp any more. NRWT
           will get them for us.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::DumpRenderTree):
        (BlackBerry::WebKit::DumpRenderTree::doneDrt):
        (BlackBerry::WebKit::DumpRenderTree::runRemainingTests):
        (BlackBerry::WebKit::DumpRenderTree::ensurePPS):
        (WebKit):
        (BlackBerry::WebKit::DumpRenderTree::handlePPSData):
        (BlackBerry::WebKit::DumpRenderTree::waitForTest):
        (BlackBerry::WebKit::DumpRenderTree::runTests):
        (BlackBerry::WebKit::DumpRenderTree::dump):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (DumpRenderTree):

2012-07-02  Adam Barth  <abarth@webkit.org>

        Remove flashplugin-installer from the EWS image because it causes some tests to crash
        https://bugs.webkit.org/show_bug.cgi?id=90403

        Reviewed by Tony Chang.

        * EWSTools/cold-boot.sh:

2012-07-02  Leandro Gracia Gil  <leandrogracia@chromium.org>

        [Chromium] Implement a Layout Test for editing/SurroundingText
        https://bugs.webkit.org/show_bug.cgi?id=82461

        Reviewed by Ryosuke Niwa.

        Add a new method to the layout test controller in order to retrieve the
        text surrounding a provided element.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::textSurroundingElement):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):

2012-07-02  Ojan Vafai  <ojan@chromium.org>

        Delete unused rebaseline method in gardeningserver.py
        https://bugs.webkit.org/show_bug.cgi?id=90396

        Reviewed by Eric Seidel.

        As best I can tell, the only usage was in this unittest.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.updateexpectations):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline_new_port):

2012-07-02  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r121497): It switched off and broke many unittests
        https://bugs.webkit.org/show_bug.cgi?id=90371

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest): Use snowleopard as os_version instead of leopard, because it isn't supported anymore.
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        (ChromiumPortTestCase.test_all_test_configurations): Remove leopard testcases, because it isn't supported anymore.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase): Inherit class PortTestCase from unittest.TestCase instead of object.

2012-07-02  Ojan Vafai  <ojan@chromium.org>

        Move rebaseline-all command from the gardening-server down into webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=90395

        Reviewed by Adam Barth.

        This is just moving code. It it in preparation for making rebaseline-expectations
        use the same code in order to get the parallelism benefits and reduces the amount
        of code we have for doing rebaselines.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_apply_patch):
        Updated due to the change to executive_mock.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_command):
        Update to print out the input passed to stdin.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        Updated due to executive_mock change.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineAll):
        (RebaselineAll._run_webkit_patch):
        (RebaselineAll._builders_to_fetch_from):
        (RebaselineAll._rebaseline_commands):
        (RebaselineAll._files_to_add):
        (RebaselineAll._optimize_baselines):
        (RebaselineAll._rebaseline):
        (RebaselineAll.execute):
        All this code is just copy-pasted except for mechanical changes
        (e.g. self.server.tool --> self._tool) and the reading in of the 
        JSON from stdin instead of the post body.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_all):
        Copied the test-case out of gardeningserver_unittest.py.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler):
        (GardeningHTTPRequestHandler.rebaseline):
        (GardeningHTTPRequestHandler.rebaselineall):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaselineall):
        (GardeningServerTest.test_rebaselineall.run_command):

2012-07-02  Ojan Vafai  <ojan@chromium.org>

        Remove Leopard support from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=90390

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (nonChromiumPlatform):
        (chromiumPlatform):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):
        * TestResultServer/static-dashboards/run-embedded-unittests.html:
        * TestResultServer/static-dashboards/run-unittests.html:

2012-07-02  Ojan Vafai  <ojan@chromium.org>

        Fix posting from garden-o-matic. This broke in moving away from jquery's ajax method
        in http://trac.webkit.org/changeset/121617.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:

2012-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Read fonts path when running layout tests from alternative fonts dir when main dir doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=89437

        Reviewed by Martin Robinson.

        If main fonts directory doesn't exist, try with an alternative
        fonts directory at build directory.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getOutputDir):
        (getFontsPath):
        (initializeFonts):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR):
        (WTR::getFontsPath):
        (WTR::inititializeFontConfigSetting):

2012-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't run the tests with jhbuild wrapper if it's already running under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=89435

        Reviewed by Martin Robinson.

        * Scripts/new-run-webkit-tests: Don't run the tests with the
        jhbuild wrapper if there isn't a Dependencies directory inside the
        build directory.

2012-06-29  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Simplify detection of non-installed module file

        Has the additional advantage that we do not rely on additional information.

        Reviewed by Tor Arne Vestbø.

        * qmake/qt_webkit.pri:

2012-07-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add Gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=90170

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/webkitperl/FeatureList.pm: Turn on GAMEPAD flag
        by default for EFL port.
        * efl/jhbuild.modules: Bump dependency versions of EFL libs
        since the latest Eeze is required for gamepad support.

2012-07-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Using the default start cylinder for fdisk causes a warning about the
        partition not starting on physical sector boundary.  The Ubuntu forums
        recommend using a number that's divisible by 8, which is what we do in
        this patch.

        * EWSTools/cold-boot.sh:

2012-07-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        It turns out we need to use Ubuntu 10.04 to get the right image results
        for chromium-linux. This patch updates our scripts to be compatible
        with Ubuntu 10.04.

        * EWSTools/cold-boot.sh:
            - fdisk doesn't have p and 1 as default commands in 10.04.
        * EWSTools/start-queue.sh:
            - git doesn't understanding the -B argument in 10.04. We've been
              using this change locally on the EC2 bots for a while.

2012-07-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        * EWSTools/boot.sh:
            - We need to start the screen in detached mode so that we can run
              it remotely via ssh.

2012-07-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        * EWSTools/cold-boot.sh:
            - Turns out we need to sudo this command in order for it to
              actually dimiss the EULA screen. :)

2012-06-29  Adam Barth  <abarth@webkit.org>

        Turns out we need zip too.

        * EWSTools/cold-boot.sh:

2012-06-29  Adam Barth  <abarth@webkit.org>

        Add a cold-boot.sh script for the EWS
        https://bugs.webkit.org/show_bug.cgi?id=90330

        Unreviewed.

        * EWSTools/cold-boot.sh: Added.
            - This script can take us from a cold GCE instance to a running EWS
              bot in one fell swoop.
        * EWSTools/start-queue.sh:
            - The if-block at the top of this script was causing trouble. I
              removed it from the bots a while ago. Now that we're using SVN to
              cold-boot the EWS bots, we need to make this change in the repo.

2012-06-29  Luiz Agostini  <luiz.agostini@nokia.com>

        [Qt][WK2] Private non-QtQuick API
        https://bugs.webkit.org/show_bug.cgi?id=84532

        MiniBrowserRaw is an usage example for the QRawWebView API.
        It is only an example and is not fully implemented.

        Reviewed by Noam Rosenthal.

        * MiniBrowser/qt/raw/DerivedSources.pri: Added.
        * MiniBrowser/qt/raw/MiniBrowserRaw.pro: Added.
        * MiniBrowser/qt/raw/Target.pri: Added.
        * MiniBrowser/qt/raw/View.cpp: Added.
        * MiniBrowser/qt/raw/View.h: Added.
        * Scripts/webkitpy/style/checker.py:
        * Tools.pro:

2012-06-29  Ojan Vafai  <ojan@chromium.org>

        Remove leopard bots from garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=90328

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2012-06-29  Ojan Vafai  <ojan@chromium.org>

        garden-o-matic broken: TypeError: 'undefined' is not an object (evaluating 'buildLocations[currentIndex].url')
        https://bugs.webkit.org/show_bug.cgi?id=90243

        Reviewed by Dirk Pranke.

        jQuery was trying to be too smart and parsing the jsonp as json because of it's content-type.
        Excise jQuery and just use XHR directly since it's easier to maintain something where we control it
        all.

        Not really sure how to unittest this. I tested it all manually of course.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:
        Made net.ajax a drop-in replacement for the features of $.ajax that we were using.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        Not related to this patch, but figured I'd update the failing test while I was at it.

2012-06-29  Yaron Friedman  <yfriedman@chromium.org>

        Fix layout test runner for Android after https://bugs.webkit.org/show_bug.cgi?id=88134
        https://bugs.webkit.org/show_bug.cgi?id=90309

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_http_server):

2012-06-29  James Weatherall  <wez@chromium.org>

        NPObjectWrapper may not address all window script object lifetime issues
        https://bugs.webkit.org/show_bug.cgi?id=85679

        TestNetscapePlugin now has a leak-window-scriptable-object test which takes a reference to the window script object, and a second reference to it via the "self" property, and does not release those references. This is used to simulate a leaky plugin in layout tests of the NPAPI scripting interface glue code.

        Reviewed by Nate Chapin.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetProperty):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest):
        * DumpRenderTree/TestNetscapePlugIn/Tests/LeakWindowScriptableObject.cpp: Added.
        (LeakWindowScriptableObject):
        (LeakWindowScriptableObject::LeakWindowScriptableObject):
        (LeakWindowScriptableObject::NPP_New):

2012-06-29  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: add comment about how determine_full_port_name() works for apple ports, fix -wk2 bug
        https://bugs.webkit.org/show_bug.cgi?id=90314

        Reviewed by Ojan Vafai.

        Add comments and fix a bug in how we would handle the mac-wk2
        and win-wk2 port names after confusion around in bug 90312 :).

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.determine_full_port_name):

2012-06-29  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove support for mac leopard from chromium configurations
        https://bugs.webkit.org/show_bug.cgi?id=90313

        Reviewed by Tony Chang.

        Google has shipped the last version of Chrome that will support
        Mac OS 10.5 (Leopard), and we no longer have bots that run this
        configuration, so we're removing support for it.

        A subsequent change will remove the baselines in platform/chromium-mac-leopard.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_complex_shadowing):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_versions):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_mac):
        (FactoryTest.test_chromium_mac):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_and_copy_test_with_lion_result):

2012-06-29  Ojan Vafai  <ojan@chromium.org>

        Fix optimize-baselines to not move baselines from win to win-7sp0
        https://bugs.webkit.org/show_bug.cgi?id=90312

        Reviewed by Dirk Pranke.

        It used to consider win-7sp0 as the common directory for all the Apple
        windows ports and incorrectly move results out of win.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_win_does_not_drop_to_win_7sp0):
        (BaselineOptimizerTest.test_common_directory_includes_root):

2012-06-28  Ojan Vafai  <ojan@chromium.org>

        Fix rebaselining for Qt and Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=90204

        Reviewed by Dirk Pranke.

        -Apporpriately put wk2 results in the -wk2 directories.
        -Since Qt and Apple-Win don't have bots that correspond to the
        platform/qt and platform/win directories, we need to fudge it
        and always put the results in those directories for those ports.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (rebaseline_override_dir):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (_builder_options):
        Identify webkit2 builders by the WK2 in the builder name.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._baseline_directory):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_baseline_directory):

2012-06-29  Zoltan Horvath  <zoltan@webkit.org>

        Add support for --force parameter to run-performance-tests
        https://bugs.webkit.org/show_bug.cgi?id=90279

        Reviewed by Dirk Pranke.

        It's helpful to be able to run tests from the Skipped list of the performance tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._collect_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Add test.
        (test_collect_tests_with_skipped_list):

2012-06-29  Tony Chang  <tony@chromium.org>

        [GTK] Enable CSS grid layout LayoutTests on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90226

        Reviewed by Martin Robinson.

        This feature is disabled via Settings by default, but for testing,
        we enable it using layoutTestController.overridePreferences. Add the
        necessary plumbing for DRT.

        WTR already works because support was added for Apple Mac earlier.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Feature is off by default.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Add handling of WebKitCSSGridLayoutEnabled.

2012-06-29  Ádám Kallai  <kadam@inf.u-szeged.hu>

        [Qt] Added Qt port for garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=82719

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-06-29  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Get rid of using DumpRenderTreeSupportQt
        https://bugs.webkit.org/show_bug.cgi?id=90262

        Reviewed by Alexey Proskuryakov.

        Now that we decided to not support v8 in WebKit2
        we can get rid of using DumpRenderTreeSupportQt
        in WebKitTestRunner.

        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::resetAfterTest):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2012-06-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Revert r121540, it broke most Qt builds

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-06-29  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Make build-webkit reject uknown configurations, eg. --profile

        The qmake-based buildsystem doesn't support it.

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-06-29  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Don't add Qt module dependencies in features.prf

        The required dependencies are already added in WebCore.pri.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-06-27  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Use LIBS_PRIVATE instead of putting dependencies into LIBS

        Reviewed by Tor Arne Vestbø..

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:

2012-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        DOMHTMLCollection::item may return a wrong element after namedItem is called
        https://bugs.webkit.org/show_bug.cgi?id=90240

        Reviewed by Antti Koivisto.

        Add a WebKit API test since namedItem is not used in the JS/V8 binding code.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/HTMLCollectionNamedItem.html: Copied from Tools/TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.html.
        * TestWebKitAPI/Tests/mac/HTMLCollectionNamedItem.mm: Copied from Tools/TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.mm.
        (TestWebKitAPI::TEST):

2012-06-28  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove the 'google-chrome' port code
        https://bugs.webkit.org/show_bug.cgi?id=88824

        Reviewed by Ojan Vafai.

        NRWT now supports passing additional baseline directories
        and expectations files on the command line, so there's no need
        to support the concept of a 'google-chrome' port directly.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.path_to_test_expectations_file):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_win):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py: Removed.
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py: Removed.

2012-06-28  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up how arguments are passed to workers
        https://bugs.webkit.org/show_bug.cgi?id=90126

        Reviewed by Ojan Vafai.

        The way arguments are passed to workers has been crufty. It
        turns out it can be a lot cleaner via two things:
        1) using a factory method instead of instantiating objects
        directly in manager_worker_broker removes the need for passing
        'worker arguments' to the broker.
        2) it turns out that since mock hosts and test ports are purely
        in-memory constructions, they can be pickled and passed to child
        workers, meaning that the worker no longer needs hacky code to
        pass the port in a special case or to guess what to do if we
        don't have a host - all of the test-specific logic can move to
        the test file, where we can stub out the mock host's
        port_factory to return the same already-created port when it
        needs to be shared.

        This change also moves WorkerException to manager_worker_broker.py
        where it belongs, and removes several useless tests that were
        just a maintenance burden (and would've needed rewriting when we
        change the rest of the broker implementation).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests.worker_factory):
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (WorkerException):
        (AbstractWorker.__init__):
        (_ManagerConnection.__init__):
        (_ManagerConnection.start_worker):
        (_InlineManager.__init__):
        (_InlineManager.start_worker):
        (_MultiProcessManager._can_pickle_host):
        (_MultiProcessManager):
        (_MultiProcessManager.start_worker):
        (_WorkerConnection.__init__):
        (_InlineWorkerConnection.__init__):
        (_InlineWorkerConnection.join):
        (_InlineWorkerConnection.run):
        (_Process.run):
        (_MultiProcessWorkerConnection.__init__):
        (_MultiProcessWorkerConnection.start):
        (_MultiProcessWorkerConnection):
        (_MultiProcessWorkerConnection.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestWorker.run):
        (_TestsMixin.test_name):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (InlineBrokerTests.setUp):
        (MultiProcessBrokerTests.setUp):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.run):
        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (logging_run):
        (run_and_capture):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_exception_raised):
        (MainTest.test_keyboard_interrupt):
        (MainTest.test_retrying_and_flaky_tests):
        (MainTest.test_run_order__inline):

2012-06-28  Dirk Pranke  <dpranke@chromium.org>

        nrwt: don't try to catch worker exceptions in run_webkit_tests.__main__
        https://bugs.webkit.org/show_bug.cgi?id=90125

        Reviewed by Ojan Vafai.

        It turns out run_webkit_tests.py wasn't really using
        WorkerException and the catch we had for it was pointless. I've
        removed the symbol import and moved it to the integration tests
        where it is needed. Eventually the definition of the exception
        moves to the broker module, and so minimizing the number of
        users of it is a good thing.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_exception_raised):

2012-06-28  Dirk Pranke  <dpranke@chromium.org>

        nrwt: clean up passing of log messages between processes
        https://bugs.webkit.org/show_bug.cgi?id=90123

        Reviewed by Ojan Vafai.

        It turns out log messages are perfectly picklable by themselves
        and contain the process id of the process that generated the
        message, so if we just pass the record from the worker to the
        manager and call logger.handle() in the manager, everything just
        works :).

        The change is covered by existing tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._log_messages):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (_WorkerLogHandler.emit):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.__init__):
        (_LogHandler.emit):

2012-06-28  Dirk Pranke  <dpranke@chromium.org>

        add a pylint wrapper for linting python code
        https://bugs.webkit.org/show_bug.cgi?id=90232

        Reviewed by Adam Barth.

        Currently we use 'pep8' to check python code in
        check-webkit-style. pep8 is fast but simple; pylint is slower
        but has much more robust linting capabilities and will catch
        variable typos and all sorts of other things. Eventually we
        should switch check-webkit-style to use this, but our code is
        far from linting now so it needs to be cleaned up first.

        This change adds the infrastructure and a wrapper so we can
        start doing that.

        * Scripts/lint-webkitpy: Added.
        * Scripts/webkitpy/pylintrc: Added.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_pylint):

2012-06-28  Tony Chang  <tony@chromium.org>

        [GTK] Use WEBKITOUTPUTDIR to find fonts in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=90215

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Check for WEBKITOUTPUTDIR first.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server): Copy the environment variable to the child process.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting): Check for WEBKITOUTPUTDIR first.

2012-06-28  Dirk Pranke  <dpranke@chromium.org>

        derive ChromiumPort from WebKitPort in NRWT in order to support skipping tests if symbols are missing
        https://bugs.webkit.org/show_bug.cgi?id=89706

        Reviewed by Ojan Vafai.

        Try again to land the change first landed in r121363. This patch
        adds a bunch more tests and reworks the handling of
        port-specific default values for --pixel-tests and --time-out-ms
        to be more consistent (adding a default_pixel_tests() method,
        pushing the webkit default_timeout_ms() value up into base.py,
        and overriding it properly in the chromium and apple mac ports.

        Also change the logic in
        run_webkit_tests._setup_derived_options() to not second-guess
        what the port wants the timeout value to be for debug builds;
        computing this in two different places led to several bugs.

        This change also changes the Chromium unittest ports to derive
        from ChromiumPortTestCase instead of PortTestCase, so that we
        ensure that we're running the same tests on all port variants
        more easily. There's more cleanup that can be done here, but
        this is good enough for now

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_pixel_tests):
        (Port):
        (Port.default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort.__init__):
        (ChromiumPort.default_pixel_tests):
        (ChromiumPort.default_timeout_ms):
        (ChromiumPort.driver_name):
        (ChromiumPort._driver_class):
        (ChromiumPort._missing_symbol_to_skipped_tests):
        (ChromiumPort.skipped_layout_tests):
        (ChromiumPort.setup_test_run):
        (ChromiumPort._path_to_image_diff):
        (ChromiumPort._convert_path):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        (ChromiumAndroidPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort._modules_to_search_for_symbols):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest):
        * Scripts/webkitpy/layout_tests/port/chromium_port_testcase.py:
        split off from chromium_unittest.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._modules_to_search_for_symbols):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_default_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.start_http_server):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_default_timeout_ms):
        (PortTestCase):
        (PortTestCase.test_default_pixel_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.default_pixel_tests):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._modules_to_search_for_symbols):
        (WebKitPort):
        (WebKitPort._symbols_string):
        (WebKitPort._skipped_tests_for_unsupported_features):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort._symbols_string):
        (TestWebKitPort._tests_for_disabled_features):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):

2012-06-28  Joshua Bell  <jsbell@chromium.org>

        run-bindings-tests should return non-zero exit code on test failure
        https://bugs.webkit.org/show_bug.cgi?id=90205

        Reviewed by Adam Barth.

        * Scripts/run-bindings-tests:
        (main):

2012-06-28  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Reset the device scale factor to 1 before each test is run
        https://bugs.webkit.org/show_bug.cgi?id=90212

        Reviewed by Adam Barth.

        Some tests change the device scale factor, so this needs to be reset to
        1.0 at the start of each test to avoid test flakiness.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset):

2012-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup HTMLFormCollection
        https://bugs.webkit.org/show_bug.cgi?id=90111

        Reviewed by Andreas Kling.

        Add a WebKit API test using copy-paste design pattern per kling's request.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.html: Added.
        * TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.mm: Added.
        (-[HTMLFormCollectionNamedItemTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-06-28  Tim Horton  <timothy_horton@apple.com>

        [mac] WKTR windows still don't stay off screen sometimes
        https://bugs.webkit.org/show_bug.cgi?id=90214
        <rdar://problem/11760263>

        Reviewed by Simon Fraser.

        In some cases, the system itself will consult [WebKitTestRunnerWindow frame], so we should refrain from
        overriding it and instead provide a different method to use when we want the web-facing "fake" window origin
        (for PlatformWebView::windowFrame()).

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow frameRespectingFakeOrigin]):
        (WTR::PlatformWebView::windowFrame):

2012-06-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add unit tests for GtkInputMethodFilter
        https://bugs.webkit.org/show_bug.cgi?id=88698

        Reviewed by Carlos Garcia Campos.

        Add unit tests for GtkInputMethodFilter in the WebCore platform layer.
        This change adds the TestGtk test suite which will be used for all non-API
        layer GTK unit tests.

        * TestWebKitAPI/GNUmakefile.am: Update the build to include the new tests.
        * TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp: Added.
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Remove the call to gtk_init here
        as it's now in main.cpp.
        * TestWebKitAPI/gtk/main.cpp: Change the g_type_init call to gtk_init, because now
        a majority of all unit tests depend on GTK+ being initialized.

2012-06-28  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable support for HTML5 datalist
        https://bugs.webkit.org/show_bug.cgi?id=90157

        Reviewed by Martin Robinson.

        Turn on DATALIST flag by default on EFL port to
        support HTML5 datalist tag.

        * Scripts/webkitperl/FeatureList.pm:

2012-06-28  Tony Chang  <tony@chromium.org>

        Enable CSS grid layout LayoutTests on platform Mac
        https://bugs.webkit.org/show_bug.cgi?id=90113

        Reviewed by Ojan Vafai.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Reset the value to NO between tests.

2012-06-28  Mike Fenton  <mifenton@rim.com>

        [BlackBerry] Add watchlist options for Blackberry and editing.
        https://bugs.webkit.org/show_bug.cgi?id=90193

        Unreviewed.

        Add BlackBerry and Editing watchlist and monitor them.

        * Scripts/webkitpy/common/config/watchlist:

2012-06-28  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, upgrade myself to a reviewer!

        http://www.webkit.org/blog/2082/tim-horton-is-now-a-webkit-reviewer/

        * Scripts/webkitpy/common/config/committers.py:

2012-06-28  Terry Anderson  <tdanderson@chromium.org>

        [Chromium] Chromium's LayoutTestController is missing setBackingScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=83635

        Reviewed by Adam Barth.

        Added InvokeCallbackTask, a new derived class of MethodTask. When
        setBackingScaleFactor is called, a call to setDeviceScaleFactor in
        WebView is made and then postTask is used to invoke the callback
        function specified in testRunner.setBackingScaleFactor. 

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (InvokeCallbackTask):
        (InvokeCallbackTask::InvokeCallbackTask):
        (InvokeCallbackTask::runIfValid):
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):

2012-06-28  Ojan Vafai  <ojan@chromium.org>

        Make rebaseline-test and rebaseline-expectations work for non-Chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=90186

        Reviewed by Adam Barth.

        This makes rebaselining work for all ports that have a TestExpectations file
        in the tree. I didn't test other ports.

        This doesn't address 100% of the problem. The rebaseline code puts the expectations
        in the most specific directory and relies on optimize-baselines to merge baselines
        appropriately. This only works if every platform directory has an equivalent bot
        that runs the tests, which is not true for most ports.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder._revision_and_build_for_filename):
        Some bots have filenames that aren't revision/build number pairs
        e.g. they are random junk like aQhxvx. Handle this gracefully.
        (Builder._fetch_revision_to_build_map):
        (Builder._file_info_list_to_revision_to_build_list):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuilderTest.test_build_and_revision_for_filename):
        (BuilderTest.test_file_info_list_to_revision_to_build_list):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        Update the list of builders. This list needs to be kept up
        to date for the rebaseline tool to work.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._results_url):
        (RebaselineExpectations._run_webkit_patch):
        (RebaselineExpectations._rebaseline_port):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        Qt port uses qmake to determine the right version. Systems without qmake correctly fallback
        to a specific version.

2012-06-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][NRWT] Fix baseline and skipped file search path.
        https://bugs.webkit.org/show_bug.cgi?id=89882

        Unreviewed trivial typo fix after r121430.

        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):
        (QtPortTest._assert_skipped_path):

2012-06-28  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt][NRWT] Fix baseline and skipped file search path.
        https://bugs.webkit.org/show_bug.cgi?id=89882

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._search_paths):
        (QtPort):
        (QtPort.baseline_search_path):
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_skipped_path):
        (QtPortTest.test_baseline_search_path):
        (QtPortTest.test_skipped_file_search_path):

2012-06-28  Alexander Pavlov  <apavlov@chromium.org>

        [Qt] inspector/styles/inject-stylesheet.html makes 4 tests flakey (TEXT PASS)
        https://bugs.webkit.org/show_bug.cgi?id=90167

        Reviewed by Csaba Osztrogonác.

        DRT should remove user stylesheets from the page group when resetting before running another test.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2012-06-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][DRT] Reset AcceleratedCompositingEnabled between tests
        https://bugs.webkit.org/show_bug.cgi?id=90164

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):

2012-06-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Restore original value of mock scrollbars between tests
        https://bugs.webkit.org/show_bug.cgi?id=90155

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockScrollbarsEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):

2012-06-27  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/90096> Building within Xcode sometimes does a full rebuild after building via build-webkit

        We need to ensure that build-webkit uses the same setting for SHARED_PRECOMPS_DIR
        as what Xcode itself will use when building, otherwise switching between the two
        can result in the precompiled headers being rebuilt and thus the entire world
        rebuilding.

        Reviewed by Dan Bernstein.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2012-06-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121363, r121367, r121384, and
        r121390.
        http://trac.webkit.org/changeset/121363
        http://trac.webkit.org/changeset/121367
        http://trac.webkit.org/changeset/121384
        http://trac.webkit.org/changeset/121390
        https://bugs.webkit.org/show_bug.cgi?id=90134

        It broke debug NRWT on GTK and on Qt (Requested by Ossy_NIGHT
        on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort.__init__):
        (ChromiumPort._check_file_exists):
        (ChromiumPort.default_results_directory):
        (ChromiumPort._driver_class):
        (ChromiumPort._build_path):
        (ChromiumPort._path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.__init__):
        (WebKitPort._webcore_symbols_string):
        (WebKitPort._skipped_tests_for_unsupported_features):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort._webcore_symbols_string):
        (WebKitPortUnitTests.test_default_options):

2012-06-27  Dirk Pranke  <dpranke@chromium.org>

        Fix typo in r121384 :(

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.default_test_timeout_ms):

2012-06-27  Dirk Pranke  <dpranke@chromium.org>

        nrwt: default timeout for debug bots broke in r121363
        https://bugs.webkit.org/show_bug.cgi?id=90112

        Unreviewed, build fix.

        I forgot to account for release and debug having different
        default values :(.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.default_test_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort):
        (WebKitPort.default_test_timeout_ms):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortUnitTests.test_default_options):

2012-06-27  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: fix a couple of issues running under cygwin
        https://bugs.webkit.org/show_bug.cgi?id=90035

        Reviewed by Eric Seidel.

        These were causing unit tests to fail on cygwin (apple win bot).

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/performance_tests/perftest.py:

2012-06-27  Adam Barth  <abarth@webkit.org>

        [Chromium] DumpRenderTree on Android should call SkUseTestFontConfigFile once available
        https://bugs.webkit.org/show_bug.cgi?id=89801

        Reviewed by Nate Chapin.

        Let's call SkUseTestFontConfigFile now that it exists.

        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (platformInit):

2012-06-27  Dirk Pranke  <dpranke@chromium.org>

        Fix typo introduced in r121363.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._symbols_string):

2012-06-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Moving from committers to reviewers :-)

        Rubber stamped by Filip Pizlo.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-27  Dirk Pranke  <dpranke@chromium.org>

        Derive ChromiumPort from WebKitPort to add support for missing symbols to skip tests
        https://bugs.webkit.org/show_bug.cgi?id=89706

        Reviewed by Adam Barth.

        Based on the original patch by Raymond Toy.

        This patch changes ChromiumPort to derive from webkit.WebKitPort
        instead of base.Port. This is a long-awaited change and a
        precursor to merging base.Port and webkit.WebKitPort, but is
        driven by the desire to dynamically detect whether the MP3 and
        AAC codecs are compiled into DRT on Chromium, for which we
        wanted to re-use the existing logic in WebKit port for determine
        what to skip at compile time.

        Most of the changes are shuffling things around so that we don't
        change any other logic and so we override the necessary methods
        in WebKitPort (and try to follow the same method definition
        order where possible).

        Also, on the Chromium port the mp3 and aac codecs are actually
        defined in a separate library, so scanning webcore isn't
        sufficient. This patch generalizes the symbol lookup to handle
        multiple libraries, and uses different libraries as appropriate
        for Chromium.

        The only functional/visible changes should be in the value
        returned for skipped_layout_tests().

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort.__init__):
        (ChromiumPort.driver_name):
        (ChromiumPort._driver_class):
        (ChromiumPort._missing_symbol_to_skipped_tests):
        (ChromiumPort.skipped_layout_tests):
        (ChromiumPort.setup_test_run):
        (ChromiumPort._path_to_image_diff):
        (ChromiumPort._convert_path):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_missing_symbol_to_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumLinuxPort._modules_to_search_for_symbols):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort):
        (WebKitPort.__init__):
        (WebKitPort._symbols_string):
        (WebKitPort._modules_to_search_for_symbols):

2012-06-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(r121339): It broke the build on the Qt Windows bots
        https://bugs.webkit.org/show_bug.cgi?id=90081

        Buildfix for Qt 4.8 Windows. Use the former path for Qt 4.8, and the newer one for Qt 5.

        Reviewed by Noam Rosenthal.

        * qmake/mkspecs/features/features.prf:

2012-06-27  Sergio Villar Senin  <svillar@igalia.com>

        [WK2] [GTK] WebKit2 testing bot fails to run tests due to missing files
        https://bugs.webkit.org/show_bug.cgi?id=90061

        Reviewed by Gustavo Noronha Silva.

        Add "-no-install -no-fast-install" to the LDFLAGS in bots. With
        this flag libtool tells the linker to set the rpath for the output
        file to the full path of the .libs directory, instead of using a
        wrapper script to set up the LD_LIBRARY_PATH. This will allow us
        to directly reuse builds in the pure testing bots.

        * BuildSlaveSupport/gtk/daemontools-buildbot.conf:

2012-06-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] No need to save and restore TEMPLATE in a function

        This was a leftover from when the logic was not in its own function scope.

        QMAKE_FRAMEWORK_BUNDLE_NAME on the other hand is exported in qtLibraryTarget, which
        will surprisingly affect the global scope as well, so we have to save and restore it.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com> on 2012-06-27

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf:

2012-06-27  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Fix lookup location for sqlite sources

        Don't look in the install dir - we are unlikely to find anything there
        unless we are doing a developer build.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-06-27  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Add support for the Gamepad API
        https://bugs.webkit.org/show_bug.cgi?id=87503

        Reviewed by Carlos Garcia Campos.

        Enable the gamepad support for the GTK port.

        * Scripts/webkitperl/FeatureList.pm:

2012-06-27  Ryosuke Niwa  <rniwa@webkit.org>

        Fix gcc build after r121302
        https://bugs.webkit.org/show_bug.cgi?id=90055

        Reviewed by Mark Rowe.

        Assume RTTI is always disabled so that gtest builds on XCode 3.2.6.

        It appears that gcc doesn't like window.get().* inside a template so replace that by [window.get() *] instead.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        (TestWebKitAPI::AcceptsFirstMouse::runTest):

2012-06-27  Csaba Osztrogonác  <ossy@webkit.org>

        Add master.cfg unittest to help migration - pass BuildStep instances instead of BuildStep subclasses
        https://bugs.webkit.org/show_bug.cgi?id=89564

        Reviewed by Tony Chang.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (BuildStepsConstructorTest):
        (BuildStepsConstructorTest.generateTests):
        (BuildStepsConstructorTest.createTest):
        (BuildStepsConstructorTest.createTest.doTest):

2012-06-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add support for preciseTime() to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=90027

        Reviewed by Darin Adler.

        It would be nice to be able to use preciseTime() in WebKitTestRunner like we can in DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: 
        (WTR::LayoutTestController::preciseTime): 
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-06-26  Lucas Forschler  <lforschler@apple.com>

      Teach the Apple port how to build the test tools in build-webkit
      https://bugs.webkit.org/show_bug.cgi?id=89540

      Reviewed by Jon Lee & Simon Fraser.

      * BuildSlaveSupport/build.webkit.org-config/master.cfg:
      (RunWebKitTests.start): pass --no-build since tools should now be in the downloaded archive
      (RunUnitTests.start): ditto
      * Scripts/build-webkit: add tools to the projects build list

2012-06-26  Ojan Vafai  <ojan@chromium.org>

        Only show the platform-appropriate builders for non-layout test failures in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=90025

        Reviewed by Simon Fraser.

        Move the chromium-specific filtering code into config.js and replace it with a method on each platform
        config. Also, let the webkit test step name be webkit_tests (build.chromium.org) or layout-test (build.webkit.org).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-06-26  Ojan Vafai  <ojan@chromium.org>

        Fix failing garden-o-matic unittests
        https://bugs.webkit.org/show_bug.cgi?id=90021

        Reviewed by Adam Barth.

        These had all just fallen out of date.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2012-06-26  Ojan Vafai  <ojan@chromium.org>

        Fix platform picker change handler in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=90010

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        The old code never worked. This is hard to test because change handlers require
        a user-initiated action and the code is changing the window's location, which would
        navigate the test page.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        Fix the CSS so it doesn't cause the tabstrip to be disconnected from the tabs on Linux
        due to the large margin-bottom.

2012-06-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        webkitpy: Make webkit-patch patches-to-review useful
        https://bugs.webkit.org/show_bug.cgi?id=89470

        Reviewed by Eric Seidel.

        webkit-patch patches-to-review will now output the list of
        bugs with patches pending for review that has the user on CC,
        excluding patches with cq-, sorted by the age of the patch.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries.fetch_bugs_from_review_queue):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzillaQueries.fetch_bugs_from_review_queue):
        (MockBugzilla.__init__):
        (MockBugzilla.authenticate):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PatchesToReview):
        (PatchesToReview.__init__):
        (PatchesToReview._print_report):
        (PatchesToReview._generate_report):
        (PatchesToReview.execute):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (QueryCommandsTest.test_patches_to_review):

2012-06-26  Dirk Pranke  <dpranke@chromium.org>

        nrwt: broken for chromium on vista
        https://bugs.webkit.org/show_bug.cgi?id=89988

        Reviewed by Tony Chang.

        r121194 removed support for 'chromium-win-vista' as a separate
        port, but this actually prevented the code from running on vista
        at all, which is unduly harsh and broke the websocket tests on
        the (non-webkit) chromium bots that are still running on vista.

        It's probably good enough to pretend that vista is win7 instead;
        some layout tests will still fail but at least things'll run.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.determine_full_port_name):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_versions):

2012-06-26  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup: Pass CheckOutSource instance instead of class to BuildStep.addStep
        https://bugs.webkit.org/show_bug.cgi?id=89215

        We need it because it is deprecated and will be dropped in buildbot 0.8.7

        Reviewed by Tony Chang.

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

2012-06-26  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][Win] Symbols are not exported in QtWebKit5.dll
        https://bugs.webkit.org/show_bug.cgi?id=88873

        Reviewed by Tor Arne Vestbø.

        When linking the target dll make sure to re-export the symbols from
        the static libraries marked as export, with the help of a little python
        script and a qmake extra compiler.

        * Scripts/generate-win32-export-forwards: Added.
        * qmake/mkspecs/features/win32/default_post.prf:

2012-06-25  Jocelyn Turcotte  <turcotte.j@gmail.com>

        Add a note about hostname completion not working well with --cc completion

        Reviewed by Simon Hausmann.

        Hostname completion tries to resolve anything after an @ sign which is present
        in the completed list of contributor emails to CC.

        * Scripts/webkit-tools-completion.sh:

2012-06-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121244.
        http://trac.webkit.org/changeset/121244
        https://bugs.webkit.org/show_bug.cgi?id=89966

        skip list path is incorrect now. (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.baseline_search_path):
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_baseline_search_path):

2012-06-26  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt][NRWT] Fix baseline and skipped file search path.
        https://bugs.webkit.org/show_bug.cgi?id=89882

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_baseline_search_path):

2012-06-26  Tony Chang  <tony@chromium.org>

        [Qt] Enable grid layout LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=89909

        Reviewed by Csaba Osztrogonác.

        These tests pass, we just need to hook up the overridePreference.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings): Reset grid layout and regions between tests.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference): Add WebKitCSSGridLayoutEnabled.

2012-06-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121236.
        http://trac.webkit.org/changeset/121236
        https://bugs.webkit.org/show_bug.cgi?id=89956

        It's broke the nrwt on qt and gtk platform (Requested by
        kkristof on #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._build_driver):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver._start):
        (XvfbDriver._start.x_filter):
        (XvfbDriver.stop):

2012-06-26  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [NRWT] XvfbDriver should choose the next free display
        https://bugs.webkit.org/show_bug.cgi?id=88414

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._driver_class):
        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py:
        (XvfbDriver.__init__):
        (XvfbDriver._start):
        (XvfbDriver._start.next_free_id):
        (XvfbDriver.stop):

2012-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make it possible to build WebKit without QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=78109

        Reviewed by Tor Arne Vestbø.

        * Tools.pro: Disable various tools that depend on WK1.
        * qmake/mkspecs/features/default_post.prf: Add WK1 as supported static lib in WEBKIT
        * qmake/mkspecs/features/default_pre.prf: Disable WK1 if QtWidgets is not built.
        * qmake/mkspecs/modules/webkit1.prf: Added.

2012-06-25  Dirk Pranke  <dpranke@chromium.org>

        put vista back for chromium (non-webkit) bots ...
        https://bugs.webkit.org/show_bug.cgi?id=89929

        Unreviewed, build fix.

        Turns out we've only gotten rid of vista on the webkit tests so
        far. Put vista back for the other chromium bots ...

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (chromiumPlatform):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-06-25  Dirk Pranke  <dpranke@chromium.org>

        update flakiness dashboard after removing chromium-vista bots
        https://bugs.webkit.org/show_bug.cgi?id=89925

        Unreviewed, build fix.

        More changes missed in r121194 :(.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (chromiumPlatform):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2012-06-25  Dirk Pranke  <dpranke@chromium.org>

        remove support for chromium vista from tools
        https://bugs.webkit.org/show_bug.cgi?id=89915

        Reviewed by Tony Chang.

        This change is all deleting code and updating tests to handle
        the configuration being gone. All tests now pass except for a
        few unittests for the flakiness dashboard which were failing
        before this patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_complex_shadowing):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_versions):
        (ChromiumWinTest.test_baseline_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):

2012-06-25  Scott Graham  <scottmg@chromium.org>

        [Chromium] add empty impl of WebThemeEngine::getSize() for DRT
        https://bugs.webkit.org/show_bug.cgi?id=89907

        Not reviewed. Fix build in Chromium.

        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::getSize):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h:
        (WebThemeEngineDRTWin):

2012-06-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Implement Network Information API
        https://bugs.webkit.org/show_bug.cgi?id=87067

        Reviewed by Kenneth Rohde Christiansen.

        * efl/jhbuild.modules: Add eeze library dependency.

2012-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix Win32 debug build

        Reviewed by Tor Arne Vestbø.

        Consolidate use_all_in_one_files into mac/unix/win32 default_pre.prf.

        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/mkspecs/features/win32/default_pre.prf: Added.

2012-06-24  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [Qt] Enable <input type="color"> support by default
        https://bugs.webkit.org/show_bug.cgi?id=89653

        Reviewed by Kenneth Rohde Christiansen.

        This feature is complete for Qt WebKit2. Enabling by default
        will help to mature the implementation.

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

2012-06-24  Dan Bernstein  <mitz@apple.com>

        Made debug-{minibrowser,safari,test-runner} work with LLDB.

        Reviewed by Sam Weinig.

        * Scripts/debug-minibrowser: Pass INCLUDE_OPTIONS_FOR_DEBUGGING to
        printHelpAndExitForRunAndDebugWebKitAppIfNeeded().
        * Scripts/debug-safari: Ditto.
        * Scripts/debug-test-runner: Ditto.
        * Scripts/webkitdirs.pm:
        (debugger): Added. Calls determineDebugger() if needed and returns the chosen debugger.
        (determineDebugger): Added. Sets the debugger to "lldb" if the --use-lldb switch is present,
        and to "gdb" otherwise.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Changed to print help for the
        --target-web-process and --use-lldb switches if passed INCLUDE_OPTIONS_FOR_DEBUGGING.
        (execMacWebKitAppForDebugging): Changed to use the chosen debugger.

2012-06-24  Adam Barth  <abarth@webkit.org>

        [Chromium] Release media resources after each LayoutTest on Android
        https://bugs.webkit.org/show_bug.cgi?id=89720

        Reviewed by Eric Carlson.

        The LayoutTests can hang when run on Android because we sometimes run
        out of media resources. This patch causes us to release our media
        resources after each test in order to avoid running out of this
        resource. In production, there are other mechanisms that manage this
        resource.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2012-06-23  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] REGRESSION(r120918): Causes flaky DND tests
        https://bugs.webkit.org/show_bug.cgi?id=89770

        Reviewed by Martin Robinson.

        Connect to the run-file-chooser signal of the WebKitWebView and
        return TRUE so no file chooser dialog is run. This prevents certain
        test failures.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewRunFileChooser):
        (createWebView):

2012-06-23  Dan Bernstein  <mitz@apple.com>

        debug-{minibrowser,safari,test-runner} fail when gdb is not installed in /usr/bin.

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging): Use xcrun to locate gdb.

2012-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip GTK+ unit test /webkit2/WebKitFindController/hide.

        It fails always when running it in Xvfb.

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

2012-06-23  Wajahat Siddiqui  <mdwajahatali.siddiqui@motorola.com>

        [GTK][WK2]Mis-spelt defaultWindowTitle
        https://bugs.webkit.org/show_bug.cgi?id=89808

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserWindow.c:

2012-06-23  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Add a new webkit2 tests slave bot
        https://bugs.webkit.org/show_bug.cgi?id=89336

        Reviewed by Csaba Osztrogonác.

        Slave configuration for a new GTK 64 bit release bot that will run
        WebKit2 tests.

        Also BuildAndTest now accepts the "triggers" parametter,
        this means that apart from building and testing it can trigger
        some other build/test sequences in other slaves.

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

2012-06-23  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed. Update my email.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-22  Adam Barth  <abarth@webkit.org>

        [Chromium] DumpRenderTree on Android needs to configure fonts for testing
        https://bugs.webkit.org/show_bug.cgi?id=89721

        Reviewed by Nate Chapin.

        This patch teaches DumpRenderTree to configure Skia to use the fallback
        fonts that the LayoutTests assume. This patch reduces the number result
        differences between chromium-android and chromium-linux.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (platformInit):
        * DumpRenderTree/chromium/android_fallback_fonts.xml: Added.
        * DumpRenderTree/chromium/android_main_fonts.xml: Added.
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:

2012-06-22  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Re-enable the CSS Shaders compile time flag on Safari Mac
        https://bugs.webkit.org/show_bug.cgi?id=89781

        Reviewed by Dean Jackson.

        Added CSS Shaders as enabled by default on Safari for Mac.

        * Scripts/webkitperl/FeatureList.pm:

2012-06-22  Adam Barth  <abarth@webkit.org>

        Add support for test_expectations_android.txt for overriding test expecations on the chromium-android branch
        https://bugs.webkit.org/show_bug.cgi?id=89791

        Reviewed by Dirk Pranke.

        Downstream, the chromium-android port maintains a test expectations
        file to keep track of which tests pass or fail. That causes them to
        keep a patch in chromium_android.py in their branch.

        This patch teaches chromium_android.py to use test_expectations_android.txt.
        We don't intend to use this file upstream, but having this code patch
        upstream lets us unfork webkitpy.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.expectations_files):

2012-06-22  Dirk Pranke  <dpranke@chromium.org>

        run_webkit_tests.py failed with AttributeError(''NoneType' object has no attribute 'pid'')
        https://bugs.webkit.org/show_bug.cgi?id=89734

        Reviewed by Ryosuke Niwa.

        Fix a crash in ServerProcess if you called .pid() after it
        crashed during a write(). We had a test for this case but the
        test wasn't calling pid(), just has_crashed(). Fixed the problem
        and the test.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.__init__):
        (ServerProcess.pid):
        (ServerProcess._start):
        (ServerProcess.stop):
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (FakeServerProcess._start):
        (TestServerProcess.test_broken_pipe):

2012-06-22  Peter Beverloo  <peter@chromium.org>

        [Chromium] Disable c++0x compatibility warnings in JavaScriptCore.gyp when building for Android
        https://bugs.webkit.org/show_bug.cgi?id=88853

        Reviewed by Steve Block.

        The Android exclusions were necessary to fix a gyp generation error, as
        the gcc_version variable wasn't being defined for Android. Remove these
        exceptions when Chromium is able to define the gcc_version variable.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-06-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed gardening. Unskipping test passing after fixing bug 88419.

        * gtk/run-api-tests:
        (TestRunner): Unskip WTF.HashMap.

2012-06-22  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow DumpRenderTree to dump about:blank
        https://bugs.webkit.org/show_bug.cgi?id=89685

        Reviewed by Ryosuke Niwa.

        We need to allow DumpRenderTree to dump about:blank page, then it will be consistent with other ports,
        additionaly this behavior is required for running WTR performance tests.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processLine):

2012-06-21  Adam Barth  <abarth@webkit.org>

        [Chromium] Reset mediaPlaybackRequiresUserGesture WebSettings after each test
        https://bugs.webkit.org/show_bug.cgi?id=89718

        Reviewed by Kent Tamura.

        We should reset this WebSetting to its default value so that it behaves
        consistently across tests.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-06-21  Zoltan Horvath  <zoltan@webkit.org>

        DRT/WTR python interface handles about:blank incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=89563

        Reviewed by Dirk Pranke.

        Currently DRT/WTR python interface's _command_from_driver_input function
        puts the test directory path before about:blank. Remove this incorrect behavior.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._command_from_driver_input):

2012-06-21  Dirk Pranke  <dpranke@chromium.org>

        reenable perf tests on win
        https://bugs.webkit.org/show_bug.cgi?id=89690

        Reviewed by Ryosuke Niwa.

        Only the replay tests don't work, and those are disabled by
        default. This change also fixes the undefined _log reference
        that was causing a crash.

        * Scripts/run-perf-tests:

2012-06-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120937.
        http://trac.webkit.org/changeset/120937
        https://bugs.webkit.org/show_bug.cgi?id=89679

        This patch brought buildbot master down (Requested by svillar
        on #webkit).

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

2012-06-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Combine WebKit API tests into fewer binaries
        https://bugs.webkit.org/show_bug.cgi?id=88458

        Reviewed by Carlos Garcia Campos.

        Instead of creating one binary per-test file, create binaries for each
        category of tests. Right now this includes WTF and the WebKit2 C API,
        but later tests can be added for the GTK+ platform layer and the WebKit1
        and WebKit2 API layers.

        * TestWebKitAPI/GNUmakefile.am: Compile only two test binaries, one for the WebKit2
          C API and one for WTF. Refresh the source list to ensure that new test are active.
        * gtk/run-api-tests: Change the way that tests are skipped by splitting out the
        concept of skipping a test and skipping a suite (program) of tests. Test cases are
        skipped because of legitimate failures, but entire programs are skipped because of
        problems in the harness. As of right now a test program is only skipped if the
        accessibility bus cannot be started.
        (SkippedTest.__init__): Make the test case a required argument and have one skipped
        test case per SkippedTest instance.
        (SkippedTest.__str__): Ditto.
        (TestRunner): Update the directory list. We only have two gtest binaries now and they are
        in one directory. Reformat the test list to make it slightly easier to read.
        (TestRunner.__init__): Add the _skipped_test_program member, which handles entire
        test programs that are skipped.
        (TestRunner._setup_testing_environment): Use the new member.
        (TestRunner._test_cases_to_skip): Collect all skipped test cases now instead of just
        the first SkippedTest that matches.
        (TestRunner._should_run_test_program): Take a look at the new member to make this
        decision.
        (TestRunner._run_test_command): Use the name test_program instead of test
        to disambiguate between test cases and test suites.
        (TestRunner._run_test_glib): ditto.
        (TestRunner._run_test_google): Ditto.
        (TestRunner._run_test): Ditto.
        (TestRunner.run_tests): Ditto.

2012-06-21  Yong Li  <yoli@rim.com>

        Unreviewed. Moving myself from committer to reviewer.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-21  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Add a new webkit2 tests slave bot
        https://bugs.webkit.org/show_bug.cgi?id=89336

        Reviewed by Philippe Normand.

        Slave configuration for a new GTK bot that will run WebKit2 tests.

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

2012-06-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [Qt] Add a custom Color Chooser widget to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=87988

        Reviewed by Alexis Menard.

        Added custom color chooser example for the MiniBrowser.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ColorChooser.qml: Added.

2012-06-21  Vivek Galatage  <vivekgalatage@gmail.com>

        Remove the warning "File not found" in MiniBrowser post-build event
        https://bugs.webkit.org/show_bug.cgi?id=89601

        Reviewed by Adam Roben.

        * MiniBrowser/MiniBrowserPostBuild.cmd:

2012-06-21  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] DRT in standalone mode hangs after the first test
        https://bugs.webkit.org/show_bug.cgi?id=89613

        Reviewed by Csaba Osztrogonác.

        Break an inline signal slot chain that ends up in setting
        LayoutTestController::m_hasDumped too early. In LayoutTestController::maybeDump()
        we emit done() which starts the chain that finishes in DumpRenderTree::open().
        The next line in maybeDump sets m_hasDumped to true. We could simply reorder
        these two lines but it seems to be wrong in general to start the next load
        from this call chain. The server mode (when DRT is runned by the test harness)
        also uses a queued connection to read the next test from stdin.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::processArgsLine):

2012-06-20  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: SpeechRecognition should hook up with ActiveDOMObject more
        https://bugs.webkit.org/show_bug.cgi?id=89217

        Reviewed by Adam Barth.

        Add a method for checking whether the mock speech
        recognition was aborted.

        Also redo the way the mock posts tasks. Instead of posting them all at once,
        maintain an internal queue of task objects, and call postTask() for them
        once at the time. This means that for example when the page is navigated
        away and abort() is called, that call doesn't end up after a bunch
        of previously posted events on the event loop.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::wasMockSpeechRecognitionAborted):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:
        (WebKit::ClientCallTask::ClientCallTask):
        (WebKit::ResultTask::ResultTask):
        (WebKit::NoMatchTask::NoMatchTask):
        (WebKit::ErrorTask::ErrorTask):
        (MockWebSpeechRecognizer::start):
        (MockWebSpeechRecognizer::abort):
        (MockWebSpeechRecognizer::setError):
        (MockWebSpeechRecognizer::MockWebSpeechRecognizer):
        (MockWebSpeechRecognizer::startTaskQueue):
        (MockWebSpeechRecognizer::StepTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h:
        (MockWebSpeechRecognizer::hasBeenAborted):
        (MockWebSpeechRecognizer):
        (MockWebSpeechRecognizer::taskList):
        (Task):
        (MockWebSpeechRecognizer::Task::Task):
        (MockWebSpeechRecognizer::Task::~Task):
        (StepTask):
        (MockWebSpeechRecognizer::StepTask::StepTask):

2012-06-21  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Add support for window.showModalDialog in WebKit2GTK+
        https://bugs.webkit.org/show_bug.cgi?id=79500

        Reviewed by Carlos Garcia Campos.

        Add support for modal dialogs in GTK's MiniBrowser.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewRunAsModal):
        (webViewCreate):
        (webViewDecidePolicy):
        (browser_window_new):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserWindow):

2012-06-20  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix.
        The wrapper script that launched new- and old-run-webkit-tests
        was discarding the --wincairo argument needed to get the proper
        test infrastructure to build under WinCairo.

        * Scripts/run-webkit-tests: Emulate the Qt, Wx, Chromium, etc.,
        behavior to chain the --wincairo flag through to the new build
        and test scripts.

2012-06-20  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/89606> Teach run-safari and debug-safari to work with a Safari.app that has entitlements

        Reviewed by Dan Bernstein.

        * Scripts/webkitdirs.pm:
        (executableHasEntitlements):
        (safariPathFromSafariBundle):

2012-06-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120821.
        http://trac.webkit.org/changeset/120821
        https://bugs.webkit.org/show_bug.cgi?id=89605

        It made duplicated reviewer entries (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.set_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_set_reviewer):
        (test_set_short_description_and_bug_url):

2012-06-20  Dirk Pranke  <dpranke@chromium.org>

        nrwt outputs empty files for wdiff output if wdiff is not installed
        https://bugs.webkit.org/show_bug.cgi?id=88709

        Reviewed by Tony Chang.

        Reviewed by Tony Chang.

        Don't write -wdiff or -pretty.html files if wdiff or prettypatch
        aren't available, and clean up the handling for them in the port
        code.

        * Scripts/webkitpy/run_webkit_tests_integrationtest.py:
        (MainTest.test_output_diffs):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.create_text_diff_and_write_result):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.check_pretty_patch):
        (Port.check_wdiff):
        (Port._wdiff_missing_message):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.check_build):
        (ChromiumLinuxPort._wdiff_missing_message):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.check_build):
        (ChromiumMacPort):
        (ChromiumMacPort._wdiff_missing_message):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest):

2012-06-20  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix unit tests for ensuring svn revision is correct
        https://bugs.webkit.org/show_bug.cgi?id=89498

        Reviewed by Eric Seidel.

        Reviewed by Eric Seidel.

        Fix the unit tests for testing that we are embedding the SVN
        revision in the results json for NRWT properly; this was broken
        in r120646 but because the MockHost worked differently than the
        real one (by always initializing the MockSCM object) we didn't
        notice. Unfortunately, just changing the default breaks all
        sorts of unit tests ...

        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
        (MockHost._initialize_scm):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_no_svn_revision):
        (ResultSummaryTest.test_svn_revision):

2012-06-20  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests appends "/Debug" or "/Release" to $WEBKITOUTPUTDIR
        https://bugs.webkit.org/show_bug.cgi?id=69360

        Reviewed by Eric Seidel.

        Reviewed by Eric Seidel.

        Propagate the 'port_implementation' part of the platform (i.e.,
        gtk,qt,chromium) to webkit-build-directory so that we can pick
        up the gtk-specific handling of WEBKITOUTPUTDIR ...

        I didn't write any additional tests for this; testing it
        properly is an integration test between the python code and the
        perl code, which I verified by hand.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.__init__):
        (Config.build_directory):
        * Scripts/webkitpy/layout_tests/port/config_mock.py:
        (MockConfig.__init__):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.test_build_directory_passes_port_implementation):

2012-06-20  Dirk Pranke  <dpranke@chromium.org>

        Fix import sorting missed in r120846

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:

2012-06-20  Dirk Pranke  <dpranke@chromium.org>

        Fix chromium win http servers after breakage introduced in r120846.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.start_http_server):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):

2012-06-20  Dirk Pranke  <dpranke@chromium.org>

        tweak output of webkit-patch print-{baselines,expectations}
        https://bugs.webkit.org/show_bug.cgi?id=89588

        Reviewed by Tony Chang.

        Minor tweaks to the output to make it more readable, including
        turning off csv by default for print-baselines with multiple ports.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.execute):
        (PrintBaselines.execute):
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.run_test):
        (PrintExpectationsTest.test_multiple):
        (PrintBaselinesTest.setUp):
        (PrintBaselinesTest.test_multiple):

2012-06-18  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests should spin-up enough httpd processes to avoid timeouts
        https://bugs.webkit.org/show_bug.cgi?id=88134

        Reviewed by Tony Chang.

        Change NRWT to spin up 2*min(child_processes, locked_shards)
        http servers by default so that we are less likely to get a
        bunch of http timeouts at the beginning of a test run.

        Note that I had to tweak executive_mock to support mocked stderr
        because the apache_http_server code reads stderr when starting a
        process to ensure it started okay.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__):
        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        (Manager.start_servers_with_lock):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.start_http_server):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.start_http_server):
        (TestPort._path_to_apache):
        (TestPort):
        (TestPort._path_to_apache_config_file):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py: Added
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.__init__):

2012-06-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Unreviewed: Back out accidentally checked in debug print which broke a test

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

2012-06-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Import themaninblue.com/experiment/AnimationBenchmark/ as performance tests
        https://bugs.webkit.org/show_bug.cgi?id=78789

        Reviewed by Ryosuke Niwa.

        Updated parser to include fps as a valid unit.

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

2012-06-20  Balazs Ankes  <bank@inf.u-szeged.hu>

        webkit-patch should add reviewer if "Reviewed by NOBODY ..." is missing
        https://bugs.webkit.org/show_bug.cgi?id=67935

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.set_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_set_reviewer):
        (test_set_short_description_and_bug_url):

2012-06-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed trivial permissions fix.

        * qmake/mkspecs/features/features.prf: Don't mark this file as executable.

2012-06-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][Regression] Build break after r120786
        https://bugs.webkit.org/show_bug.cgi?id=89549

        Unreviewed build fix for Efl port.

        * DumpRenderTree/efl/CMakeLists.txt: Added disassembler in includes.

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        NRWT spins up and down the WebSocket server when running a single HTTP test from the command line
        https://bugs.webkit.org/show_bug.cgi?id=64489

        Reviewed by Tony Chang.

        This change changes NRWT so that we don't start the websocket
        server if we aren't running websocket tests and don't start the
        HTTP server if we aren't running http tests.
        
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._websocket_tests):
        (Manager.start_servers_with_lock):
        (Manager.stop_servers_with_lock):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_servers_started):

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: add a -p flag to pass through captured output to enable debugging
        https://bugs.webkit.org/show_bug.cgi?id=89158

        Reviewed by Eric Seidel.

        Normally when outputcapture runs it intercepts stdout/stderr,
        which makes running under the debugger difficult and mostly
        pointless (since you can't see any output). This change adds a
        flag to test-webkitpy (-p) that will cause outputcapture to pass
        through the output as well as capture it.

        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.stream_wrapper):
        (OutputCapture._capture_output_with_name):
        * Scripts/webkitpy/common/system/outputcapture_unittest.py:
        (OutputCaptureTest.setUp):
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args):
        (Tester._run_tests):
        (Tester._log_exception):
        (_CaptureAndPassThroughStream):
        (_CaptureAndPassThroughStream.__init__):
        (_CaptureAndPassThroughStream.write):
        (_CaptureAndPassThroughStream._message_is_from_pdb):
        (_CaptureAndPassThroughStream.flush):
        (_CaptureAndPassThroughStream.getvalue):

2012-06-19  Adam Barth  <abarth@webkit.org>

        garden-o-matic fails to rebaseline tests with MISSING results
        https://bugs.webkit.org/show_bug.cgi?id=89521

        Reviewed by Kenneth Russell.

        If the bots report "MISSING", we should try to find PNG and TXT results on the server.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2012-06-19  Adam Barth  <abarth@webkit.org>

        svn.delete_list fails to delete empty parent directories
        https://bugs.webkit.org/show_bug.cgi?id=89520

        Reviewed by Dirk Pranke.

        These functions were calling scm.delete and scm.add, which already
        delete the parent directory. We'd get an exception when we tried to
        delete the parent directory again.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN._add_parent_directories):
        (SVN._delete_parent_directories):

2012-06-19  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        webkitpy: Simplify fetch_bugs_matching_search()
        https://bugs.webkit.org/show_bug.cgi?id=89497

        Reviewed by Adam Barth.

        Removed parameter with default value. It's not being used
        and the handling of the parameter was wrong. Saves a check.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries.fetch_bugs_matching_search):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzillaQueries.fetch_bugs_matching_search):

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove unneeded imports in layout_tests/port/chromium.py
        https://bugs.webkit.org/show_bug.cgi?id=89522

        Reviewed by Eric Seidel.

        They were no longer being used. No tests necessary.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2012-06-19  Adam Barth  <abarth@webkit.org>

        Missing results aren't shown in garden-o-matic

        Reviewed by Kenneth Russell.

        Previously we didn't know to look for text and image results when the
        bot told us that results were missing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        Fix regression introduced in r120646 where the svn revision isn't saved in results.json

        Unreviewed, build fix.

        It turns out that we store the svn revision two different ways
        in the JSON, and I only caught one of them :(. This should fix
        the other.

        Also, this part of the code is poorly tested. I will investigate
        adding at least a basic test for this in a separate fix.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION (NRWT): Results for new non-text-only tests are always put in the most-specific platform directory
        https://bugs.webkit.org/show_bug.cgi?id=78127

        Reviewed by Ryosuke Niwa.

        Add the --add-platform-exceptions flag from ORWT, and ensure
        that --new-baseline is equivalent to --reset-results
        --add-platform-exceptions. Also fix the default logic for where to
        put PNGs and render tree dumps if --new-test-results is true:
        if --add-platform-exceptions is False, baselines should go in
        the least-specific platform directory (e.g., platform/mac)
        rather than the most-specific (platform/mac-snowleopard).

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner):
        (SingleTestRunner.run):
        (SingleTestRunner._run_rebaseline):
        (SingleTestRunner._add_missing_baselines):
        (SingleTestRunner._location_for_new_baseline):
        (SingleTestRunner._overwrite_baselines):
        (SingleTestRunner._save_baseline_data):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.baseline_path):
        (Port):
        (Port.baseline_platform_dir):
        (Port.baseline_version_dir):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RebaselineTest.assertBaselines):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        NRWT should not take memory used as disk cache into account when deciding how many processes to launch
        https://bugs.webkit.org/show_bug.cgi?id=81379

        Reviewed by Eric Seidel.

        The 'free memory' calculation we were running on the mac seemed
        to underestimate how many children we can run in parallel, and
        it was complex. This patch replaces that calculation with a
        simpler one that reserves 2GB for overhead and assumes 256MB per
        DRT/WTR, so if we had 4GB of RAM we can run up to 8 DRTs.

        Also, there was a bug where we were truncating the memory
        installed on the machine to 4GB by casting to an int instead of
        a long; this was probably the source of some of the earlier
        problems when using total memory.

        This patch also removes the no-longer-needed restrictions on the
        number of workers on beefy Lion boxes for both Apple Mac and Chromium
        Mac; we should now use all of the cores by default.

        The memory calculations have only been implemented on the mac;
        having the calculation in base.default_child_processes() was IMO
        misleading, and so this patch also moves the computation into
        the MacPort. I have not heard of the # of workers being an issue
        on any other ports, so this should be fine.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.total_bytes_memory):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (PlatformInfo.total_bytes_memory):
        (PlatformInfo.total_bytes_memory):
        (PlatformInfo._win_version_tuple_from_cmd):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_total_bytes_memory):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (TestMacPort.test_default_child_processes):

2012-06-19  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests reports unexpected pass of pixel tests when pixel testing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=85446

        Reviewed by Simon Fraser.

        Embed whether pixel testing was enabled into the results.json.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):

2012-06-19  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Modify HTTPS port to 8443 for performance tests
        https://bugs.webkit.org/show_bug.cgi?id=89442

        Reviewed by Ryosuke Niwa.

        We should be consistent with the default HTTPS port and with the changelog of r119188.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (ReplayServer.__init__):

2012-06-19  Mike West  <mkwst@chromium.org>

        Introduce ENABLE_CSP_NEXT configuration flag.
        https://bugs.webkit.org/show_bug.cgi?id=89300

        Reviewed by Adam Barth.

        The 1.0 draft of the Content Security Policy spec is just about to
        move to Last Call. We'll hide work on the upcoming 1.1 spec behind
        this ENABLE flag, disabled by default.

        Spec: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html

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

2012-06-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's LayoutTestController does not support setTextDirection
        https://bugs.webkit.org/show_bug.cgi?id=87481

        Reviewed by Hajime Morita.

        Implement setTextDirection in EFL's LayoutTestController and
        properly reset its value between test cases to avoid flakiness.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setTextDirection):

2012-06-19  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Temporarily disable xvfb driver in nrwt
        https://bugs.webkit.org/show_bug.cgi?id=88414

        Reviewed by Csaba Osztrogonác.

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

2012-06-18  Joone Hur  <joone.hur@intel.com>

        [EFL] Fontconfig can't be linked properly
        https://bugs.webkit.org/show_bug.cgi?id=89418

        Unreviewed build fix.

        Make Fontconfig be linked correctly.

        * MiniBrowser/efl/CMakeLists.txt: add FONTCONFIG_LIBRARIES to MiniBrowser_LIBRARIES.

2012-06-18  Joone Hur  <joone.hur@intel.com>

        Unreviewed. Updating email for committers.py script.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-18  Simon Fraser  <simon.fraser@apple.com>

        Fix a typo that caused TestFailures to have a syntax error.
        
        Sadly TestFailures is broken for another reason now too:
        https://bugs.webkit.org/show_bug.cgi?id=89419

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ViewController.js:
        (ViewController.prototype._domForBuildName):

2012-06-18  Simon Fraser  <simon.fraser@apple.com>

        Provide bug links for suspicious commits
        https://bugs.webkit.org/show_bug.cgi?id=89408
        
        Reviewed by Adam Barth.

        Add links to bugs for the suspicious commits if we have bug data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:
        (ol.notifications>li ul.causes>li>div.description>span>span.bugID::before):
        (ol.notifications>li ul.causes>li>div.description>span>span.bugID>a):

2012-06-18  Amy Ousterhout  <aousterh@chromium.org>

        [Chromium] DeviceOrientation Cleanup
        https://bugs.webkit.org/show_bug.cgi?id=89354

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebViewHost.h: added OVERRIDE specifier for virtual function
        (WebViewHost):

2012-06-18  James Robinson  <jamesr@chromium.org>

        [chromium] Stop passing deprecated 'direct' parameter to webkit_support::CreateGraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=89254

        Reviewed by Adrienne Walker.

        This parameter doesn't mean anything since this codepath is only used for onscreen contexts and is deprecated
        upstream.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createGraphicsContext3D):

2012-06-18  Simon Fraser  <simon.fraser@apple.com>

        Minor fix suggested by Adam Barth.

        Use $(this._what).empty(); rather than removing children one at a time.
        For some reason removeAllChildren() is undefined on this node.
        
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:

2012-06-18  Simon Fraser  <simon.fraser@apple.com>

        Show TOT revision in garden-o-matic, and make the revisions into links
        https://bugs.webkit.org/show_bug.cgi?id=89396

        Reviewed by Adam Barth.

        The "latest revision" notification now reads "Latest revision processed by every bot: NN (trunk is at NN)"
        where the revisions are links to trac.
        
        To avoid setting innerHTML, I made base.createLinkNode() and used it in a bunch of places, which had
        the knock-on effect of flipping the target and href attributes for anchors in some test output.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ViewController.js:
        (ViewController.prototype._displayTesters.updateList.list):
        (ViewController.prototype._displayTesters.updateList):
        (ViewController.prototype._domForRegressionRange.trac.commitDataForRevisionRange):
        (ViewController.prototype._domForRegressionRange):
        (ViewController.prototype._domForAuxiliaryUIElements):
        (ViewController.prototype._domForBuildName):
        (ViewController.prototype):
        (ViewController.prototype.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2012-06-18  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r100558): NRWT should work without SVN or GIT
        https://bugs.webkit.org/show_bug.cgi?id=76630

        Reviewed by Dirk Pranke.

        NRWT is not supposed to have a requirement that we have an
        actual SVN or Git checkout, and we were unnecessarily
        initializing the checkout. This patch removes that line :).

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-06-18  Zan Dobersek  <zandobersek@gmail.com>

        [garden-o-matic] Add support for the GTK builders
        https://bugs.webkit.org/show_bug.cgi?id=89360

        Reviewed by Adam Barth.

        Add the 'gtk' platform, essentially a copy of the 'apple' platform since
        both get their data from build.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        (.):

2012-06-18  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Unbreak smooth scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=89327

        Reviewed by Dimitri Glazkov.

        Broken by Sam in r115589 / r115591.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2012-06-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120541, r120547, and r120548.
        http://trac.webkit.org/changeset/120541
        http://trac.webkit.org/changeset/120547
        http://trac.webkit.org/changeset/120548
        https://bugs.webkit.org/show_bug.cgi?id=89383

        This approach doesn't work for WebKit2 (Requested by abarth on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setBackingScaleFactorCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::postSetBackingScaleFactor):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setBackingScaleFactor):
        (WTR):
        (WTR::LayoutTestController::callSetBackingScaleFactorCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2012-06-18  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION(r120546): It made 3 webkitpy tests fail
        https://bugs.webkit.org/show_bug.cgi?id=89332

        Reviewed by Adam Barth.

        Update the BaselineOptimizer unittest after r120546.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_no_add_mac_future):
        (BaselineOptimizerTest.test_mac_future):
        (BaselineOptimizerTest.test_complex_shadowing):

2012-06-18  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests output gets confused when logging
        https://bugs.webkit.org/show_bug.cgi?id=63793

        Reviewed by Adam Barth.

        Ship all of the log messages generated in the worker back
        to the manager; this allows the messages to be properly
        serialized to stderr and for the meter to flush its output correctly.

        Note however that this will likely result in messages to be
        logged out of order between workers; I'm not sure that there's
        an easy way to fix this short of buffering a potentially
        unbounded amount of data. It might be better to just log through
        stderr unless we're in 'metering' mode, but it's also worth
        noting that we already get messages out of order through stderr
        on Windows.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.handle_done):
        (Manager.handle_finished_test):
        (Manager._log_messages):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker._set_up_logging):
        (Worker.run):
        (Worker._run_test):
        (Worker.cleanup):
        (Worker.run_single_test):
        (_WorkerLogHandler):
        (_WorkerLogHandler.__init__):
        (_WorkerLogHandler.emit):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write):
        (MeteredStream.writeln):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.writeln):

2012-06-18  Zan Dobersek  <zandobersek@gmail.com>

        [garden-o-matic] Builder names without underscores cause incorrect BuildSelector behavior
        https://bugs.webkit.org/show_bug.cgi?id=89362

        Reviewed by Simon Fraser.

        Replace white spaces, braces and dots in the builder name with underscores. This
        way the JQuery tabs will be properly matched with the according container.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2012-06-18  Dirk Pranke  <dpranke@chromium.org>

        nrwt: metered output doesn't handle ^C cleanly
        https://bugs.webkit.org/show_bug.cgi?id=89249

        Reviewed by Tony Chang.

        If you ctrl-c a running nrwt (w/o --verbose), then all but
        two characters of the last update are erased, and then we print
        "interrupted, exiting" as an update, which itself then gets
        erased. Fix this so that we flush the meter (making the last
        update persistent, so that we print the ^C for a visual clue),
        print the interrupt message, and move on ...

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.flush):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._write):
        (Printer):
        (Printer.flush):

2012-06-18  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Change back "linuxish" to "linux" and include WebFontRendering.cpp on Android
        https://bugs.webkit.org/show_bug.cgi?id=89228

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/TestShellAndroid.cpp:

2012-06-18  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Get rid of DumpRenderTreeSupportGtk::{in|de}crementAccessibilityValue
        https://bugs.webkit.org/show_bug.cgi?id=89226

        Reviewed by Martin Robinson.

        Implement increment() and decrement() functions in term of the AtkValue interface,
        instead of using DumpRenderTreeSupportGtk helper class.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (alterCurrentValue):
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):

2012-06-17  Simon Fraser  <simon.fraser@apple.com>

        garden-o-matic 'Results' panel is broken for the Apple platform
        https://bugs.webkit.org/show_bug.cgi?id=89310

        Reviewed by Adam Barth.
        
        For platforms that don't use accumulated build directories on the server,
        carry along buildLocation data with buildInfo, so that we know where to
        look for the test results files for a given test.
        
        Renamed historicalResultsSummaryURLs to historicalResultsLocations because
        it now returns an array of objects with buildNumber, revision and url info.
        
        Fixed results.fetchResultsURLs() to use this data to find results.
        
        Fixed the results display to not scroll when you click on a test to see the results.
        Made the h3s look less ugly
        
        Don't try to show the flakiness dashboard for the Apple platform.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:
        (.results-view .top-panel):
        (.results-view h3):

2012-06-16  Simon Fraser  <simon.fraser@apple.com>

        Make garden-o-matic work for the Apple Mac port
        https://bugs.webkit.org/show_bug.cgi?id=84642

        Reviewed by Adam Barth.
        
        Make garden-o-matic work for the Apple, webkit.org-hosted builders and testers. This involved
        educating the scripts in various ways:
        * Wrap up platform-related differences in config.kPlatforms[]
        * Add a <select> to switch between platforms, and support a url parameter, ?platform=chromium/apple
        * The webkit.org bots don't accumulate test results into a single directory like the chromium.org ones do,
          so add config.haveBuilderAccumulatedResults and logic in fetchResultsByBuilder() to find the most
          recent build with valid results.
        * The webkit.org bots often generate results directories with no layout test data (e.g. when testers
          try to test a build that has already been deleted). Make walkHistory() more robust here.
        * webkit.org uses differently named test result directories, that include the SVN revision as
          well as the build number. That forces us to fetch more build info before we can get the
          result directory URL.
        * chromium.org serves raw directory listings for a builder's results directories. webkit.org serves
          those with Twisted, so rather than scrape directory listings, we use buildbot JSON to find results
          dirs.
        * Various URLs differ between webkit.org and chromium.org
        * Better UI for the failures info, so that some info is visible even when not hovered.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.set _fetchAndParseNRWTResults):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/perf.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:
        (ol.notifications>li table.failures):
        (ol.notifications>li:hover table.failures):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#onebar #platform-picker):
        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-06-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120536.
        http://trac.webkit.org/changeset/120536
        https://bugs.webkit.org/show_bug.cgi?id=89296

        Does not compile on chromium-linux (Requested by abarth on
        #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setTextSubpixelPositioning):
        * DumpRenderTree/chromium/TestShellAndroid.cpp:

2012-06-16  Adam Barth  <abarth@webkit.org>

        layoutTestController.setBackingScaleFactor is redundant with (and less awesome than) internals.settings.setDeviceScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=89274

        Reviewed by Levi Weintraub.

        Delete (mostly stub) implementations of layoutTestController.setBackingScaleFactor.
        Note: The WebKit2 API that setBackingScaleFactor exercises is still
        tested by API-level tests.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2012-06-16  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Move chromium/public/linuxish/WebFontRendering.h out of linuxish directory
        https://bugs.webkit.org/show_bug.cgi?id=89228

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setTextSubpixelPositioning):
        * DumpRenderTree/chromium/TestShellAndroid.cpp:

2012-06-15  Adam Barth  <abarth@webkit.org>

        garden-o-matic's results.js should use RequestTracker
        https://bugs.webkit.org/show_bug.cgi?id=89257

        Reviewed by Dimitri Glazkov.

        We wrote results.js before we recognized the RequestTracker pattern.
        This patch replaces the manual implementations of RequestTracker with
        the real deal.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2012-06-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitpy/bindings: Added property svn:ignore.

2012-06-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120511.
        http://trac.webkit.org/changeset/120511
        https://bugs.webkit.org/show_bug.cgi?id=89255

        Breaks at least Android builder (Requested by wangxianzhu on
        #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setTextSubpixelPositioning):

2012-06-15  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Move chromium/public/linuxish/WebFontRendering.h out of linuxish directory
        https://bugs.webkit.org/show_bug.cgi?id=89228

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setTextSubpixelPositioning):

2012-06-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove DummyOptions and clean up the code in Port.get_option() and Port.set_option_default()
        https://bugs.webkit.org/show_bug.cgi?id=89135

        Re-land change in r120370 with fix in
        PortFactory.get_from_builder_name() that changes BuilderOptions
        to an actual optparse.Values object.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.get_option):
        (Port.set_option_default):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_setup_environ_for_server_register_cygwin):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (_builder_options):
        (PortFactory.get_from_builder_name):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_get_from_builder_name):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockOptions.ensure_value):

2012-06-15  Bill Budge  <bbudge@chromium.org>

        Add bbudge@chromium.org to committers.py

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed style fix after r120351.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (body.interface):

2012-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup, remove unnecessary workaround
        https://bugs.webkit.org/show_bug.cgi?id=88994

        Reviewed by Lucas Forschler.

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

2012-06-15  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations should only rebaseline the appropriate suffixes for the failure in question
        https://bugs.webkit.org/show_bug.cgi?id=88581

        Reviewed by Adam Barth.

        Make sure we only optimize the suffixes we rebaselined during
        rebaseline-expectations, and not all suffixes for a test.
        While optimizing is somewhere between harmless and good, it's also confusing :)

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations._rebaseline_port):
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2012-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        Update builder.html template for newer buildmaster
        https://bugs.webkit.org/show_bug.cgi?id=89207

        Rebasing builder.html template from v0.8.3 to v0.8.6p1.

        Reviewed by Zoltan Herczeg.

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

2012-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        Add ForceScheduler to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=88982

        Reviewed by Ryosuke Niwa.

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

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add title support to Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=89095

        Reviewed by Kenneth Rohde Christiansen.

        Update the MiniBrowser so it listens for the "title,change"
        signal on the view and keeps the browser window title
        up-to-date.

        * MiniBrowser/efl/main.c:
        (on_title_changed):
        (browserCreate):

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Implement navigation back/forward in Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=89173

        Reviewed by Kenneth Rohde Christiansen.

        Implement navigation back / forward in MiniBrowser. Use
        'F1' to navigate back and 'F2' to navigate forward.

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

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's LayoutTestController does not support titleTextDirection
        https://bugs.webkit.org/show_bug.cgi?id=86475

        Reviewed by Hajime Morita.

        Add titleTextDirection getter and setter to LayoutTestController and
        expose its value to JavaScript.
        Update the titleTextDirection value from EFL's "title,changed"
        callback in DumpRenderTree.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (getTitleTextDirectionCallback):
        (LayoutTestController::staticValues):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::titleTextDirection):
        (LayoutTestController::setTitleTextDirection):
        (LayoutTestController):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameTitleChanged):

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement reload / stop in Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=89168

        Reviewed by Kenneth Rohde Christiansen.

        Implement view reload / stop loading in MiniBrowser.
        Use 'F5' for reload and 'F6' for stopping the load.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (browserCreate):

2012-06-15  Hironori Bono  <hbono@chromium.org>

        Allow platforms to choose whether to remove markers on editing
        https://bugs.webkit.org/show_bug.cgi?id=88838

        Reviewed by Hajime Morita.

        This change implements WebViewHost::checkTextOfParagraph so DumpRenderTree can
        run grammar tests.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::checkTextOfParagraph): Implement this function with our mock spell checker and grammar checker.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost): Override WebSpellCheckClient::checkTextOfParagraph.

2012-06-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120370.
        http://trac.webkit.org/changeset/120370
        https://bugs.webkit.org/show_bug.cgi?id=89183

        Broke webkit-patch rebaseline (Requested by zdobersek on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (DummyOptions):
        (DummyOptions.__init__):
        (DummyOptions.__init__.this):
        (Port.__init__):
        (Port.get_option):
        (Port.set_option_default):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.RegisterCygwinOption):
        (ChromiumWinTest.RegisterCygwinOption.__init__):
        (ChromiumWinTest.test_setup_environ_for_server_register_cygwin):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockOptions.update):

2012-06-14  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Initialize font rendering in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=89133

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setTextSubpixelPositioning):
        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (platformInit):

2012-06-14  Dongwoo Im  <dw.im@samsung.com>

        [EFL] [DRT] Reset the WebAudio setting on DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=88622

        Reviewed by Philippe Normand.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp: Reset the setting of the Web Audio feature as default.
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-06-14  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Should retry a few times when failed to start DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=89124

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver._start_once):

2012-06-14  Tony Gentilcore  <tonyg@chromium.org>

        Update webpagereplay to 1.1.2
        https://bugs.webkit.org/show_bug.cgi?id=89118

        This includes the following patch which avoids pkg_resources import errors:
        http://code.google.com/p/web-page-replay/source/detail?r=476

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_webpagereplay):

2012-06-14  Ryosuke Niwa  <rniwa@webkit.org>

        Get rid of FAIL test expectation
        https://bugs.webkit.org/show_bug.cgi?id=89137

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_summarized_results_wontfix):
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (result_was_expected):
        (suffixes_for_expectations):
        (TestExpectationsModel._add_test):
        (TestExpectations):
        (TestExpectations.get_rebaselining_failures):
        (TestExpectations.remove_configuration_from_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (FunctionsTest.test_result_was_expected):
        (FunctionsTest.test_suffixes_for_expectations):
        (TestExpectationSerializerTests.test_parsed_expectations_string):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_test_expectations):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_valid_expectations):

2012-06-14  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove DummyOptions and clean up the code in Port.get_option() and Port.set_option_default()
        https://bugs.webkit.org/show_bug.cgi?id=89135

        Reviewed by Ryosuke Niwa.

        This patch is just some minor cleanup and simplification. There
        should be no functional changes here.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.get_option):
        (Port.set_option_default):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_setup_environ_for_server_register_cygwin):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockOptions.ensure_value):

2012-06-14  Ian Vollick  <vollick@chromium.org>

        [chromium] Certain settings in CCSettings could be global
        https://bugs.webkit.org/show_bug.cgi?id=88384

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        (TestShell::setPerTilePaintingEnabled):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-06-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120352.
        http://trac.webkit.org/changeset/120352
        https://bugs.webkit.org/show_bug.cgi?id=89120

        It seems something is still wrong with it :/ (Requested by
        Ossy on #webkit).

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (BuildAndPerfTestWebKit2Factory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):

2012-06-14  Jia Pu  <jpu@apple.com>

        Mark text with text alternative with blue underline.
        https://bugs.webkit.org/show_bug.cgi?id=83047

        Reviewed by NOBODY Enrica Casucci.

        * DumpRenderTree/mac/TextInputController.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController dictatedStringWithPrimaryString:alternative:alternativeOffset:alternativeLength:]):

2012-06-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120353.
        http://trac.webkit.org/changeset/120353
        https://bugs.webkit.org/show_bug.cgi?id=89119

        It seems we still need this workaround (Requested by Ossy on
        #webkit).

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

2012-06-14  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup, remove unnecessary workaround
        https://bugs.webkit.org/show_bug.cgi?id=88994

        Reviewed by Lucas Forschler.

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

2012-06-14  Csaba Osztrogonác  <ossy@webkit.org>

        master.cfg cleanup, pass BuildStep instances instead of BuildStep subclasses
        https://bugs.webkit.org/show_bug.cgi?id=89001

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (BuildAndPerfTestWebKit2Factory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        (DownloadAndPerfTestWebKit2Factory.__init__):

2012-06-14  Csaba Osztrogonác  <ossy@webkit.org>

        Unhide login form on the build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=88981

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:

2012-06-14  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Add support in DumpRenderTree for tracking repaints
        https://bugs.webkit.org/show_bug.cgi?id=87658

        Reviewed by Martin Robinson.

        Reimplement the displayWebView method in DumpRenderTree - force a
        repaint before starting tracking repaints and resetting them.

        When gathering pixel output from a web view, if tracking repaints,
        paint an overlay over the output with the overlay being clear in the
        areas where the repaints occurred.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (displayWebView):
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (paintOverlay):
        (fillRepaintOverlayIntoContext):
        (createBitmapContextFromWebView):

2012-06-14  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests doesn't find similar platform tests for a keyword
        https://bugs.webkit.org/show_bug.cgi?id=37956

        Reviewed by Ryosuke Niwa.

        This patches adds support for NRWT so that if you type
        "new-run-webkit-tests foo" it will run all the tests in foo as
        well as platform/foo for all of the platforms that are normally
        searched (this only applies to directories, not to individual tests).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.collect_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.tests):
        (Port):
        (Port._expanded_paths):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_no_http_tests):
        (MainTest):
        (MainTest.test_platform_tests_are_found):

2012-06-14  Dirk Pranke  <dpranke@chromium.org>

        NRWT should honor --skipped=[default|ignore|only], like ORWT does
        https://bugs.webkit.org/show_bug.cgi?id=66308

        Reviewed by Ryosuke Niwa.

        This patch adds support for ORWT's --skipped=(default|ignore|only)
        flag and cleans up the interaction between that and --ignore.

        Individual tests (but not directories) explicitly listed on the
        command line will always be run regardless of what is passed
        for --skipped and --ignore.

        This patch also changes the "found" and "running" log messages
        since it wasn't clear how the skipped tests were included in those numbers.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.collect_tests):
        (Manager.prepare_lists_and_print_output):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_ignore_flag):
        (MainTest):
        (MainTest.test_skipped_flag):

2012-06-14  Takashi Toyoshima  <toyoshim@chromium.org>

        new-run-webkit-websocketserver must handle TLS related arguments
        https://bugs.webkit.org/show_bug.cgi?id=89079

        Reviewed by Dirk Pranke.

        PyWebSocket class must accept private_key, certificate, and
        ca_certificate arguments and pass them to launching pywebsocket.
        Also add ca_certificate handling to new-run-webkit-websocketserver.

        * Scripts/new-run-webkit-websocketserver:
        (main):
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket.__init__):
        (PyWebSocket._prepare_config):

2012-06-14  Qi Zhang  <qi.2.zhang@nokia.com>

        Unreviewed. Update my email.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-14  Takashi Toyoshima  <toyoshim@chromium.org>

        Update pywebsocket to 0.7.6 from 0.7.4
        https://bugs.webkit.org/show_bug.cgi?id=88975

        Reviewed by Kent Tamura.

        This new version of pywebsocket introduce following features.
         - Allow handlers to send a close frame with empty body in response of
             a client initiated closing handshake
         - Implement perframe compression extension
         - Support client certificate authentication

        * Scripts/webkitpy/thirdparty/mod_pywebsocket/COPYING:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py:
        (_create_control_frame):
        (Stream._receive_frame):
        (Stream.send_message):
        (Stream.receive_message):
        (Stream._send_closing_handshake):
        (Stream.close_connection):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py:
        (ExtensionParsingException):
        (ExtensionParsingException.__init__):
        (_parse_extension_param):
        (_parse_extension):
        (parse_extensions):
        (format_extension):
        (format_extensions):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py:
        (_parse_compression_method):
        (_create_accepted_method_desc):
        (PerFrameCompressionExtensionProcessor):
        (PerFrameCompressionExtensionProcessor.__init__):
        (PerFrameCompressionExtensionProcessor._lookup_compression_processor):
        (PerFrameCompressionExtensionProcessor._get_compression_processor_response):
        (PerFrameCompressionExtensionProcessor.get_extension_response):
        (PerFrameCompressionExtensionProcessor.setup_stream_options):
        (PerFrameCompressionExtensionProcessor.get_compression_processor):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py:
        (parse_token_list):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py:
        (Handshaker._parse_extensions):
        (Handshaker._send_handshake):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py:
        (WebSocketServer._create_sockets):
        (_get_logger_from_class):
        (_configure_logging):
        (_build_option_parser):
        (_main.if):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py:
        (RepeatedXorMasker.mask):

2012-06-14  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Remove USE(QT_IMAGE_DECODER) macro, since we don't use it anymore

        Reviewed by Noam Rosenthal.

        * qmake/mkspecs/features/features.prf:

2012-06-14  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add implementation for registerIntentService in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88399

        Reviewed by Kenneth Rohde Christiansen.

        Update initialization of WKPageLoaderClient.

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

2012-06-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] Implement setDomainRelaxationForbiddenForURLScheme in EFL DRT
        https://bugs.webkit.org/show_bug.cgi?id=84577

        Reviewed by Ryosuke Niwa.

        Add missing implementation setDomainRelaxationForbiddenForURLScheme to EFL's
        LayoutTestController.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):

2012-06-13  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add implementation for dispatchIntent in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88340

        Reviewed by Kenneth Rohde Christiansen.

        Update initialization of WKPageLoaderClient.

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

2012-06-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120268.
        http://trac.webkit.org/changeset/120268
        https://bugs.webkit.org/show_bug.cgi?id=89060

        WebCompositor::setPerTilePaintingEnabled hits an assertion in
        DEBUG (Requested by dominicc|work on #webkit).

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2012-06-13  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r120252): run-webkit-tests on Mac fails
        https://bugs.webkit.org/show_bug.cgi?id=89057

        Reviewed by Dan Bernstein.

        get_option will happily return None (the default only kicks in if
        the option is actually *not set*). We should instead check get_option's
        return value and default to "x86_64" architecture ourselves.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.__init__):

2012-06-13  Ian Vollick  <vollick@chromium.org>

        [chromium] Certain settings in CCSettings could be global
        https://bugs.webkit.org/show_bug.cgi?id=88384

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests does not support --32-bit like ORWT did
        https://bugs.webkit.org/show_bug.cgi?id=71634

        Reviewed by Ojan Vafai.

        This patch adds support for 32-bit apple mac builds, adding the
        --32-bit flag for compatibility with ORWT and fixing the port
        architecture() definition to actually return the correct values.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (port_options):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        (MacPort.__init__):
        (MacPort._build_driver_flags):
        (MacPort.setup_environ_for_server):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_sample_process_throws_exception):
        (test_32bit):
        (test_32bit.run_script):
        (test_64bit):
        (test_64bit.run_script):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_driver):
        (WebKitPort._build_driver_flags):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):

2012-06-13  Ryosuke Niwa  <rniwa@webkit.org>

        Remove webkitpy code to support legacy test_expectations.txt files
        https://bugs.webkit.org/show_bug.cgi?id=89038

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.path_to_test_expectations_file):
        (Port.expectations_dict):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_uses_test_expectations_file):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest.test_path_to_test_expectations_file):
        (test_test_expectations):
        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher.should_skip_without_warning):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest.test_check_test_expectations):

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove port.test_expectations() and port.test_expectations_overrides()
        https://bugs.webkit.org/show_bug.cgi?id=88948

        Reviewed by Ojan Vafai.

        In the final patch of this run, we remove the
        test_expectations() and test_expectation_overrides() methods
        from the Port class - callers must now use just
        expectations_dict().

        Note that support for the cascade in new-run-webkit-tests is
        complete but only Chromium uses it; webkit-patch
        rebaseline-expectations still does not support updating entries
        in any file other than the first expectations file, however.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.path_to_test_expectations_file):
        (Port.uses_test_expectations_file):
        (Port.expectations_files):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_additional_expectations):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_expectations_files):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (TestGoogleChromePort.test_get_google_chrome_port):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_test_expectations):
        (test_legacy_test_expectations):

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        nrwt: implement the actual cascade of TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=88947

        Reviewed by Ojan Vafai.

        This change implements the actual cascade by removing the
        concept of 'overrides' from the TestExpectations object and
        parsing each file separately.

        There is an actual semantic change in this patch, in that
        setting an expectation on a directory in one file will override
        the expectations on any individual tests set in prior files. The
        test_overrides__directory() unit test verifies this.

        Otherwise, this patch mostly consists of deleting code :).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationsModel.__init__):
        (TestExpectationsModel.add_expectation_line):
        (TestExpectationsModel._add_test):
        (TestExpectationsModel._already_seen_better_match):
        (TestExpectations.__init__):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_overrides__directory):

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: update callers to use port.expectation_dict() instead of test_expectations() and test_expectations_overrides()
        https://bugs.webkit.org/show_bug.cgi?id=88946

        Reviewed by Ojan Vafai.

        In preparation for fully supporting cascading expectations files
        and removing the 'overrides' concept.

        There should be no functional changes in this patch.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_update_summary_with_result):
        (ResultSummaryTest.get_result_summary):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (parse_exp):
        (SkippedTests.check):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations.FakePort.__init__):
        (LintTest.test_all_configurations.FakePort.expectations_dict):
        (LintTest.test_lint_test_files__errors):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_overrides_are_included_correctly):

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: rework the TestExpectations style checker in preparation for the cascade
        https://bugs.webkit.org/show_bug.cgi?id=88945

        Reviewed by Ojan Vafai.

        This patch changes the style checker to call the
        TestExpectations parser directly and be oblivious as to what the
        port's actual expectations are.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        (TestExpectationsChecker.check_test_expectations):

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        nrwt: restructure the port classes to handle multiple expectations files
        https://bugs.webkit.org/show_bug.cgi?id=88944

        Reviewed by Ojan Vafai.

        This patch restructures the Port classes so that each port
        returns a list of TestExpectations files to be used (in a new, public,
        expectations_files() method), and the base implementation rolls them
        up into the ordered expectations_dict(), which becomes a public
        method.

        port.path_to_test_expectations_file(), port.test_expectations(),
        and port.test_expectations_overrides() are then reimplemented as
        wrappers around port.expectations_dict().
        port.test_expectations() and port.test_expectations_overrides()
        will eventually be removed when the cascade is fully completed,
        and port.path_to_test_expectations_file() will be removed when
        the rebaselining tool supports the cascade
        (expectations_files() may also become private at that point).

        There should be no functional changes in this patch, but a bunch
        of custom logic gets deleted!

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.expectations_dict):
        (Port):
        (Port.expectations_files):
        (Port.test_expectations):
        (Port.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_additional_expectations):
        (PortTest.test_uses_test_expectations_file):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.all_baseline_variants):
        (ChromiumPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_overrides_and_builder_names):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (_expectations_files):
        (GoogleChromeLinux32Port.expectations_files):
        (GoogleChromeLinux64Port.expectations_files):
        (GoogleChromeMacPort.expectations_files):
        (GoogleChromeWinPort.expectations_files):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (TestGoogleChromePort._verify_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_expectations_ordering):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_file_search_paths):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file_noop):
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_does_not_include_overrides):
        (test_rebaseline_expectations):
        (test_overrides_are_included_correctly):

2012-06-13  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Update URL of WinCairoRequirements.zip download.
        https://bugs.webkit.org/show_bug.cgi?id=89009

        Reviewed by Martin Robinson.

        * Tools/Scripts/update-webkit-dependency: Put fallback code
        to download a "last update" time from servers that don't properly
        report Last-Modified in their HTTP header.
        * Tools/Scripts/update-webkit-wincairo-libs: Change download link
        for the WinCairo build requirements bundle.

2012-06-13  Dirk Pranke  <dpranke@chromium.org>

        nrwt: preliminary cleanup before supporting cascading expectations files
        https://bugs.webkit.org/show_bug.cgi?id=88942

        Reviewed by Ojan Vafai.

        This change just prepares the TestExpectations parser to get filenames
        along with the expectations, and improves the warning messages so that
        they contain the filenames along with the line numbers.

        There should be no functional changes in this patch.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        (TestExpectationEditorTests.make_parsed_expectation_lines):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.parse):
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectationParser._tokenize):
        (TestExpectationParser._tokenize_list):
        (TestExpectationLine):
        (TestExpectationsModel.__init__):
        (TestExpectationsModel._already_seen_better_match):
        (TestExpectations.__init__):
        (TestExpectations._shorten_filename):
        (TestExpectations._report_warnings):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (TestExpectationParserTests._tokenize):
        (TestExpectationParserTests.test_tokenize_blank):
        (TestExpectationParserTests.test_tokenize_missing_colon):
        (TestExpectationParserTests.test_tokenize_extra_colon):
        (TestExpectationParserTests.test_tokenize_empty_comment):
        (TestExpectationParserTests.test_tokenize_comment):
        (TestExpectationParserTests.test_tokenize_missing_equal):
        (TestExpectationParserTests.test_tokenize_extra_equal):
        (TestExpectationParserTests.test_tokenize_valid):
        (TestExpectationParserTests.test_tokenize_valid_with_comment):
        (TestExpectationParserTests.test_tokenize_valid_with_multiple_modifiers):
        (TestExpectationParserTests.test_parse_empty_string):
        (TestExpectationSerializerTests._tokenize):
        (TestExpectationSerializerTests.assert_round_trip):
        (TestExpectationSerializerTests.assert_list_round_trip):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningExpectationsUpdater.update_expectations):

2012-06-13  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Enable link prefetch support in the developer builds
        https://bugs.webkit.org/show_bug.cgi?id=89011

        Reviewed by Martin Robinson.

        Enable the link prefetch support for Gtk by default in developer
        builds.

        * Scripts/webkitperl/FeatureList.pm:

2012-06-13  Csaba Osztrogonác  <ossy@webkit.org>

        Update buildbot master in autoinstaller to match build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=88992

        Reviewed by Adam Barth.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_buildbot):

2012-06-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120209.
        http://trac.webkit.org/changeset/120209
        https://bugs.webkit.org/show_bug.cgi?id=89007

        Broke the WebKit2 mac build. (Requested by andersca on
        #webkit).

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

2012-06-13  Zoltan Horvath  <zoltan@webkit.org>

        check-webkit-style needs to respect Qt API coding style
        https://bugs.webkit.org/show_bug.cgi?id=88995

        Reviewed by Csaba Osztrogonác.

        Add -whitespace/declaration exception to Qt API files.

        * Scripts/webkitpy/style/checker.py:

2012-06-13  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add implementation for dispatchIntent in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88340

        Reviewed by Kenneth Rohde Christiansen.

        Update initialization of WKPageLoaderClient.

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

2012-06-13  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Handle multiple held buttons in touch mocking.
        https://bugs.webkit.org/show_bug.cgi?id=88865

        Reviewed by Kenneth Rohde Christiansen.

        Add handling for multiple held mouse-buttons in the appropiate places.
        To do this last-pos and start-pos are now also read from the last recorded
        touch-point instead from object-global variables.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::updateTouchPoint):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):

2012-06-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make it possible to disable -Werror in production builds

        Reviewed by Tor Arne Vestbø.

        Don't do -Werror if build-webkit is called with --qmakearg=CONFIG+=production_build,
        something qt5.git's qtwebkit.pri will soon do.

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

2012-06-13  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Store and compare md5sum of jhbuild files to trigger cleaning Dependencies
        https://bugs.webkit.org/show_bug.cgi?id=85790

        Reviewed by Gustavo Noronha Silva.

        Add md5 checks for jhbuild configuration for EFL, reusing the gtk jhbuild related
        code in webkitdirs.pm.

        * Scripts/webkitdirs.pm:
        (jhbuildConfigurationChanged):
        (saveJhbuildMd5):
        (cleanJhbuild):
        (buildAutotoolsProject):
        (generateBuildSystemFromCMakeProject):

2012-06-13  Qi Zhang  <qi.2.zhang@nokia.com>

        [Qt] Add configure test for zlib and set WTF_USE_ZLIB if found
        https://bugs.webkit.org/show_bug.cgi?id=88763

        Add configure test for zlib and set WTF_USE_ZLIB if found to enable websocket
        extension.

        Reviewed by Simon Hausmann.

        * qmake/config.tests/libzlib: Added.
        * qmake/config.tests/libzlib/libzlib.cpp: Added.
        (main):
        * qmake/config.tests/libzlib/libzlib.pro: Added.
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile:

2012-06-13  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Enable MEDIA_STREAM by default
        https://bugs.webkit.org/show_bug.cgi?id=88849

        Reviewed by Antonio Gomes.

        * Scripts/webkitperl/FeatureList.pm:

2012-06-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Prevent stderr output from messing up detection of build path

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

        Warnings such as 'perl: warning: Setting locale failed' will otherwise
        end up as the build path when calling out to webkit-build-directory.

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):

2012-06-13  Ryosuke Niwa  <rniwa@webkit.org>

        Update the builder name for Apple Lion builders.

        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-06-13  Joel Dillon  <joel.dillon@codethink.co.uk>

        [Qt][Win]QtTestBrowser somehow picks up DumpRenderTree's main.cpp, causing a failure to link
        https://bugs.webkit.org/show_bug.cgi?id=88874

        Reviewed by Simon Hausmann.

        Rename main.cpp in QtTestBrowser because on Windows
        it conflicts with main.cpp from DumpRenderTree.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/qttestbrowser.cpp: Renamed from Tools/QtTestBrowser/main.cpp.
        (launcherMain):
        (LauncherApplication):
        (LauncherApplication::urls):
        (LauncherApplication::isRobotized):
        (LauncherApplication::robotTimeout):
        (LauncherApplication::robotExtraTime):
        (LauncherApplication::applyDefaultSettings):
        (LauncherApplication::LauncherApplication):
        (requiresGraphicsView):
        (LauncherApplication::handleUserOptions):
        (main):

2012-06-12  Lucas Forschler  <lforschler@apple.com>

        Wrap bot types inside ().
        https://bugs.webkit.org/show_bug.cgi?id=88893
        
        Reviewed by Stephanie Lewis.

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

2012-06-12  Christophe Dumez  <christophe.dumez@intel.com>

        [soup] Prevent setting or editing httpOnly cookies from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=88760

        Reviewed by Gustavo Noronha Silva.

        Update libsoup to v2.39.2, glib to v2.33.2 and glib-networking
        to v2.33.2 for both GTK and EFL ports.

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

2012-06-12  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable SHADOW_DOM flag
        https://bugs.webkit.org/show_bug.cgi?id=87732

        Reviewed by Kentaro Hara.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): Enable
        SHADOW_DOM by default in DRT.
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onFocusCanCycle): Enable focus cycling in EFL DRT to behave like
        Chromium and Mac ports.
        (drtViewAdd):
        * Scripts/webkitperl/FeatureList.pm: Enable SHADOW_DOM flag by default
        at compile time for EFL port.

2012-06-12  Ashod Nakashian  <ashodnakashian@yahoo.com>

        WinLauncher should show loading errors
        https://bugs.webkit.org/show_bug.cgi?id=80760

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.cpp: Added load-fail handler to show messagebox with error.
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        * WinLauncher/WinLauncher.h:
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        (WinLauncherWebHost):

2012-06-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add MiniBrowserEfl.
        https://bugs.webkit.org/show_bug.cgi?id=61850

        Reviewed by Chang Shu.

        Implement MiniBrowser for EFL.

        * CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt: Added.
        * MiniBrowser/efl/main.c: Added.
        (_MiniBrowser):
        (main_signal_exit):
        (on_ecore_evas_resize):
        (browserCreate):
        (main):

2012-06-12  Helder Correia  <helder.correia@nokia.com>

        Unreviewed. Update my email address in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-12  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Resolve CMake warnings on overlapping search paths for EFL jhbuild-enabled build
        https://bugs.webkit.org/show_bug.cgi?id=84707

        Fixing CMAKE prefix path for 64bit systems to avoid CMAKE warnings on those.
        use_lib64 variable is preconfigured to True by jhbuild.

        Reviewed by Dirk Pranke.

        * efl/jhbuildrc:

2012-06-12  Dana Jansens  <danakj@chromium.org>

        Add zlieber@chromium.org to contributors list
        https://bugs.webkit.org/show_bug.cgi?id=88904

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-12  Lucas Forschler  <lforschler@apple.com>

        Rename Apple bots to a standard convention.
        https://bugs.webkit.org/show_bug.cgi?id=88893
        
        Note: This has the side effect of grouping all of the Apple bots together in the waterfall.

        Reviewed by Simon Fraser.

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

2012-06-12  Mike West  <mkwst@chromium.org>

        Make document.documentURI readonly from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=65187

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/SetDocumentURI.html: Added.
        * TestWebKitAPI/Tests/mac/SetDocumentURI.mm: Added.
        (-[SetDocumentURITest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-06-12  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] enable LEGACY_WEBKIT_BLOB_BUILDER flag
        https://bugs.webkit.org/show_bug.cgi?id=88715

        Reviewed by Noam Rosenthal.

        Enable LEGACY_WEBKIT_BLOB_BUILDER flag by default on EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2012-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Fix -Werror for the buildbots
        https://bugs.webkit.org/show_bug.cgi?id=88223

        Rubber-stamped by Tor Arne Vestbø.

        Revert a part of r119269 to enable Werror again for non qt-developer-builds. (for bots for example)

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

2012-06-12  Balazs Kelemen  <kbalazs@webkit.org>

        [REGRESSION][WTR] Build fail with werror after r120054
        https://bugs.webkit.org/show_bug.cgi?id=88862

        Reviewed by Csaba Osztrogonác.

        Some static helpers become unused after counterValueForElementById
        has moved to Internals. Let's remove them.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):

2012-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Slave losts cause build break on bots
        https://bugs.webkit.org/show_bug.cgi?id=38980

        Minor fix after r59261.

        Reviewed by Tor Arne Vestbø.

        * Scripts/build-webkit:
        (unlinkZeroFiles): Don't remove 0 byte sized directories, because they are always 0 byte sized on Windows.

2012-06-11  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: counterValueForElementById() could be moved to Internals.
        https://bugs.webkit.org/show_bug.cgi?id=84406

        Reviewed by Hajime Morita.

        Move the counterValueForElementById from LayoutTestCotroller to Internals and
        remove the old platform specific implementations as it exclusively tests WebCore functionality.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setPOSIXLocale):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-06-11  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Make SpeechRecognitionError an Event
        https://bugs.webkit.org/show_bug.cgi?id=88784

        Reviewed by Adam Barth.

        Make it possible to have MockWebSpeechRecognizer fire error events.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockSpeechRecognitionError):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:
        (WebKit):
        (ErrorTask):
        (WebKit::ErrorTask::ErrorTask):
        (MockWebSpeechRecognizer::addMockResult):
        (MockWebSpeechRecognizer::setError):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h:
        (MockWebSpeechRecognizer):

2012-06-11  Ojan Vafai  <ojan@chromium.org>

        Don't show the ASAN builders in garden-o-matic since they don't get block WebKit rolls.
        https://bugs.webkit.org/show_bug.cgi?id=88836

        Reviewed by Dirk Pranke.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:

2012-06-11  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Remove CMakeCache.txt before building
        https://bugs.webkit.org/show_bug.cgi?id=88717

        Reviewed by Antonio Gomes.

        Remove CMake cache file before every build to avoid using outdated
        build flags when new features get enabled. This will avoid unexpected
        failures on the bots due to outdated build flags.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2012-06-11  Vincent Scheib  <scheib@chromium.org>

        Add new Pointer Lock spec attribute webkitPointerLockElement.
        https://bugs.webkit.org/show_bug.cgi?id=88799

        Reviewed by Dimitri Glazkov.

        Part of a series of refactoring changes to update pointer lock API to
        the fullscreen locking style. https://bugs.webkit.org/show_bug.cgi?id=84402

        New attribute webkitPointerLockElement added. Follow up patches
        will remove the previous isLocked attribute. Tests updated to use
        the new attribute.

        WebViewHost logic required modification to correctly repond to
        a lock, unlock, pointerLockElement call series. Specifically,
        unlocking must be queued after a lock command is issued always
        as the lock state may not be set yet with a lock request in flight.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestPointerUnlock): Always post didLosePointerLock task.
        (WebViewHost::didLosePointerLock): Signal didLosePointerLock only if pointer was locked.

2012-06-11  Alexis Menard  <alexis.menard@openbossa.org>

        [CSS3 Backgrounds and Borders] Protect box-decoration-break behind a feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=88804

        Reviewed by Tony Chang.

        Protect box-decoration-break behind a feature flag enabled by default.

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

2012-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE][EFL] Remove duplicated executable output path
        https://bugs.webkit.org/show_bug.cgi?id=88765

        Reviewed by Daniel Bates.

        CMake files for EFL port have redefined executable output path. However, EFL port doesn't
        need to define again because it is already defined in top-level CMake file.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:

2012-06-11  Ojan Vafai  <ojan@chromium.org>

        Don't consider show warnings in the garden-o-matic UI for non-layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=88816

        Reviewed by Dirk Pranke.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        Expose a way to clear AsynchronousCaches.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        Clear the buildInfo cache at the beginning of each test in order to avoid having one test affect another.

2012-06-11  Dirk Pranke  <dpranke@chromium.org>

        nrwt exits early too frequently
        https://bugs.webkit.org/show_bug.cgi?id=73843

        Reviewed by Ryosuke Niwa.

        Change the defaults for new-run-webkit-tests for both
        --exit-after-n-failures and --exit-after-n-crashes-or-timeouts
        to zero (i.e., we will never exit early by default).

        If people want their buildbots to exit early it is their
        responsibility to update their buildbot configs appropriately.

        Note that we have tests that ensure that these flags work for
        non-zero numbers, but we don't have tests that either test the
        default or ensure that zero means "run all of the tests". I
        think that's okay but can add tests if others disagree.

        Also note that it looks like no changes on the build.webkit.org
        master.cfg are necessary; all of the bots seem to be using the
        RunWebKitTests wrapper which is already setting the flags. There
        is a NewRunWebKitTests wrapper, but that looks to be unused; I
        will delete that in a separate patch.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-06-11  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] Reset CacheModel before running each test
        https://bugs.webkit.org/show_bug.cgi?id=87534

        Reviewed by Gustavo Noronha Silva.

        Reset cache model to default before running each test to fix some
        flaky tests on EFL build bots. Also fix case value in setCacheModel.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setCacheModel):

2012-06-11  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] Memory leaks in DRT EventSender.cpp
        https://bugs.webkit.org/show_bug.cgi?id=88774

        Reviewed by Martin Robinson.

        Fix a few possible memory leaks in EventSender code.

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback): Free the event returned by gdk_event_new().
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.

2012-06-11  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] REGRESSION (r119788): tests rely on pathToLocalResource are failing after r119788
        https://bugs.webkit.org/show_bug.cgi?id=88661

        Reviewed by Dirk Pranke.

        Pass string length explicitly when creating String object from
        non-null-terminated UChar* returned by characters().

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::pathToLocalResource):

2012-06-11  David Dorwin  <ddorwin@chromium.org>

        [chromium] Provide access to the WebPlugin created by the helper plugin widget
        https://bugs.webkit.org/show_bug.cgi?id=88028

        Reviewed by Adam Barth.

        Added isPlaceholder() to WebPlugin.

        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin::isPlaceholder):

2012-06-11  Tony Chang  <tony@chromium.org>

        rebaseline from garden-o-matic leaves N processes each time it is run
        https://bugs.webkit.org/show_bug.cgi?id=88586

        Reviewed by Dirk Pranke.

        This appears to only be a problem on python 2.7. Maybe a bug causing
        pools to not be garbage collected?

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.run_in_parallel): close() and join() the process pool.
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_in_parallel):

2012-06-11  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Add config tests for WEBP imagedecoder library, modify HAVE(decoderlibrary) to USE(...)
        https://bugs.webkit.org/show_bug.cgi?id=87841

        Reviewed by Simon Hausmann.

        * qmake/config.tests/libwebp/libwebp.cpp: Added.
        (main):
        * qmake/config.tests/libwebp/libwebp.pro: Added.
        * qmake/sync.profile:

2012-06-10  Ryosuke Niwa  <rniwa@webkit.org>

        Expose layoutTestController as testRunner
        https://bugs.webkit.org/show_bug.cgi?id=88210

        Reviewed by Darin Adler.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::makeWindowObject):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::initJSObjects):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::makeWindowObject):

2012-06-09  Dominic Cooney  <dominicc@chromium.org>

        [Chromium] Remove JavaScriptCore dependencies from gyp
        https://bugs.webkit.org/show_bug.cgi?id=88510

        Reviewed by Adam Barth.

        Chromium doesn't support JSC any more and there doesn't seem to be
        a strong interest in using GYP as the common build system in other
        ports.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * Scripts/generate-project-files: Removed.

2012-06-09  Sukolsak Sakshuwong  <sukolsak@google.com>

        Add UNDO_MANAGER flag
        https://bugs.webkit.org/show_bug.cgi?id=87908

        Reviewed by Tony Chang.

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

2012-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        webkit-patch land-safely should set cq? if the patch author is not in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=88689

        Reviewed by Dirk Pranke.

        When posting a patch on Bugzilla, trun cq+ into cq? if the Bugzilla login is not listed
        in committers.py or the contributor cannot commit. If anything, the contributor can still
        set cq+ on thier patches manually so I don't think this will be an issue for people who
        don't list their Bugzille email on committers.py.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._commit_queue_flag):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_commit_queue_flag):
        (test_commit_queue_flag.assert_commit_queue_flag):

2012-06-08  Dirk Pranke  <dpranke@chromium.org>

        remove obsolete NewRunWebKitTests buildbot master factory classes
        https://bugs.webkit.org/show_bug.cgi?id=88693

        Reviewed by Ryosuke Niwa.

        I believe these aren't used any more ...

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

2012-06-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Build DumpRenderTree with Android SDK
        https://bugs.webkit.org/show_bug.cgi?id=88598

        Change WebKit side of DRT related code according to some recent changes at chromium side.

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort._path_to_driver):

2012-06-08  Wei James  <james.wei@intel.com>

        Add app_abi option for DumpRenderTree_apk
        https://bugs.webkit.org/show_bug.cgi?id=88626

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the library version to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=88426

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Add built sources to the list of files, but
        ignore enum types and marshallers.

2012-06-07  Vincent Scheib  <scheib@chromium.org>

        Layout Test pointer-lock/pointerlockchange-pointerlockerror-events.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=88604

        Reviewed by Kent Tamura.

        DumpRenderTree fixed to not call didLosePointerLock if pointer is not currently locked.
        Fixes debug only assert crash in pointer-lock/pointerlockchange-pointerlockerror-events.html test.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestPointerUnlock):

2012-06-08  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: mock WebSpeechRecognizer for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=87976

        Reviewed by Kent Tamura.

        Provide a mock implementation of WebSpeechRecognizer for
        DumpRenderTree. This will allow better testing of the API via layout
        tests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::addMockSpeechRecognitionResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp: Added.
        (MockWebSpeechRecognizer::create):
        (MockWebSpeechRecognizer::start):
        (MockWebSpeechRecognizer::stop):
        (MockWebSpeechRecognizer::abort):
        (MockWebSpeechRecognizer::MockWebSpeechRecognizer):
        (MockWebSpeechRecognizer::~MockWebSpeechRecognizer):
        (MockWebSpeechRecognizer::ResultTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechRecognizer.h: Added.
        (WebKit):
        (MockWebSpeechRecognizer):
        (MockWebSpeechRecognizer::addMockResult):
        (MockWebSpeechRecognizer::taskList):
        (ClientCallTask):
        (MockWebSpeechRecognizer::ClientCallTask::ClientCallTask):
        (ResultTask):
        (MockWebSpeechRecognizer::ResultTask::ResultTask):
        (NoMatchTask):
        (MockWebSpeechRecognizer::NoMatchTask::NoMatchTask):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechRecognizer):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::mockSpeechRecognizer):

2012-06-07  Kinuko Yasuda  <kinuko@chromium.org>

        check-webkit-style needs to be taught about <public/Foo.h>
        https://bugs.webkit.org/show_bug.cgi?id=88524

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_classify_include):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_public_primary_header):
        (OrderOfIncludesTest.test_classify_include):

2012-06-07  Joshua Lock  <joshua.lock@intel.com>

        [EFL][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67255

        Reviewed by Dirk Pranke.

        Implement pathToLocalResource to redirect file:///tmp URL's to
        DUMPRENDERTREE_TEMP and file:///tmp/LayoutTests to point to the
        LayoutTests sub-directory of the WebKit source tree.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::pathToLocalResource):

2012-06-07  Tony Payne  <tpayne@chromium.org>

        [chromium] Allow LayoutTests under new git workflow
        https://bugs.webkit.org/show_bug.cgi?id=88575

        On Windows, chromium indirects through git.bat. Adds the same hack that
        is currently used for discovering svn.bat to support the new git
        workflow.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git): Replaces all hard-coded references to 'git' with the class
        variable executable_name.
        (Git._check_git_architecture):
        (Git.in_working_directory):
        (Git.find_checkout_root):
        (Git.read_git_config):
        (Git.discard_local_commits):
        (Git.local_commits):
        (Git.working_directory_is_clean):
        (Git.clean_working_directory):
        (Git.status_command):
        (Git.add_list):
        (Git.delete_list):
        (Git.exists):
        (Git._current_branch):
        (Git.changed_files):
        (Git._changes_files_for_commit):
        (Git.revisions_changing_file):
        (Git.conflicted_files):
        (Git.svn_revision):
        (Git.create_patch):
        (Git._run_git_svn_find_rev):
        (Git.contents_at_revision):
        (Git.diff_for_file):
        (Git.show_head):
        (Git.committer_email_for_revision):
        (Git.apply_reverse_diff):
        (Git.revert_files):
        (Git.commit_with_message):
        (Git._commit_on_branch):
        (Git.svn_commit_log):
        (Git.last_svn_commit_log):
        (Git.svn_blame):
        (Git._branch_ref_exists):
        (Git.delete_branch):
        (Git.remote_merge_base):
        (Git.commit_locally_with_message):
        (Git.push_local_commits_to_server):
        (Git.commit_ids_from_commitish_arguments):
        (Git.commit_message_for_local_commit):
        (Git.files_changed_summary_for_commit):
        * Scripts/webkitpy/common/host.py:
        (Host._engage_awesome_windows_hacks): Adds an awesome 'git.bat' hack
        that duplicates the logic in the existing 'svn.bat' hack.

2012-06-07  Ojan Vafai  <ojan@chromium.org>

        Style build architectures like build versions for non-layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=88590

        Reviewed by Tony Chang.

        Since we show the list of failing tests after the architecture, we want the
        buildtype and architecture to be grouped together visually.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css:
        (.effects a.failing-builder>span.architecture):

2012-06-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Remove header dependency of ImageDiff to WTF
        https://bugs.webkit.org/show_bug.cgi?id=88422

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/ImageDiff.cpp:
        (untestedCompareImages):

2012-06-07  Dongwoo Im  <dw.im@samsung.com>

        [EFL] [DRT] DRT enables WebAudio when WebAudio feature is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=88491

        Reviewed by Dirk Pranke.

        DRT should enable WebAudio when WebAudio feature is enabled,
        so that the WebAudio feature could be tested by the Layouttest.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp: Enable WebAudio when WebAudio feature is enabled.
        (LayoutTestController::overridePreference):

2012-06-07  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch rebaseline-expectations should only rebaseline the appropriate suffixes for the failure in question
        https://bugs.webkit.org/show_bug.cgi?id=88581

        Reviewed by Ojan Vafai.

        webkit-paptch rebaseline-expectations was ignoring what the
        expected results for a test were and pulling down all the result
        files from a bot. This could lead to us pulling down old,
        incorrect .txt or .png files. With this patch we will now only
        pull down expectations of the appropriate file types (so an
        IMAGE failure will only pull the png and not the txt file).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (has_pixel_failures):
        (suffixes_for_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (FunctionsTest.test_suffixes_for_expectations):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand.__init__):
        (RebaselineExpectations._is_supported_port):
        (RebaselineExpectations._update_expectations_file):
        (RebaselineExpectations._tests_to_rebaseline):
        (RebaselineExpectations._rebaseline_port):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_overrides_are_included_correctly):

2012-06-07  Ojan Vafai  <ojan@chromium.org>

        Fix recent null pointer error regression in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=88573

        Reviewed by Dirk Pranke.

        * TestResultServer/static-dashboards/builders.js:
        (requestBuilderList):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-06-07  Konrad Piascik  <kpiascik@rim.com>

        Add Konrad Piascik to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=88560

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-07  Tony Chang  <tony@chromium.org>

        [chromium] Win mock scrollbars appear to overflow by a pixel to the right and bottom
        https://bugs.webkit.org/show_bug.cgi?id=77368

        Reviewed by Ojan Vafai.

        It doesn't look like we ever get a rect with width or height of 0.
        I ran css1, css2.1, fast/forms, and tables without any crashes.

        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (webRectToSkIRect): Correctly convert a WebRect to a SkIRect.

2012-06-07  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests --lint-test-files gives an error when run on linux
        https://bugs.webkit.org/show_bug.cgi?id=88551

        Reviewed by Ojan Vafai.

        We weren't mapping the expectations properly for the
        google-chrome ports.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.path_to_test_expectations_file):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (TestGoogleChromePort.test_path_to_expectations):

2012-06-07  Daniel Erat  <derat@chromium.org>

        [chromium] Add LayoutTestController::setTextSubpixelPositioning() for Linux.
        https://bugs.webkit.org/show_bug.cgi?id=88263

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::setTextSubpixelPositioning):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/fonts.conf:

2012-06-07  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Assertions in gtk_widget_draw when acquiring pixel output
        https://bugs.webkit.org/show_bug.cgi?id=88060

        Reviewed by Martin Robinson.

        Spin the main loop before acquiring the pixel content. This ensures things
        like late size allocations are finished before calling gtk_widget_draw,
        avoiding assertions and subsequent empty pixel results.

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView):

2012-06-06  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Improve the visual of the viewport info box
        https://bugs.webkit.org/show_bug.cgi?id=88410

        Reviewed by Tor Arne Vestbø.

        Improve the visual and make it possible to see the content more easy.

        * MiniBrowser/qt/qml/ViewportInfoItem.qml:

2012-06-06  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [EFL][WK2] Compile webkit1 and webkit2 by default.
        https://bugs.webkit.org/show_bug.cgi?id=85041

        Reviewed by Chang Shu.

        Compile webkit1 and webkit2 while running Tools/Scripts/build-webkit --efl.
        Webkit2 build can be skipped by adding --no-webkit2 option to build-webkit script.

        * Scripts/build-webkit:

2012-06-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r119662.
        http://trac.webkit.org/changeset/119662
        https://bugs.webkit.org/show_bug.cgi?id=88487

        Broke builds (Requested by rniwa on #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/ImageDiff.cpp:
        (untestedCompareImages):

2012-06-06  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Remove header dependency of ImageDiff to WTF
        https://bugs.webkit.org/show_bug.cgi?id=88422

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/ImageDiff.cpp:
        (untestedCompareImages):

2012-06-06  Amy Ousterhout  <aousterh@chromium.org>

        [WebKit] DeviceOrientation cleanup
        https://bugs.webkit.org/show_bug.cgi?id=88406

        Reviewed by Kent Tamura.

        Updated LayoutTestController to use new public default constructor in WebDeviceOrientation.h.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockDeviceOrientation):

2012-05-29  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: add support for an ordered dict of test expectations
        https://bugs.webkit.org/show_bug.cgi?id=87802

        Reviewed by Ojan Vafai.

        As per https://bugs.webkit.org/show_bug.cgi?id=65834 we want to
        support a cascaded list of test expectations files. An easy way
        to think of this is as an ordered dictionary of name -> contents
        for files, where the name is usually a path on disk (I say
        usually because we want to support other kinds of expectations
        like the compile-time skips for unsupported features in
        webkit.py, and we want to continue to support "in-memory" test
        expectations that don't require a filesystem).

        Conveniently there is an OrderedDict implementation in Python
        2.7+ and it is available as a backport, so the first step in
        adding this support is to use that implementation. Subsequent
        patches will update the test_expectations.py module (and other
        callers) to access the dict directly.

        This patch just changes the base internal implementation and
        provides wrappers for compatibility. The derived ports
        (WebKitPort, TestPort, etc.) still need to be updated.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._expectations_dict):
        (Port.test_expectations):
        (Port):
        (Port._expectations_overrides_dict):
        (Port.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_expectations_ordering):
        (PortTestCase):
        (PortTestCase.test_expectations_overrides_ordering):
        * Scripts/webkitpy/thirdparty/ordered_dict.py: Added.
        (OrderedDict):
        (OrderedDict.__init__):
        (OrderedDict.clear):
        (OrderedDict.__setitem__):
        (OrderedDict.__delitem__):
        (OrderedDict.__iter__):
        (OrderedDict.__reversed__):
        (OrderedDict.popitem):
        (OrderedDict.__reduce__):
        (OrderedDict.__repr__):
        (OrderedDict.copy):
        (OrderedDict.fromkeys):

2012-06-06  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed gardening. Unit test fails on GTK 64bit debug bot.

        * gtk/run-api-tests:
        (TestRunner): Skip TestWebKitAPI/WTF/TestHashMap.

2012-06-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt should look in 'out' for binaries on chromium win to support ninja
        https://bugs.webkit.org/show_bug.cgi?id=88273

        Reviewed by Tony Chang.

        This patch standardizes the search algorithm the chromium ports
        use to figure out which driver to run. We will look in a
        chromium location before a webkit location (e.g., in
        Source/WebKit/chromium/out before out/) and we will look in the
        "legacy" directory (xcodebuild) before the directory ninja uses
        (out).

        Unfortunately due to the way the test code is set up testing the
        properly requires some duplication of test code. I will fix that
        in a followup patch.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._static_build_path):
        (ChromiumPort._build_path):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        (ChromiumLinuxPort._determine_driver_path_statically):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_build_path):
        (ChromiumLinuxPortTest):
        (ChromiumLinuxPortTest.test_driver_name_option):
        (ChromiumLinuxPortTest.path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_build_path):
        (ChromiumMacPortTest):
        (ChromiumMacPortTest.test_driver_name_option):
        (ChromiumMacPortTest.path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_overrides_and_builder_names):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest.test_build_path):
        (ChromiumWinTest.test_operating_system):
        (ChromiumWinTest):
        (ChromiumWinTest.test_driver_name_option):
        (ChromiumWinPortTest.path_to_image_diff):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.assert_build_path):

2012-06-06  Jessie Berlin  <jberlin@apple.com>

        Remove very red Windows WebKit2 testers
        https://bugs.webkit.org/show_bug.cgi?id=88452

        Reviewed by Steve Falkenburg.

        Remove the Windows 7 Release WK2 testers so that the hardware can be repurposed. We are
        need to focus on getting the WK1 testers green.

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

2012-06-06  Dirk Pranke  <dpranke@chromium.org>

        get rebaselining tools to kinda work with the skia overrides file
        https://bugs.webkit.org/show_bug.cgi?id=88456

        Reviewed by Ryosuke Niwa.

        Update rebaseline-expectations so that we read in the overrides
        when looking for tests to rebaseline, but don't read in the
        overrides when we are writing the expectations file back out.
        This prevents the overrides from getting written into the main
        file. This is kind of a hack but will have to do until we
        support multiple expectations files properly.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations._expectations):
        (RebaselineExpectations._update_expectations_file):
        (RebaselineExpectations._tests_to_rebaseline):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_overrides_are_included_correctly):

2012-06-06  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: two manager_worker_broker_unittest tests are broken
        https://bugs.webkit.org/show_bug.cgi?id=88445

        Reviewed by Ojan Vafai.

        These tests were never updated when we removed the
        --worker-model argument, and we were passing 'inline' instead of
        1 (for the number of workers) :(. As a result we were creating
        multiprocessing queues unnecessarily and that was failing on cygwin.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (InterfaceTest.test_managerconnection_is_abstract):
        (InterfaceTest.test_workerconnection_is_abstract):

2012-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r117789): "webkit-patch rebaseline-expectations" copies contents in skia_test_expectations.txt into test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=87406

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_does_not_include_overrides):

2012-06-06  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: perf tests unit tests fail on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=88279

        Reviewed by Ryosuke Niwa.

        I'm seeing weird failures running the unit tests in my win32
        checkout, and we don't really expect webpagereplay to work on
        win32 anyway, so I'm skipping the import of that module for now
        and adding a warning.

        * Scripts/run-perf-tests:
        * Scripts/webkitpy/performance_tests/perftest.py:

2012-06-06  Yong Li <yoli@rim.com>

        Unreviewed. Update my email address in committers.py.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-06  Robert Kroeger  <rjkroege@chromium.org>

        Add Robert Kroeger  to commiters.py
        https://bugs.webkit.org/show_bug.cgi?id=88415

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] http/tests/globalhistory testcases do not pass
        https://bugs.webkit.org/show_bug.cgi?id=82579

        Reviewed by Csaba Osztrogonác.

        DRT has provided callbacks for ewk_view "global history delegate" signals.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (isGlobalHistoryTest): Aux function to ident global history testcase.
        (createLayoutTestController):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onTitleChanged): Handles also some global history testcases.
        (DumpRenderTreeChrome::onWebViewNavigatedWithData): New callback function.
        (DumpRenderTreeChrome::onWebViewServerRedirect): Ditto.
        (DumpRenderTreeChrome::onWebViewClientRedirect): Ditto.
        (DumpRenderTreeChrome::onWebViewPopulateVisitedLinks): Ditto.
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-06-06  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt] run-qtwebkit-tests hangs with -j1
        run-qtwebkit-tests used to hang when wk2 API tests were run with -j1 and --timeout.
        This could happen due to an uncancelled timer after results were returned. This timer was
        started only if --timeout was set.
        https://bugs.webkit.org/show_bug.cgi?id=85475

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-qtwebkit-tests:
        (run_test):

2012-06-06  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Add preferredMinimumContentsWidth to the viewport info in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=88327

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowser.qrc: Added contents_width.png.
        * MiniBrowser/qt/icons/contents_width.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml: Added button for toggling preferredMinimumContentsWidth.
        * MiniBrowser/qt/qml/ViewportInfoItem.qml: Added display of preferredMinimumContentsWidth.

2012-06-05  Jon Lee  <jonlee@apple.com>

        Buildbot fix.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: We lose the type attribute earlier
        in the function. Store in a local variable.
        (loadBuilderConfig):

2012-06-05  Jon Lee  <jonlee@apple.com>

        Buildbot fix.

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

2012-06-04  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up win-specific path handling and tests
        https://bugs.webkit.org/show_bug.cgi?id=88281

        Reviewed by Adam Barth.

        There was a bunch of inconsistent logic for handling path
        conversions for win32 and cygwin paths due to us sometimes
        looking at sys.platform and sometimes using mock hosts. This
        patch cleans everything up so that we are required to pass
        PlatformInfo objects to the path module and stop trying to do
        different things when running on cygwin or win32 hosts (except
        in the path_unittest module itself).

        This may slightly reduce test coverage for the win32 code paths
        but will be a lot easier to follow and maintain.

        * Scripts/webkitpy/common/system/path.py:
        (abspath_to_uri):
        (_convert_path):
        * Scripts/webkitpy/common/system/path_unittest.py:
        (AbspathTest.platforminfo):
        (AbspathTest.test_abspath_to_uri_cygwin):
        (AbspathTest.test_abspath_to_uri_unixy):
        (AbspathTest.test_abspath_to_uri_win):
        (AbspathTest.test_abspath_to_uri_escaping_unixy):
        (AbspathTest.test_abspath_to_uri_escaping_cygwin):
        (AbspathTest.test_stop_cygpath_subprocess):
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo.is_cygwin):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_cygwin):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.test_to_uri):
        (Driver.uri_to_test):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_test_to_uri):
        (DriverTest.test_uri_to_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockDRTTest.input_line):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.show_results_html_file):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_unexpected_failures):
        (MainTest.test_results_directory_absolute):
        (MainTest.test_results_directory_default):
        (MainTest.test_results_directory_relative):

2012-06-05  Jon Lee  <jonlee@apple.com>

        Workaround buildbot bug when merging build requests.
        https://bugs.webkit.org/show_bug.cgi?id=88158

        Reviewed by Mark Rowe.

        For expediency, we still want testers to pick the latest build to test, but to ensure
        that the builders are reporting the correct revision number, we should let the building bots
        run as they normally would. That is, the builder picks the oldest revision, and merges
        subsequent requests. Because merged requests get appended to the list of changes for a given
        build, the last change in that list is also the latest change. When we used pickLatestBuild
        for the builders, this was not the case (it would always report the penultimate change).

        http://trac.buildbot.net/ticket/2309 is tracking the buildbot bug.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove the mergeRequests override
        for all Apple builders.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Have only non-building bots pick
        the latest build to run.
        (loadBuilderConfig):

2012-06-05  Jessie Berlin  <jberlin@apple.com>

        [Win] DumpRenderTree should call resetInternalsObject
        https://bugs.webkit.org/show_bug.cgi?id=88346

        Reviewed by Simon Fraser.

        Invoke it on Windows in the same place it is invoked on Mac.

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

2012-06-05  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] Fix two more memory leaks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=88255

        Reviewed by Martin Robinson.

        Fixed memory leaks in GTK's DRT code.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpHistoryItem): webkit_web_history_item_get_target() returns a
        g_strdup()'d string. So, use GOwnPtr to manage memory automatically.
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView): Free the cairo surface.

2012-06-05  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Building when a top directory is named Source
        https://bugs.webkit.org/show_bug.cgi?id=77727

        Reviewed by Tor Arne Vestbø.

        Change regex to only replace the last instance of OUT_PWD.

        * qmake/mkspecs/features/default_pre.prf:

2012-06-05  Dongwoo Im  <dw.im@samsung.com>

        Add 'isProtocolHandlerRegistered' and 'unregisterProtocolHandler'.
        https://bugs.webkit.org/show_bug.cgi?id=73176

        Reviewed by Adam Barth.

        Two more APIs are added in Custom Scheme Handler specification.
        http://dev.w3.org/html5/spec/Overview.html#custom-handlers
        One is 'isProtocolHandlerRegistered' to query whether the specific URL
        is registered or not.
        The other is 'unregisterProtocolHandler' to remove the registered URL.

        * Scripts/webkitperl/FeatureList.pm: Add a macro 'ENABLE_CUSTOM_SCHEME_HANDLER'.

2012-06-05  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WK2] Implement API for Geolocation permission requests in the GTK port
        https://bugs.webkit.org/show_bug.cgi?id=83879

        Reviewed by Carlos Garcia Campos.

        Make minibrowser connect to the new 'permission requests' signal
        to allow users handle the Geolocation permission requests.

        * MiniBrowser/gtk/BrowserWindow.c:
        (geolocationRequestDialogCallback): Callback for the dialog asking
        the user for allowing or not geolocation permission requests.
        (webViewDecidePermissionRequest): Launch a dialog to ask the user
        whether to allow or deny geolocation permission requests.
        (browserWindowConstructed): Connect to 'permission-request' signal.

2012-06-04  Chase Phillips  <cmp@google.com>

        Make a builder group support+expect multiple loads.
        https://bugs.webkit.org/show_bug.cgi?id=88260

        Change BuilderGroup to allow expecting multiple
        loads.  This allows merging results for a given set
        of builders into one group.

        Add a test that verifies that the group count
        increments correctly based on successful and failed
        list loads.

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:
        (BuilderGroup):
        (BuilderGroup.prototype.setbuilder):
        (BuilderGroup.prototype.append):
        (BuilderGroup.prototype.loaded):
        (requestBuilderList.xhr.onload):
        (requestBuilderList.xhr.onerror):
        (onErrorLoadingBuilderList):
        (loadBuildersList):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):
        * TestResultServer/static-dashboards/run-unittests.html:

2012-06-04  Ryosuke Niwa  <rniwa@webkit.org>

        Python test fix attempt for Chromium Windows.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.uri_to_test):

2012-06-04  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Turn LEGACY_VIEWPORT_ADAPTION USE flag into an ENABLE flag.
        https://bugs.webkit.org/show_bug.cgi?id=88243

        Reviewed by Adam Barth.

        * qmake/mkspecs/features/features.prf:

2012-06-04  Dirk Pranke  <dpranke@chromium.org>

        webkitpy.layout_tests.port.server_process_unittest.TestServerProcess.test_basic is flaky
        https://bugs.webkit.org/show_bug.cgi?id=88280

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TestServerProcess.test_basic):

2012-06-04  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy is hanging under cygwin
        https://bugs.webkit.org/show_bug.cgi?id=88269

        Reviewed by Ryosuke Niwa.

        The 'multiprocessing' module doesn't work correctly under Cygwin yet,
        so we need to skip any tests that use it.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.run_in_parallel):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_in_parallel):

2012-06-04  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy is failing on win32 after r115054
        https://bugs.webkit.org/show_bug.cgi?id=88264

        Reviewed by Ryosuke Niwa.

        The failing http_server test was improperly suppressed (the
        tuple was missing a comma, and so wasn't a tuple at all, just a
        string) and so we were skipping *all* tests on win32. The right
        way to skip a single test is to disable it inside the test
        itself.

        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd):
        * Scripts/webkitpy/test/test_finder.py:
        (TestFinder._default_names):
        * Scripts/webkitpy/test/main.py:
        (Tester.run): Add error message if we don't find any tests to run.
        * Scripts/webkitpy/test/main_unittest.py:
            

2012-06-04  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] Memory leaks in AccessibilityUIElementGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=88215

        Reviewed by Martin Robinson.

        Fixed memory leaks in AccessibilityUIElement by using GOwnPtr
        for newly allocated strings.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (attributeSetToString):
        (AccessibilityUIElement::allAttributes):

2012-06-04  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] Memory leaks in DumpRenderTree.cpp
        https://bugs.webkit.org/show_bug.cgi?id=88213

        Reviewed by Martin Robinson.

        Fixed memory leaks in DumpRenderTree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (appendString): Accepts const gchar* as the second argument.
        (dumpFramesAsText): Free the string returned by g_strdup_printf().
        (dumpHistoryItem): Free the string returned by g_uri_parse_scheme().

2012-06-04  David Dorwin  <ddorwin@chromium.org>

        Enable Chromium media player to instantiate a plugin
        https://bugs.webkit.org/show_bug.cgi?id=87399

        Reviewed by Kent Tamura.

        Adds WebHelperPlugin, an off-screen widget that contains an <object> tag.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPopupMenu):

2012-06-04  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WK2] Implement geolocation provider for the GTK port
        https://bugs.webkit.org/show_bug.cgi?id=83877

        Reviewed by Carlos Garcia Campos.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Ignore WebKitGeolocationProvider files.

2012-06-04  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] Reset "WebKitTabToLinksPreferenceKey" in DumpRenderTreeChrome::resetDefaultsToConsistentValues
        https://bugs.webkit.org/show_bug.cgi?id=87668

        Reviewed by Ryosuke Niwa.

        Layout test controller "WebKitTabToLinksPreferenceKey" setting should be reset to false
        otherwise LayoutTests/fast/html/tab-order.html is failing as it has a link inside the test description which might 
        be included in focus chain (if "WebKitTabToLinksPreferenceKey" setting is set to true). 

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-06-04  Tomasz Morawski  <t.morawski@samsung.com>

        [EFL] Refactor ewk_view_context_paint code.
        https://bugs.webkit.org/show_bug.cgi?id=85588

        Reviewed by Hajime Morita.

        * DumpRenderTree/efl/CMakeLists.txt: Added include directory.

2012-06-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Compilation warning in DumpRenderTreeView.cpp on 64-Bit
        https://bugs.webkit.org/show_bug.cgi?id=87869

        Reviewed by Andreas Kling.

        Replace %lld by PRId64 macro to print an int64_t value and silent a
        compilation warning on 64-Bit.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededApplicationCacheQuota):

2012-06-03  Varun Jain  <varunjain@google.com>

        [chromium] Add new gesture type (two finger tap) that triggers context menu.
        https://bugs.webkit.org/show_bug.cgi?id=88173

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureTwoFingerTap):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):

2012-06-02  Zeno Albisser  <zeno@webkit.org>

        Fix and enable WebGL for WebKit2 on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=86214

        Enable WebGL by default for Qt MiniBrowser.

        Reviewed by Noam Rosenthal.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Teach svn-apply how to apply changes in test_expectations.txt to TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=88164

        Reviewed by Kentaro Hara.

        Just like r74856, adjust git/svn headers from test_expectations.txt to TestExpectations.
        Also replace all occurrences of /test_expectations.txt: by /TestExpectations: in change log entries.

        * Scripts/VCSUtils.pm:
        (adjustPathForRecentRenamings):
        (fixChangeLogPatch):

2012-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Rename test_expectations.txt to TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=86690

        Reviewed by Dirk Pranke.

        Make webkitpy aware of both test_expectations.txt and TestExpectations while we rename files.
        We can the code to read test_expectations.txt once we've successfully transitioned.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._check_path_does_not_exist):
        (TestExpectationParser._tokenize):
        (TestExpectations): Removed TEST_LIST, which is not used anywhere.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.path_to_test_expectations_file): Moved from WebKitPort and ChromiumPort. Returns the path to
        test_expectations.txt if one exists and the path to TestExpectations otherwise.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_virtual_methods): path_to_test_expectations_file and test_expectations are no longer
        virtual.
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.path_from_chromium_base):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.test_expectations):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (add_unit_tests_to_mock_filesystem): Use TestExpectations instead of test_expectations.txt.
        (TestPort.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.baseline_search_path):
        (WebKitPort.test_expectations):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added some test cases. We should move these
        tests to base as a follow up.
        (WebKitPortTest.test_path_to_test_expectations_file):
        (test_test_expectations):
        (test_legacy_test_expectations):
        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher.should_skip_without_warning): Replace the check for legacy drt_expectations.txt
        with one for TestExpectations.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker): Accept both test_expectations.txt and TestExpectations in warning outputs.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path): Test both TestExpectations and
        test_expectations.txt.
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):
        (TestExpectationsTestCase.assert_lines_lint):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.__init__):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest._test_check_test_expectations): Extracted from test_check_test_expectations.
        (CommitTest.test_check_test_expectations): For TestExpectations.
        (CommitTest.test_check_legacy_test_expectations): For test_expectations.txt
        * TestResultServer/static-dashboards/dashboard_base.js:
        (requestExpectationsFile): Look for TestExpectations first, and fallback to test_expectations.txt.
        Error only when neither exists.
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processMissingAndExtraExpectations):
        (htmlForTestsWithExpectationsButNoFailures):
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2012-06-01  Xianzhu Wang  <wangxianzhu@chromium.org>

        Remove dependency from ImageDiff to WTF
        https://bugs.webkit.org/show_bug.cgi?id=88147

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-06-01  Dirk Pranke  <dpranke@chromium.org>

        NRWT seems to leak (more?) temp dirs
        https://bugs.webkit.org/show_bug.cgi?id=88126

        Re-land r119297 with chromium fix (weren't calling the
        super() method if not in --test-shell mode in start().
        Add unit tests to chromium_unittest as well to check.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__del__):
        (WebKitDriver._start):
        (WebKitDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_check_for_driver_crash):
        (WebKitDriverTest.test_stop_cleans_up_properly):
        (WebKitDriverTest):
        (WebKitDriverTest.test_two_starts_cleans_up_properly):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_stop_cleans_up_properly):
        (ChromiumDriverTest.test_two_starts_cleans_up_properly):

2012-06-01  Tim Horton  <timothy_horton@apple.com>

        Lots of "failed download-built-product" on Apple bots
        https://bugs.webkit.org/show_bug.cgi?id=88158

        Reviewed by Jessie Berlin.
        
        Disable mergeRequests on all Apple builders. This is a speculative fix.

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

2012-06-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r119297.
        http://trac.webkit.org/changeset/119297
        https://bugs.webkit.org/show_bug.cgi?id=88156

        May have broken Chromium bots (Requested by rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__del__):
        (WebKitDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_check_for_driver_crash):
        (WebKitDriverTest.test_stop_cleans_up_properly):

2012-06-01  Dirk Pranke  <dpranke@chromium.org>

        nrwt seems to leak tmpdirs
        https://bugs.webkit.org/show_bug.cgi?id=88126

        Reviewed by Ojan Vafai.

        Fix leak possibly introduced in r118979 - we now will
        make sure we clean up any stale temp directories during the
        start routine and attempt to clean up again in __del__. It
        turns out that asserting in __del__ logs a message but is
        caught by the runtime, so it's mostly useless.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__del__):
        (WebKitDriver._start):
        (WebKitDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_check_for_driver_crash):
        (WebKitDriverTest.test_stop_cleans_up_properly):
        (WebKitDriverTest):
        (WebKitDriverTest.test_two_starts_cleans_up_properly):

2012-06-01  Michael Saboff  <msaboff@apple.com>

        WebFrame::_stringByEvaluatingJavaScriptFromString methods don't handle nil string
        https://bugs.webkit.org/show_bug.cgi?id=88109

        Reviewed by Geoffrey Garen.

        Additional test case.

        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm:
        (TestWebKitAPI::TEST):

2012-06-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Use -Werror only in developer builds

        Rubber-stamped by Tor Arne Vestbø.

        In production builds -Werror with custom toolchains and wierd system
        headers, -Werror is of no use and just creates confusion. So use it
        only if Qt is configured with -developer-build.

        * qmake/mkspecs/features/default_pre.prf: Move qt_developer_build determination here...
        * qmake/mkspecs/features/unix/default_post.prf: ... so that we can use it here to do -Werror
        only if qt_developer_build is set.

2012-06-01  Jochen Eisinger  <jochen@chromium.org>

        [watchlist] Add myself to loader and v8 bindings changes
        https://bugs.webkit.org/show_bug.cgi?id=88112

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2012-06-01  Jacky Jiang  <zhajiang@rim.com>

        Adding Jacky Jiang to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=88122

        Reviewed by Rob Buis.

        Adding myself to committers.py as a Committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-06-01  Jessie Berlin  <jberlin@apple.com>

        Fix Windows build.

        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:

2012-06-01  Jessie Berlin  <jberlin@apple.com>

        Windows WK2 MouseMoveAfterCrash API test failing
        https://bugs.webkit.org/show_bug.cgi?id=69982

        Disable the test on Windows to get the bots greener.

        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::TEST):

2012-06-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL port does not enable WEB_INTENTS_TAG flag
        https://bugs.webkit.org/show_bug.cgi?id=86866

        Reviewed by Adam Barth.

        Catch new "intent,service,register" signal on the frame and print out
        information about the Web Intent service in EFL's DumpRenderTree.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameIntentServiceRegistration):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-06-01  Martin Robinson  <mrobinson@igalia.com>

        The ChangeLog parser cannot handle reviewers with initials in their name
        https://bugs.webkit.org/show_bug.cgi?id=87864

        Reviewed by Ryosuke Niwa.

        Add support in the ChangeLog parser for reviewer names that have
        initials in them.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry): Add a new group of regular expressions that need a backreference
        in the replacement string. This allows for matching the word characters before a
        period, without totally throwing them away.
        (ChangeLogEntry._parse_reviewer_text): Use the new regular expression.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_fuzzy_reviewer_match_initial): Add a test for a reviewer name that has an initial.

2012-06-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's LayoutTestController needs to implement deliverWebIntent
        https://bugs.webkit.org/show_bug.cgi?id=86865

        Reviewed by Adam Barth.

        Add deliverWebIntent method to LayoutTestController and provide
        implementation for EFL port.

        * DumpRenderTree/LayoutTestController.cpp:
        (deliverWebIntentCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::deliverWebIntent):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::deliverWebIntent):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::deliverWebIntent):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::deliverWebIntent):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::deliverWebIntent):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::deliverWebIntent):

2012-06-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make Qt Creator aware of files in webkitpy/perl for easy editing

        Reviewed by Simon Hausmann.

        * Tools.pro:

2012-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Add public page loading performance tests using web-page-replay
        https://bugs.webkit.org/show_bug.cgi?id=84008

        Reviewed by Dirk Pranke.

        Add the primitive implementation of replay performance tests. We use web-page-replay (http://code.google.com/p/web-page-replay/)
        to cache data locally. Each replay test is represented by a text file with .replay extension containing a single URL.
        To hash out bugs and isolate them from the rest of performance tests, replay tests are hidden behind --replay flag.

        Run "run-perf-tests --replay PerformanceTests/Replay" after changing the system network preference to forward HTTP and HTTPS requests
        to localhost:8080 and localhost:8443 respectively (i.e. configure the system as if there are HTTP proxies at ports 8080 and 8443)
        excluding: *.webkit.org, *.googlecode.com, *.sourceforge.net, pypi.python.org, and www.adambarth.com for thirdparty Python dependencies.
        run-perf-tests starts web-page-replay, which provides HTTP proxies at ports 8080 and 8443 to replay pages.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.is_external_http_test): Added.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._command_from_driver_input): Allow test names that starts with http:// or https://.
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.__init__): Takes port.
        (PerfTest.prepare): Added. Overridden by ReplayPerfTest.
        (PerfTest):
        (PerfTest.run): Calls run_single.
        (PerfTest.run_single): Extracted from PageLoadingPerfTest.run.
        (ChromiumStylePerfTest.__init__):
        (PageLoadingPerfTest.__init__):
        (PageLoadingPerfTest.run):
        (ReplayServer): Added. Responsible for starting and stopping replay.py in the web-page-replay.
        (ReplayServer.__init__):
        (ReplayServer.wait_until_ready): Wait until port 8080 is ready. I have tried looking at the piped output from web-page-replay
        but it caused a dead lock on some web pages.
        (ReplayServer.stop):
        (ReplayServer.__del__):
        (ReplayPerfTest):
        (ReplayPerfTest.__init__):
        (ReplayPerfTest._start_replay_server):
        (ReplayPerfTest.prepare): Creates test.wpr and test-expected.png to cache the page when a replay test is ran for the first time.
        The subsequent runs of the same test will just use test.wpr.
        (ReplayPerfTest.run_single):
        (PerfTestFactory):
        (PerfTestFactory.create_perf_test):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (MainTest.test_parse_output):
        (MainTest.test_parse_output_with_failing_line):
        (TestPageLoadingPerfTest.test_run):
        (TestPageLoadingPerfTest.test_run_with_bad_output):
        (TestReplayPerfTest):
        (TestReplayPerfTest.ReplayTestPort):
        (TestReplayPerfTest.ReplayTestPort.__init__):
        (TestReplayPerfTest.ReplayTestPort.__init__.ReplayTestDriver):
        (TestReplayPerfTest.ReplayTestPort.__init__.ReplayTestDriver.run_test):
        (TestReplayPerfTest.ReplayTestPort._driver_class):
        (TestReplayPerfTest.MockReplayServer):
        (TestReplayPerfTest.MockReplayServer.__init__):
        (TestReplayPerfTest.MockReplayServer.stop):
        (TestReplayPerfTest._add_file):
        (TestReplayPerfTest._setup_test):
        (TestReplayPerfTest.test_run_single):
        (TestReplayPerfTest.test_run_single.run_test):
        (TestReplayPerfTest.test_run_single_fails_without_webpagereplay):
        (TestReplayPerfTest.test_prepare_fails_when_wait_until_ready_fails):
        (TestReplayPerfTest.test_run_single_fails_when_output_has_error):
        (TestReplayPerfTest.test_run_single_fails_when_output_has_error.run_test):
        (TestReplayPerfTest.test_prepare):
        (TestReplayPerfTest.test_prepare.run_test):
        (TestReplayPerfTest.test_prepare_calls_run_single):
        (TestReplayPerfTest.test_prepare_calls_run_single.run_single):
        (TestPerfTestFactory.test_regular_test):
        (TestPerfTestFactory.test_inspector_test):
        (TestPerfTestFactory.test_page_loading_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._parse_args): Added --replay flag to enable replay tests.
        (PerfTestsRunner._collect_tests): Collect .replay files when replay tests are enabled.
        (PerfTestsRunner._collect_tests._is_test_file):
        (PerfTestsRunner.run): Exit early if one of calls to prepare() fails.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (run_test):
        (_tests_for_runner):
        (test_run_test_set):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_pause_before_testing):
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_run_test_set_with_multiple_repositories):
        (test_run_with_upload_json):
        (test_upload_json):
        (test_upload_json.MockFileUploader.upload_single_text_file):
        (_add_file):
        (test_collect_tests):
        (test_collect_tests_with_multile_files):
        (test_collect_tests_with_multile_files.add_file):
        (test_collect_tests_with_skipped_list):
        (test_collect_tests_with_page_load_svg):
        (test_collect_tests_should_ignore_replay_tests_by_default):
        (test_collect_tests_with_replay_tests):
        (test_parse_args):
        * Scripts/webkitpy/thirdparty/__init__.py: Added the dependency for web-page-replay version 1.1.1.
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_webpagereplay):

2012-05-31  Yaron Friedman  <yfriedman@chromium.org>

        Support building the Android port of chromium with Ninja
        https://bugs.webkit.org/show_bug.cgi?id=87545

        Reviewed by Adam Barth.

        Ensures that shared libraries are looked up in a generator-agnostic
        way and that output is placed in the correct directory.

        Depends on http://codereview.chromium.org/10386188/

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-05-31  Ryosuke Niwa  <rniwa@webkit.org>

        [Chromium] Chromium DRT should be able to load external resources
        https://bugs.webkit.org/show_bug.cgi?id=87893

        Reviewed by Dirk Pranke.

        Allow external resources to be loaded when the main frame's URL is also an external resource.
        This change is analogous to r118231 for Mac port.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (blockRequest):
        (isLocalhost):
        (hostIsUsedBySomeTestsToGenerateError):
        (WebViewHost::willSendRequest):

2012-05-31  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        Disable the C++11 extensions warning.

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

2012-05-31  Alexey Proskuryakov  <ap@apple.com>

        [WK2] window.internals settings are not reset between tests
        https://bugs.webkit.org/show_bug.cgi?id=87783

        Reviewed by Mihai Parparita.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done): Call resetAfterTest().

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::prepare): Renamed from "reset" for clarity.
        (WTR::InjectedBundlePage::resetAfterTest): Added a function that resets internals.
        This needs to be done after a tets, because the code assumes that there is an object
        with this name in global scope.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2012-05-31  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] EFL's DRT navigation_policy_decision implementation
        https://bugs.webkit.org/show_bug.cgi?id=85006

        Reviewed by Tor Arne Vestbø.

        Added navigation_policy_decision implementation for DumpRenderTreeView.
        Added LayoutTestController::setCustomPolicyDelegate implementation.
        Modified LayoutTestController::waitForPolicyDelegate.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/DumpRenderTreeEfl.h:
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (navigationTypeToString): aux function
        (onNavigationPolicyDecision): navigation_policy_decision implementation
        (drtViewAdd):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::waitForPolicyDelegate):

2012-05-31  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [EFL][DRT] LayoutTestController does not implement clearApplicationCacheForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=86195

        Reviewed by Gustavo Noronha Silva.

        Implement clearApplicationCacheForOrigin in EFL
        LayoutTestController.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearApplicationCacheForOrigin):

2012-05-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Simplify QT_VERSION_CHECKS for Qt5 by introducing HAVE(QT5)
        https://bugs.webkit.org/show_bug.cgi?id=87955

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/EventSenderQt.cpp:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        * DumpRenderTree/qt/main.cpp:
        * QtTestBrowser/cookiejar.cpp:
        * QtTestBrowser/launcherwindow.cpp:
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        * qmake/mkspecs/features/default_post.prf:

2012-05-31  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Don't enforce the version of libpng for the config test when passing the option to the linker

        Rubber-stamped by Kenneth Rohde Christiansen.

        * qmake/config.tests/libpng/libpng.pro:

2012-05-30  Peter Beverloo  <peter@chromium.org>

        [Chromium] Automatically install 64-bit linker for Android
        https://bugs.webkit.org/show_bug.cgi?id=79780

        Reviewed by Adam Barth.

        Change the update-webkit-chromium script to check whether the 64-bit
        linker needs to be installed as part of the update process. The actual
        code for doing these checks and "installing" it has been added to the
        webkitdirs.pm script.

        The linker itself is part of the third_party/aosp repository, which
        will be pulled in through the DEPS change.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (chromiumInstall64BitAndroidLinkerIfNeeded):
        (chromiumReplaceAndroidLinkerIfNeeded):

2012-05-30  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87803
        Layout tests often fail trying to stat nonexistent logs 

        Reviewed by Dirk Pranke.

        CrashReporter removes logs using a heuristic to conserve space.  Wrap a 
        try/catch block around accessing the logs as a precaution.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_darwin):

2012-05-30  Gavin Peters  <gavinp@chromium.org>

        Add a LayoutTest for prerender remove after stop.
        https://bugs.webkit.org/show_bug.cgi?id=87860

        These very boring mocks in DumpRenderTree mean that the basic Prerendering API
        can be tested by LayoutTests now.

        Reviewed by Adam Barth.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockWebPrerenderingSupport.cpp: Added.
        (MockWebPrerenderingSupport::MockWebPrerenderingSupport):
        (MockWebPrerenderingSupport::~MockWebPrerenderingSupport):
        (MockWebPrerenderingSupport::add):
        (MockWebPrerenderingSupport::cancel):
        (MockWebPrerenderingSupport::abandon):
        * DumpRenderTree/chromium/MockWebPrerenderingSupport.h: Added.
        (MockWebPrerenderingSupport):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::initialize):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willAddPrerender):
        (WebViewHost::setWebWidget):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-05-30  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87717
        Unresponsive WebProcesses can be mistaken for WebProcess crashes.

        Reviewed by Dirk Pranke.

        Change the error message from #CRASHED to #UNRESPONSIVE PROCESS
        If there isn't a crash log found for the process add a message saying
        the process was unresponsive.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver._check_for_driver_crash):
        (WebKitDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_check_for_driver_crash.assert_crash):
        (WebKitDriverTest):
        (WebKitDriverTest.test_check_for_driver_crash):
        * WebKitTestRunner/TestController.cpp:
        (WTR):
        (WTR::TestController::runTest):

2012-05-30  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87714
        Mac crash logs can take a really long time to be written out.

        Reviewed by Dirk Pranke.

        Make a second pass looking for crash logs after the tests have completed running.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (use_trac_links_in_results_html):
        (Manager.run):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.repository_paths):
        (Port.look_for_new_crash_logs):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.look_for_new_crash_logs):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_get_crash_log):
        (test_look_for_new_crash_logs):
        (test_look_for_new_crash_logs.fake_time_cb):

2012-05-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Fix 2.9 issues with c_str() type by using the wx fprintf wrapper.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (LayoutWebViewEventHandler::OnAlertEvent):
        (LayoutWebViewEventHandler::OnConfirmEvent):
        (LayoutWebViewEventHandler):
        (LayoutWebViewEventHandler::OnPromptEvent):
        (LayoutWebViewEventHandler::OnConsoleMessageEvent):
        (LayoutWebViewEventHandler::OnReceivedTitleEvent):

2012-05-30  Ojan Vafai  <ojan@chromium.org>

        Only give lint errors for -expected.png png files that lack a checksum
        https://bugs.webkit.org/show_bug.cgi?id=87875

        Reviewed by Tony Chang.

        We have other pngs in the tree, e.g. for the inspector, that legitimately
        lack a checksum.

        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.check):
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        (PNGCheckerTest.test_check):

2012-05-30  Dirk Pranke  <dpranke@chromium.org>

        nrwt: seems to leak temp dirs
        https://bugs.webkit.org/show_bug.cgi?id=87795

        Reviewed by Ojan Vafai.

        There appears to be a bug where the chromium bots are creating
        temporary directories and not cleaning them up that started
        after the switch to WebKitDriver. It's possible that __del__
        wasn't getting called in a timely manner (or at all), and it's
        generally bad style to rely on __del__ being called, so this
        code changes things so that we create a temp dir in
        driver.start() and remove it in driver.stop(). We could be
        paranoid and leave the __del__ code in, but there doesn't seem
        to be much advantage to it. If there are bugs that result in
        drivers being started but not stopped, we have other problems.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__):
        (MockFileSystem._mktemp):
        (MockFileSystem.mkdtemp):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver._start):
        (WebKitDriver.stop):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_check_for_driver_crash):
        (WebKitDriverTest):
        (WebKitDriverTest.test_creating_a_port_does_not_write_to_the_filesystem):
        (WebKitDriverTest.test_stop_cleans_up_properly):

2012-05-30  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's DRT should print the number of MessagePorts for new each new intent
        https://bugs.webkit.org/show_bug.cgi?id=86841

        Reviewed by Adam Barth.

        Print the number of MessagePorts for each new intent in EFL's DRT.
        This output is expected by several Web Intents test cases.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameIntentNew):

2012-05-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix after removal of setJavaScriptProfilingEnabled.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-05-30  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Ewk_Intent_Request's postResult/postFailure should take serialized script values in argument
        https://bugs.webkit.org/show_bug.cgi?id=87829

        Reviewed by Adam Barth.

        EFL's LayoutTestController now makes uses of the new helper method in
        DumpRenderTreeSupportEfl in order to send the intent response. This is
        now needed because the Ewk_Intent_Request postResult / postFailure
        methods were made private.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::sendWebIntentResponse):

2012-05-30  Xueqing Huang  <huangxueqing@baidu.com>

        eventSender.beginDragWithFiles should be implemented in Windows, which blocked drag and drop related tests.
        https://bugs.webkit.org/show_bug.cgi?id=86296

        Reviewed by Tony Chang.

        * DumpRenderTree/win/DRTDataObject.cpp: Added.
        (cfHDropFormat):
        (cfFileNameWFormat):
        (cfUrlWFormat):
        (WCEnumFormatEtc):
        (WCEnumFormatEtc::WCEnumFormatEtc):
        (WCEnumFormatEtc::QueryInterface):
        (WCEnumFormatEtc::AddRef):
        (WCEnumFormatEtc::Release):
        (WCEnumFormatEtc::Next):
        (WCEnumFormatEtc::Skip):
        (WCEnumFormatEtc::Reset):
        (WCEnumFormatEtc::Clone):
        (DRTDataObject::createInstance):
        (DRTDataObject::DRTDataObject):
        (DRTDataObject::~DRTDataObject):
        (DRTDataObject::QueryInterface):
        (DRTDataObject::AddRef):
        (DRTDataObject::Release):
        (DRTDataObject::GetData):
        (DRTDataObject::GetDataHere):
        (DRTDataObject::QueryGetData):
        (DRTDataObject::GetCanonicalFormatEtc):
        (DRTDataObject::SetData):
        (DRTDataObject::CopyMedium):
        (DRTDataObject::EnumFormatEtc):
        (DRTDataObject::DAdvise):
        (DRTDataObject::DUnadvise):
        (DRTDataObject::EnumDAdvise):
        (DRTDataObject::clearData):
        * DumpRenderTree/win/DRTDataObject.h: Added.
        (DRTDataObject):
        * DumpRenderTree/win/DRTDropSource.cpp: Added.
        (DRTDropSource::DRTDropSource):
        (DRTDropSource::~DRTDropSource):
        (DRTDropSource::QueryInterface):
        (DRTDropSource::AddRef):
        (DRTDropSource::Release):
        (DRTDropSource::createInstance):
        (DRTDropSource::QueryContinueDrag):
        (DRTDropSource::GiveFeedback):
        * DumpRenderTree/win/DRTDropSource.h: Added.
        (DRTDropSource):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/EventSender.cpp:
        (beginDragWithFilesCallback):

2012-05-30  Marcelo Lira  <marcelo.lira@openbossa.org>

        WebKit2: Implement layoutTestController.setPluginsEnabled() in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=58593

        Adds the ability to change the pluginsEnabled flag in WebCore::Settings
        to WebKitTestRunner's LayoutTestController. The flag is modified via the
        public C API of the WebProcess.

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPluginsEnabled): Just calls the
        WKBundleSetPluginsEnabled function in the public C API of WebProcess.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2012-05-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] http/tests/navigation/new-window-redirect-history.html does not pass
        https://bugs.webkit.org/show_bug.cgi?id=87848

        Reviewed by Csaba Osztrogonác.

        The reason was that DumpRenderTreeChrome::extraViews() returned copy of the vector
        and dumpBackForwardListForWebViews() used iterators belonging actually to different vectors
        (browser->extraViews().begin() and browser->extraViews().end()) as if they had belonged to the same vector.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::extraViews):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] EFL's DRT needs "postProgressFinishedNotification" message
        https://bugs.webkit.org/show_bug.cgi?id=87833

        Reviewed by Tor Arne Vestbø.

        Print "postProgressFinishedNotification" message if frame load finished 
        to unskip http/tests/loading/progress-finished-callback.html.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onFrameLoadFinished):

2012-05-30  Mariusz Grzegorczyk  <mariusz.g@samsung.com>, Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Fix WebKit2-EFL build
        https://bugs.webkit.org/show_bug.cgi?id=83693

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt:  Guard Webkit1 related codes with ENABLE_WEBKIT.

2012-05-29  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt] Modified ORWT and NRWT to check for test expectations in platform/qt-5.0-wk1 too
        (They only used to check for Skipped in platform/qt-5.0-wk1)
        https://bugs.webkit.org/show_bug.cgi?id=87376

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:
        (buildPlatformResultHierarchy):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.baseline_search_path):

2012-05-29  Ojan Vafai  <ojan@chromium.org>

        Add a linter error for pngs that lack an embedded checksum
        https://bugs.webkit.org/show_bug.cgi?id=87793

        Reviewed by Dirk Pranke.

        * Scripts/read-checksum-from-png:
        * Scripts/webkitpy/common/read_checksum_from_png.py: Renamed from Tools/Scripts/webkitpy/layout_tests/read_checksum_from_png.py.
        (read_checksum):
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py: Renamed from Tools/Scripts/webkitpy/layout_tests/read_checksum_from_png_unittest.py.
        (ReadChecksumFromPngTest):
        (ReadChecksumFromPngTest.test_read_checksum):
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/style/checkers/png.py:
        (PNGChecker.check):
        * Scripts/webkitpy/style/checkers/png_unittest.py:
        (PNGCheckerTest.test_check):

2012-05-29  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87720
        WebProcess is often killed due to being unresponsive on the bots

        Reviewed by Alexey Proskuryakov.

        Blind attempt to improve flakiness on the bots by reducing the number
        of crashes due to an unresponsive process.  This helped on my personal machine
        under stress conditions.  I don't have enough cores to hit the problem
        under normal conditions.

        * WebKitTestRunner/TestController.cpp:
        (WTR):

2012-05-29  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: rename 'rm' to 'delete' in rebaseline scm output
        https://bugs.webkit.org/show_bug.cgi?id=87779

        Reviewed by Eric Seidel.

        Update output to match the names in scm.py as per
        https://bugs.webkit.org/show_bug.cgi?id=87451#c26 .

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_test_and_print_scm_changes):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaselineall):

2012-05-29  Stephanie Lewis  <slewis@apple.com>

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

        Reviewed by Jessie Berlin.

        Remove Snowleopard testers so the hardware can be repurposed.  The lion bots
        are better maintained.

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

2012-05-29  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch optimize-baselines should add/delete files in batches from the vcs
        https://bugs.webkit.org/show_bug.cgi?id=87538

        Reviewed by Ojan Vafai.

        Invoking git and svn on one file at a time is kinda slow. We
        should batch the add and rm operations together.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (BaselineOptimizer._move_baselines):

2012-05-29  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should rebaseline baselines in parallel
        https://bugs.webkit.org/show_bug.cgi?id=87451

        Reviewed by Ojan Vafai.
                                                                               
        This modifies garden-o-matic so that we will fetch all                  
        of the baselines in parallel from the bots, and then                    
        optimize the baselines serially (since that should be fairly            
        quick and we get into trouble if we optimize in parallel due            
        to concurrent access to the source control system).                     

        This change adds a flag to webkit-patch rebaseline-test (--print-scm-changes)
        so that the files that need to be modified in the SCM are returned to 
        garden-o-matic rather than actually added or removed. This is done so that
        we can run multiple rebaseline-tests in parallel (we can't modify the SCM
        concurrently). In order to safely return the files (as a JSON dict) I
        needed to shift all of the logging in rebaseline-test to use the logging
        module (and hence log to stderr).

        I also had to stub out a line in chromium.py that would get confused if
        the skia overrides file didn't exist in a mock checkout.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.popen):
        (Executive):
        (Executive.run_in_parallel):
        (_run_command_thunk):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_in_parallel):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_in_parallel):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort._expectations_file_contents):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand.__init__):
        (RebaselineTest.__init__):
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._save_baseline):
        (RebaselineTest):
        (RebaselineTest._add_to_scm):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        (RebaselineExpectations._rebaseline_port):
        (RebaselineExpectations.execute):
        (Rebaseline._builder_to_pull_from):
        (Rebaseline.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (test_rebaseline_updates_expectations_file):
        (test_rebaseline_test):
        (test_rebaseline_test_and_print_scm_changes):
        (test_rebaseline_and_copy_test):
        (test_rebaseline_and_copy_test_no_existing_result):
        (test_rebaseline_and_copy_test_with_lion_result):
        (test_rebaseline_and_copy_no_overwrite_test):
        (test_rebaseline_expectations):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler._rebaseline_commands):
        (GardeningHTTPRequestHandler):
        (GardeningHTTPRequestHandler._files_to_add):
        (GardeningHTTPRequestHandler._optimize_baselines):
        (GardeningHTTPRequestHandler.rebaselineall):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest._post_to_path):
        (GardeningServerTest.test_rebaselineall):
        (GardeningServerTest.test_rebaselineall.run_command):

2012-05-29  Benjamin Poulain  <bpoulain@apple.com>

        Fix the type of dispatch_time() offset

        Rubber-stamped by Joseph Pecoraro.

        In r118631, I erroneously used the type NSTimeInterval for the delta of dispatch_time().

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):

2012-05-29  Arvid Nilsson  <anilsson@rim.com>

        2012-05-29  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] OpenGL content is not rendered on simulator
        https://bugs.webkit.org/show_bug.cgi?id=87721

        Reviewed by George Staikos.

        Fixed by enabling GLES2 support in simulator builds.

        To experiment with building without OpenGL support, you can set the
        DISABLE_GLES2 environment variable to a non-empty string and rebuild.

        PR #150695

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2012-05-29  David Barr  <davidbarr@chromium.org>

        Introduce ENABLE_CSS_IMAGE_RESOLUTION compile flag
        https://bugs.webkit.org/show_bug.cgi?id=87685

        Reviewed by Eric Seidel.

        Add a configuration option for CSS image-resolution support, disabling it by default.

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

2012-05-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add cxx-flags to QMAKE_CFLAGS

        Prevents warnings such as: "command line option ‘-Wno-c++0x-compat’ is
            valid for C++/ObjC++ but not for C [enabled by default]"

        Reviewed by Simon Hausmann.

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

2012-05-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Sync up favicon-implementation with WebView url changes in r118158

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

        We now base64-encode the page url in the image-provider url, so that any
        normalization done by QUrl will not mess up the page-url. The logic of
        creating and parsing the provider-url has been moved into the image
        provider, to keep it in one place.

        We were also releasing icons (even ones we hadn't retained), which we can't
        do since we don't know when the icon url is no longer in use.

        Reviewed-by Simon Hausmann.

        * MiniBrowser/qt/icons/favicon.png:
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-05-29  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] Refactoring. Get rid of unnecessary singleCharacterString() function
        https://bugs.webkit.org/show_bug.cgi?id=87654

        Reviewed by Csaba Osztrogonác.

        Event sender provides strings for all the key events.
        Also KeyEventInfo constructor parameters order was changed to simplify the case when
        a key event has empty string.

        * DumpRenderTree/efl/EventSender.cpp:
        (KeyEventInfo::KeyEventInfo):
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):

2012-05-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Cancel potential url-edit when going back/forward

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-05-29  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Compilation warning in DumpRenderTreeView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=87636

        Reviewed by Filip Pizlo.

        Fix compilation error in DumpRenderTreeView.cpp due to wrong format
        specifier in printf. Also fix the return type for
        onExceededApplicationCacheQuota callback.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededApplicationCacheQuota):

2012-05-29  Hironori Bono  <hbono@chromium.org>

        Adding Hironori Bono to committers.py.
        https://bugs.webkit.org/show_bug.cgi?id=87697

        * Scripts/webkitpy/common/config/committers.py:

2012-05-28  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] http authenticate dialog popup only once no matter authentication pass or fail
        https://bugs.webkit.org/show_bug.cgi?id=80135

        Reviewed by Rob Buis.

        Implemented interface function didReceiveAuthenticationChallenge in class
        DumpRenderTree.

        Resubmit the patch reverted by r115104 after the digest infinite loop
        issue for BlackBerry porting get identified and fixed.

        Internally reviewed by Joe Mason <jmason@rim.com>

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (drtCredentialDescription):
        (BlackBerry::WebKit::DumpRenderTree::didReceiveAuthenticationChallenge):
        (WebKit):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (WebCore):
        (DumpRenderTree):

2012-05-25  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        WebKitTestRunner needs to support layoutTestController.setJavaScriptProfilingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42328

        Reviewed by Eric Seidel.

        Removed unneeded setJavaScriptProfilingEnabled function from DRT after its
        move to windows.internals.settings.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        (DRTDevToolsAgent):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-05-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move allowRoundingHacks to Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=87328

        Reviewed by Hajime Morita.

        Remove allowRoundingHacks functions, because it is able to work in the
        cross-port way through the Internals interface.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2012-05-28  Luke Macpherson  <macpherson@chromium.org>

        Fix mac build with older XCode by defining NSEC_PER_MSEC.
        https://bugs.webkit.org/show_bug.cgi?id=87616

        Reviewed by Hajime Morita.

        The following patch introduced the use of NSEC_PER_MSEC which is not defined for older XCode versions.
        http://trac.webkit.org/changeset/118631/trunk/Tools/DumpRenderTree/mac/FrameLoadDelegate.mm
        Patch just adds a #ifndef / #define check.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):

2012-05-27  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Enable blob support for the EFL port
        https://bugs.webkit.org/show_bug.cgi?id=85363

        Reviewed by Hajime Morita.

        Enable Blob support by default for the EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-27  Benjamin Poulain  <bpoulain@apple.com>

        When pages are loaded from AppCache with DeferredLoading, willSendRequest() is never called
        https://bugs.webkit.org/show_bug.cgi?id=87582

        Reviewed by Darin Adler.

        Extend DumpRenderTree to support loading the main resource deferred with a delay. This makes it
        possible to test pages in a similar way as they are loaded in Browsers.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setUseDeferredFrameLoadingCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::useDeferredFrameLoading):
        (LayoutTestController::setUseDeferredFrameLoading):
        (LayoutTestController):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):

2012-05-27  David Barton  <dbarton@mathscribe.com>

        [watchlist] Improve MathML rule
        https://bugs.webkit.org/show_bug.cgi?id=87592

        Reviewed by Adam Barth.

        The old rule "filename": r".*mathml" works fine because "filename" is a prefix match,
        but if this changed the rule would be slow. We protect against this, clarify the rule,
        and make it more similar to existing rules.

        * Scripts/webkitpy/common/config/watchlist:

2012-05-27  David Barton  <dbarton@mathscribe.com>

        [watchlist] Add myself & a rule for MathML
        https://bugs.webkit.org/show_bug.cgi?id=87586

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2012-05-26  David Kilzer  <ddkilzer@apple.com>

        Use xcrun to find path to nm for Mac port
        <http://webkit.org/b/87588>

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.nm_command): Add. Tries to find a path for the nm
        command using xcrun.  Falls back to returning 'nm'.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.nm_command): Add. Returns 'nm'.
        (WebKitPort._webcore_symbols_string): Call self.nm_command().

2012-05-25  Lynn Neir  <lynn.neir@skype.net>

        Added windows implementation in DRT for TextInputController, https://bugs.webkit.org/show_bug.cgi?id=32021

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::FrameLoadDelegate):
        (FrameLoadDelegate::didClearWindowObjectForFrameInStandardWorld):
        * DumpRenderTree/win/FrameLoadDelegate.h:
        (FrameLoadDelegate):
        * DumpRenderTree/win/TextInputController.cpp: Added.
        (setMarkedTextCallback):
        (hasMarkedTextCallback):
        (unmarkTextCallback):
        (markedRangeCallback):
        (insertTextCallback):
        (firstRectForCharacterRangeCallback):
        (selectedRangeCallback):
        (TextInputController::makeWindowObject):
        (TextInputController::getJSClass):
        (TextInputController::staticValues):
        (TextInputController::staticFunctions):
        * DumpRenderTree/win/TextInputController.h: Added.
        (TextInputController):
        * DumpRenderTree/win/TextInputControllerWin.cpp: Added.
        (TextInputController::setMarkedText):
        (TextInputController::hasMarkedText):
        (TextInputController::unmarkText):
        (TextInputController::markedRange):
        (TextInputController::insertText):
        (TextInputController::firstRectForCharacterRange):
        (TextInputController::selectedRange):

2012-05-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: change scm.add(), scm.delete() to accept multiple paths
        https://bugs.webkit.org/show_bug.cgi?id=87528

        Reviewed by Ojan Vafai.

        launching git or svn for individual files can be slow; this
        change will hand multiple paths at once to git and svn so they
        can be added in a batch.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.add_list):
        (Git.delete_list):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.add):
        (SCM):
        (SCM.add_list):
        (SCM.delete):
        (SCM.delete_list):
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.add):
        (MockSCM):
        (MockSCM.add_list):
        (MockSCM.delete):
        (MockSCM.delete_list):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (_shared_test_exists):
        (_shared_test_added_files):
        (_test_delete_list):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.add_list):
        (SVN.delete_list):

2012-05-25  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [NRWT] Add unit testing for perf tests on locked shards
        https://bugs.webkit.org/show_bug.cgi?id=87489

        Reviewed by Dirk Pranke.

        Adding utests that makes sure that perf tests are running in locked
        shards and by passing --no-http won't break NRWT (r118421).

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ShardingTests):
        (ShardingTests.test_shard_by_dir):
        (ShardingTests.test_shard_every_file):
        (ShardingTests.test_shard_in_two):
        (ShardingTests.test_multiple_locked_shards):
        (LockCheckingManager):
        (LockCheckingManager.__init__):
        (LockCheckingManager.handle_finished_list):
        (ManagerTest.test_http_locking):
        (ManagerTest):
        (ManagerTest.test_perf_locking):
        * Scripts/webkitpy/layout_tests/port/test.py:

2012-05-25  Jessie Berlin  <jberlin@apple.com>

        [Win] fast/events/keydown-leftright-keys.html failing since introduction in r118001
        https://bugs.webkit.org/show_bug.cgi?id=87511

        Reviewed by Alexey Proskuryakov.

        Update the Windows implementation of keyDown to match the Mac one changed in r118001.

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

2012-05-25  Ken Buchanan  <kenrb@chromium.org>

        Adding Ken Buchanan to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=87443

        Unreviewed.

        Adding self to committers.py as a Committer.

        * Scripts/webkitpy/common/config/committers.py:

2012-05-25  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Buildfix for newer Qt5
        https://bugs.webkit.org/show_bug.cgi?id=87257

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.h: QtDeclarative -> QtQml renaming.

2012-05-25  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed fix after r118484.

        Enable CSS_EXCLUSIONS and CSS_REGIONS.
        They were enabled uncoditinally before r118484.

        * qmake/mkspecs/features/features.pri:

2012-05-24  Tim Horton  <timothy_horton@apple.com>

        Add feature defines for web-facing parts of CSS Regions and Exclusions
        https://bugs.webkit.org/show_bug.cgi?id=87442
        <rdar://problem/10887709>

        Reviewed by Dan Bernstein.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-24  Hironori Bono  <hbono@chromium.org>

        Enable grammar checking on Chromium when we paste text (Take 2)
        https://bugs.webkit.org/show_bug.cgi?id=74393

        Reviewed by Ryosuke Niwa.

        This change enables grammar checking on Chromium and implements a mock grammar
        checker to fix a failing test.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockGrammarCheck.cpp: Added.
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/MockGrammarCheck.h: Added.
        (WebKit):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck): Call MockGrammarCheck::checkGrammarOfString to check grammatical errors.

2012-05-24  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [DRT] Add support for WebKitOfflineWebApplicationCacheEnabled preference
        https://bugs.webkit.org/show_bug.cgi?id=86842

        Reviewed by Antonio Gomes.

        Add support for overriding the application cache support preference
        through EFL's LayoutTestController.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::overridePreference):

2012-05-24  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Remove unnecessary extra call to set developer extras setting on the test startup
        https://bugs.webkit.org/show_bug.cgi?id=85209

        Reviewed by Antonio Gomes.

        Set developer extras setting called twice on the test startup. Hence, removing
        an unnecessary extra call which set wrong value. 

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-05-24  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should not fetch from debug bots if it also knows about the release bots
        https://bugs.webkit.org/show_bug.cgi?id=86916

        Reviewed by Adam Barth.

        Note that if release and debug are failing differently, debug
        will be ignored ...

        Note: also change the use of a fake port name from
        "mock-port-name" to "test-mac-leopard" to make it more friendly
        to the port factory ("mock" actually is a real port).

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler._builders_to_fetch_from):
        (GardeningHTTPRequestHandler.rebaselineall):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaselineall):
        (GardeningServerTest.test_rebaseline_new_port):

2012-05-24  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix baseline search path for official chrome builders
        https://bugs.webkit.org/show_bug.cgi?id=87432

        Reviewed by Tony Chang.

        The official chrome builders need to use the win7 and SL
        baseline paths, not the XP and Leopard paths. Linux is correct.

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeMacPort.determine_full_port_name):
        (GoogleChromeWinPort.determine_full_port_name):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (TestGoogleChromePort._verify_baseline_search_path_startswith):
        (TestGoogleChromePort.test_get_google_chrome_port):

2012-05-24  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [NRWT] REGRESSION(r116021): Assertion when running with --no-http
        https://bugs.webkit.org/show_bug.cgi?id=86800

        Reviewed by Dirk Pranke.

        Don't launch a HTTP server with lock based only on the existence of
        locked shards since we now run perf on locked shards too.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):

2012-05-24  Jochen Eisinger  <jochen@chromium.org>

        Add --driver-name option to run_webkit_tests.py to allow for selecting alternative DRT binaries
        https://bugs.webkit.org/show_bug.cgi?id=87128

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.driver_name):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_driver_name_option):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-05-24  John Mellor  <johnme@chromium.org>

        Font Boosting: Add compile flag and runtime setting
        https://bugs.webkit.org/show_bug.cgi?id=87394

        Reviewed by Adam Barth.

        Add ENABLE_FONT_BOOSTING.

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

2012-05-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] [DRT] keyboard-related tests do not pass
        https://bugs.webkit.org/show_bug.cgi?id=85369

        Reviewed by Gustavo Noronha Silva.

        Add SHIFT modifier for capital letters as VK_ 
        codes do not distinguish between lows and caps and also to be consistent
        with other ports which send caps as lowercase letters with the shift key down.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyNameFromJSValue): 

2012-05-24  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Let the client give local files universal access on a case by case basis
        https://bugs.webkit.org/show_bug.cgi?id=87174
        <rdar://problem/11024330>

        Reviewed by Maciej Stachowiak.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: (WTR::InjectedBundlePage::InjectedBundlePage):
        Added initialization of a new structure member to prevent build failure.

2012-05-24  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Modify keycode conversion functions to return keycodes with location information after r118001.
        https://bugs.webkit.org/show_bug.cgi?id=87203

        Reviewed by Andreas Kling.

        Add the required changes to make
        fast/events/keydown-leftright-keys.html pass after r118001.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyNameFromJSValue): Translate "{left,right}{Shift,Alt,Control}"
        into the proper X11 keysym definitions.

2012-05-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r118352.
        http://trac.webkit.org/changeset/118352
        https://bugs.webkit.org/show_bug.cgi?id=87390

        Caused 6 editing/spelling tests crash/fail on chromium in
        debug. (Requested by vsevik on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockGrammarCheck.cpp: Removed.
        * DumpRenderTree/chromium/MockGrammarCheck.h: Removed.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck):

2012-05-24  Peter Beverloo  <peter@chromium.org>

        Add John Mellor as a contributor
        https://bugs.webkit.org/show_bug.cgi?id=87389

        Reviewed by Kenneth Rohde Christiansen.

        John will be working on Font Boosting and is very involved with various
        web-facing subjects of Chrome for Android, such as viewport.

        * Scripts/webkitpy/common/config/committers.py:

2012-05-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][DRT] LayoutTestController's setCacheModel() implementation
        https://bugs.webkit.org/show_bug.cgi?id=86840

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): Reset dead decoded data deletion interval.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setCacheModel): Implementation added.

2012-05-24  Hironori Bono  <hbono@chromium.org>

        Enable grammar checking on Chromium when we paste text.
        https://bugs.webkit.org/show_bug.cgi?id=74393

        Reviewed by Hajime Morita.

        This change enables grammar checking on Chromium and implements a mock grammar
        checker to fix a failing test.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/MockGrammarCheck.cpp: Added.
        (MockGrammarCheck::checkGrammarOfString):
        * DumpRenderTree/chromium/MockGrammarCheck.h: Added.
        (WebKit):
        (MockGrammarCheck):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck): Call MockGrammarCheck::checkGrammarOfString to check grammatical errors.

2012-05-24  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed fix, add ENABLE_CSS3_FLEXBOX after r118304.

        * qmake/mkspecs/features/features.pri:

2012-05-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's LayoutTestController needs to implement sendWebIntentResponse
        https://bugs.webkit.org/show_bug.cgi?id=86867

        Reviewed by Adam Barth.

        Add implementation for sendWebIntentResponse() in EFL's
        LayoutTestController and add empty implementation for other ports.

        * DumpRenderTree/LayoutTestController.cpp:
        (sendWebIntentResponseCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::currentIntentRequest):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onFrameIntentNew):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::sendWebIntentResponse):

2012-05-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] The EFL port has no support for title directionality
        https://bugs.webkit.org/show_bug.cgi?id=86462

        Reviewed by Gustavo Noronha Silva.

        Update "title,changed" signal handlers in DRT and EWebLauncher to
        reflect the change from const char* to Ewk_Text_With_Direction* type
        for the title.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onTitleChanged):
        * EWebLauncher/main.c:
        (title_set):
        (on_title_changed):
        (on_key_down):

2012-05-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change EFL debug build name with more detail one
        https://bugs.webkit.org/show_bug.cgi?id=87254

        Reviewed by Ryosuke Niwa.

        EFL Linux Debug buildbot name needs to be consistent with other EFL buildbot name.
        In addition, remove efl-linux-debug triggerable since nobody uses it.

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

2012-05-23  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Fix WebCore library path and rebaseline result
        https://bugs.webkit.org/show_bug.cgi?id=86355

        Reviewed by Dirk Pranke.

        Currently EFL DRT uses wrong WebCore library path when running DRT.
        Therefore, this patch adjusted the path correctly.

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

2012-05-23  Ojan Vafai  <ojan@chromium.org>

        add back the ability to disable flexbox
        https://bugs.webkit.org/show_bug.cgi?id=87147

        Reviewed by Tony Chang.

        * Scripts/webkitperl/FeatureList.pm:

2012-05-23  Tony Chang  <tony@chromium.org>

        Remove the Chromium Grid Layout bot from the waterfall
        https://bugs.webkit.org/show_bug.cgi?id=87311

        Reviewed by Ryosuke Niwa.

        I removed the compiler define in r117613, so we don't need a separate
        bot to compile/test this code.

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

2012-05-23  Ian Vollick  <vollick@chromium.org>

        Add vollick to list of contributors.
        https://bugs.webkit.org/show_bug.cgi?id=87305

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committers.py:

2012-05-23  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Fix chromium_android_unittest
        https://bugs.webkit.org/show_bug.cgi?id=87196

        Reviewed by Tony Chang.

        Update unit tests after ChromiumAndroidPort supported apk based
        DumpRenderTree.

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        (ChromiumAndroidPortTest.mock_run_command_fn): Moved out from test_get_last_stacktrace so that other tests can use it as a common command line handler.
        (ChromiumAndroidPortTest.test_get_last_stacktrace):
        (ChromiumAndroidPortTest.test_get_crash_log): Added to test our overridden _get_crash_log()
        (ChromiumAndroidDriverTest):
        (ChromiumAndroidDriverTest.setUp):
        (ChromiumAndroidDriverTest.test_cmd_line): Added to test our overridden cmd_line()
        (ChromiumAndroidDriverTest.test_write_command_and_read_line): Added test of unexpected EOF (indicating crash on Android)

2012-05-23  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [watchlist] Add myself and create a watch rule to catch Attribute related patches
        https://bugs.webkit.org/show_bug.cgi?id=87303

        Reviewed by Alexis Menard.

        * Scripts/webkitpy/common/config/watchlist:

2012-05-23  Dirk Pranke  <dpranke@chromium.org>

        garden-o-matic should not fetch from debug bots if it also knows about the release bots
        https://bugs.webkit.org/show_bug.cgi?id=86916

        Reviewed by Adam Barth.

        This change pushes all of the logic for rebaselining a cluster
        of failures (a list of tests failing a list of suffixes on a
        list of bots) onto the server, so there is a single call from
        the web page; we will then be able to optimize the performance
        of the rebaselining better.

        Also remove the 'optimizebaseline' entry point on garden-o-matic
        (and the client-side call) since we don't need it any more.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaselineall):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2012-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        Mac DRT should be able to load external URLs for replay performance tests
        https://bugs.webkit.org/show_bug.cgi?id=86191

        Reviewed by Alexey Proskuryakov.

        Let external URL requests go through if the test file is not a local file or hosted at localhost.
        e.g. "DumpRenderTree http://webkit.org/" as supposed to "DumpRenderTree test.html" or
        "DumpRenderTree http://localhost:8000/".

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (isLocalhost):
        (hostIsUsedBySomeTestsToGenerateError):
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2012-05-23  Malcolm MacLeod <malcolm.macleod@tshwanedje.com>

        [wx] In wxWebKit release builds on MSW, keep release settings but also build the 
        debug symbols for easier debugging.
        https://bugs.webkit.org/show_bug.cgi?id=87151

        Reviewed by Kevin Ollivier.

        * waf/build/settings.py:
        (common_configure):

2012-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Move myself to reviewers.

        * Scripts/webkitpy/common/config/committers.py:

2012-05-23  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Implements the registerProtocolHandler method and option.
        https://bugs.webkit.org/show_bug.cgi?id=73638

        Reviewed by Andreas Kling.

        * Scripts/webkitperl/FeatureList.pm: Turn on the ENABLE_REGISTER_PROTOCOL_HANDLER option as default on EFL port.

2012-05-23  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] EventSender should properly handle (left|right)(control|shift|alt) after r118001
        https://bugs.webkit.org/show_bug.cgi?id=87221

        Reviewed by Martin Robinson.

        Convert leftAlt, leftControl, leftShift, rightAlt, rightControl and
        rightShift key names into proper GDK key symbols.

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

2012-04-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make the web view's url property follow the active url

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

        Update  the location bar in the minibrowser to behave
        a bit more like normal browsers in terms of when the url will change
        and how active focus is handled.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-05-23  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Remove references to $$QT_SOURCE_TREE

        With a modularized Qt, it's ambigious. What we really want is qtbase,
        which qtcore is a proxy for (we assume it will always live in qtbase).

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2012-05-23  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Fix qmake conditional for c++-11 compat warnings

        Reviewed by Tor Arne Vestbø.

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

2012-05-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's DRT does not print didFailProvisionalLoadWithError messages
        https://bugs.webkit.org/show_bug.cgi?id=85956

        Reviewed by Gustavo Noronha Silva.

        Catch new "load,provisional,failed" signal and print
        didFailProvisionalLoadWithError messages when LayoutTestController's
        dumpFrameLoadCallbacks() returns true. Also make sure the
        didFailLoadWithError message is not printed in case of provisional
        load failure.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::onFrameCreated):
        (DumpRenderTreeChrome::onFrameProvisionalLoadFailed):
        (DumpRenderTreeChrome::onFrameLoadError):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h:
        (DumpRenderTreeChrome):

2012-05-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] EFL's DRT needs to call Settings::setValidationMessageTimerMagnification(-1)
        https://bugs.webkit.org/show_bug.cgi?id=86366

        Reviewed by Antonio Gomes.

        Call Settings::setValidationMessageTimerMagnification(-1) between the tests.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):

2012-05-22  Darin Adler  <darin@apple.com>

        * Scripts/webkitpy/thirdparty/mod_pywebsocket: Added property svn:ignore.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake: Added property svn:ignore.

2012-05-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Run DumpRenderTree as an apk (C++ and gyp part)
        https://bugs.webkit.org/show_bug.cgi?id=86922

        Because we have new platformInit() in TestShellAndroid.cpp, and
        we still need the timeout part in TestShellLinux.cpp, TestShellLinux.cpp
        is split into TestShellPosix.cpp and TestShellX11.cpp.

        Reviewed by Kent Tamura.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Added. Handles command lines to redirect stdin/stdout/stderr.
        (platformInit):
        * DumpRenderTree/chromium/TestShellGtk.cpp: Removed. Merged into TestShellX11.cpp
        * DumpRenderTree/chromium/TestShellLinux.cpp: Removed. Split into TestShellPosix.cpp and TestShellX11.cpp.
        * DumpRenderTree/chromium/TestShellPosix.cpp: Split from TestShellLinux.cpp, containing the timeout handling part, compiled when os_posix=1 (excluding mac).
        (AlarmHandler):
        (TestShell::waitTestFinished):
        * DumpRenderTree/chromium/TestShellX11.cpp: Split from TestShellLinux.cpp, containing the fontconfig part, compiled when use_x11=1
        (openStartupDialog): from TestShellGtk.cpp
        (checkLayoutTestSystemDependencies): from TestShellGtk.cpp.
        (setupFontconfig):
        (platformInit):

2012-05-22  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Implement touch event
        https://bugs.webkit.org/show_bug.cgi?id=86720

        Reviewed by Hajime Morita.

        Currently EFL DRT doesn't support touch event.
        Therefore, this patch enabled it and implemented some eventSender function callbacks.

        * DumpRenderTree/efl/EventSender.cpp:
        (TouchEventInfo::TouchEventInfo):
        (TouchEventInfo):
        (touchPointList):
        (sendTouchEvent):
        (addTouchPointCallback):
        (touchStartCallback):
        (updateTouchPointCallback):
        (touchMoveCallback):
        (cancelTouchPointCallback):
        (touchCancelCallback):
        (releaseTouchPointCallback):
        (touchEndCallback):
        (clearTouchPointsCallback):
        (setTouchModifierCallback):
        * Scripts/webkitperl/FeatureList.pm:

2012-05-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Fix chromium_android_unittest
        https://bugs.webkit.org/show_bug.cgi?id=87196

        Not reviewed.
        Temporarily disable chromium_android_unittest.

        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        (ChromiumAndroidDriverTest):

2012-05-22  Jessie Berlin  <jberlin@apple.com>

        WebKitTestRunner needs an implementation of layoutTestController.setDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=64313

        Reviewed by Jon Honeycutt.

        Add it.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Make sure to generate the binding.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setDefersLoading):
        Call WKBundlePageSetDefersLoading.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2012-05-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Run DumpRenderTree as an apk (python part)
        https://bugs.webkit.org/show_bug.cgi?id=86923

        chromium_android.py is modified to support running DumpRenderTree as
        an apk, so that we can run the tests (e.g. video) requiring features
        implemented in Java on Android.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.default_child_processes):
        (ChromiumAndroidPort.check_wdiff):
        (ChromiumAndroidPort.check_build):
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort.skipped_layout_tests):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._path_to_driver):
        (ChromiumAndroidPort._get_crash_log):
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidPort._run_adb_command):
        (ChromiumAndroidPort._get_last_stacktrace):
        (ChromiumAndroidPort._get_logcat):
        (ChromiumAndroidPort._setup_performance):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._command_wrapper):
        (ChromiumAndroidDriver.cmd_line):
        (ChromiumAndroidDriver._file_exists_on_device):
        (ChromiumAndroidDriver._deadlock_detector):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver.run_test):
        (ChromiumAndroidDriver.stop):
        (ChromiumAndroidDriver._write_command_and_read_line):
        (ChromiumAndroidDriver._output_image):
        (ChromiumAndroidDriver._get_stderr):

2012-05-22  Joshua Bell  <jsbell@chromium.org>

        [Chromium] Reverting r118084 - webkit_tests failing on chromium mac.

        Unreviewed gardening.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.driver_name):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_overrides_and_builder_names):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-05-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Move conditions in DumpRenderTree.gypi into DumpRenderTree.gyp
        https://bugs.webkit.org/show_bug.cgi?id=87176

        Reviewed by Tony Chang.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/DumpRenderTree.gypi:

2012-05-22  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add --driver-name option to run_webkit_tests.py to allow for selecting alternative DRT binaries
        https://bugs.webkit.org/show_bug.cgi?id=87128

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.driver_name):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_driver_name_option):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort._path_to_driver):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-05-22  Jessie Berlin  <jberlin@apple.com>

        WTR fix after r118001.

        Rubber-stamped by Alexey Proskuryakov.

        Update the WTR implementation of keyDown to match the DRT one changed in r118001.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown):

2012-05-22  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        [Chromium] Use overloaded printBegin() webkit API to support auto fit to page functionality.
        https://bugs.webkit.org/show_bug.cgi?id=86684

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printPage):

== Rolled over to ChangeLog-2012-05-22 ==
