2012-03-16  Kihong Kwon  <kihong.kwon@samsung.com>

        Support for Battery Status API
        https://bugs.webkit.org/show_bug.cgi?id=62698

        Add include directory and file.
        http://www.w3.org/TR/battery-status/

        Reviewed by Adam Barth.

        * Scripts/build-webkit:

2012-03-16  Kishore Bolisetty  <kbolisetty@innominds.com>

        check-webkit-style fails on LayoutTests/platform/efl/test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=81007

        Reviewed by Adam Barth.

        A dedidcated build slave is available for efl on build.webkit.org. 
        This change add's an entry for the elf port in list of available port builders.
        This is required because test_expectations.py when triggered, looks for a valid port object for the specified port. 

        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-03-16  Adam Barth  <abarth@webkit.org>

        [webkitpy] StatusServer.next_work_item has an incorrectly named local variable
        https://bugs.webkit.org/show_bug.cgi?id=81302

        Reviewed by Eric Seidel.

        This is a trivial patch, but the variable name turned up in a grep of
        webkitpy and looks like copy pasta.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer.next_work_item):

2012-03-16  Andrew Lo  <anlo@rim.com>

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

        Enable Page Visibility API for BlackBerry.

        Reviewed by Rob Buis.

        * Scripts/build-webkit:

2012-03-16  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Add computedStyleIncludingVisitedInfo to DumpRenderTreeSupport
        https://bugs.webkit.org/show_bug.cgi?id=81232

        Reviewed by Philippe Normand.

        Use the newly-added helper method in DumpRenderTreeSupportGtk.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):

2012-03-15  Eric Seidel  <eric@webkit.org>

        Move parse_bug_id into config/urls in preparation for re-use elsewhere.
        https://bugs.webkit.org/show_bug.cgi?id=81313

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id_from_changelog):
        * Scripts/webkitpy/common/config/urls.py:
        (parse_bug_id):
        * Scripts/webkitpy/common/config/urls_unittest.py: Copied from Tools/Scripts/webkitpy/common/config/urls.py.
        (URLsTest):
        (URLsTest.test_parse_bug_id):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_parse_bug_id):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (_post_error_and_check_for_bug_url):
        * Scripts/webkitpy/tool/bot/sheriff.py:
        (Sheriff.post_rollout_patch):
        (Sheriff.post_chromium_deps_roll):

2012-03-15  Adam Barth  <abarth@webkit.org>

        The commit-queue should fast-track patches that have already passed the testing EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=81305

        Reviewed by Eric Seidel.

        If a patch has already passed the testing EWS bots (currently only the
        chromium-ews bot), we should be able to land the patch without running
        the tests again.  This patch is somewhat risky in that the tests might
        have been broken between when the EWS bots ran and when the
        commit-queue is processing the patch.  If that turns out to be a
        problem in practice, we'll tighten up this fast-track in some way,
        likely by making sure that the pass status is recent.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTaskDelegate.did_pass_testing_ews):
        (CommitQueueTask._did_pass_tests_recently):
        (CommitQueueTask.run):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (MockCommitQueue.did_pass_testing_ews):
        (test_fast_success_case):
        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.did_pass_testing_ews):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (test_did_pass_testing_ews):

2012-03-15  Kentaro Hara  <haraken@chromium.org>

        [PerformanceTests] run-perf-tests should output correct units
        https://bugs.webkit.org/show_bug.cgi?id=78303

        Reviewed by Ryosuke Niwa.

        Previously run-perf-tests just supported "ms" for units.
        Consequently, Dromaeo perf tests had been reporting runs/s as "ms".
        This patch fixes run-perf-tests so that they can support custom units.
        The default unit is "ms".

        The test result looks like this:

        $ ./Tools/Scripts/run-perf-tests Dromaeo/dom-attr.html
        RESULT Dromaeo: dom-attr= 6465.9525483 runs/s
        median= 0.0 runs/s, stdev= 24.2983433436 runs/s, min= 6435.87649402 runs/s, max= 6515.63693392 runs/s

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

2012-03-15  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build change after wtf path changes.

        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Updated include
        directories to look at the private header directory to find 'wtf'.

2012-03-15  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r110595): webkit-patch suggest-reviewers doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=81293

        Reviewed by Adam Barth.

        r110595 introduced new format of the author field of ChangeLog entry:
        "Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>"
        Updte chanelog.py to support it.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry._split_contributor_names):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_authors):

2012-03-15  Lynn Neir  <lynn.neir@skype.net>

        Implement LayoutTestController::setValueForUser on Windows https://bugs.webkit.org/show_bug.cgi?id=55834

        Implemented setValueForUser in both DumpRenderTree and WebKitTestRunner.

        Reviewed by Jessie Berlin.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setValueForUser):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setValueForUser):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-03-15  Adam Barth  <abarth@webkit.org>

        Update the start-queue.sh script to match what we're using on the bots
        https://bugs.webkit.org/show_bug.cgi?id=81277

        Reviewed by Eric Seidel.

        Over time we've added more magic git commands to clean up the local repo after
        it has been borked in various ways. The idea behind this sequence is to clear
        out any changes in the working copy and then to rebuild the master branch from
        origin/master.

        This patch also removes the watchdog timer that we've stopped using on the
        bots.

        This patch was reviewed on <https://github.com/eseidel/webkit/pull/1>.
        Note: Eric and I are experimenting with GitHub to see if it might be
        useful for WebKit.  If you have thoughts on this topic, please feel
        free to grab Eric or me on #webkit to chat.  I assume that he and I are
        the only ones who care about this file so using this alternative
        process for this patch shouldn't cause any trouble.

        * EWSTools/start-queue.sh:

2012-03-15  Adam Barth  <abarth@webkit.org>

        The commit-queue can hang when the test_expectations.txt style check fails during commit
        https://bugs.webkit.org/show_bug.cgi?id=81251

        Reviewed by Eric Seidel.

        We forgot to check the --non-interactive flag, so we end up prompting
        the "user" who doesn't exist on the bot.  We might consider teaching
        the User class about non-interactive if we have this sort of bug again.

        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit.options):
        (Commit._check_test_expectations):
        (Commit.run):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest.test_check_test_expectations):

2012-03-15  Jessie Berlin  <jberlin@apple.com>

        fast/dom/Window/window-properties.html and fast/dom/prototype-inheritance-2.html failing on
        Mac WK2 because WebAudio is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=81259

        Reviewed by Dan Bernstein.

        Enable WebAudio so that it appears in the window object in the tests.
        The webaudio tests are all still skipped in the Mac Skipped list.

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

2012-03-15  David Levin  <levin@chromium.org>

        Various autoresize fixes.
        https://bugs.webkit.org/show_bug.cgi?id=81199

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Stop using the deprecated api that was removed.

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Actually use --release and --debug command line options in run-gtk-test
        https://bugs.webkit.org/show_bug.cgi?id=81234

        Reviewed by Philippe Normand.

        Actually handle --release and --debug command line options to
        create the build directory, falling back to current hack to detect
        whether it's a Release or Debug build when both options are missed.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Receive options too.
        (TestRunner._get_top_level_directory): Helper function to get the
        top level directory.
        (TestRunner._get_build_directory): Helper function to get the
        build directory depending on --release/--debug command line
        options or gessing it if both options are missing.
        (TestRunner._ensure_accessibility_daemon_is_running): Use
        self-options now.
        (TestRunner.run): Ditto.
        (TestRunner.run.run_tests): Pass options to the constructor
        instead of run().

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Run unit tests with --verbose in the bots
        https://bugs.webkit.org/show_bug.cgi?id=81230

        Reviewed by Martin Robinson.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests): Add --verbose to run-gtk-test command.

2012-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Move wx port to using export macros
        https://bugs.webkit.org/show_bug.cgi?id=77279

        Reviewed by Hajime Morita.

        * waf/build/settings.py:
        (common_configure):

2012-03-15  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix attempt after r110845.

        * Scripts/run-gtk-tests: Added --release and --debug options.

2012-03-15  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        Parametrize run-with-jhbuild and update-webkitgtk-libs with platform --gtk/--efl
        https://bugs.webkit.org/show_bug.cgi?id=79673

        Preparatory work for bringing jhbuild enabled build to EFL port.

        Reviewed by Philippe Normand.

        * Scripts/update-webkit-libs-jhbuild: Copied from Tools/Scripts/update-webkitgtk-libs.
        * Scripts/update-webkitgtk-libs:
        * gtk/run-with-jhbuild:
        * jhbuild/jhbuild-wrapper: Copied from Tools/gtk/run-with-jhbuild.
        (top_level_path):
        (jhbuild_installed):
        (jhbuild_cloned):
        (jhbuild_at_expected_revision):
        (update_jhbuild):
        (clone_jhbuild):
        (install_jhbuild):
        (update_webkit_libs_jhbuild):
        (determine_platform):
        (ensure_jhbuild):

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add command line options to run-gtk-tests script
        https://bugs.webkit.org/show_bug.cgi?id=81218

        Reviewed by Philippe Normand.

        Following command line options have been added:

        -v, --verbose: to run gtester with --verbose. That would be used
        by the bots to make it easier to know which test case it failing.

        --display: to use a different display for Xvfb

        It's also possible to pass one or more tests as arguments.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Receive command line arguments.
        (TestRunner._get_tests): Get all the tests or the ones passed by
        command line arguments.
        (TestRunner._ensure_accessibility_daemon_is_running): Use display
        command line argument.
        (TestRunner.run): Pas command line options.
        (TestRunner.run.run_tests): Pass command line arguments.

2012-03-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit2APITests/TestPrinting timeout in the bots
        https://bugs.webkit.org/show_bug.cgi?id=81211

        Reviewed by Philippe Normand.

        Add gtk+ patch to fix timeout in the bots. A similar patch has
        already landed in updatream gtk+, see
        http://git.gnome.org/browse/gtk+/commit/?id=5ebfad5d091f4c9d9c6e60364fad4c60842f027f

        * gtk/jhbuild.modules:
        * gtk/patches/gtk+-3.0.12-gtkprinter.patch: Added.

2012-03-14  Gustavo Noronha Silva  <gns@gnome.org>

        sheriffbot should also be addressable with a comma in addition to colon
        https://bugs.webkit.org/show_bug.cgi?id=81101

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        (IRCBot.on_pubmsg):

2012-03-15  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] MiniBrowser scroll indicators should not scroll out of view
        https://bugs.webkit.org/show_bug.cgi?id=81131

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/qml/ScrollIndicator.qml:

2012-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA tables need to support selected rows attribute/select rows changed notification
        https://bugs.webkit.org/show_bug.cgi?id=79821

        Reviewed by Beth Dakin.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (rowAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::rowAtIndex):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::rowAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rowAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::rowAtIndex):

2012-03-14  Tim Horton  <timothy_horton@apple.com>

        NRWT should respect --additional-platform-directory's Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=81172

        Reviewed by Timothy Hatcher.

        Respect the Skipped file inside all paths included via the --additional-platform-directory option. Test results
        from said path are already used, but the Skipped file is ignored.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_skipped_file_search_paths):

2012-03-14  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r110783.
        http://trac.webkit.org/changeset/110783
        https://bugs.webkit.org/show_bug.cgi?id=81054

        Caused existing test expectation lines to expand to one for
        each test configuration.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.has_warnings):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_macro_overrides):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._save_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_tests_to_update):

2012-03-13  Jon Lee  <jonlee@apple.com>

        Separate NOTIFICATIONS and LEGACY_NOTIFICATIONS
        https://bugs.webkit.org/show_bug.cgi?id=80922
        <rdar://problem/11035082>

        Reviewed by Jian Li.

        You can include either NOTIFICATIONS or LEGACY_NOTIFICATIONS and have a complete API.
        LEGACY_NOTIFICATIONS should cover all of the previous functionality, and NOTIFICATIONS will cover the
        new API. Therefore, APIs that are common between the two will have:
        #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)

        This patch initially sets both to be exactly the same. As other bugs with patches begin to migrate to
        the new API, the defines will begin to split. This allows ports to decide which set of APIs to include.

        Update everything to be #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetTestController):
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::checkNotificationPermission):

2012-03-13  Ojan Vafai  <ojan@chromium.org>

        Have webkit-patch rebaseline-test update test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=81054

        Reviewed by Dirk Pranke.

        This will allow us to use the All Failures tab in garden-o-matic
        to rebaseline tests without making test_expectations.txt stale.

        It's conservative and only removes lines if the test is
        not flaky and fails in a way the rebaseline would fix (e.g.
        CRASH/TIMEOUT will not be touched).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.remove_configuration_from_test):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (RemoveConfigurationsTest):
        (RemoveConfigurationsTest.test_remove):
        (test_remove_line):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._is_supported_port):
        (RebaselineTest):
        (RebaselineTest._update_expectations_file):
        (RebaselineTest._rebaseline_test_and_update_expectations):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_updates_expectations_file):

2012-03-14  Jessie Berlin  <jberlin@apple.com>

        Crash in WKTR under addChromeInputField due to using 0 as a key in a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=81167

        Reviewed by Sam Weinig.

        Do not use 0 as a key in a HashMap.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        cacheLayoutTestControllerCallback uses the enum as keys for the callback map.

2012-03-14  Ojan Vafai  <ojan@chromium.org>

        Add the chromium lion bot to garden-o-matic and remove
        the platform_move_to in builders.py since the Chromium Lion
        port is now a normal port.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:

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

        Fix regression/crash introduced in r110724 - bad type passed from skipped_tests() by default.

        Unreviewed, build fix.

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

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

        Please add a way to manually skip some tests in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=81019

        Reviewed by Ojan Vafai.

        This patch implements the -i / --ignore-tests flag from ORWT
        and refactors the test_expectations.py code slightly to handle
        it.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.parse_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        (test_add_skipped_tests_duplicate):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_ignore_tests):
        (MainTest.test_ignore_tests.assert_ignored):

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

        nrwt: run with no args on lion, is putting baselines in platform/mac-lion, not platform/mac
        https://bugs.webkit.org/show_bug.cgi?id=81028

        Reviewed by Ojan Vafai.

        The mac port had incorrect lookups for 'mac-lion' and
        'mac-future' in some places. This patch fixes that and adds a
        bunch of tests.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.baseline_path):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.assert_skipped_file_search_paths):
        (MacTest.test_skipped_file_search_paths):
        (_assert_search_path):
        (test_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_file_search_paths):

2012-03-13  Jer Noble  <jer.noble@apple.com>

        Lion Intel Debug WebKit2 Tests crashing under [WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]
        https://bugs.webkit.org/show_bug.cgi?id=81056

        Reviewed by Jessie Berlin.

        Intercept beganEnterFullScreen and beganExitFullScreen and turn them into no-ops (plus logging).

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::beganEnterFullScreen):
        (WTR::InjectedBundlePage::beganExitFullScreen):

2012-03-14  Alexander Færøy  <alexander.faeroy@nokia.com>

        The width and height of the scroll indicators in the MiniBrowser does
        not consider the offset margins.
        https://bugs.webkit.org/show_bug.cgi?id=81112

        Reviewed by Kenneth Rohde Christiansen.

        This patch fixes the issue by withdrawing two times the anchor
        margins.

        * MiniBrowser/qt/qml/ScrollIndicator.qml:

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

        [EFL] Implement LayoutTestController::clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=80142

        Adding missing implementation clearBackForwardList to EFL's
        LayoutTestController. This implementation allows us to unskip 
        tests connected with history.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearBackForwardList): Implemented.

2012-03-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL][DRT] Expose window.internals object
        https://bugs.webkit.org/show_bug.cgi?id=79900

        Exposes window.internals for EFL's DRT. Makes possible to
        remove some tests from the skip list.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::onWindowObjectCleared):

2012-03-13  Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>

        Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
        https://bugs.webkit.org/show_bug.cgi?id=78853

        Reviewed by Adam Barth.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-12  Antonio Gomes  <agomes@rim.com>

        Convert nodesFromRect tests to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=80886

        Reviewed by Ryosuke Niwa.

        This clean up allows to remove port specific bits of each
        DRT implementation that supports testing Document::nodesFromRect,
        in favor of making use of the 'Internals' interface to test it.

        This makes its code conveniently more expansible and cleaner.

        Also removed stubs from Win and EFL DRTs.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/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:

2012-03-13  Ojan Vafai  <ojan@chromium.org>

        Rebaselining for a new port doesn't work right with multiple fallback ports
        https://bugs.webkit.org/show_bug.cgi?id=80932

        Reviewed by Adam Barth.

        Since chromium-leopard also falls back to mac-leopard, we need to
        copy the existing result for both chromium-leopard and chromium-snowleopard
        before doing lion rebaselines.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (fallback_port_names_for_new_port):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest):
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline_new_port):

2012-03-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Tweak minibrowser UI

        Add some margins to the scroll indicators, and set a dark background
        color so you see the page dimensions.

        Reviewed by Antonio Gomes.

        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ScrollIndicator.qml:

2012-03-13  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] [DRT] Implement scheduleAsynchronousKeyDown.
        https://bugs.webkit.org/show_bug.cgi?id=79601

        Reviewed by Gustavo Noronha Silva.

        Extracted shareable code from keyDownCallback and then added createKeyEventInfo.
        createKeyEventInfo creates a new structure KeyEventInfo that has keyName and modifiers
        and is taken over to sendKeyDown.
        Added sendKeyDown and sendAsynchronousKeyDown to evaluate keyDown event directly
        and asynchronously. Eventually, sendAsynchronousKeyDown calls sendKeyDown.

        * DumpRenderTree/efl/EventSender.cpp:
        (KeyEventInfo::KeyEventInfo):
        (KeyEventInfo):
        (createKeyEventInfo):
        (sendKeyDown):
        (keyDownCallback):
        (sendAsynchronousKeyDown):
        (scheduleAsynchronousKeyDownCallback):

2012-03-12  Ojan Vafai  <ojan@chromium.org>

        webkit-patch optimize-baselines sometimes creates a mac-future result
        https://bugs.webkit.org/show_bug.cgi?id=80717

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        (_baseline_search_hypergraph):
        (BaselineOptimizer._find_optimal_result_placement):
        (BaselineOptimizer._filter_virtual_ports):
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_no_add_mac_future):

2012-03-12  Jessie Berlin  <jberlin@apple.com>

        More Windows build fixing.

        * DumpRenderTree/win/WorkQueueItemWin.cpp:

2012-03-12  Jessie Berlin  <jberlin@apple.com>

        More Windows build fixing.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:

2012-03-12  Dirk Pranke  <dpranke@chromium.org>

        remove the 'gpu' group from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=80353

        Reviewed by Adam Barth.

        Since those bots are obsolete, we don't need this any more.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testPlatformAndBuildType):
        (testHtmlForTestTypeSwitcherGroup):

2012-03-12  Dirk Pranke  <dpranke@chromium.org>

        remove graphics_type from webkitpy.layout_tests.models.test_configuration
        https://bugs.webkit.org/show_bug.cgi?id=80643

        Reviewed by Ojan Vafai.

        Now that the chromium-gpu ports are gone, there's no need for
        the graphics_type CPU/GPU distinction. Most of this change is
        just updating tests accordingly.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        (TestExpectationEditorTests):
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfiguration.__init__):
        (TestConfiguration.category_order):
        (TestConfiguration.__str__):
        (TestConfiguration.__repr__):
        (TestConfiguration.__hash__):
        (TestConfigurationConverter.to_specifiers_list):
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        (make_mock_all_test_configurations_set):
        (TestConfigurationTest.test_items):
        (TestConfigurationTest.test_keys):
        (TestConfigurationTest.test_str):
        (TestConfigurationTest.test_repr):
        (TestConfigurationTest.test_hash):
        (TestConfigurationTest.test_hash.query_unknown_key):
        (TestConfigurationTest.test_eq):
        (TestConfigurationTest.test_values):
        (SpecifierSorterTest.test_specifier_priority):
        (SpecifierSorterTest.test_sort_specifiers):
        (TestConfigurationConverterTest.test_to_config_set):
        (TestConfigurationConverterTest.test_macro_expansion):
        (TestConfigurationConverterTest.test_to_specifier_lists):
        (TestConfigurationConverterTest.test_converter_macro_collapsing):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_error_on_different_build_type):
        (TestExpectationSerializerTests.test_parsed_to_string):
        (TestExpectationSerializerTests.test_reconstitute_only_these):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.name):
        (Port.version):
        (Port.test_configuration):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_check_illegal_port_names):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_baseline_path):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.all_test_configurations):
        (TestPort._all_build_types):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (BuildCoverageExtrapolatorTest.test_extrapolate):
        (GardeningExpectationsUpdaterTest.test_unknown_failure_type):
        (GardeningExpectationsUpdaterTest.test_add_new_expectation):
        (GardeningExpectationsUpdaterTest.test_replace_old_expectation):
        (GardeningExpectationsUpdaterTest.test_pass_expectation):
        (GardeningExpectationsUpdaterTest.test_supplement_old_expectation):
        (GardeningExpectationsUpdaterTest.test_spurious_updates):

2012-03-12  Dirk Pranke  <dpranke@chromium.org>

        _runtime_feature_list isn't supported on Apple Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=80906

        Reviewed by Eric Seidel.

        It looks like this feature is actually only supported on the Win
        DRT port, so this patch reworks the code to make that clearer
        and reduce unnecessary overrides.

        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._path_to_webcore_library):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort._path_to_webcore_library):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._runtime_feature_list):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort.__init__):
        (TestWebKitPort.all_test_configurations):
        (test_skipped_directories_for_features):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        (WinPort._runtime_feature_list):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_operating_system):
        (WinPortTest):
        (WinPortTest.test_runtime_feature_list):

2012-03-12  Peter Beverloo  <peter@chromium.org>

        [Chromium] Temporary build-fix for the Android bot
        https://bugs.webkit.org/show_bug.cgi?id=80862

        Reviewed by Adam Barth.

        Manually set the environmental variables required to compile source
        files through the Android NDK instead of relying on the envsetup.sh
        script. A proper fix will be landed to Chromium ASAP, and following
        a Chromium roll into WebKit this code will be removed.

        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2012-03-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use right construct to detect config_test_gccdepends

        Reviewed by Andreas Kling.

        * qmake/mkspecs/features/default_pre.prf:

2012-03-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Expose location of WebKit's bin and imports dir through module file

        Reviewed by Andreas Kling.

        * qmake/qt_webkit.pri:

2012-03-12  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Add support for rudimentary scroll indicators in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=80832

        Reviewed by Tor Arne Vestbø.

        Add a basic scroll indicator component to MiniBrowser so that it
        behaves similar to the ScrollDecorator QML component.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ScrollIndicator.qml: Added.

2012-03-12  C Anthony Risinger  <anthony@xtfx.me>

        [GTK] r110296 included an extra $ in @$(AM_V_GEN)
        https://bugs.webkit.org/show_bug.cgi?id=80809

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Add `$` to @(AM_V_GEN), else /bin/sh syntax error

2012-03-12  Ming Xie  <mxie@rim.com>

        [BlackBerry] build-webkit doesn't recognize "--cmakearg" for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=80812

        Reviewed by Rob Buis.

        * Scripts/build-webkit: Add $cmakeArgs to buildCMakeProjectOrExit()
        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments): Remove "PUBLIC_BUILD=0" define


2012-03-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with newer Qt 5.

        Reviewed by Tor Arne Vestbø.

        Newer Qt 5 renames QDeclarativeFoo to QQmlFoo and provides backwards compatible
        renames, which however do trigger a #warning. Until we _require_ a newer Qt 5
        we should disable -Werror.

        Also load(moc) for the availability of QMAKE_MOC in various derived sources. The
        implicit load was removed recently.

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

2012-03-11  Maciej Stachowiak  <mjs@apple.com>

        Add --instruments option to sunspider to profile with Instruments
        https://bugs.webkit.org/show_bug.cgi?id=80783

        Reviewed by Filip Pizlo.

        * Scripts/run-sunspider:

2012-03-11  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Support threaded renderer in WK2
        https://bugs.webkit.org/show_bug.cgi?id=76661

        Remove disabling of threaded rendering.

        Reviewed by Noam Rosenthal.

        * MiniBrowser/qt/main.cpp:
        (main):

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

        [WK2] run-perf-tests should be able to run with WTR
        https://bugs.webkit.org/show_bug.cgi?id=80042

        Reviewed by Martin Robinson.

        Add an option to PerfTestRunner to use WebKitTestRunner instead of
        DumpRenderTree and add the '--no-timeout' flag to WebKitTestRunner
        to avoid timing out when running performance tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle): Initialize m_useWaitToDumpWatchdogTimer
        to true.
        (WTR::InjectedBundle::didReceiveMessage): Unpack the 'BeginTest' message
        as a dictionary containing DumpPixels and UseWaitToDumpWatchdogTimer keys.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
        publicly accessible.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::waitUntilDone): Only initialize the watchdog if it
        is required.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize m_useWaitToDumpWatchdogTimer
        to true.
        (WTR::TestController::initialize): Set m_useWaitToDumpWatchdogTimer to false
        if '--no-timeout' option is present.
        (WTR::TestController::runUntil): Translate TimeoutDuration to a proper timeout
        value, or -1.0 if timeout should not occur.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::useWaitToDumpWatchdogTimer): Make m_useWaitToDumpWatchdogTimer
        publicly accessible.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): Pack the 'BeginTest' message as a dictionary,
        containing DumpPixels and UseWaitToDumpWatchdogTimer keys and corresponding values.
        Waiting for final message should not time out if not necessary.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformRunUntil): Only set up a timeout if necessary.
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformRunUntil): Ditto.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformRunUntil): Add a FIXME, indicating functionality
        is missing.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformRunUntil): Ditto.

2012-03-09  Jon Lee  <jonlee@apple.com>

        Rename NotificationPresenter to NotificationClient
        https://bugs.webkit.org/show_bug.cgi?id=80488
        <rdar://problem/10965558>

        Reviewed by Kentaro Hara.

        Refactor to use renamed WebCore::NotificationClient.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::checkNotificationPermission):

2012-03-07  James Robinson  <jamesr@chromium.org>

        [chromium] Deprecate renderDirectlyToWebView parameter of WebViewClient::createGraphicsContext3D()
        https://bugs.webkit.org/show_bug.cgi?id=80523

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createGraphicsContext3D):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-03-09  Eric Seidel  <eric@webkit.org>

        build-webkit should build Source/WTF on Mac
        https://bugs.webkit.org/show_bug.cgi?id=80728

        Reviewed by Adam Barth.

        We'll add other ports to this list in future commits.

        * Scripts/build-webkit:

2012-03-09  Jon Lee  <jonlee@apple.com>

        Add support for ENABLE(LEGACY_NOTIFICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=80497

        Reviewed by Adam Barth.

        Prep for b80472: Update API for Web Notifications
        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-09  Ashod Nakashian  <ashodnakashian@yahoo.com>

        Bash scripts should support LF endings only
        https://bugs.webkit.org/show_bug.cgi?id=79509

        Reviewed by David Kilzer.

        * EWSTools/boot.sh: Added properties svn:executable and svn:eol-style.
        * EWSTools/start-queue.sh: Added property svn:eol-style.
        * Scripts/webkit-tools-completion.sh: Added properties svn:executable and svn:eol-style.
        * WebKitTestRunner/win/build-generated-files.sh: Added properties svn:executable and svn:eol-style.
        * iExploder/iexploder-1.7.2/tools/release_src.sh: Added property svn:eol-style.
        * iExploder/iexploder-1.7.2/tools/update_html_tags_from_sources.sh: Added property svn:eol-style.

2012-03-09  Ionut Biru  <ibiru@archlinux.org>

        [BUILD] use detected python to run generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=80695

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Use $(PYTHON) instead of plain `python`

2012-03-09  Nat Duca  <nduca@chromium.org>

        Make check-webkit-style complain about "no new tests" lines in changelogs
        https://bugs.webkit.org/show_bug.cgi?id=80582

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_entry):
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.test_no_new_tests):

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

        Unreviewed, rolling out r110250.
        http://trac.webkit.org/changeset/110250
        https://bugs.webkit.org/show_bug.cgi?id=80682

        It made NRWT ignore test_expectations.txt on Qt-WK2 and ignore
        qt-linux at all. (Requested by Ossy on #webkit).

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest.test_baseline_search_path):

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use Qt's module system for install rules and depending on QtWebKit

        Instead of rolling our own install rules we now use the same approach as
        every other Qt module, by loading qt_module.prf and qt_module_config.prf.

        This ensures that we follow the same semantics as the rest of Qt on
        what sort of config options are enabled by default (create_cmake eg.).
        It also allows us to use QT += webkit instead of the workaround we had
        with CONFIG += qtwebkit.

        We do however force Qt to always treat our build as a non-developer build,
        so the libraries will end up in the WebKit lib directory instead of the
        qtbase directory (as with a normal developer-build). This allows us to
        keep the webkit-build self-contained. If Qt is a developer build we still
        copy the module file manually to Qt, so that you don't have to install
        WebKit to make it available.

        For non-developer builds of Qt, it is still possible to use the built
        WebKit libraries without having to install them, by having the variable
        QMAKE_EXTRA_MODULE_FORWARDS set in the project's .qmake.cache file,
        pointing to $WEBKITOUTUTDIR/$CONFIGURATION/modules.

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

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        * MiniBrowser/qt/UrlLoader.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/qtwebkit-private.prf: Removed.
        * qmake/mkspecs/features/qtwebkit.prf:
        * qmake/mkspecs/features/rpath.prf:
        * qmake/mkspecs/modules/qt_webkit.pri: Removed.
        * qmake/qt_webkit.pri: Added.

2012-03-08  Igor Oliveira  <igor.o@sisa.samsung.com>

        Unreviewed. Update my email.

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

2012-03-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        Recent changes to chromium.py etc. broke chromium_android.py
        https://bugs.webkit.org/show_bug.cgi?id=80623

        Reviewed by Dirk Pranke.

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

2012-03-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Exception running reftest with --no-pixel-tests
        https://bugs.webkit.org/show_bug.cgi?id=80642

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):

2012-03-08  Rafael Brandao  <rafael.lobo@openbossa.org>

        [NRWT] Fix --platform=qt-5.0 --new-baseline combo
        https://bugs.webkit.org/show_bug.cgi?id=72489

        Reviewed by Dirk Pranke.

        NRWT: The default platform name for Qt combined with --webkit-test-runner is now
        "qt-5.0-wk2" instead of "qt-linux" and that name is now prefered for tests.
        --platform will override the platform name and then we'll use it.

        ORWT: We check for qt version and use platform name "qt-4.8" if the version is lower
        than 5.0.0, and then we choose between "qt-5.0-wk1" and "qt-5.0-wk2". --platform will
        override it in the end.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest.test_baseline_search_path):

2012-03-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80463
        RenderImage is using the wrong origin when calling addRelevantRepaintedObject
        -and corresponding-
        <rdar://problem/10970221>

        Reviewed by Dan Bernstein.

        New test!
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutForImagesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutForImagesTest::NewFirstVisuallyNonEmptyLayoutForImagesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutForImagesTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/lots-of-images.html: Added.

2012-03-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prospective Windows build fix

        Don't assume that windows-builds will always run inside a cmd.exe shell.

        * qmake/mkspecs/features/default_pre.prf:

2012-03-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10981173> Dashboard regions should not be in device space

        Reviewed by John Sullivan.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm: Added.
        (-[DeviceScaleFactorInDashboardRegionsUIDelegate webView:dashboardRegionsChanged:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2012-03-08  Dirk Pranke  <dpranke@chromium.org>

        webkit-patch works oddly on local Git branches
        https://bugs.webkit.org/show_bug.cgi?id=76958

        Reviewed by Ojan Vafai.

        This change makes the '-g' flag to webkit-patch behave a
        little more consistently with git. The 'HEAD..' syntax
        is changed to 'HEAD....' (four dots), so as to not
        collide with the underlying git syntax. We also generalize
        the syntax to support any refname, so 'foo....' means
        diff against foo and include working copy changes.

        This change also adds the 'UPSTREAM' shortcut to identify
        whatever the current upstream/tracking branch is; this is
        useful if you have multiple local branches stacked up.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._branch_from_ref):
        (Git):
        (Git._current_branch):
        (Git._upstream_branch):
        (Git.merge_base):
        (Git._commit_on_branch):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitSVNTest._second_local_commit):
        (GitSVNTest._two_local_commits):
        (GitSVNTest.test_commit_with_message_git_commit_range):
        (GitSVNTest.test_upstream_branch):
        (GitSVNTest.test_create_patch_working_copy_only):
        (GitSVNTest.test_changed_files_local_plus_working_copy):
        (GitSVNTest.test_changed_files_working_copy_only):
        (GitSVNTest.test_changed_files_upstream):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2012-03-08  John Sullivan  <sullivan@apple.com>

        Made extract-localizable-strings ignore NSLocalizedFileSizeDescription

        Reviewed by Eric Carlson.

        * Scripts/extract-localizable-strings:
        Added NSLocalizedFileSizeDescription to allowed list of tokens that start
        with NSLocalized. Also improved an error message to include the troublesome token.

2012-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110115.
        http://trac.webkit.org/changeset/110115
        https://bugs.webkit.org/show_bug.cgi?id=80581

        broke test-webkitpy (Requested by philn-tp on #webkit).

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):

2012-03-08  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Added myself to watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2012-03-07  Jessie Berlin  <jberlin@apple.com>

        Clean Windows build fails after r110033
        https://bugs.webkit.org/show_bug.cgi?id=80553

        Rubber-stamped by Jon Honeycutt and Eric Seidel.

        Add the new JavaScriptCore include directory to some more vsprops files.

        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:

2012-03-07  Rafael Brandao  <rafael.lobo@openbossa.org>

        [NRWT] Fix --platform=qt-5.0 --new-baseline combo
        https://bugs.webkit.org/show_bug.cgi?id=72489

        Reviewed by Dirk Pranke.

        NRWT: The default platform name for Qt combined with --webkit-test-runner is now
        "qt-5.0-wk2" instead of "qt-linux" and that name is now prefered for tests.
        --platform will override the platform name and then we'll use it.

        ORWT: We check for qt version and use platform name "qt-4.8" if the version is lower
        than 5.0.0, and then we choose between "qt-5.0-wk1" and "qt-5.0-wk2". --platform will
        override it in the end.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_full_port_name):
        (QtPort.baseline_search_path):

2012-03-07  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] MiniBrowser on desktop does not react to click events
        https://bugs.webkit.org/show_bug.cgi?id=80314

        Reviewed by Kenneth Rohde Christiansen.

        Do not enable touch mocking on desktop mode.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2012-03-07  Ojan Vafai  <ojan@chromium.org>

        Automatically move to the next test after rebaseline in the results view
        https://bugs.webkit.org/show_bug.cgi?id=80527

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2012-03-07  Ojan Vafai  <ojan@chromium.org>

        garden-o-matic rebaseline is broken for ports that don't have a fallback port
        https://bugs.webkit.org/show_bug.cgi?id=80526

        Reviewed by Adam Barth.

        Passing "None" as the fallback port throws an error in "webkit-patch rebaseline-test"
        since there is no "None" port.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline):

2012-03-07  James Robinson  <jamesr@chromium.org>

        [chromium] Remove the TestWebPlugin's use of implicit FBO for offscreen contexts
        https://bugs.webkit.org/show_bug.cgi?id=80521

        Reviewed by Kenneth Russell.

        Switches TestWebPlugin from using a context created by WebViewClient::createGraphicsContext3D(..., false) over
        to an explicitly offscreen context with explicitly managed texture / FBO, so we can deprecate the
        renderDirectlyToHostWindow flag from WebViewClient::createGraphicsContext3D.

        Covered by platform/chromium/compositing/plugins/*

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::initialize):
        (TestWebPlugin::updateGeometry):
        (TestWebPlugin::initScene):
        (TestWebPlugin::destroyScene):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        (TestWebPlugin):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPlugin):

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] remove webkitpy dependency in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=80500

        Reviewed by Martin Robinson.

        Replace Executive calls with bare subprocess calls.

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

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r110059.

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

2012-03-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] race condition in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=80495

        Reviewed by Martin Robinson.

        Refactored the script to wait the a11y dbus service becomes
        available before starting the tests.

        * Scripts/run-gtk-tests:
        (TestRunner._lookup_atspi2_binary):
        (TestRunner):
        (TestRunner._wait_dbus_service_and_run):
        (TestRunner._wait_dbus_service_and_run.on_name_appeared):
        (TestRunner._wait_dbus_service_and_run.on_name_vanished):
        (TestRunner.run):
        (TestRunner.run.bailout):
        (TestRunner.run.run_for_real):

2012-03-07  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt] REGRESSION(r109575) Broke tap-to-zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=80425

        Reviewed by Simon Hausmann.

        Set startScreenPos in mock touch point

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):

2012-03-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Windows build fix.

        Reviewed by Tor Arne Vestbø.

        Pass the -j parameter only to "make", not "nmake".

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-03-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix compilation without QtQuick1
        https://bugs.webkit.org/show_bug.cgi?id=80503

        Reviewed by Tor Arne Vestbø.

        Introduce HAVE_QQUICK1 as feature and added haveQtModule
        as convenience function.

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

2012-03-07  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Add qmake config tests for JPEG and PNG library
        https://bugs.webkit.org/show_bug.cgi?id=80398

        Add JPEG and PNG library tests to config.tests and
        add error() abort to WebCore.pri if tests don't work.

        Reviewed by Tor Arne Vestbø.

        * qmake/config.tests/libjpeg/libjpeg.cpp: Added.
        (main):
        * qmake/config.tests/libjpeg/libjpeg.pro: Added.
        * qmake/config.tests/libpng/libpng.cpp: Added.
        (main):
        * qmake/config.tests/libpng/libpng.pro: Added.
        * qmake/sync.profile:

2012-03-07  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Build warning: Fix warn_unused_result warnings.
        https://bugs.webkit.org/show_bug.cgi?id=79194

        Reviewed by Filip Pizlo.

        Fixed build warning which is getting generated when not using return
        value of a fuction, especially declared with warn_unused_result
        attribute.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (printImage):

2012-03-07  Kangil Han  <kangil.han@samsung.com>

        [DRT] Remove PlainTextController implementations.
        https://bugs.webkit.org/show_bug.cgi?id=79959

        Reviewed by Hajime Morita.

        PlainTextController usages in existing tests have been
        replaced by internals API by bug 78570.
        So this patch will remove PlainTextController implementations
        to avoid further usage in new tests.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/PlainTextController.cpp: Removed.
        * DumpRenderTree/chromium/PlainTextController.h: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared):
        * DumpRenderTree/gtk/PlainTextController.cpp: Removed.
        * DumpRenderTree/gtk/PlainTextController.h: Removed.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/PlainTextController.h: Removed.
        * DumpRenderTree/mac/PlainTextController.mm: Removed.
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/PlainTextControllerQt.cpp: Removed.
        * DumpRenderTree/qt/PlainTextControllerQt.h: Removed.
        * GNUmakefile.am:

2012-03-06  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][DRT] Implements LayoutTestController's setPopupBlockingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=80137

        Reviewed by Eric Seidel.

        Adds implementation LayoutTestController's setPopupBlockingEnabled.
        To pass popup-blocking-click-in-iframe.html EventSender should not
        repeat click events in idler's function. EventSender allows to
        asynchronously send click event through ecore_idler_add.
        This event will be called repeatedly as long as it return true.
        Click event should be called only once by returning ECORE_CALLBACK_CANCEL.

        * DumpRenderTree/efl/EventSender.cpp:
        (sendMouseEvent): Changed return value from bool to void because it always returns true.
        (sendClick): Idler is deleted by returning ECORE_CALLBACK_CANCEL.
        (mouseDownCallback): Remove unnecessary checking of return value.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setPopupBlockingEnabled):

2012-03-06  Dirk Pranke  <dpranke@chromium.org>

        rebaseline_chromium_webkit_tests is obsolete and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=80347

        Reviewed by Tony Chang.

        * Scripts/rebaseline-chromium-webkit-tests: Removed.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py: Removed.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py: Removed.

2012-03-06  Dirk Pranke  <dpranke@chromium.org>

        test_start_cmd (webkitpy.layout_tests.servers.http_server_unittest.TestHttpServer) is broken
        https://bugs.webkit.org/show_bug.cgi?id=80468

        Unreviewed, build fix.

        Fixing a bug revealed by r80443 when we fixed filesystem.copyfile().

        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config):

2012-03-06  Dirk Pranke  <dpranke@chromium.org>

        remove chromium_gpu ports
        https://bugs.webkit.org/show_bug.cgi?id=80345

        Reviewed by Ojan Vafai.

        This change leaves in the 'graphics_type' distinction in the
        test_expectations; removing that will require more updates and a
        pass over test_expectations.txt, so I'm separating that out.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_qt):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_expectations):

2012-03-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        undefined reference to JSC::IdentifierTable::~IdentifierTable() on EFL port
        https://bugs.webkit.org/show_bug.cgi?id=80282

        Reviewed by Antonio Gomes.

        Remove transitive library dependencies; they are especially
        dangerous when one ends up linking against WTF, JSC and then WTF
        again, since some symbols will not be defined.

        Passing --no-copy-dt-needed-entries and --as-needed to the linker
        (which some recent Linux distros do by default) makes the issue
        even more evident.

        * DumpRenderTree/efl/CMakeLists.txt: Do not link directly to WTF,
        as the other libraries have the needed symbols. Explicitly link
        against fontconfig.

2012-03-06  Dean Jackson  <dino@apple.com>

        filter-build-webkit needs more filters
        https://bugs.webkit.org/show_bug.cgi?id=80440

        Reviewed by Joseph Pecoraro.

        Added as many missing filters as I could find for Apple
        builds. Plus a few minor style updates.

        * Scripts/filter-build-webkit:
        (printLine):

2012-03-06  Ojan Vafai  <ojan@chromium.org>

        Copying old baselines throws an error if the new directory doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=80443

        Reviewed by Adam Barth.

        Existing tests cover the new code with the fix to filesystem_mock.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.copyfile):
        Fix the mock to better match python's copyfile semantics.

        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner._create_html_baseline_files):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._copy_existing_baseline):

2012-03-05  Ojan Vafai  <ojan@chromium.org>

        Add a mechanism to rebaseline new ports
        https://bugs.webkit.org/show_bug.cgi?id=80355

        Reviewed by Adam Barth.

        For a test that's only failing on a new port, we want
        to first copy the existing result into the location for the
        port it's replacing in order to not break that port.

        For example, bringing up the chromium-lion port, if we just
        stick the results in the chromium-mac directory, the snow leopard
        will start failing. Instead, we first copy the existing result
        to the chromium-mac-snowleopard directory.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        (builder_path_for_port_name):
        (fallback_port_name_for_new_port):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest):
        (RebaselineTest._copy_existing_baseline):
        (RebaselineTest._rebaseline_test):
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_test):
        (TestRebaseline):
        (TestRebaseline.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):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.test_rebaseline):
        (GardeningServerTest):
        (GardeningServerTest.test_rebaseline_new_port):

2012-03-06  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80351
        InlineTextBox is using the wrong origin when calling 
        addRelevantRepaintedObject
        -and corresponding-
        <rdar://problem/10970221>

        Reviewed by Sam Weinig.

        This test has actually been broken since revision 109273. This change makes 
        the test pass again, and it makes it specifically exercise the fix for this 
        bug.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI::TEST):

        Adjust comments in the other tests to reflect the API changes from 109273.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp:
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFailsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp:
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFramesTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp:
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/lots-of-text.html: Added.

2012-03-06  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: add SpeechRecognitionError
        https://bugs.webkit.org/show_bug.cgi?id=80410

        Chromium: enable the runtime flag for scripted speech so we can run
        the layout tests for it.

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-03-06  Sami Kyostila  <skyostil@chromium.org>

        Enable universal newlines in chromium android layout test runner
        https://bugs.webkit.org/show_bug.cgi?id=80418

        Reviewed by Adam Barth.

        The Chromium Android layout test runner uses the 'adb' program to
        communicate with the Android device. Adb uses CRLF ('\r\n') to delimit
        output lines from the test runner, while the test expectation files are
        written with LF ('\n') delimiters. This causes the results to have
        spurious whitespace differences, making them more difficult to
        interpret.

        The fix is to enable universal newlines for the DumpRenderTree pipe,
        causing the output to only contain LF newlines like on other platforms.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._start):

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Revert r109900, it was completly busted

        HAVE_FOO does _not_ have a WTF_ prefix, go figure.

        We still leave in the HAVE(FOO) in QtInitializeTestFonts.cpp, instead
        of manual define checks.

        Reviewed by Ossy.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use config test to determine if the compiler supports -MD

        We used to assume that unix systems building against Qt5 would have
        a compiler that supported -MD. Although this was usually the case,
        we failed to take into account broken tools for distributed builds
        (e.g. teambuilder or icecream) which would end up producing .d files
        in the root of the build dir instead of along-side the object file.

        Now that we use a config-test to determine the support, we'll capture
        those cases, unless distributed builds are enabled after the initial
        build-webkit run.

        Reviewed by Csaba Osztrogonác.

        * Tools.pro:
        * qmake/config.tests/gccdepends/empty.cpp: Added.
        * qmake/config.tests/gccdepends/gccdepends.pro: Added.
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/sync.profile:

2012-03-06  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r109294): It broke the unittest of master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=80253

        Reviewed by Tor Arne Vestbø.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Use json instead of simplejson.
        (BuildBotConfigLoader._create_mock_passwords_dict):
        (BuildBotConfigLoader._mock_open):
        (BuildBotConfigLoader._add_dependant_modules_to_sys_modules):
        (BuildBotConfigLoader.load_config):

2012-03-06  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Qt API test buildstep throws exception after buildmaster update
        https://bugs.webkit.org/show_bug.cgi?id=80249

        This patch based on Peter Gal's work.

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunQtAPITests):
        (BuildAndTestFactory.__init__): Enable API tests on the Qt platform again.

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use correct define names for HAVE(FOO) style optional dependencies

        Reviewed by Simon Hausmann.
        Reviewed by Ossy.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add recursive qmake_all target if there are no subdirs to recurse

        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure clean builds are followed by make qmake && make if needed

        On non-GNUmake systems we have to run make qmake so that the generated
        sources are generated before we run qmake on the target pro files. This
        is achieved by using the 'incremental' target.

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-03-06  Filip Pizlo  <fpizlo@apple.com>

        DumpRenderTree should support preciseTime()
        https://bugs.webkit.org/show_bug.cgi?id=80397

        Reviewed by Gavin Barraclough.

        * DumpRenderTree/LayoutTestController.cpp:
        (preciseTimeCallback):
        (LayoutTestController::staticFunctions):

2012-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109887.
        http://trac.webkit.org/changeset/109887
        https://bugs.webkit.org/show_bug.cgi?id=80402

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

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109837.
        http://trac.webkit.org/changeset/109837
        https://bugs.webkit.org/show_bug.cgi?id=80399

        breaks Mac Productions builds, too late to try and fix it
        tonight (Requested by eseidel on #webkit).

        * Scripts/build-webkit:

2012-03-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use correct define names for HAVE(FOO) style optional dependencies

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp:
        (WebKit::initializeTestFonts):
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/features.prf:

2012-03-06  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Create EWS to build WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=80277

        Reviewed by Csaba Osztrogonác.

        * QueueStatusServer/model/queues.py:
        (Queue):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (QtWK2EWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest.test_builder_ewses):

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109733.
        http://trac.webkit.org/changeset/109733
        https://bugs.webkit.org/show_bug.cgi?id=80378

        It broke Qt5 build system (Requested by Ossy on #webkit).

        * Tools.pro:
        * qmake/config.tests/gccdepends/empty.cpp: Removed.
        * qmake/config.tests/gccdepends/gccdepends.pro: Removed.
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/sync.profile:

2012-03-05  Eric Seidel  <eric@webkit.org>

        Update JavaScriptCore files to use fully-qualified WTF include path
        https://bugs.webkit.org/show_bug.cgi?id=79960

        Reviewed by Adam Barth.

        Build WTF/WTF.xcodeproj by default on Mac.

        * Scripts/build-webkit:

2012-03-05  Dirk Pranke  <dpranke@chromium.org>

        There should be a way to disable optimizer in webkit-patch rebaseline-expectations
        https://bugs.webkit.org/show_bug.cgi?id=69590

        Reviewed by Ryosuke Niwa.

        Adds a --no-optimize flag to webkit-patch rebaseline-expectations
        to skip the 'optimize-expectations' step.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations.__init__):
        (RebaselineExpectations.execute):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2012-03-05  Kent Tamura  <tkent@chromium.org>

        [Chromium] Add new popup type: PagePopup
        https://bugs.webkit.org/show_bug.cgi?id=80106

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPopupMenu):

2012-03-05  Jessie Berlin  <jberlin@apple.com>

        Add myself as a reviewer.

        * Scripts/webkitpy/common/config/committers.py:
        Also, add my IRC nick so it is easier to find and yell at me.

2012-03-05  Robert Kroeger  <rjkroege@chromium.org>

        Correctly compute the positions of GestureScroll* events on
        Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=80075

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::reset):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender):

2012-03-05  Dirk Pranke  <dpranke@chromium.org>

        flakiness dashboard doesn't display baselines for virtual tests correctly
        https://bugs.webkit.org/show_bug.cgi?id=80341

        Reviewed by Ojan Vafai.

        If the test is part of a virtual test suite, we need to look for
        baselines in the underlying fallback path for the actual test
        being run, as well as baselines for the virtual version.

        This patch adds code to handle both branches and also pulls the
        mapping of the test suites up into a constant.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testLookupVirtualTestSuite):
        (testBaseTest):

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109760.
        http://trac.webkit.org/changeset/109760
        https://bugs.webkit.org/show_bug.cgi?id=80320

        Caused many GTK+ tests to crash (Requested by mrobinson on
        #webkit).

        * gtk/jhbuild.modules:

2012-03-05  Charlie Reis  <creis@chromium.org>

        [chromium] Pass WebNavigationPolicy to WebViewClient::createView
        https://bugs.webkit.org/show_bug.cgi?id=80057

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-03-05  Martin Robinson  <mrobinson@igalia.com>

        [soup] Crash while loading http://www.jusco.cn
        https://bugs.webkit.org/show_bug.cgi?id=68238

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Bumped the libsoup and glib dependencies
        in the jhbuild file.

2012-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109748.
        http://trac.webkit.org/changeset/109748
        https://bugs.webkit.org/show_bug.cgi?id=80296

        Made some tests crash, will fix and recommit (Requested by
        noamr on #webkit).

        * MiniBrowser/qt/main.cpp:
        (main):

2012-03-05  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] plugins/netscape-plugin-page-cache-works.html fails
        https://bugs.webkit.org/show_bug.cgi?id=74409

        Reviewed by Martin Robinson.

        Add support for overriding the page-cache-for-plugins preference
        through DumpRenderTreeSupport.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (booleanFromValue): A helper function to convert a string to boolean.
        (LayoutTestController::overridePreference):

2012-03-05  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Update Tools/DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=80287

        Reviewed by Antonio Gomes.

        Update so we are sure we can build our implementation of DRT.

        * DumpRenderTree/DumpRenderTree.h: include DumpRenderTreeBlackBerry.h.
        * DumpRenderTree/PixelDumpSupport.cpp: include PixelDumpSupportBlackBerry.h.
        * DumpRenderTree/blackberry/AccessibilityControllerBlackBerry.cpp:
        (AccessibilityController::addNotificationListener): add missing hook.
        (AccessibilityController::removeNotificationListener): add missing hook.
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::isSelectedOptionActive): add missing hook.
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect): add missing hook.
        (LayoutTestController::simulateDesktopNotificationClick): add missing hook.

2012-03-05  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] [WK2] Support threaded renderer in WK2
        https://bugs.webkit.org/show_bug.cgi?id=76661

        Remove the QML_NO_THREADED_RENDERER environment variable from MiniBrowser.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/main.cpp:
        (main):

2012-03-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        Unreviewed. Add myself to committer list.

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

2012-03-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use config test to determine if the compiler supports -MD

        We used to assume that unix systems building against Qt5 would have
        a compiler that supported -MD. Although this was usually the case,
        we failed to take into account broken tools for distributed builds
        (e.g. teambuilder or icecream) which would end up producing .d files
        in the root of the build dir instead of along-side the object file.

        Now that we use a config-test to determine the support, we'll capture
        those cases, unless distributed builds are enabled after the initial
        build-webkit run.

        Reviewed by Csaba Osztrogonác.

        * Tools.pro:
        * qmake/config.tests/gccdepends/empty.cpp: Added.
        * qmake/config.tests/gccdepends/gccdepends.pro: Added.
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:
        * qmake/sync.profile:

2012-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        Qt API test buildstep throws exception after buildmaster update
        https://bugs.webkit.org/show_bug.cgi?id=80249

        Reviewed by Zoltan Herczeg.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Disable API tests on the Qt bot temporarily.
        (BuildAndTestFactory.__init__):

2012-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Unit tests are noisy when run under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=80241

        Reviewed by Philippe Normand.

        Force the 'memory' backend in GSettings so that each unit
        test doesn't produce a warning when it's forced to fall back
        to the 'memory' backend.

        * Scripts/run-gtk-tests:
        (TestRunner.run): Force the 'memory' backend.

2012-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] "Console: undefined @0: ReferenceError: Can't find variable: WebInspector" during testwebinspector
        https://bugs.webkit.org/show_bug.cgi?id=80235

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner.run): Use the WEBKIT_INSPECTOR_PATH environment variable so that
        inspector resources path determination is shared by all tests.

2012-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] REGRESSION: r108278 broke some tests that expect focus
        https://bugs.webkit.org/show_bug.cgi?id=79084

        Reviewed by Philippe Normand.

        Grab focus when dumping test results and also when sending
        events. During the course of testing, the WebView may lose
        focus and this seems to snap it back when tests demand it.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump): Grab focus.
        * DumpRenderTree/gtk/EventSender.cpp:
        (dispatchEvent): Ditto.

2012-03-04  Charles Wei  <charles.wei@torchmobile.com.cn>

        Unreviewed, Add myself to committer list.
        https://bugs.webkit.org/show_bug.cgi?id=80232

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

2012-03-04  Anders Carlsson  <andersca@apple.com>

        Newer versions of clang fail to compile WebKit.

        Fix build.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (descriptionOfValue):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::selectedTextRange):
        * DumpRenderTree/mac/EditingDelegate.mm:
        (-[DOMRange dump]):
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:unableToImplementPolicyWithError:frame:]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSError _drt_descriptionSuitableForTestResult]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::descriptionOfValue):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::selectedTextRange):

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

        [Qt] Fix static_libs_as_shared build
        https://bugs.webkit.org/show_bug.cgi?id=80214

        Reviewed by Tor Arne Vestbø.

        * WebKitTestRunner/qt/main.cpp:
        (main): Set the correct environment variable for choosing the theme in the
        web process.

2012-03-03  Hans Wennborg  <hans@chromium.org>

        Implement Speech JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=80019

        Reviewed by Adam Barth.

        Add ENABLE_SCRIPTED_SPEECH.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-03-02  Alexey Proskuryakov  <ap@apple.com>

        Fix commit queue, remove duplicate entry.

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

2012-03-02  Stephen Chenney  <schenney@chromium.org>

        Unreviewed, add myself as a committer

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

2012-03-02  Ojan Vafai  <ojan@chromium.org>

        Add the Chromium Lion canary bot to the flakiness dashboard.
        * TestResultServer/static-dashboards/builders.js:

2012-03-02  Dirk Pranke  <dpranke@chromium.org>

        links for virtual tests are broken in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=80180

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        (linkHTMLToOpenWindow):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testLinkHTMLToOpenWindow): added.

2012-03-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] security/block-test.html baselines differ from mac
        https://bugs.webkit.org/show_bug.cgi?id=78343

        Reviewed by Martin Robinson.

        Improved the FrameLoader error heuristics to match mac behavior a
        bit more.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (pathFromSoupURI): Handle ftp urls the same as http urls.
        (descriptionSuitableForTestResult): Map WebKitPolicyError to WebKitErrorDomain.

2012-03-02  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix typo in patch committed in r109575

        Unreviewed typo fix.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify): Cache the position
        in floating point coordinates.

2012-03-02  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Infinite loop on history navigation, when panning
        https://bugs.webkit.org/show_bug.cgi?id=79119

        Reviewed by Simon Hausmann.

        Make the touch mocking more robust by creating touch events
        directly and sending them synchronously to the browser window.
        If the sent touch event was not accepted we propagate the
        original mouse event to its target.
        This way we make sure we only send either a touch or a mouse
        event and do not end up in an infinite loop between our mocking
        code and the Qt5 automatic mouse event synthesizing.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/BrowserWindow.h:
        (BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (touchRectForPosition):
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):

2012-03-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use 'all' as default target when debug_and_release is in effect

        When debug_and_release is enabled, in combination with build_all,
        qmake will generate an aggregate makefile that calls make on both
        the debug and the release makefiles, but with the 'all' target.

        In this case we can't use 'first' as the default target, as the
        extra targets would then not be run, so we append extra targets
        to 'all' instead.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-03-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure activeBuildConfig() returns the right config

        Using isActiveConfig fails, as that only checks if the given
        argument is in CONFIG, not the order.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/functions.prf:

2012-03-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix tests run with WTR not using QStyle theme
        https://bugs.webkit.org/show_bug.cgi?id=80147

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/qt/main.cpp:
        (main): Set environment variable for web process to use QStyle theme.

2012-03-02  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, remove debug print call.

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

2012-03-02  Robert Kroeger  <rjkroege@chromium.org>

        Updated EventSender to send complete gesture events.
        https://bugs.webkit.org/show_bug.cgi?id=80075

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::gestureEvent): set additional parameters in sent events.

2012-03-01  Kalev Lember  <kalevlember@gmail.com>

        WebKitTestRunner: Explicitly include unistd.h for gcc 4.7
        https://bugs.webkit.org/show_bug.cgi?id=80033

        Reviewed by Gustavo Noronha Silva.

        GCC 4.7 no longer includes unistd.h from most of the standard C++
        header files, so we need to explicitly include it for getcwd().

        * WebKitTestRunner/TestInvocation.cpp: Make sure unistd.h gets included
        not only on Mac, but on all Unix platforms.

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        Actually look at the args in driver_input :(.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test):

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        Fix typo in flag used to run gpu virtual suites.

        Unreviewed, build fix.

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

2012-03-01  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r109317.
        http://trac.webkit.org/changeset/109317

        Let's try watchlists again now that we're using a pure git
        working copy

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: test_run_test_pause_before_testing is failing after r109482
        https://bugs.webkit.org/show_bug.cgi?id=80084

        Unreviewed, build fix.

        Fixes the test string compare to ignore the time spent running
        the tests.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        nrwt: virtual tests aren't being run
        https://bugs.webkit.org/show_bug.cgi?id=80083

        Reviewed by Eric Seidel.

        If we tried to run all of the tests by default (and
        didn't specify any paths), the virtual tests weren't
        picked up.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._virtual_tests):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):

2012-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should report the test runtime
        https://bugs.webkit.org/show_bug.cgi?id=80078

        Reviewed by Hajime Morita.

        Record and output the aggreated test run time.

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

2012-03-01  Michael Nordman  <michaeln@google.com>

        [chromium] Use webkit_support to create session storage namespaces in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=79933

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createSessionStorageNamespace):

2012-03-01  Dirk Pranke  <dpranke@chromium.org>

        nrwt: test_isfile, test_isdir, and test_exists don't work for virtual tests
        https://bugs.webkit.org/show_bug.cgi?id=80048

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.test_isfile):
        (Port.test_isdir):
        (Port):
        (Port.test_exists):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_test_exists):
        (PortTest):
        (PortTest.test_test_isfile):
        (PortTest.test_test_isdir):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_virtual):

2012-03-01  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Avoid building any parts of WebKitTestRunner when WK2 is disabled
        https://bugs.webkit.org/show_bug.cgi?id=80031

        Reviewed by Gustavo Noronha Silva.

        Only build the libTestRunnerInjectedBundle.la convenience library when
        ENABLE_WEBKIT2 is defined.

        * WebKitTestRunner/GNUmakefile.am:

2012-03-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, second attempt to fix GTK NRWT after r109242.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):

2012-03-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK NRWT build fix attempt after r109242.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver._start):

2012-03-01  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r109036): run-bindings-tests fails because resolve-supplemental.pl was renamed
        https://bugs.webkit.org/show_bug.cgi?id=80008

        Reviewed by Adam Barth.

        In r109036, I forgot to rename "resolve-supplemental.pl" in run-bindings-tests
        to "preprocess-idls.pl". This patch renames it.

        Test: Confirm that run-bindings-tests runs.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):

2012-02-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle
        https://bugs.webkit.org/show_bug.cgi?id=78047

        Reviewed by Kenneth Rohde Christiansen.

        Send events for the webview through the QQuickCanvas instead of directly to the item. Direct
        sending to the item requires the QObject::event re-implementation to dispatch to the correct
        event handling function. However QQuickItem::event doesn't do that. Instead QQuickCanvas calls
        the event handlers directly, and with the removal of our own dispatching we need to go through
        that code path.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::sendEvent):
        (WTR::PlatformWebView::postEvent):

2012-02-29  Adam Barth  <abarth@webkit.org>

        Disable watchlist.  It's been spamming CCs.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        need to clone the gpu baselines and expectations into the new "virtual" dir
        https://bugs.webkit.org/show_bug.cgi?id=79956

        Reviewed by Adam Barth.

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

2012-02-29  Mark Rowe  <mrowe@apple.com>

        Switch to using json rather than simplejson now that the master is using Python 2.7.

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

2012-02-29  David Levin  <levin@chromium.org>

        [chromium] Add the ability to turn off autoresize.
        https://bugs.webkit.org/show_bug.cgi?id=77452

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Expose a way to turn off auto-resize.
        (LayoutTestController::enableAutoResizeMode): Ditto and adjust to new WebKit api.
        (LayoutTestController::disableAutoResizeMode):  Ditto.
        * DumpRenderTree/chromium/LayoutTestController.h: Ditto.

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make --print trace work with virtual tests
        https://bugs.webkit.org/show_bug.cgi?id=79952

        Reviewed by Adam Barth.

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

2012-02-28  Brian Weinstein  <bweinstein@apple.com>

        WebKit2: didNewFirstVisuallyNonEmptyLayout should be sent to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=79849

        Reviewed by Beth Dakin.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add an entry to the struct.

2012-02-29  Lucas Forschler  <lforschler@apple.com>

        Removed unused Apple buildslaves from the master configuration
        https://bugs.webkit.org/show_bug.cgi?id=79925

        Reviewed by Stephanie Lewis.

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

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: implement simple 'virtual test suite' support
        https://bugs.webkit.org/show_bug.cgi?id=79737

        Reviewed by Adam Barth.

        Add very basic support for 'virtual test suites' to NRWT:
        a virtual suite is a directory that may contain new baselines,
        contains a pointer to a "base" directory of tests, and an
        optional list of command line arguments to pass to DRT;
        it gives us a way to run all of the tests in a given directory
        multiple times with multiple (potentially differing) sets of
        results and baselines.

        This patch implements the support needed for this feature, and
        some basic tests, but no actual port will use the feature yet.

        This is probably the simplest implementation possible - the
        list of virtual suites will be hard-coded into the port's
        implementation. One can imagine a more data-driven approach
        where the suite instructions are stored in a manifest file
        either in LayoutTests (all suites in one file), or per-port,
        or per-directory. If this feature ends up being useful we
        should probably add something like that so people don't have
        to hunt around in the code to add suites.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.expected_filename):
        (Port.tests):
        (Port):
        (Port._real_tests):
        (Port._driver_class):
        (Port.virtual_test_suites):
        (Port.virtual_suite):
        (Port.virtual_suite.VirtualTestSuite):
        (Port.virtual_suite.VirtualTestSuite.__init__):
        (Port.virtual_suite.VirtualTestSuite.__repr__):
        (Port.populated_virtual_test_suites):
        (Port._virtual_tests):
        (Port.lookup_virtual_test_base):
        (Port.lookup_virtual_test_args):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_with_skipped_directories):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverInput.__init__):
        (DriverProxy.run_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.virtual_test_suites):
        (TestDriver.run_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_all):
        (MainTest.test_virtual):

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: support more than two drivers in DriverProxy
        https://bugs.webkit.org/show_bug.cgi?id=79736

        Reviewed by Adam Barth.

        Now that we can support per-test command lines for
        Drivers, modify DriverProxy to keep a map of running
        drivers for each needed command-line; this will allow
        us to transparently maintain a pool of appropriately
        configured DRTs without having to constantly start and stop
        them.

        Note that this potentially raises a garbage collection
        problem - the number of running DRTs will grow with the
        number of different sets of command line args. For now
        this is no worse than the current code - if you're running
        with pixel tests, you will only need one DRT per worker,
        and if you aren't, you'll need two (one for text-only tests,
        and one for reftests).

        An alternative would be to only ever have one running driver,
        and restart the driver as the command line changes, but this
        might (?) slow down execution in the text-only case - we
        should benchmark this because it would be simpler and possibly
        allow us to eliminate DriverProxy altogether.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.__init__):
        (DriverProxy):
        (DriverProxy._make_driver):
        (DriverProxy.run_test):
        (DriverProxy.has_crashed):
        (DriverProxy.stop):
        (DriverProxy.cmd_line):
        (DriverProxy._cmd_line_as_key):

2012-02-29  Adrienne Walker  <enne@google.com>

        Unreviewed, add myself as a reviewer

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

2012-02-29  Greg Billock  <gbillock@google.com>

        Add more tests for web intents
        https://bugs.webkit.org/show_bug.cgi?id=79527

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::currentIntentRequest):

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        nrwt: port/Driver needs to support per-test command line args
        https://bugs.webkit.org/show_bug.cgi?id=79733

        Reviewed by Adam Barth.

        As part of removing the 'gpu' configurations and adding support
        for 'virtual test suites', the Driver classes need to support
        per-test command lines (since different tests will need to be
        run with different command line options).

        The per-test args are not yet used, so this change should have
        no visible effects and need no additional testing.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.driver_cmd_line):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.cmd_line):
        (ChromiumDriver._start):
        (ChromiumDriver.start):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_two_drivers.MockDriver.cmd_line):
        (ChromiumDriverTest):
        (ChromiumDriverTest.test_two_drivers):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.cmd_line):
        (DriverProxy.__init__):
        (DriverProxy.start):
        (DriverProxy.cmd_line):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.test_virtual_driver_methods):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.cmd_line):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort._path_to_driver):
        (TestDriver.cmd_line):
        (TestDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.cmd_line):
        (WebKitDriver._start):
        (WebKitDriver.run_test):
        (WebKitDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_no_timeout):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_pause_before_testing):

2012-02-29  Dirk Pranke  <dpranke@chromium.org>

        perftestsrunner can call printer.write() after printer.cleanup()
        https://bugs.webkit.org/show_bug.cgi?id=79872

        Reviewed by Ryosuke Niwa.

        This patch fixes a unittest that was incorrectly calling
        PerfTestsRunner.run() twice (which led to a weird state in the
        printer object).

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_run_with_upload_json):

2012-02-29  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] WebKitTestRunner should use 480x360 sized view for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=76546

        Reviewed by Simon Hausmann.

        Revert the workaround introduced in r107868 and reintroduce
        the qml binding so we can test the code path that we are more
        interested in. The reason that it did not work before is that
        we don't have an active platform window which we now workaround
        by propagating the resize through QWindowSystemInterface.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-29  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] Small fix for cross compilation to not generate gtkdoc.

        Rubber-stamped by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (isCrossCompilation):

2012-02-28  Lucas Forschler  <lforschler@apple.com>

        Fix a typo in config.json
        linx -> linux
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2012-02-28  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        [Qt] Allow read/write to the WebView.url property
        https://bugs.webkit.org/show_bug.cgi?id=77554

        Reviewed by Tor Arne Vestbø.

        Fix MiniBrowser to use WebView.url property and remove WebView.load usage.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-02-28  Dan Winship  <danw@gnome.org>

        [GTK] make tests explicitly request GSettingsBackendMemory
        https://bugs.webkit.org/show_bug.cgi?id=79788

        Reviewed by Martin Robinson.

        Explicitly request the fallback memory-based GSettings backend; if
        other backends are available then we don't want to use them,
        because they would make tests depend on the user's preferences.
        And if other backends aren't available, we don't need glib to
        print a warning about that fact.

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

2012-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109110.
        http://trac.webkit.org/changeset/109110
        https://bugs.webkit.org/show_bug.cgi?id=79806

        webkitpy makes it too easy to add wkb.ug URLs to ChangeLogs
        (Requested by aroben on #webkit).

        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id):
        (parse_bug_id_from_changelog):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/urls.py:

2012-02-28  Adam Roben  <aroben@webkit.org>

        Add my new email address

        Fixes <http://wkb.ug/79797> Adam Roben's email address in webkitpy is soon to be incorrect

        Reviewed by Anders Carlsson.

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

2012-02-28  Adam Roben  <aroben@apple.com>

        Teach webkitpy about wkb.ug URLs

        Fixes <http://wkb.ug/79799> webkit-patch can't find bug numbers from ChangeLog entries that
        use wkb.ug URLs

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id):
        (parse_bug_id_from_changelog):
        Fall back to the tiny URL format if neither the short nor long URL formats work.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (ChangeLogTest.test_parse_bug_id_from_changelog): Added tests for the above changes.

        * Scripts/webkitpy/common/config/urls.py: Added bug_url_tiny, which can be used to match
        wkb.ug URLs.

2012-02-28  János Badics  <dicska@gmail.com>

        [Qt] build-webkit does not detect the number of CPUs
        https://bugs.webkit.org/show_bug.cgi?id=76445

        Based on Seo Sanghyeon's work (modification:
        Automatically determine the number of CPUs for make
        only if -j make argument haven't already been specified.)

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-02-28  Kent Tamura  <tkent@chromium.org>

        Update a pattern for forms files of watchlist
        https://bugs.webkit.org/show_bug.cgi?id=79767

        Reviewed by Kentaro Hara.

        * Scripts/webkitpy/common/config/watchlist:
        Catches the following files with the "Forms" pattern.
        - HTMLDatListElement.*
        - HTMLKeygenElement.*
        - HTMLLegendElement.*
        - HTMLOutputElement.*
        - FormAssociatedElement.*
        - SliderThumbElement.*
        - TextControlInnerElements.*
        - RenderFileUploadControl.*

2012-02-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109041.
        http://trac.webkit.org/changeset/109041
        https://bugs.webkit.org/show_bug.cgi?id=79741

        Broke Chromium Win build (Requested by bashi on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-02-27  James Robinson  <jamesr@chromium.org>

        [chromium] Remove media tests from ChromiumGpu configurations
        https://bugs.webkit.org/show_bug.cgi?id=79720

        Reviewed by Adam Barth.

        We no longer need to run the media/ tests in both GPU and non-GPU configurations since we can exercise the GPU
        composited playback path via tests in the compositing/ directory.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_default_tests_paths):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.test_default_tests_paths):
        (ChromiumGpuTest.test_test_files):

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

        nrwt: log multiline stderr/crash output properly
        https://bugs.webkit.org/show_bug.cgi?id=79722

        Reviewed by Adam Barth.

        This cleans up some nits in the log output to make things
        slightly easier to read (every line gets timestamped, etc.).

        Also tweaks the log message for pixel hash mismatches.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error):
        (SingleTestRunner._compare_image):

2012-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Touch the master.cfg to force a reconfig.

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

2012-02-27  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Upstream BlackBerry API web page related files
        https://bugs.webkit.org/show_bug.cgi?id=74380

        Reviewed by Antonio Gomes.

        Adapt to the removing of WebPage::mainFrame(), use
        DumpRenderTreeSupport::corePage() and its mainFrame() instead.

        No new tests as this patch doesn't change behavior.

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

2012-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add Windows and Linux Chromium perf bots
        https://bugs.webkit.org/show_bug.cgi?id=79418

        Reviewed by Tony Chang.

        Add Chromium Win and Linux perf bots. Also replace Chromium Mac by
        the dedicated perf bot slave (uses the same hardware).

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

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

        Undefined variable 'current' when running chromium_android.py
        https://bugs.webkit.org/show_bug.cgi?id=79696

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._read_prompt):

2012-02-27  Greg Billock  <gbillock@google.com>

        Add more tests for web intents
        https://bugs.webkit.org/show_bug.cgi?id=79527

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::sendWebIntentResponse):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):
        (WebViewHost::currentIntentRequest):

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

        Chromium-Android layout test script: the adb shell prompt is not always '# '
        https://bugs.webkit.org/show_bug.cgi?id=79506

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver._read_prompt):

2012-02-27  Dan Bernstein  <mitz@apple.com>

        Added a test for <rdar://problem/9557598> REGRESSION (WebKit2): Non-activating links sometimes don’t work
        https://bugs.webkit.org/show_bug.cgi?id=79607

        Reviewed by Adele Peterson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm: Added.
        (TestWebKitAPI::AcceptsFirstMouse::url):
        (TestWebKitAPI::AcceptsFirstMouse::didLoadURL):
        (TestWebKitAPI::AcceptsFirstMouse::runTest):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/mac/acceptsFirstMouse.html: Added.

2012-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Fix typo.

2012-02-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use USE() macro instead of ENABLE() for using the Qt image decoder

        Reviewed by Kenneth Rohde Christiansen..

        * qmake/mkspecs/features/features.prf:

2012-02-27  Hao Zheng  <zhenghao@chromium.org>

        Add a ChromiumGpuAndroid port.
        https://bugs.webkit.org/show_bug.cgi?id=79628

        Reviewed by Adam Barth.

        Android does have a gpu port, so revert r107697.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (ChromiumGpuAndroidPort):
        (ChromiumGpuAndroidPort.__init__):
        (ChromiumGpuAndroidPort.baseline_search_path):
        (ChromiumGpuAndroidPort.default_child_processes):
        (ChromiumGpuAndroidPort.tests):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):

2012-02-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change Build bot with BuildAndTest bot for EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=77518

        Reviewed by Ryosuke Niwa.

        EFL build bot starts to support layout test.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):
        * Scripts/webkitdirs.pm: Enable SHARED_CORE option when ENABLE_DRT is enable in EFL port.
        (generateBuildSystemFromCMakeProject):

2012-02-24  Darin Fisher  <darin@chromium.org>

        Add watchlist for ChromiumPlatformApi matching Source/Platform/chromium/public/

        Reviewed by James Robinson.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: changelog_unittest test_fuzzy_reviewer_match is slow
        https://bugs.webkit.org/show_bug.cgi?id=79258

        Reviewed by Ryosuke Niwa.

        Split the fuzzy matching into separate functions so that they
        can be sharded and run in parallel.

        Also, fix a bug in the svn_blame_regexp that was causing us
        to require ChangeLog lines to have at least one space after the
        author, making the code require trailing whitespace in the
        changelog in some places (this was making my life harder because
        I have my text editor set to strip trailing whitespace in python
        files, and that was causing test_parse_log_entries_from_changelog() to fail
        when the whitespace on line 275 was removed).

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_fuzzy_reviewer_match__none):
        (test_fuzzy_reviewer_match_adam_barth):
        (test_fuzzy_reviewer_match_darin_adler_et_al):
        (test_fuzzy_reviewer_match_dimitri_glazkov):
        (test_fuzzy_reviewer_match_george_staikos):
        (test_fuzzy_reviewer_match_mark_rowe):

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: committers_unittest fuzzy matching is really slow
        https://bugs.webkit.org/show_bug.cgi?id=79179

        Reviewed by Ryosuke Niwa.

        Break the fuzzy matching tests into individual routines for
        each contributor so that the intent is a little clearer, so
        that it's easier to test individual names (and identify
        duplicate tests), and so that we can eventually run
        them in parallel.

        Also, mark most of them as 'integration' tests so that they
        can be skipped if we want to go fast (we leave a few as
        regular tests for functional coverage).

        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest):
        (CommittersTest.test_contributors_by_fuzzy_match):
        (CommittersTest.integration_test_contributors__none):
        (CommittersTest.integration_test_contributors__none_2):
        (CommittersTest.integration_test_contributors__none_3):
        (CommittersTest.integration_test_contributors_ada_chan):
        (CommittersTest.integration_test_contributors_adele_peterson):
        (CommittersTest.integration_test_contributors_alexey_proskuryakov):
        (CommittersTest.integration_test_contributors_alice_liu):
        (CommittersTest.integration_test_contributors_alp_toker):
        (CommittersTest.integration_test_contributors_anders_carlsson):
        (CommittersTest.integration_test_contributors_antti_koivisto):
        (CommittersTest.integration_test_contributors_beth_dakin):
        (CommittersTest.integration_test_contributors_brady_eidson):
        (CommittersTest.integration_test_contributors_cameron_zwarich):
        (CommittersTest.integration_test_contributors_chris_blumenberg):
        (CommittersTest.integration_test_contributors_dan_bernstein):
        (CommittersTest.integration_test_contributors_dan_bernstein_2):
        (CommittersTest.integration_test_contributors_darin_adler):
        (CommittersTest.integration_test_contributors_david_harrison):
        (CommittersTest.integration_test_contributors_david_harrison_2):
        (CommittersTest.integration_test_contributors_david_hyatt):
        (CommittersTest.integration_test_contributors_david_kilzer):
        (CommittersTest.integration_test_contributors_don_melton):
        (CommittersTest.integration_test_contributors_eric_seidel):
        (CommittersTest.integration_test_contributors_geoffrey_garen):
        (CommittersTest.integration_test_contributors_greg_bolsinga):
        (CommittersTest.integration_test_contributors_holger_freyther):
        (CommittersTest.integration_test_contributors_jon_sullivan):
        (CommittersTest.integration_test_contributors_jon_honeycutt):
        (CommittersTest.integration_test_contributors_joseph_pecoraro):
        (CommittersTest.integration_test_contributors_ken_kocienda):
        (CommittersTest.integration_test_contributors_kenneth_russell):
        (CommittersTest.integration_test_contributors_kevin_decker):
        (CommittersTest.integration_test_contributors_kevin_mccullough):
        (CommittersTest.integration_test_contributors_lars_knoll):
        (CommittersTest.integration_test_contributors_lars_weintraub):
        (CommittersTest.integration_test_contributors_maciej_stachowiak):
        (CommittersTest.integration_test_contributors_mark_rowe):
        (CommittersTest.integration_test_contributors_nikolas_zimmermann):
        (CommittersTest.integration_test_contributors_oliver_hunt):
        (CommittersTest.integration_test_contributors_rniwa):
        (CommittersTest.disabled_integration_test_contributors_simon_fraser):
        (CommittersTest.integration_test_contributors_steve_falkenburg):
        (CommittersTest.integration_test_contributors_sam_weinig):
        (CommittersTest.integration_test_contributors_tim_omernick):
        (CommittersTest.integration_test_contributors_timothy_hatcher):
        (CommittersTest.integration_test_contributors_tor_arne_vestbo):
        (CommittersTest.integration_test_contributors_vicki_murley):
        (CommittersTest.integration_test_contributors_zack_rusin):

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: should autoinstall coverage
        https://bugs.webkit.org/show_bug.cgi?id=79535

        Reviewed by Eric Seidel.

        We should automatically print the coverage report after the run, too.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_coverage):

2012-02-24  Pablo Flouret  <pablof@motorola.com>

        Fix copypasta in build-webkit's --vibration option description
        https://bugs.webkit.org/show_bug.cgi?id=79528

        Reviewed by Andreas Kling.

        * Scripts/build-webkit:

2012-02-24  Antonio Gomes  <agomes@rim.com>

        Adding myself to ScrollingCoordinator watchlist
        https://bugs.webkit.org/show_bug.cgi?id=79525

        Reviewed by Rob Buis.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Darin Fisher  <darin@chromium.org>

        Update watchlist for ChromiumPublicApi to include Platform/chromium/public/

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: config_unittest is sensitive to other tests that might've already run
        https://bugs.webkit.org/show_bug.cgi?id=79382

        Reviewed by Adam Barth.

        If another test runs prior to config_unittest and pokes the
        cached configuration, the first test in config_unittest might
        fail; the tearDown() will then allow subsequent tests to pass.
        Clearing the configuration prior to each test makes things
        slightly slower but safer.

        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.setUp):

2012-02-24  David Kilzer  <ddkilzer@apple.com>

        Use xcrun to find compiler paths for Generate Derived Sources build phase script
        <http://webkit.org/b/79512>

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        (Generate Derived Sources): Use xcrun to find the path to the
        compiler since that works on both iOS and OS X.

2012-02-24  James Robinson  <jamesr@chromium.org>

        Create a watchlist for ScrollingCoordinator changes
        https://bugs.webkit.org/show_bug.cgi?id=79511

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/watchlist:

2012-02-24  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][DRT] Implement setValueForUser and setAutofilled.
        https://bugs.webkit.org/show_bug.cgi?id=79237

        Reviewed by Andreas Kling.

        Adds missing implementation setValueForUser and setAutofilled to EFL's LayoutTestController.
        Those implementations are related with input fields and allow to pass following tests:
        fast/forms/onchange-setvalueforuser.html
        fast/forms/input-autofilled.html
        fast/forms/reset-autofilled.html

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setValueForUser):
        (LayoutTestController::setAutofilled):

2012-02-24  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow to use WebCore imagedecoders
        https://bugs.webkit.org/show_bug.cgi?id=32410

        Add ENABLE_QT_IMAGE_DECODER macro, it's enabled by default.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-02-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add Qt5 way to force 96 DPI for tests
        https://bugs.webkit.org/show_bug.cgi?id=79364

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2012-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser should reload the view then the reload button is clicked
        https://bugs.webkit.org/show_bug.cgi?id=79472

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadCallback): Call webkit_web_view_reload().
        (browser_window_init): Connect reload item clicked even to
        reloadCallback instead of activateUriEntryCallback.

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Add performance tests for DOM attribute getters and setters
        https://bugs.webkit.org/show_bug.cgi?id=79208

        Reviewed by Ryosuke Niwa.

        We want to allow perf tests to output info messages
        that do not affect the test results. To accomplish this,
        this patch modifies perftestsrunner.py so that it ignores
        a line that starts from "Info:".

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

2012-02-24  Andrew Lo  <anlo@rim.com>

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

        Enable requestAnimationFrame for BlackBerry.

        Reviewed by Rob Buis.

        * Scripts/build-webkit:

2012-02-24  Adam Barth  <abarth@webkit.org>

        style-queue tries to apply the patch twice
        https://bugs.webkit.org/show_bug.cgi?id=79459

        Reviewed by Eric Seidel.

        Previously, we applied the patch using both apply-patch and
        check-style.  This patch introduces a check-style-local to mirror the
        apply-watchlist-local, which operates on the current working diff.

        This patch also cleans up some other bugs I found by running the queue
        locally for a while.  The queue still prints out a slightly
        less-than-ideal message on the bugs when it find an error, but it's ok
        for now.  We'll need to iterate a bit.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask.validate):
        (StyleQueueTask._check_style):
        * Scripts/webkitpy/tool/commands/download.py:
        (CheckStyleLocal):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._default_expected_stderr):
        (EarlyWarningSytemTest._test_testing_ews):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractReviewQueue.handle_script_error):
        (StyleQueue.review_patch):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest.assert_queue_outputs):

2012-02-23  Adam Barth  <abarth@webkit.org>

        should_proceed_with_work_item is unused and can be removed
        https://bugs.webkit.org/show_bug.cgi?id=79416

        Reviewed by Eric Seidel.

        We used to use this function to check whether the tree is red.  Now, we
        don't use external measures of whether to proceed with work items.
        Instead, we analyze them with the idea in mind that the tree might be
        red.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngineDelegate.next_work_item):
        (QueueEngine.run):
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (LoggingDelegate):
        (LoggingDelegate.next_work_item):
        (RaisingDelegate.process_work_item):
        (QueueEngineTest.test_terminating_error):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.__init__):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.next_work_item):
        (FeederQueue.next_work_item):
        (CommitQueue.next_work_item):
        (AbstractReviewQueue.next_work_item):
        (StyleQueue.__init__):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (FeederQueueTest.test_feeder_queue):
        (CommitQueueTest.test_commit_queue):
        (test_commit_queue_failure):
        (test_commit_queue_failure_with_failing_tests):
        (test_rollout):
        (test_rollout_lands):
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest.assert_queue_outputs):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot.next_work_item):

2012-02-23  Adrienne Walker  <enne@google.com>

        Unreviewed, add Stephen Chenney to committers.py as a contributor.

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

2012-02-23  Adam Barth  <abarth@webkit.org>

        style-queue logs bogus messages to the QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=79424

        Reviewed by Eric Seidel.

        Copy/paste error.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py:
        (StyleQueueTask._check_style):
        (StyleQueueTask._apply_watch_list):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2012-02-23  Eric Seidel  <eric@webkit.org>

        Use self._filesystem in more places in the SCM classes
        https://bugs.webkit.org/show_bug.cgi?id=79415

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        (SCMDetectorTest.test_detect_scm_system):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.find_checkout_root):
        (Git.to_object_name):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.__init__):
        (SCM.in_working_directory):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.find_uuid):
        (SVN.find_checkout_root):

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108685.
        http://trac.webkit.org/changeset/108685
        https://bugs.webkit.org/show_bug.cgi?id=79414

        Broke Chromium builds (Requested by enne on #webkit).

        * qmake/mkspecs/features/features.prf:

2012-02-23  Adam Barth  <abarth@webkit.org>

        style-queue shouldn't spam bugs if it fails to update its working copy
        https://bugs.webkit.org/show_bug.cgi?id=79412

        Reviewed by Eric Seidel.

        This patch moves style-queue over to the new PatchAnalysisTask
        infrastructure, which is smarter about retrying patches when update
        fails.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_and_throw_if_fail):
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (UnableToApplyPatch):
        (UnableToApplyPatch.__init__):
        (PatchAnalysisTask.__init__):
        * Scripts/webkitpy/tool/bot/stylequeuetask.py: Added.
        (StyleQueueTaskDelegate):
        (StyleQueueTaskDelegate.parent_command):
        (StyleQueueTask):
        (StyleQueueTask.validate):
        (StyleQueueTask._check_style):
        (StyleQueueTask._apply_watch_list):
        (StyleQueueTask.run):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        (StyleQueue):
        (StyleQueue.should_proceed_with_work_item):
        (StyleQueue.review_patch):
        (StyleQueue.run_command):
        (StyleQueue.command_passed):
        (StyleQueue.command_failed):
        (StyleQueue.expected_failures):
        (StyleQueue.refetch_patch):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (StyleQueueTest.test_style_queue_with_style_exception):
        (test_style_queue_with_watch_list_exception):

2012-02-23  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Allow to use WebCore imagedecoders
        https://bugs.webkit.org/show_bug.cgi?id=32410

        Add ENABLE_QT_IMAGE_DECODER macro, it's enabled by default.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:

2012-02-23  Eric Seidel  <eric@webkit.org>

        Remove old broken find_checkout_root tests now that find_checkout_root is gone
        https://bugs.webkit.org/show_bug.cgi?id=79405

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py: Added.
        (SCMDetectorTest):
        (SCMDetectorTest.test_find_checkout_root):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SVNTestRepository.tear_down):

2012-02-23  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Implement proxy authentication dialog.
        https://bugs.webkit.org/show_bug.cgi?id=79350

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ProxyAuthenticationDialog.qml: Added.

2012-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add recently added source dirs.

        * waf/build/settings.py:

2012-02-23  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add support for touch cancellation
        https://bugs.webkit.org/show_bug.cgi?id=79348

        Reviewed by Kenneth Rohde Christiansen.

        Added straight-forward touch cancellation event sending to Qt WK1 DRT
        and WK2 WTR.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::touchCancel):
        (EventSender::cancelTouchPoint):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender):
        * WebKitTestRunner/EventSenderProxy.h:
        (EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::touchCancel):
        (WTR):
        (WTR::EventSendingController::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (EventSendingController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::touchCancel):
        (WTR):
        (WTR::EventSenderProxy::cancelTouchPoint):

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108626.
        http://trac.webkit.org/changeset/108626
        https://bugs.webkit.org/show_bug.cgi?id=79370

        broke qt-wk2 bot, somehow the workaround does not work on the
        bot (Requested by Ossy on #webkit).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-23  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] DRT doesn't support scheduleAsynchronousKeyDown.
        https://bugs.webkit.org/show_bug.cgi?id=78481

        Reviewed by Gustavo Noronha Silva.

        Extracted shareable code from keyDownCallback and then added createKeyPressEvent
        to create gdk press key event.
        Added sendKeyDown and sendAsynchronousKeyDown to evaluate keyDown event directly
        and asynchronously. Eventually, sendAsynchronousKeyDown calls sendKeyDown.

        * DumpRenderTree/gtk/EventSender.cpp:
        (scheduleAsynchronousClickCallback):
        (createKeyPressEvent):
        (sendKeyDown):
        (keyDownCallback):
        (sendAsynchronousKeyDown):
        (scheduleAsynchronousKeyDownCallback):

2012-02-23  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] WebKitTestRunner should use 480x360 sized view for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=76546

        Reviewed by Simon Hausmann.

        Co-authored with Simon Hausmann.

        Revert the workaround introduced in r107868 and reintroduce
        the qml binding so we can test the code path that we are more
        interested in. The reason that it did not work before is that
        we don't have an active platform window which we now workaround
        by propagating the resize through QWindowSystemInterface.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r108577.
        http://trac.webkit.org/changeset/108577
        https://bugs.webkit.org/show_bug.cgi?id=79359

        It doesn't work as expected (Requested by Ossy on #webkit).

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

2012-02-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] FullScreen signals
        https://bugs.webkit.org/show_bug.cgi?id=76181

        Reviewed by Martin Robinson.

        Use the two new entering/leaving fullscreen signals to hide/show
        the tool bar, the status bar and ask the user's permission before
        entering fullscreen.

        * GtkLauncher/main.c:
        (webViewFullscreenMessageWindowClose):
        (webViewWindowStateEvent):
        (hide_widget):
        (show_widget):
        (webViewEnteringFullScreen):
        (webViewLeavingFullScreen):
        (createBrowser):
        (createWindow):

2012-02-22  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Fix to launch the EWebLauncher using the script, run-launcher.
        https://bugs.webkit.org/show_bug.cgi?id=79076

        Reviewed by Andreas Kling.

        * Scripts/webkitdirs.pm: Fix the path of libewebkit.so.
        (builtDylibPathForName):

2012-02-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

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

        Reviewed by Kenneth Rohde Christiansen.

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

2012-02-22  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10406044> and https://bugs.webkit.org/show_bug.cgi?id=79279
        Synchronous ShouldGoToBackForwardListItem causes lots of WebProcess hangs

        Reviewed by Anders Carlsson.

        Update our tools to the new form of the PageLoadClient.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): 

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

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

        new-run-webkit-tests shouldn't restore Safari state on Lion when showing results
        https://bugs.webkit.org/show_bug.cgi?id=79277

        Reviewed by Adam Barth.

        Pass command line argument no-saved-state to run-safari to disable Safari
        state restoration for the session on OS 10.7.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_show_results_html_file):

2012-02-22  Kalev Lember  <kalevlember@gmail.com>

        Explicitly include unistd.h in TestNetscapePlugIn for GCC 4.7
        https://bugs.webkit.org/show_bug.cgi?id=77759

        Reviewed by Tony Chang.

        Fixes build with gcc 4.7.

        r100432 added the include only for ANDROID; this changes the ifdef to
        also cover other unix platforms. On Fedora 17 the gcc 4.7 compiler no
        longer implicitly includes unistd.h from standard headers and other
        unix platforms are likely to get gcc 4.7 as well in the future.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:

2012-02-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r108522.
        http://trac.webkit.org/changeset/108522
        https://bugs.webkit.org/show_bug.cgi?id=76181

        Broke 4 fullscreen tests on GTK.

        * GtkLauncher/main.c:
        (createBrowser):
        (createWindow):

2012-02-20  Philippe Normand  <pnormand@igalia.com>

        [GTK] FullScreen signals
        https://bugs.webkit.org/show_bug.cgi?id=76181

        Reviewed by Martin Robinson.

        Use the two new entering/leaving fullscreen signals to hide/show
        the tool bar, the status bar and ask the user's permission before
        entering fullscreen.

        * GtkLauncher/main.c:
        (webViewFullscreenMessageWindowClose):
        (webViewWindowStateEvent):
        (hide_widget):
        (show_widget):
        (webViewEnteringFullScreen):
        (webViewLeavingFullScreen):
        (createBrowser):
        (createWindow):

2012-02-22  Rob Flack  <flackr@chromium.org>

        Update Linux ChromiumOS builders in flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=79238

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:

2012-02-22  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: test_function_length_check_definition_huge_lines is slow
        https://bugs.webkit.org/show_bug.cgi?id=79185

        Reviewed by Adam Barth.

        This test takes ~3 seconds to run, apparently because we're
        running a test on a 10,000 line function :). Dropping the
        function length to 640 still exercises the code path and
        provides a 10x speedup.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        (CheckForFunctionLengthsTest.test_function_length_check_definition_huge_lines):

2012-02-22  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: speed up FileLockTest.test_lock_lifecycle
        https://bugs.webkit.org/show_bug.cgi?id=79189

        Reviewed by Adam Barth.

        The unit test had a second lock trying to acquire a
        lock already held, and a hard-coded timeout of one second.
        I have changed the timeouts to a tenth of a second (which
        is probably still fine) and changed the hard-spin on
        the lock to a slow-spin every hundredth of a second.

        * Scripts/webkitpy/common/system/file_lock.py:
        (FileLock.acquire_lock):
        * Scripts/webkitpy/common/system/file_lock_integrationtest.py:
        (FileLockTest.setUp):
        (FileLockTest.test_stuck_lock):

2012-02-22  Gabor Rapcsanyi  <rgabor@webkit.org>

        build-webkit should use environment variable at number of CPU
        detection on all platform
        https://bugs.webkit.org/show_bug.cgi?id=79227

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs):

2012-02-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [Qt] REGRESSION(r108108): It made 3 fast/repaint tests fail
        https://bugs.webkit.org/show_bug.cgi?id=78960

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2012-02-22  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Build WebKit with MEDIA_STREAM disabled.
        https://bugs.webkit.org/show_bug.cgi?id=79214

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp:
        * DumpRenderTree/chromium/WebUserMediaClientMock.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createMediaPlayer):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost):

2012-02-22  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2][Mac] WebKitTestRunner does not build with clang.
        https://bugs.webkit.org/show_bug.cgi?id=79124

        WebKitTestRunnerPrefix.h should also be included
        when building with clang.

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/Target.pri:

2012-02-20  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: Add runtime-flag
        https://bugs.webkit.org/show_bug.cgi?id=79074

        Enable the runtime-flag for DRT. 

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r107351.
        http://trac.webkit.org/changeset/107351
        https://bugs.webkit.org/show_bug.cgi?id=53600

        Several issues introduced in WebKitGTK+ API

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView):
        * GtkLauncher/main.c:
        (createWebViewCb):
        (createBrowser):
        (createWindow):
        (main):

2012-02-21  Filip Pizlo  <fpizlo@apple.com>

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.

        Changed EFL's build system to include a new directory in JavaScriptCore.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-02-21  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Fix image drag out on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=79158

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::dumpFilenameBeingDragged):
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

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

        webkitpy: speed up hot filesystem_mock functions
        https://bugs.webkit.org/show_bug.cgi?id=79159

        Reviewed by Adam Barth.

        Profiling run_webkit_tests_integrationtest.py revealed that
        isdir(), normpath(), and join() are called a lot and were very
        slow.This patch speeds them up substantially, shaving 20 seconds
        off of the execution time.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.isdir):
        (MockFileSystem._slow_but_correct_join):
        (MockFileSystem.join):
        (MockFileSystem.listdir):
        (MockFileSystem._slow_but_correct_normpath):
        (MockFileSystem.normpath):
        (MockFileSystem.write_binary_file):
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.quick_check):
        (MockFileSystemTest):
        (MockFileSystemTest.test_join):
        (MockFileSystemTest.test_normpath):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config): Call write_binary_file() instead of updating
          filesystem.files directly, so that we create directories as
          needed.

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

        nrwt: make the delay between starting workers configurable per-port
        https://bugs.webkit.org/show_bug.cgi?id=79148

        Reviewed by Eric Seidel.

        Because of bug 79147, we have to sleep a bit in between starting
        DRTs; however, doing so across the board slows down the Test
        port. Making this configurable shaves 10 seconds off of
        run_webkit_tests_integrationtest.py
        
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.worker_startup_delay_secs):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.worker_startup_delay_secs):

2012-02-21  Jon Lee  <jonlee@apple.com>

        Bring notifications support to WK1 mac
        https://bugs.webkit.org/show_bug.cgi?id=78783
        <rdar://problem/10610578>

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/UIDelegate.mm: Refactor WebGeolocationPolicyListener to WebAllowDenyPolicyListener.
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        (-[UIDelegate timerFired]):

2012-02-21  Kentaro Hara  <haraken@chromium.org>

        Enable the IDL attribute checker in run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=79091

        Reviewed by Adam Barth.

        We have enabled the IDL attribute checker in Chromium in r108322.
        This patch enables the IDL attribute checker in run-bindings-tests.

        No tests. I manually checked that [Custommm], [CallWith=],
        [CallWith=ScriptExecutionContext|Foo] in TestObj.idl cause
        run-bindings-tests failures.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):

2012-02-21  Rafael Weinstein  <rafaelw@chromium.org>

        Add rafaelw as a committer.

        Unreviewed.

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

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

        webkitpy: update names after deleting message_broker
        https://bugs.webkit.org/show_bug.cgi?id=79000

        Reviewed by Eric Seidel.

        Part 3 of 3 in deleting message_broker.py; this change just
        adjusts the names for the newly merged symbols so that they are
        private as appropriate.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_Broker):
        (_BrokerConnection):
        (_BrokerConnection.__init__):
        (AbstractWorker.__init__):
        (_ManagerConnection):
        (_ManagerConnection.__init__):
        (_WorkerConnection):
        (_WorkerConnection.__init__):

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

        webkitpy: merge message_broker.py into manager_worker_broker.py
        https://bugs.webkit.org/show_bug.cgi?id=78999

        Reviewed by Tony Chang.

        This is pretty much a straight cut-and-paste of one file into
        another (broken up so that docstrings and imports are in the
        right place).

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (BrokerClient):
        (BrokerClient.is_done):
        (BrokerClient.name):
        (Broker):
        (Broker.__init__):
        (Broker.add_topic):
        (Broker._get_queue_for_topic):
        (Broker.post_message):
        (Broker.run_message_loop):
        (Broker.run_all_pending):
        (Broker._run_loop):
        (Broker._dispatch_message):
        (_Message):
        (_Message.loads):
        (_Message.__init__):
        (_Message.dumps):
        (_Message.__repr__):
        (BrokerConnection):
        (BrokerConnection.__init__):
        (BrokerConnection.run_message_loop):
        (BrokerConnection.post_message):
        (BrokerConnection.raise_exception):
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py: Removed.

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

        webkitpy: prepare to delete message_broker.py
        https://bugs.webkit.org/show_bug.cgi?id=78997

        Reviewed by Eric Seidel.

        This is part 1 of 3 changes to fix bug 78187. This change
        prepares the code for merging message_broker.py into
        manager_worker_broker.py; the tests in message_broker_unittest
        are merged into manager_worker_broker_unittest, the symbols
        needed by the tests are exported from manager_worker_broker.py,
        and manager_worker_broker itself is updated to refer to the
        symbols directly (without the module prefix).

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (AbstractWorker):
        (AbstractWorker.__init__):
        (_ManagerConnection):
        (_ManagerConnection.__init__):
        (_WorkerConnection):
        (_WorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (InterfaceTest.test_brokerclient_is_abstract):
        (InterfaceTest.test_brokerclient_is_abstract.methods):
        (MessageTest):
        (MessageTest.test__no_body):
        (MessageTest.test__body):
        * Scripts/webkitpy/layout_tests/controllers/message_broker_unittest.py: Removed.

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

        Attempt to fix the Snow Leopard build.

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

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

        Use libc++ when building with Clang on Mac
        https://bugs.webkit.org/show_bug.cgi?id=78981

        Reviewed by Dan Bernstein.

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

2012-02-21  Adam Roben  <aroben@apple.com>

        Roll out r108309, r108323, and r108326

        They broke the 32-bit Lion build.

        Original bugs is <http://webkit.org/b/75812> <rdar://problem/10079694>.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-02-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Get rid of the dependency to QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=76276

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication):
        * QtTestBrowser/locationedit.h:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2012-02-20  Adam Barth  <abarth@webkit.org>

        mastercfg_unittest.py fails without simplejson
        https://bugs.webkit.org/show_bug.cgi?id=79070

        Reviewed by Csaba Osztrogonác.

        Now that we require Python 2.6 (and higher) we can import json rather
        than simplejson.  We still need to use the simplejson name because
        that's what the master.cfg script expects.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (BuildBotConfigLoader._add_dependant_modules_to_sys_modules):

2012-02-20  Filip Pizlo  <fpizlo@apple.com>

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.

        Changed EFL's build system to include a new directory in JavaScriptCore.

        * DumpRenderTree/efl/CMakeLists.txt:

2012-02-20  Kenichi Ishibashi  <bashi@chromium.org>

        Update pywebsocket to 0.7.2
        https://bugs.webkit.org/show_bug.cgi?id=79066

        This version includes vendor-prefixed deflate-frame extension support.

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pywebsocket):

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [UNIX] Plugin information fields are not interpreted as UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=78635

        Reviewed by Gustavo Noronha Silva.

        Interpret plugin metadata as UTF8 aways. This matches the behavior
        of Chromium and the Totem plugin.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_GetValue): Include a UTF-8 character in the description string for testing purposes.

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [Qt] Move the unix forwarding headers for TestNetscapePlugin to the TestNetscapePlugin directory
        https://bugs.webkit.org/show_bug.cgi?id=78935

        Reviewed by Gustavo Noronha Silva.

        Move the TestNetscapePlugin headers to a more appropriate directory and update
        the build files to match.

        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npapi.h: Renamed from Tools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npapi.h.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npfunctions.h: Renamed from Tools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npfunctions.h.
        * DumpRenderTree/TestNetscapePlugIn/unix/ForwardingHeaders/WebKit/npruntime.h: Renamed from Tools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Update build.
        * GNUmakefile.am: Ditto.

2012-02-20  Kihong Kwon  <kihong.kwon@samsung.com>

        Add a new API for the Vibration API(W3C).
        https://bugs.webkit.org/show_bug.cgi?id=72010

        Reviewed by Hajime Morita.

        * Scripts/build-webkit: Enable ENABLE_VIBRATION feature.

2012-02-20  János Badics  <dicska@gmail.com>

        [Qt] run-qtwebkit-tests doesn't consider timeouts as failures
        https://bugs.webkit.org/show_bug.cgi?id=71816

        RunQtAPITests will notify if a timeout occurs during testing.
        Added unittest to the master.cfg

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunQtAPITests.evaluateCommand):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunQtAPITestsTest):
        (RunQtAPITestsTest.assertResults):
        (RunQtAPITestsTest.test_timeout):
        (test_success):
        (test_failure):
        (test_timeout_and_failure):

2012-02-20  Andy Wingo  <wingo@igalia.com>

        Add wingo as a committer.

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py: Add myself to the
        committers list.

2012-02-20  Jochen Eisinger  <jochen@chromium.org>

        [chromium] check that we're not running multiple modal dialogs at the same time
        https://bugs.webkit.org/show_bug.cgi?id=78486

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setIsDisplayingModalDialog):
        (TestShell::isDisplayingModalDialog):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModal):

2012-02-20  Martin Robinson  <mrobinson@igalia.com>

        Fix WebKit2GTK+ for 'make distcheck'.

        Instead of conditionally including WebKit2 GNUmakefiles, always
        include them and conditionally activate the final targets.

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

2012-02-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Enable video option for EFL port in build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=79006

        Reviewed by Daniel Bates.

        * Scripts/build-webkit:

2012-02-19  JungJik Lee  <jungjik.lee@samsung.com>

        [EFL] Use modifier keys to execute pre-rendering.
        https://bugs.webkit.org/show_bug.cgi?id=77933

        Reviewed by Chang Shu.

        Use modifier key to execute pre-rendering instead of using reserved function keys.

        * EWebLauncher/main.c:
        (on_key_down):

2012-02-18  Dirk Pranke  <dpranke@chromium.org>

        Fix one more dangling reference to worker_connection.name, delete unused code.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.update):
        (_WorkerState.__init__):

2012-02-18  Dirk Pranke  <dpranke@chromium.org>

        Add a change that should've been in r108005.

        Unreviewed, build fix.

        In the refactoring/cleanup in r108005 I should've changed the
        implementation of WorkerConnection to make it match BrokerClient
        (and everything else) so that objects had a name() method
        instead of a name property.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_WorkerConnection.__init__):
        (_WorkerConnection.name):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestsMixin.name):
        (_TestsMixin.test_name):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_unknown_message):

2012-02-18  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove webkitpy.common.array_stream
        https://bugs.webkit.org/show_bug.cgi?id=78952

        Reviewed by Eric Seidel.

        Turns out array_stream didn't really do anything that StringIO
        didn't do (at least as of Python 2.6). This change removes it
        and updates all of the callers. Where possible, I changed the
        test assertions in order to capture the intent more clearly,
        e.g., instead of calling self.assertTrue('foo' in stream.get()),
        we have self.assertContainsLine(stream, 'foo'), and instead of
        self.assertTrue(stream.empty()), we have self.assertEmpty(stream) -
        the latter isn't that much more readable, but StringIO doesn't
        export an empty() method.

        * Scripts/webkitpy/common/array_stream.py: Removed.
        * Scripts/webkitpy/common/array_stream_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (run_and_capture):
        (StreamTestingMixin):
        (StreamTestingMixin.assertContains):
        (StreamTestingMixin.assertContainsLine):
        (StreamTestingMixin.assertEmpty):
        (StreamTestingMixin.assertNotEmpty):
        (LintTest):
        (LintTest.test_lint_test_files):
        (LintTest.test_lint_test_files__errors):
        (MainTest):
        (MainTest.test_child_process_1):
        (MainTest.test_child_processes_2):
        (MainTest.test_child_processes_min):
        (MainTest.test_help_printing):
        (MainTest.test_hung_thread):
        (MainTest.test_no_tests_found):
        (MainTest.test_no_tests_found_2):
        (MainTest.test_repeat_each_iterations_num_tests):
        (MainTest.test_test_list):
        (MainTest.test_unexpected_failures):
        (MainTest.test_worker_model__inline_with_child_processes):
        (MainTest.test_additional_platform_directory):
        (RebaselineTest):
        (RebaselineTest.assertBaselines):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.update):
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (TestMeteredStream.test_regular):
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (TestUtilityFunctions.assertEmpty):
        (TestUtilityFunctions):
        (TestUtilityFunctions.assertNotEmpty):
        (TestUtilityFunctions.assertWritten):
        (TestUtilityFunctions.test_configure_logging):
        (Testprinter.assertEmpty):
        (Testprinter):
        (Testprinter.assertNotEmpty):
        (Testprinter.assertWritten):
        (Testprinter.reset):
        (Testprinter.get_printer):
        (Testprinter.test_help_printer):
        (Testprinter.do_switch_tests.do_helper):
        (Testprinter.test_print_one_line_summary):
        (Testprinter.test_print_test_result):
        (Testprinter.test_print_progress):
        (Testprinter.test_write_nothing):
        (Testprinter.test_write_misc):
        (Testprinter.test_write_everything):
        (Testprinter.test_write_verbose):
        (Testprinter.test_print_unexpected_results):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.assertWritten):
        (create_runner):
        (test_run_test_set):
        (test_run_test_set_kills_drt_per_run):
        (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_upload_json):

2012-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Add the WebCore/page/scrolling directory to the build dirs.

        * waf/build/settings.py:

2012-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Don't error out or hang if we have
        downloaded dependencies but server update check fails.

        * waf/build/build_utils.py:
        (download_if_newer):

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

        The new run-webkit-tests needs to dump out pixel hash failures even if the pixel test passes.
        https://bugs.webkit.org/show_bug.cgi?id=69444

        Reviewed by Tony Chang.

        Currently if a test's image checksum doesn't match the checksum
        in the baseline, but the images themselves match according to
        ImageDiff, new-run-webkit-tests ignores the problem. This is
        probably bad, but it's not yet clear what the right thing to do
        is. This patch will log a warning to stderr, at least (but the
        test will still pass).

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._run_reftest):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_list):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:

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

        NRWT does not report failure for a skipped test
        https://bugs.webkit.org/show_bug.cgi?id=78750

        Reviewed by Eric Seidel.

        If a test is listed in a Skipped file and you run it anyway
        with --force, and the test fails, currently NRWT will print
        "test ran as expected"; this is confusing, because you probably
        expect the test to fail and yet this might lead you to think the
        test passed. This patch changes the expected behavior to "PASS",
        so tests that fail will be reported.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (result_was_expected):
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_list): Add some tests that are expected to be in a Skipped file.
        (TestPort.skipped_tests): This adds actual integration test coverage of Skipped files.

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

        webkitpy: fix test code after bug 78181
        https://bugs.webkit.org/show_bug.cgi?id=78870

        Reviewed by Adam Barth.

        I forgot to update the test code as per Tony's suggestion in
        bug 78181 (r108005). This change does that, and in doing so
        it revealed a subtle bug in _InlineWorkerConnection.run() that
        I am fixing as part of this (_alive would not be cleared if an
        exception was thrown).

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_InlineWorkerConnection.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestWorker.handle_stop):
        (_TestWorker.handle_test):
        (_TestWorker.run):
        (_TestsMixin.handle_exception):
        (_TestsMixin.test_unknown_message):

2012-02-17  Adam Roben  <aroben@apple.com>

        Mac build fix after r108119

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runThread):
        (runPthread):
        (testThreadIdentifierMap):
        Updated to match current WTF threading APIs.

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

        revert r107147 - breaks webkit-patch on Mac SL
        https://bugs.webkit.org/show_bug.cgi?id=78866

        Reviewed by Adam Barth.

        It appears that zipfile.ExtractAll is broken on Python 2.6.1,
        which is the version that ships on Mac SL. Reverting this
        change until we no longer have to worry about that version.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller):
        (AutoInstaller._extract_all): Added a comment about SL.
        (AutoInstaller._unzip):

2012-02-17  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS regions enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=78525

        Reviewed by David Hyatt.

        Add a runtime preference to enable/disable regions functionality at runtime(WebKitCSSRegionsEnabled).
        CSSRegions are still enabled by default.
        In DRT, use layoutTestController.overridePreference("WebKitCSSRegionsEnabled", "0") to disable the css regions functionality.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2012-02-17  Maciej Stachowiak  <mjs@apple.com>

        Some API tests erroneously use = instead of == (causing build failures)
        https://bugs.webkit.org/show_bug.cgi?id=78915

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction): Replace an = with an ==
        (TestWebKitAPI::decidePolicyForNewWindowAction): ditto

2012-02-17  Peter Beverloo  <peter@chromium.org>

        [Chromium] Include TestShellLinux.cpp in the build for Android
        https://bugs.webkit.org/show_bug.cgi?id=78865

        Reviewed by Eric Seidel.

        Android will be re-using the TestShellLinux.cpp file. I already
        added this r104033, but it seems to have gotten lost in the
        recent refactorings.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-02-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, disable video build on EFL until it can be
        supported by EFL build bot.

        * Scripts/build-webkit:

2012-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement zoom in/out in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75253

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowCanZoomIn):
        (browserWindowCanZoomOut):
        (browserWindowUpdateZoomActions):
        (webViewZoomLevelChanged):
        (zoomInCallback):
        (zoomOutCallback):
        (browser_window_init):
        (browserWindowConstructed):

2012-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        layoutTestController.display() is flaky for SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=78021

        Reviewed by Adam Roben.

        Apply the same fix to DRT/Win, as previously applied to DRT/Mac.
        Size the web view before running the test, not when dumping.
        All platforms handle this correctly now.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (sizeWebViewForCurrentTest):
        (runTest):

2012-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make install is broken when building without --enable-gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=78828

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (rebase_installed_docs): Check documentation has been generated
        before trying to rebase it.

2012-02-16  Dirk Pranke  <dpranke@chromium.org>

        nrwt: simplify worker interface
        https://bugs.webkit.org/show_bug.cgi?id=78181

        Reviewed by Tony Chang.

        This change moves code in name(), is_done(), run(), and cancel()
        from Worker to AbstractWorker, since the logic is pretty much
        boilerplate code that any implementation would want to use.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get.should):
        (AbstractWorker.__init__):
        (AbstractWorker):
        (AbstractWorker.name):
        (AbstractWorker.stop_handling_messages):
        (AbstractWorker.run):
        (AbstractWorker.is_done):
        (AbstractWorker.cancel):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.run):
        (Worker.handle_stop):

2012-02-16  Michael Saboff  <msaboff@apple.com>

        ENH: Add ability to run subset of JavaScript layout tests with JSC
        https://bugs.webkit.org/show_bug.cgi?id=78764

        Reviewed by Gavin Barraclough.

        New simple test drive shell script that runs a defined
        list of javascript tests using jsc and the standalone-{pre,post}.js
        wrappers.

        * Scripts/run-fast-jsc: Added.

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

        Add new Qt performance tester bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=78795

        Reviewed by Adam Roben.

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

2012-02-16  Patrick Gansterer  <paroga@webkit.org>

        Disable inspector on WinCE.

        Avoid compiling InspectorBackendDispatcher.cpp, which causes an internal compiler error.

        * Scripts/build-webkit:

2012-02-16  Patrick Gansterer  <paroga@webkit.org>

        WinCE build fix after r107656.

        Disable FTPDIR on WinCE, since it does not compile there.

        * Scripts/build-webkit:

2012-02-15  Leo Yang  <leo.yang@torchmobile.com.cn>

        Build fix after r107863.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:

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

        [chromium] add linux dbg back to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=78752

        Reviewed by Adam Barth.

        This reflects the current linux debug bot name (there's only one bot).
        I'm also remove the mac clang builder since it doesn't exist (mac
        always uses clang now).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:

2012-02-15  Sam Weinig  <sam@webkit.org>

        Add style check for ctype functions that are generally frowned upon in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=78748

        Reviewed by Anders Carlsson.

        Not every platform has DisallowCType.h to check for uses of the ctype.h
        functions, so add a style check for them as well.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_ctype_functions):
        (check_style):
        (CppChecker):
        Add check.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_ctype_fucntion):
        Add checker.

2012-02-15  Szilard Ledan  <Ledan-Muntean.Szilard@stud.u-szeged.hu>

        [Qt][WK2] WebKitTestRunner should use 480x360 sized view for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=76546

        Reviewed by Simon Hausmann.

        Resize the web view programatically because the declarative property binding
        does not work. Seems like our qml environment is not initialized fully but it
        needs more investigation.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::resizeTo):

2012-02-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: add a worker_args concept to start_worker()
        https://bugs.webkit.org/show_bug.cgi?id=78572

        Reviewed by Tony Chang.

        This change replaces the three NRWT-specific arguments passed
        through the broker to the worker with a generic WorkerArguments
        wrapper class and a separate set_inline_arguments() call that can
        be used to pass additional data to the worker when it is running
        in the same process as the manager (this is needed for testing).
        With the addition of set_inline_arguments() we also no longer
        need to pass an optional argument to the worker.run() call.

        Note that this method is *only* implemented on inline workers,
        so calling this on a regular (child process) worker will result
        in a runtime error.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.__init__):
        (AbstractWorker.run):
        (_ManagerConnection.start_worker):
        (_InlineManager.start_worker):
        (_InlineManager.set_inline_arguments):
        (_InlineManager.run_message_loop):
        (_MultiProcessManager.start_worker): Reworked signature.
        (_WorkerConnection.__init__):
        (_InlineWorkerConnection.__init__):
        (_InlineWorkerConnection.set_inline_arguments): New method.
        (_InlineWorkerConnection):
        (_InlineWorkerConnection.run):
        (_Process.run):
        (_MultiProcessWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestWorker.set_inline_arguments):
        (_TestWorker.handle_test):
        (_TestWorker.run):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (InlineBrokerTests): New class for more testing.
        (InlineBrokerTests.setUp):
        (InlineBrokerTests.test_inline_arguments): New test.
        (InterfaceTest.test_managerconnection_is_abstract):
        (InterfaceTest.test_workerconnection_is_abstract):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (WorkerArguments):
        (WorkerArguments.__init__):
        (Worker.__init__):
        (Worker.set_inline_arguments):
        (Worker):
        (Worker.run):
        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py:
        (WorkerTest.test_default_platform_in_worker):

2012-02-15  Adam Klein  <adamk@chromium.org>

        Unreviewed, rolling out r107704.
        http://trac.webkit.org/changeset/107704
        https://bugs.webkit.org/show_bug.cgi?id=78486

        Caused layout test crashes in debug builds.

        Specific crashing tests:

        fast/events/show-modal-dialog-onblur-onfocus.html
        fast/harness/show-modal-dialog.html
        inspector/console/console-long-eval-crash.html

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModal):

2012-02-15  Michael Brüning  <michael.bruning@nokia.com>

        [Qt] Add UI for HTTP authentication in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=76347

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/AuthenticationDialog.qml: Added. 
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/DialogLineInput.qml:

2012-02-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix WebGL in QtTestBrowser

        Reviewed by Tor Arne Vestbø.

        * QtTestBrowser/QtTestBrowser.pro: Set the OpenGL define so that when passing
        the options for enabling GL we also pass them on properly.

2012-02-14  Sam Weinig  <sam@webkit.org>

        Add #include of unistd.h on the mac for getcwd. 

        Reviewed by Anders Carlsson.

        This is necessary when building with libc++.

        * WebKitTestRunner/TestInvocation.cpp:

2012-02-14  Sam Weinig  <sam@webkit.org>

        In DRT, don't #define min or max on non-Windows platforms, it just isn't needed
        https://bugs.webkit.org/show_bug.cgi?id=78663

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/cg/ImageDiffCG.cpp:

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

        Implement an adb-based driver for the ChromiumAndroidPort
        https://bugs.webkit.org/show_bug.cgi?id=78627

        Reviewed by Eric Seidel.

        This driver mostly just wires up the ChromiumDriver through adb.  In
        some cases, it translates protocol elements, such as URIs, so that the
        rest of webkitpy is insulated from the "remoteness" of the target device.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort._driver_class):
        (ChromiumAndroidPort._update_version):
        (ChromiumAndroidPort._get_stderr):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._get_last_stacktrace):
        (ChromiumAndroidPort._teardown_performance):
        (ChromiumAndroidDriver):
        (ChromiumAndroidDriver.__init__):
        (ChromiumAndroidDriver._start):
        (ChromiumAndroidDriver.run_test):
        (ChromiumAndroidDriver.stop):
        (ChromiumAndroidDriver._test_shell_command):
        (ChromiumAndroidDriver._write_command_and_read_line):
        (ChromiumAndroidDriver._output_image):
        (ChromiumAndroidDriver._has_crash_hint):

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

        webkitpy: the real_name() method in the Port class is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=78651

        Reviewed by Eric Seidel.

        The change in bug 78565 / r107718 made it no longer necessary
        (we can use options.platform instead).

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.name):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.__init__):

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

        webkitpy: clean up options, port handling in manager_worker_broker
        https://bugs.webkit.org/show_bug.cgi?id=78568

        Reviewed by Tony Chang.

        manager_worker_broker no longer needs options or port objects
        directly, so we make them only be passed in start_worker().

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_ManagerConnection.__init__):
        (_ManagerConnection.start_worker):
        (_InlineManager.__init__):
        (_InlineManager.start_worker):
        (_InlineManager.run_message_loop):
        (_MultiProcessManager.__init__):
        (_MultiProcessManager):
        (_MultiProcessManager.start_worker):
        (_InlineWorkerConnection.__init__):
        (_InlineWorkerConnection.run):
        (_Process.__init__):
        (_MultiProcessWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (make_broker):
        (_TestWorker.run):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (MultiProcessBrokerTests.setUp):
        (InterfaceTest.test_managerconnection_is_abstract):
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py:
        (Broker.__init__):

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

        nrwt: add a unit test for regression introduced in bug 78565
        https://bugs.webkit.org/show_bug.cgi?id=78646

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/controllers/worker_unittest.py: Added.
        (FakeConnection):
        (FakeConnection.run_message_loop):
        (FakeConnection.post_message):
        (WorkerTest):
        (WorkerTest.test_default_platform_in_worker):

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

        NRWT is broken for the default port
        https://bugs.webkit.org/show_bug.cgi?id=78640
    
        Reviewed by Tony Chang.

        The change in r107718 (bug 78565) broke NRWT if you didn't
        specify any sort of --platform flag or equivalent. I didn't
        catch this because it's a full integration test (which we don't
        have an automated test for) and I missed this command line
        variant when testing interactively.

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.run):

2012-02-14  Ramya Chandrasekaran  <cramya@google.com>

        Last character display for passwords in Android.
        https://bugs.webkit.org/show_bug.cgi?id=78532

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

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

        Finish implementing start_helper for ChromiumAndroidPort
        https://bugs.webkit.org/show_bug.cgi?id=78582

        Reviewed by Eric Seidel.

        This patch contains the remaining odds and ends for the start_helper function.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort._synchronize_datetime):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._check_version):
        (ChromiumAndroidPort._run_adb_command):
        (ChromiumAndroidPort._copy_device_file):

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

        webkitpy: create ports in Workers, not in manager_worker_broker
        https://bugs.webkit.org/show_bug.cgi?id=78565

        Reviewed by Tony Chang.

        We will now create the Port object (if necessary) in the Worker
        directly, so that the manager_worker_broker module doesn't need
        all of this layout_test-specific logic. Part of the fixes for
        bug 78171.

        These changes are all well-tested by the existing tests in
        run_webkit_tests_integrationtest.py.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_Process.run):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.safe_init):
        (Worker.run):
        (Worker.cleanup):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (main): Fix a minor bug where running the 'mock-test' port didn't work right.

2012-02-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] check that we're not running multiple modal dialogs at the same time
        https://bugs.webkit.org/show_bug.cgi?id=78486

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setIsDisplayingModalDialog):
        (TestShell::isDisplayingModalDialog):
        (TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModal):

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

        Enable the GPU codepath in the chromium-android port
        https://bugs.webkit.org/show_bug.cgi?id=78580

        Reviewed by James Robinson.

        Suprise!  There is no ChromiumGpuAndroidPort!  Instead, Chromium
        Android always uses the GPU codepath, so we set the GPU flags on the
        main chromium-android port instead.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):

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

        NRWT should expose --adb-args flag for Android
        https://bugs.webkit.org/show_bug.cgi?id=78579

        Reviewed by Eric Seidel.

        This flag is already wired up to the ChromiumAndroidPort.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

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

        [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=78541
        <rdar://problem/10036695>

        Reviewed by Kent Tamura.

        * DumpRenderTree/mac/DumpRenderTree.mm: (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp: (resetDefaultsToConsistentValues):
        After each test, reset to using new protocol.

2012-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Convert svg/animations to use SMIL methods for driving the timeline
        https://bugs.webkit.org/show_bug.cgi?id=78422

        Reviewed by Dirk Schulze.

        Remove no longer needed SVG specific animation sampling functionality from DRT.
        Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * 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:

2012-02-13  Rob Flack  <flackr@chromium.org>

        Add Linux ChromiumOS test results to flakiness dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=78495

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:

2012-02-13  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Mutation Observers build is broken
        https://bugs.webkit.org/show_bug.cgi?id=78433

        Reviewed by Martin Robinson.

        Enabled mutation observers as a default feature for GTK port, too.

        * Scripts/build-webkit:

2012-02-13  Loïc Yhuel  <loic.yhuel_ext@softathome.com>

        Allow to configure ENABLE_FTPDIR in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=65098

        Reviewed by Eric Seidel.

        Allow to disable ENABLE_FTPDIR by command line.
        Remove ENABLE_FTPDIR from --minimal build

        * Scripts/build-webkit: Add entries for ENABLE_FTPDIR (enabled by default)
        * qmake/mkspecs/features/features.prf: ENABLE_FTPDIR must be set to match Platform.h,
        as, for Qt platform, build-webkit does not add on command line what it thinks to be default values

2012-02-13  Shinya Kawanaka  <shinyak@chromium.org>

        Add shinyak as committer.

        Unreviewed.

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

2012-02-13  Adam Barth  <abarth@webkit.org>

        Implement start/stop_helper for ChromiumAndroidPort
        https://bugs.webkit.org/show_bug.cgi?id=78558

        Reviewed by Dirk Pranke.

        These functions (and their dependencies) set up the Android device for
        testing.

        This patch also includes a few tweaks on the previous patch recommended
        by dpranke.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort.stop_helper):
        (ChromiumAndroidPort._shut_down_http_server):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._push_executable):
        (ChromiumAndroidPort._push_fonts):
        (ChromiumAndroidPort._restore_system_font):
        (ChromiumAndroidPort._push_test_resources):
        (ChromiumAndroidPort._push_to_device):
        (ChromiumAndroidPort._pull_from_device):
        (ChromiumAndroidPort._kill_device_process):
        (ChromiumAndroidPort._setup_performance):
        (ChromiumAndroidPort._teardown_performance):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        (PortTestCase.test_default_worker_model):

2012-02-13  Adam Barth  <abarth@webkit.org>

        Implement enough of ChromiumAndroidPort to make ChromiumAndroidPortTest pass
        https://bugs.webkit.org/show_bug.cgi?id=78550

        Reviewed by Eric Seidel.

        Much of this code just forwards to the "host" port, which seems like a
        reasonable thing to do.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.stop_helper):
        (ChromiumAndroidPort):
        (ChromiumAndroidPort._build_path):
        (ChromiumAndroidPort._path_to_apache):
        (ChromiumAndroidPort._path_to_apache_config_file):
        (ChromiumAndroidPort._path_to_driver):
        (ChromiumAndroidPort._path_to_helper):
        (ChromiumAndroidPort._path_to_image_diff):
        (ChromiumAndroidPort._path_to_lighttpd):
        (ChromiumAndroidPort._path_to_lighttpd_modules):
        (ChromiumAndroidPort._path_to_lighttpd_php):
        (ChromiumAndroidPort._path_to_wdiff):
        (ChromiumAndroidPort._shut_down_http_server):
        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
        (ChromiumAndroidPortTest):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        (PortTestCase.test_default_worker_model):

2012-02-13  Adam Barth  <abarth@webkit.org>

        chromium_android.py should implement "virtual" methods from ChromiumPort
        https://bugs.webkit.org/show_bug.cgi?id=78545

        Reviewed by Dirk Pranke.

        This patch adds basic implementations that specialize a bunch of
        functions from ChromiumPort.

        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.__init__):
        (ChromiumAndroidPort.default_child_processes):
        (ChromiumAndroidPort.baseline_search_path):
        (ChromiumAndroidPort.check_build):
        (ChromiumAndroidPort.check_sys_deps):
        (ChromiumAndroidPort.default_worker_model):
        (ChromiumAndroidPort.test_expectations):
        (ChromiumAndroidPort.start_http_server):
        (ChromiumAndroidPort.stop_http_server):
        (ChromiumAndroidPort.start_helper):
        (ChromiumAndroidPort.stop_helper):

2012-02-13  Adam Barth  <abarth@webkit.org>

        Add a skeleton ChromiumAndroid port to webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=78543

        Reviewed by Eric Seidel.

        This patch just adds an empty ChromiumAndroid port object to webkitpy
        and wires it up to the factory objects.  An actual implementation will
        follow.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        * Scripts/webkitpy/layout_tests/port/chromium_android.py: Added.
        (ChromiumAndroidPort):
        (ChromiumAndroidPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):

2012-02-13  Adam Barth  <abarth@webkit.org>

        NRWT's HTTP servers should support additional directories for resources
        https://bugs.webkit.org/show_bug.cgi?id=78528

        Reviewed by Eric Seidel.

        This functionality will be used by the Chromium-Android port.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.start_http_server):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        (Lighttpd._prepare_config):

2012-02-13  Ami Fischman  <fischman@chromium.org>

        Add fischman as committer.

        Unreviewed

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

2012-02-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Drop support for the Curl network backend.
        https://bugs.webkit.org/show_bug.cgi?id=77874

        Reviewed by Eric Seidel.

        Nobody seems to be maintaining the Curl backend in WebCore, the
        EFL port developers all seem to be using the Soup backend and the
        port itself has many features which are only implemented for the
        latter.

        * DumpRenderTree/efl/CMakeLists.txt: Always link to glib/libsoup
        and always add the required include directories.
        * EWebLauncher/CMakeLists.txt: Add the required glib/libsoup
        include directories and link to them.

2012-02-13  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Update pywebsocket to 0.7.1
        https://bugs.webkit.org/show_bug.cgi?id=78484

        pywebsocket-0.7.1 follow the current draft of WebSocket deflate-frame extension.

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pywebsocket):

2012-02-12  Kangil Han  <kangil.han@samsung.com>

        [EFL][DRT] Implement zoomPage{In,Out} and textZoom{In,Out} events.
        https://bugs.webkit.org/show_bug.cgi?id=78091

        Reviewed by Hajime Morita.

        Implemented zoomPageIn, zoomPageOut, textZoomIn and textZoomOut events on EFL DRT.
        This patch will activate around 1,900 test cases from skipped list in EFL port.

        * DumpRenderTree/efl/EventSender.cpp:
        (textZoom):
        (pageZoom):
        (textZoomInCallback):
        (textZoomOutCallback):
        (zoomPageInCallback):
        (zoomPageOutCallback):

2012-02-12  Ashod Nakashian  <ashodnakashian@yahoo.com>

        KeywordLookupGenerator.py script fails in some cases
        https://bugs.webkit.org/show_bug.cgi?id=77886

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/style/checker.py: New rule for Keywords.table to not have CR.
        * Scripts/webkitpy/style/checker_unittest.py: New UT for Keywords.table rule.
        (GlobalVariablesTest.test_path_rules_specifier):

2012-02-12  Joe Thomas  <joethomas@motorola.com>

        Add toText and isTextNode helpers in Text class.
        https://bugs.webkit.org/show_bug.cgi?id=78140

        Unit test case for the new style checker introduced.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        (CppStyleTest.test_static_cast_readability): Added a unit test case.

2012-02-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Enable features supported by EFL port in build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=78348

        Reviewed by Ryosuke Niwa.

        Sync build-webkit with OptionEfl.cmake, as some features enabled in
        OptionEfl.cmake are not enabled in build-webkit.

        * Scripts/build-webkit:

2012-02-12  Joe Thomas  <joethomas@motorola.com>

        Add toText and isTextNode helpers in Text class.
        https://bugs.webkit.org/show_bug.cgi?id=78140

        Added a style checker to use toText rather than static_cast<Text*>.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Style checker for static_cast<Text*>.

2012-02-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, disable Mutation observers build on GTK until it can
        actually build.

        * Scripts/build-webkit:

2012-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Add back WTFURL to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=77291

        Reviewed by Adam Barth.

        Add a flag to build-webkit to easily build WebKit with WTFURL.

        * Scripts/build-webkit:

2012-02-10  Adam Klein  <adamk@chromium.org>

        Enable MUTATION_OBSERVERS by default on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=78196

        Reviewed by Ojan Vafai.

        * Scripts/build-webkit:

2012-02-10  Adam Barth  <abarth@webkit.org>

        Move garden-o-matic's All Failures out of experimental
        https://bugs.webkit.org/show_bug.cgi?id=78395

        Reviewed by Dimitri Glazkov.

        Several folks have tried this feature and found it useful.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2012-02-10  Tim Horton  <timothy_horton@apple.com>

        NRWT should categorize options in --help
        https://bugs.webkit.org/show_bug.cgi?id=76221

        Reviewed by Eric Seidel.
        
        Use optparse's OptionGroup mechanism to logically group NRWT's options,
        providing a better experience when scanning all the options.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Refactor on Qt5 Layout tests' structure
        https://bugs.webkit.org/show_bug.cgi?id=77450

        Reviewed by Csaba Osztrogonác.

        Fix the scripts and related unittest due to the rename of qt-wk2 and qt-wk1
        to qt-5.0-wk2 and qt-5.0-wk1.

        * Scripts/old-run-webkit-tests:
        (buildPlatformResultHierarchy):
        (readSkippedFiles):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._wk2_port_name):
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._wk2_port_name):

2012-02-09  Philippe Normand  <pnormand@igalia.com>

        [GTK] EWS command-line option to run the tests
        https://bugs.webkit.org/show_bug.cgi?id=78211

        Reviewed by Adam Barth.

        New --run-tests option (defaults to False) for the EWS commands.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem):
        (AbstractEarlyWarningSystem.__init__):
        (AbstractEarlyWarningSystem.review_patch):
        (ChromiumLinuxEWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._test_builder_ews):

2012-02-09  Eric Seidel  <eric@webkit.org>

        Rename compare_text and compare_audio to make it clear that they're !=
        https://bugs.webkit.org/show_bug.cgi?id=78301

        Reviewed by Adam Barth.

        I also removed the maybe_create_directory function which was redundant.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.set_up_run):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter._make_output_directory):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.do_text_results_differ):
        (Port.do_audio_results_differ):
        (Port.diff_text):
        (Port.driver_name):
        (Port.skips_perf_test):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.do_text_results_differ):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_do_text_results_differ):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.__init__):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner._diff_baselines):

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

        [GTK] Add DRT support for modal dialogs
        https://bugs.webkit.org/show_bug.cgi?id=53600

        Reviewed by Martin Robinson.

        Implement the modal dialogs handling in DumpRenderTree and GtkLauncher.
        Most significantly, when creating a new web view in GtkLauncher, the window
        of the web view opener is passed around. In DumpRenderTree, the window of
        the main web view is always considered as the opener. This is required so
        the modal dialog's toplevel can be made transient for the opener's toplevel.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewRunModalDialog):
        (createWebView):
        * GtkLauncher/main.c:
        (createWebViewCb):
        (runModalDialogCb):
        (createBrowser):
        (createWindow):
        (main):

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

        [Gtk] security/set-form-autocomplete-attribute.html fails
        https://bugs.webkit.org/show_bug.cgi?id=78261

        Reviewed by Martin Robinson.

        Use the new helper in DumpRenderTreeSupportGtk to properly
        test whether an element performs autocompletion.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):

2012-02-09  James Robinson  <jamesr@chromium.org>

        [chromium] Enable mock scrollbars for compositing layout tests
        https://bugs.webkit.org/show_bug.cgi?id=78299

        Reviewed by Dirk Pranke.

        This enables mock scrollbars by default for compositing tests. These pixel tests are intended to test the
        compositor behavior, not native theming, and having real scrollbars causes us to have to maintain significantly
        more pngs than we should and expose weird alpha bugs in our theming that doesn't impact real users.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-02-09  Eric Seidel  <eric@webkit.org>

        Remove more uses of "os" from our webkitpy code
        https://bugs.webkit.org/show_bug.cgi?id=78292

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        (MockCheckout.__init__):
        (MockCheckout.is_path_to_changelog):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem._split):
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        (CreateBug.prompt_for_bug_title_and_comment):
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        * Scripts/webkitpy/tool/steps/attachtobug.py:
        (AttachToBug.run):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest.test_ensure_bug_url):
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2012-02-09  Eric Seidel  <eric@webkit.org>

        Remove the cr-mac-ews (it's long been dead)
        https://bugs.webkit.org/show_bug.cgi?id=78267

        Reviewed by Adam Barth.

        * QueueStatusServer/model/queues.py:
        (Queue):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (ChromiumWindowsEWS):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest._test_builder_ews):
        (EarlyWarningSytemTest._test_testing_ews):

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

        some tests in webkitpy are being run three times
        https://bugs.webkit.org/show_bug.cgi?id=78283

        Reviewed by Ryosuke Niwa.

        It turns out that if you import a class derived from
        unittest.TestCase as a base name (e.g., from ... import ChangeLogTest),
        the unittest framework treats it as if the class was defined in
        the file (as well in the original file). This led us to running
        the tests in ChangeLogTest three times.

        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        (PrepareChangeLogTest):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (_assert_message_for_revert_output):

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

        Remove extraneous line in previous patch.  I forgot to remove this
        before landing.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.start):

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

        run-perf-tests should have an option to pause before running tests so we can attach Instruments
        https://bugs.webkit.org/show_bug.cgi?id=78271

        Reviewed by Ryosuke Niwa.

        This lets me attach instruments to profile the performance of the test.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.start):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.start):
        (DriverProxy.start):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess.start):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestDriver.start):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.start):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.start):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (start):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStartCount):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStartCount.start):

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

        run-perf-tests --chromium should run the chromium port
        https://bugs.webkit.org/show_bug.cgi?id=78266

        Reviewed by Ryosuke Niwa.

        This patch makes run-perf-tests work more like run-webkit-tests.

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

2012-02-09  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] run-webkit-tests --qt  crashes if WEBKIT_TESTFONTS is not set
        https://bugs.webkit.org/show_bug.cgi?id=77466

        Reviewed by Dirk Pranke.

        Replicate the behavior of old-run-webkit-tests and check if WEBKIT_TESTFONTS
        is set or if we should raise an error. A unit test was added.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.operating_system):
        (QtPort):
        (QtPort.check_sys_deps):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_operating_system):
        (QtPortTest):
        (QtPortTest.test_check_sys_deps):

2012-02-09  Eric Seidel  <eric@webkit.org>

        Rename ports.WebKitPort to DeprecatedPort and make it stop being all class methods
        https://bugs.webkit.org/show_bug.cgi?id=78263

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort):
        (DeprecatedPort.name):
        (DeprecatedPort.flag):
        (DeprecatedPort.script_path):
        (DeprecatedPort.script_shell_command):
        (DeprecatedPort.port):
        (DeprecatedPort.makeArgs):
        (DeprecatedPort.update_webkit_command):
        (DeprecatedPort.check_webkit_style_command):
        (DeprecatedPort.prepare_changelog_command):
        (DeprecatedPort.build_webkit_command):
        (DeprecatedPort.run_javascriptcore_tests_command):
        (DeprecatedPort.run_webkit_unit_tests_command):
        (DeprecatedPort.run_webkit_tests_command):
        (DeprecatedPort.run_python_unittests_command):
        (DeprecatedPort.run_perl_unittests_command):
        (DeprecatedPort.layout_tests_results_path):
        (MacPort):
        (WinPort):
        (GtkPort):
        (GtkPort.build_webkit_command):
        (GtkPort.run_webkit_tests_command):
        (QtPort):
        (QtPort.build_webkit_command):
        (EflPort):
        (EflPort.build_webkit_command):
        (ChromiumPort):
        (ChromiumPort.update_webkit_command):
        (ChromiumPort.build_webkit_command):
        (ChromiumPort.run_webkit_tests_command):
        (ChromiumPort.run_javascriptcore_tests_command):
        (ChromiumXVFBPort):
        (ChromiumXVFBPort.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest):
        (DeprecatedPortTest.test_mac_port):
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest.test_qt_port):
        (DeprecatedPortTest.test_chromium_port):
        (DeprecatedPortTest.test_chromium_xvfb_port):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.__init__):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch):
        (WebKitPatch.handle_global_options):
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):

2012-02-09  Jochen Eisinger  <jochen@chromium.org>

        [chromium] always initialize makeArgs in buildChromiumNinja
        https://bugs.webkit.org/show_bug.cgi?id=78231

        Reviewed by Tony Gentilcore.

        * Scripts/webkitdirs.pm:
        (buildChromiumNinja):

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

        [GTK] Show url of current hovered link in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=78098

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewMouseTargetChanged): Check whether hit test result is a
        link and use the url to update the status bar text.
        (browserWindowConstructed): Connect to
        WebKitWebView::mouse-target-changed signal.

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

        [BlackBerry] Upstream DumpRenderTreeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78042

        Reviewed by Antonio Gomes.

        Upstream final part of our DRT implementation.

        * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/PNGImageEncoder.cpp: Added.
        * DumpRenderTree/blackberry/PNGImageEncoder.h: Added.
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.h: Added.

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

        kill-old-processes should kill gcc and clang
        https://bugs.webkit.org/show_bug.cgi?id=78189

        Reviewed by Eric Seidel.

        Added a bunch of processes names of gcc and clang to the list.

        * BuildSlaveSupport/kill-old-processes:

2012-02-07  MORITA Hajime  <morrita@google.com>

        Replacement text should be available from the marker.
        https://bugs.webkit.org/show_bug.cgi?id=77934

        Made the mock requestCheckingOfText() implementation to return
        a replacement text for each misspelled word if available.

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck):

2012-02-08  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][DRT] DumpRenderTreeQt should support --no-timeout and --timeout options
        https://bugs.webkit.org/show_bug.cgi?id=78146

        Reviewed by Ryosuke Niwa.

        Our DumpRenderTree should support --no-timeout and --timeout options in order
        to be able to use run-perf-tests and have a Performance Bot.
        This patch adds setTimeout and setShouldTimeout functions to our LayoutTestController
        and the necessary code to handle such command line arguments to our DumpRenderTree.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::setTimeout):
        (WebCore):
        (WebCore::DumpRenderTree::setShouldTimeout):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::setTimeout):
        (LayoutTestController::setShouldTimeout):
        (LayoutTestController):
        * DumpRenderTree/qt/main.cpp:
        (isOption):
        (printUsage):
        (main):

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        Rubber-stamped by Martin Robinson.

        * gtk/common.py:
        (get_build_path): Move test for current directory being a valid
        directory up so it takes precedence over WebKitBuild/Release and
        WebKitBuild/Debug when they exist as well.

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] doc rebasing does not respect DESTDIR
        https://bugs.webkit.org/show_bug.cgi?id=78177

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Pass DESTDIR on to generate-gtkdoc, when
        calling it for rebasing.
        * gtk/generate-gtkdoc:
        (get_common_options): Handle the new --virtual-root option.
        * gtk/gtkdoc.py:
        (GTKDoc.rebase_installed_docs): If a virtual-root has been given, pass
        it on to gtkdoc-rebase as dest-dir, and prefix the htmldir with it.

2012-02-08  Adam Barth  <abarth@webkit.org>

        Remove Python 2.5 support from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=71593

        Reviewed by Eric Seidel.

        This is the last vestige of our Python 2.5 support.

        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractQueueTest.test_log_from_script_error_for_upload):

2012-02-08  Adam Barth  <abarth@webkit.org>

        version_check.py should inform users that we don't support Python 2.5 anymore
        https://bugs.webkit.org/show_bug.cgi?id=78179

        Reviewed by Eric Seidel.

        We don't support Python 2.5 anymore.

        * Scripts/webkitpy/common/version_check.py:

2012-02-08  Adam Barth  <abarth@webkit.org>

        test_configuration.py shouldn't re-implement itertools
        https://bugs.webkit.org/show_bug.cgi?id=78178

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfigurationConverter.to_specifiers_list):
        (TestConfigurationConverter.to_specifiers_list.try_collapsing):
        (TestConfigurationConverter.to_specifiers_list.try_abbreviating):
        (TestConfigurationConverter):

2012-02-08  Adam Barth  <abarth@webkit.org>

        webkitpy should reply upon the multiprocessing package existing
        https://bugs.webkit.org/show_bug.cgi?id=78176

        Reviewed by Eric Seidel.

        Now that we don't support Python 2.5, this import can't fail.

        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (get):
        (_Process):
        (_Process.__init__):
        (_Process.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (FunctionTests.test_get__processes):
        (MultiProcessBrokerTests.setUp):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.default_worker_model):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.check_build):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.test_default_worker_model):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed typo fix that makes docs build again for the gtk2-based
        library.

        * gtk/generate-gtkdoc:

2012-02-08  Adam Barth  <abarth@webkit.org>

        Don't re-implement ZipFile.extractall
        https://bugs.webkit.org/show_bug.cgi?id=78173

        Reviewed by Eric Seidel.

        We can use ZipFile.extractall now that we don't support Python 2.5.

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

2012-02-08  Adam Barth  <abarth@webkit.org>

        Remove the ospath compat shim from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=78170

        Reviewed by Eric Seidel.

        We no longer need this compat shim now that we don't support Python 2.5.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.relpath):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.relpath):
        * Scripts/webkitpy/common/system/ospath.py: Removed.
        * Scripts/webkitpy/common/system/ospath_unittest.py: Removed.

2012-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r107053.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests):

2012-02-08  Adam Barth  <abarth@webkit.org>

        Remove simplejson because it's no longer used by webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=78164

        Reviewed by Eric Seidel.

        All the importers of this code were removed in a previous patch.

        * Scripts/webkitpy/thirdparty/simplejson: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/LICENSE.txt: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/README.txt: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/__init__.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/_speedups.c: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/decoder.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/encoder.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/jsonfilter.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/ordered_dict.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/scanner.py: Removed.
        * Scripts/webkitpy/thirdparty/simplejson/tool.py: Removed.

2012-02-08  Adam Barth  <abarth@webkit.org>

        webkitpy still imports simplejson
        https://bugs.webkit.org/show_bug.cgi?id=78161

        Reviewed by Eric Seidel.

        We no longer support Python 2.5, so we can rely upon Python's built-in
        JSON package.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Fails to build docs with non-standard build directories
        https://bugs.webkit.org/show_bug.cgi?id=78118

        * gtk/common.py:
        (get_build_path): add comment to document changes done in r107098,
        as requested by the reviewer and forgotten by me.

2012-02-08  Adam Barth  <abarth@webkit.org>

        Stop importing with_statement from the mysterious future
        https://bugs.webkit.org/show_bug.cgi?id=78156

        Reviewed by Eric Seidel.

        The future is now!  (Well, at least 2008, when Python 2.6 was released,
        is no longer the __future__.)

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/file_uploader.py:
        * Scripts/webkitpy/common/newstringio_unittest.py:
        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/fileset.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/common/thread/threadedmessagequeue.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        (of):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:

2012-02-08  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Upstream DumpRenderTreeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78042

        Reviewed by Antonio Gomes.

        Upstream more parts of our DRT implementation.

        * DumpRenderTree/blackberry/AccessibilityControllerBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/EventSender.cpp: Added.
        * DumpRenderTree/blackberry/EventSender.h: Added.
        * DumpRenderTree/blackberry/GCControllerBlackBerry.cpp: Added.
        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp: Added.

2012-02-08  Dirk Pranke  <dpranke@chromium.org>

        check-webkit-style failing with "Path does not exist."
        https://bugs.webkit.org/show_bug.cgi?id=77873

        Reviewed by Ojan Vafai.

        This change fixes the way the style checker determines which
        Port class to use for a given test_expectations.txt path; the
        previous version used a heuristic that didn't really work in the
        first place.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_expectations_path):
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path):
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):

2012-02-08  Fehér Zsolt  <feherzs@inf.u-szeged.hu>

        nrwt: make --skip-pixel-test-if-no-baseline option
        https://bugs.webkit.org/show_bug.cgi?id=70484

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        (SingleTestRunner._should_fetch_expected_checksum):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.handle_test_list):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.cmd_line):
        * 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_skip_pixel_test_if_no_baseline_option):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        (TestController):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::setIsPixelTest):
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::setSkipPixelTestOption):
        (TestInvocation):

2012-02-08  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Upstream DumpRenderTreeBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=78042

        Reviewed by Antonio Gomes.

        Add implementation for our DumpRenderTree solution.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp: Added.
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h: Added.

2012-02-08  Antti Koivisto  <antti@apple.com>

        REGRESSION (r106681): Null check missing in [WebFrame(WebInternal) _typingStyle]
        https://bugs.webkit.org/show_bug.cgi?id=78080

        Reviewed by Andreas Kling, Darin Adler and Dan Bernstein.
        
        Add API test.

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

2012-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Fails to build docs with non-standard build directories
        https://bugs.webkit.org/show_bug.cgi?id=78118

        Reviewed by Martin Robinson.

        * gtk/common.py:
        (get_build_path): also try the current directory as a valid build
        dir, which makes non-standard build directories such as build-2.0
        and build-3.0 work

2012-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Open links in a new window when clicking with the middle button in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=78099

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy): Check whether it's a link clicked with the
        middle mouse button and load the request in a new window.
        (browserWindowConstructed): Connect to
        WebKitWebView::decide-policy signal.

2012-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Revert a part of the change in r106687 as a build fix.

        Since Chromium port doesn't checkout the entire WebKit trunk,
        we can't run "svn info" on webkit_base.

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

2012-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests doesn't recognize paths that start with PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=78012

        Reviewed by Adam Barth.

        Use resolve paths using filesystem.relpath before passing it to find_files.find.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._collect_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_collect_tests):
        (test_collect_tests.add_file):

2012-02-07  Justin Novosad  <junov@chromium.org>

        [Chromium] add option for 2d canvas defered rendering to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=78039

        Reviewed by Stephen White.

        Adding the --enable-deferred-2d-canvas switch to DumpRenderTree

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setDeferred2dCanvasEnabled):
        (TestShell):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        (WebPreferences):

2012-02-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE] Use *bin* and *lib* directories for executable and libraries.
        https://bugs.webkit.org/show_bug.cgi?id=77928

        Reviewed by Daniel Bates.

        CMake has used *Programs* directory for executable. In addition, shared libraries are being
        built in source directory. It is better to set common places in order to maintain executable
        and libraries. *bin* is for executable and *lib* is for library.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:
        (jscProductDir):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort._path_to_driver):
        (EflPort._path_to_image_diff):

2012-02-07  Adam Klein  <adamk@chromium.org>

        Add JSC support for delivering mutations when the outermost script context exits
        https://bugs.webkit.org/show_bug.cgi?id=70289

        Reviewed by Eric Seidel.

        * DumpRenderTree/mac/EventSendingController.mm: Add support for
        eventSender.scheduleAsynchronousKeyDown.
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController keyDownWrapper:withModifiers:withLocation:]):
        (-[EventSendingController scheduleAsynchronousKeyDown:withModifiers:withLocation:]):
        * Scripts/build-webkit: Properly alphabetize --mutation-observers in the --help output.

2012-02-07  Chris Rogers  <crogers@google.com>

        Add Chris Rogers to reviewers section
        https://bugs.webkit.org/show_bug.cgi?id=78016

        Reviewed by Adam Barth.

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

2012-02-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        layoutTestController.display() is flaky for SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=78021

        Reviewed by Dan Bernstein.

        Fix race condition in repaint rect tracking. When running a test using the repaint.js
        harness right after a test starting with "svg/W3C-SVG-1.1" the repaint test will fail,
        the gray overlay isn't contained in the pixel dump anymore. This is because of a specific
        hack that forces 480x360 instead of 800x600 pixel test dumps for any test starting with
        svg/W3C-SVG-1.1. The resizing of the web view was done when dumping the render tree, after
        the repaint test already run, thus invalidating the previously tracked repaint rects.

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

2012-02-07  Hans Wennborg  <hans@chromium.org>

        Chromium: remove WebSpeechInputResult::set
        https://bugs.webkit.org/show_bug.cgi?id=77977

        Reviewed by Darin Fisher.

        It was renamed to assign() in r106475.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (makeRectResult):

2012-02-07  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Give emulated touch-point a radius
        https://bugs.webkit.org/show_bug.cgi?id=77985
        
        Increase the radius of touch-point and show the actual size of the touch point in the touch-point mockup.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/qml/MockTouchPoint.qml:

2012-02-07  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Include gdk-pixbuf in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=77980

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild.modules: Add gdk-pixbuf to the jhbuild moduleset.

2012-02-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prevent early test termination with newer Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=77945

        Reviewed by Csaba Osztrogonác.

        QTBUG-24120 tracks a regression in Qt that would make layout tests
        terminate early. This patch works around it in a Qt 4 + 5 safe manner
        by disabling the quitOnLastWindowClosed feature, which we don't want/need
        for DRT anyway.

        * DumpRenderTree/qt/main.cpp:
        (main): Don't quit on last window closed.

2012-02-06  Martin Robinson  <mrobinson@igalia.com>

        Fix some miscellaneous 'make dist' error for WebKitGTK+.

        * MiniBrowser/gtk/GNUmakefile.am: The MiniBrowser generated
        files should not be distributed.

2012-02-02  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Each Dromaeo test needs its landing html.
        https://bugs.webkit.org/show_bug.cgi?id=77504

        Reviewed by Ryosuke Niwa.

        Added an ignorable pattern which happens in some Dromaeo tests.

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

2012-02-06  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Add missing pango include dir to fix build
        https://bugs.webkit.org/show_bug.cgi?id=77832

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Added $(PANGO_CFLAGS) to libWebCoreInternals_la_CPPFLAGS.

2012-02-06  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Fix remaining errors in GTK+ WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=77890

        Reviewed by Gustavo Noronha Silva.

        Verify that WebKit2 GTK+ test files are not skipped during style checks.
        Skip soup_server_new when checking for NULL versus 0 usage.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherSkipTest.test_should_skip_with_warning):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_null):

2012-02-06  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-from-bug should be able to apply non-reviewed patches
        https://bugs.webkit.org/show_bug.cgi?id=77883

        Reviewed by Adam Barth.

        This is very helpful if you use bugzilla as a replacement for git-stash.
        Makes it simpler to re-apply the patch w/o having to look up the patch id.

        * Scripts/webkitpy/tool/commands/download.py:
        (ProcessBugsMixin._fetch_list_of_patches_to_process):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.test_apply_from_bug):

2012-02-06  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] cpp style-checker complains about readability/naming in GStreamer elements source files
        https://bugs.webkit.org/show_bug.cgi?id=77866

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checker.py: Ignore readability/naming
        errors in some gstreamer source code files defining new GStreamer elements.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make sure html_dir exists before calling gtkdoc-rebase
        https://bugs.webkit.org/show_bug.cgi?id=77869

        Reviewed by Philippe Normand.

        * gtk/gtkdoc.py:
        (GTKDoc.rebase_installed_docs): Check html_dir exists.

2012-02-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Don't version QtWebKit.experimental.
        https://bugs.webkit.org/show_bug.cgi?id=77739

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix several gtkdoc-fixxref warnings
        https://bugs.webkit.org/show_bug.cgi?id=77613

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit1_options): Add webkitspellcheckerenchant.* to the list
        of ignored files, since it's private.
        * gtk/gtkdoc.py:
        (GTKDoc._ignored_files_basenames): Helper function that returns a
        string with the list of ignored files basenames separated by a
        spaces, as expected by several gtkdoc commands.
        (GTKDoc._run_gtkdoc_scan): Use _ignored_files_basenames for
        --ignore-headers option.
        (GTKDoc._run_gtkdoc_mkdb): Use _ignored_files_basenames for
        --ignore-files option.

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix xrefs after installing API documentation
        https://bugs.webkit.org/show_bug.cgi?id=77551

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Call generate-gtkdoc --rebase after installing
        api docs.
        * gtk/common.py:
        (prefix_of_pkg_config_file): Get the prefix variable of the given
        pkg-config file.
        (gtk_version_of_pkg_config_file): Get the gtk version required by
        the given pkg-config file.
        * gtk/generate-gtkdoc: Add --rebase command line option to rebase
        installed documentation.
        (get_gtkdoc_module_paths): Get paths where API doc is installed
        for the dependencies of the given pkg-config file.
        (get_common_xref_deps): Get API doc directories of dependencies
        common to WebKit1 and WebKit2.
        (get_webkit2_options): Add cross_reference_deps option.
        (get_webkit1_options): Ditto
        (rebase_installed_docs): Helper function to create a generator for
        the given pkg-config file and options and call rebase_installed_docs.
        * gtk/gtkdoc.py:
        (GTKDoc.__init__): Initialize cross_reference_deps.
        (GTKDoc._run_gtkdoc_fixxref): Add API doc directories of
        dependencies.
        (GTKDoc.rebase_installed_docs): Call gtkdoc-rebase to fix xref
        links of installed documentation.
        (PkgConfigGTKDoc.__init__): Get the prefix from the pkg-config
        file.

2012-02-06  Sergio Villar Senin  <svillar@igalia.com>

        Incorrect statistics shown when running run-webkit-tests with --repeat-each or --iterations
        https://bugs.webkit.org/show_bug.cgi?id=77672

        Reviewed by Dirk Pranke.

        Test repetitions must be taken into account when working out
        the statistics shown by run-webkit-tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.prepare_lists_and_print_output):
        (Manager._print_result_summary):
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        (ResultSummary.__init__):
        (ResultSummary.add):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_repeat_each_iterations_num_tests):

2012-02-05  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10809525> WebKit2’s WebFrameLoaderClient::shouldUseCredentialStorage() always returns true
        https://bugs.webkit.org/show_bug.cgi?id=77823

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Updated for the additional callback.

2012-02-04  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10660698> Clients cannot prevent caching of individual responses
        https://bugs.webkit.org/show_bug.cgi?id=77822

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Updated for the additional callback.

2012-02-04  Sam Weinig  <sam@webkit.org>

        Add ability to send WKURLRequests in WebKit2 API user messages
        https://bugs.webkit.org/show_bug.cgi?id=77819

        Reviewed by Anders Carlsson.

        Add testing for round-tripping WKTypes from the UIProcess,
        to the WebProcess, and back.

        - This commit adds a test fixture and tests for WKURLRequestRef, WKURLRef, and WKStringRef.
          More can easily be added.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp: Added.
        (TestWebKitAPI):
        (WebKit2UserMessageRoundTripTest):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::WebKit2UserMessageRoundTripTest):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::didFinishLoadForFrame):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setInjectedBundleClient):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setPageLoaderClient):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::SetUp):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::roundTrip):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKit2/UserMessage_Bundle.cpp: Added.
        (TestWebKitAPI):
        (UserMessageTest):
        (TestWebKitAPI::UserMessageTest::UserMessageTest):
        (TestWebKitAPI::UserMessageTest::didReceiveMessage):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:

2012-02-04  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10772406> WKPreferences instances cannot be copied
        https://bugs.webkit.org/show_bug.cgi?id=77816

        Reviewed by Sam Weinig.

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

2012-02-04  Adam Barth  <abarth@webkit.org>

        garden-o-matic's All Failure tab should let you examine and rebaseline expected failures
        https://bugs.webkit.org/show_bug.cgi?id=77802

        Reviewed by Eric Seidel.

        This patch refactors our directory grouping code into base.js where it
        can be shared between failures.js and notifications.js.  It then adds
        an Examine action to each group of failures that triggers the "results"
        view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css:

2012-02-04  Ojan Vafai  <ojan@chromium.org>

        check-webkit-style is throwing an exception
        https://bugs.webkit.org/show_bug.cgi?id=77744

        Reviewed by David Levin.

        If the test_list is None, then we don't need to check for unsupported
        feature tests to skip.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._has_test_in_directories):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_skipped_tests_for_unsupported_features_empty_test_list):

2012-02-03  Adam Barth  <abarth@webkit.org>

        List of all failures in garden-o-matic should actually list all the failures
        https://bugs.webkit.org/show_bug.cgi?id=77796

        Reviewed by Eric Seidel.

        This patch wires a bit more data into the new "All Failures" tab.  I've
        also iterated on how we enable this experimental feature.  The tab is
        still just a dumb list, but we'll make it smarter.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix after r106692.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_reference_files):

2012-02-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77782
        WebPageProxy::didNewFirstVisuallyNonEmptyLayout should is called more than 
        once on some pages with frames
        -and corresponding-
        <rdar://problem/10798474>

        Reviewed by Sam Weinig.

        One new test.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didForceRepaint):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutFramesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFramesTest::NewFirstVisuallyNonEmptyLayoutFramesTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFramesTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/lots-of-iframes.html: Added.

2012-02-03  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: change exit() calls to sys.exit(), fix a leak in outputcapture
        https://bugs.webkit.org/show_bug.cgi?id=77781

        Reviewed by Eric Seidel.

        This change fixes a couple of issues discovered while debugging
        test-webkitpy; both calling exit() instead of sys.exit() --
        which is discouraged in program code instead of the interpreter
        -- and a particular usage of outputcapture were stdin to get whacked
        and preventing debugging.
       
        This change introduces a couple of common _exit() methods that
        will standardize how webkit-patch exit's, in case we need to do
        something different in the future.

        * Scripts/webkitpy/common/system/deprecated_logging.py:
        (error):
        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.assert_outputs):
        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.exit_after_handled_error):
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        (AbstractSequencedCommand.execute):
        * Scripts/webkitpy/tool/commands/queues.py:
        (StyleQueue.handle_script_error):
        * Scripts/webkitpy/tool/commands/upload.py:
        (MarkBugFixed.execute):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (Command._exit):
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        (AbstractStep._exit):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff.run):

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Perf bot build fix.

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

2012-02-03  Adam Barth  <abarth@webkit.org>

        Add a blank "Expected Failures" tab to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=77793

        Reviewed by Eric Seidel.

        This tab will help us explore and manage our expected failures.  The
        tab is hidden by default via a new "experimental features" flag.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.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/styles/onebar.css:
        (#unexpected):
        (#onebar.partytime #unexpected):

2012-02-03  Lucas Forschler  <lforschler@apple.com>

        update-webkit-support-libraries is broken with the change from http to https on developer.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=77785

        Fix the build bots.
        
        Pass the -k and --sslv3 keys to make curl work with https on https://developer.apple.com

        * Scripts/update-webkit-support-libs:
        (downloadExpectedVersionNumber):

2012-02-03  Lucas Forschler  <lforschler@apple.com>

        Add a Mac Lion Performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=77765

        Reviewed by Adam Roben.

        This will update the master configuration in the following ways:
            Add a new performance slave (apple-xseve-11)
            Add a new Factory to download a build and run perf tests.
            
        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadAndPerfTestFactory):
        (DownloadAndPerfTestFactory.__init__):

2012-02-03  Dirk Pranke  <dpranke@chromium.org>

        Extra TestWebKitAPI.gyp/TestWebKitAPI.target.chromium.mk in repository
        https://bugs.webkit.org/show_bug.cgi?id=77752

        Reviewed by James Robinson.

        Delete unneeded file accidentally checked in in r106481.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.target.chromium.mk: Removed.

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Ref Tests should support plain SVG files
        https://bugs.webkit.org/show_bug.cgi?id=77685

        Reviewed by Tony Chang.

        Don't assume reference files always use .html as the extension.
        Instead, use the list of supported extension to look for -expected.* and -mismatch.*

        Also fix various bugs in MockFileSystem and TestPort.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.isdir):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.reference_files):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_is_test_file):
        (PortTest.test_reference_files):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__):

2012-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        perf-o-matic should store chromium svn revision
        https://bugs.webkit.org/show_bug.cgi?id=77725

        Reviewed by Dirk Pranke.

        Report both WebKit and Chromium revisions to the graph server. Renamed test_repository_paths to
        repository_paths since it's nothing to do with tests. Also refactored scm so that head_svn_revision
        is implemented in terms of newly added svn_revision.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.svn_revision):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.head_svn_revision):
        (SCM):
        (SCM.svn_revision):
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.svn_revision):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.svn_revision):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase._insert_generic_metadata):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.repository_paths):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.repository_paths):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._generate_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_run_test_set_with_multiple_repositories):

2012-02-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Split QQuickWebViewPrivate in two classes, for desktop and touch behavior.
        https://bugs.webkit.org/show_bug.cgi?id=77632

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions):
        (WindowOptions::WindowOptions):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/main.cpp:
        (main):
        * qmake/mkspecs/features/default_post.prf:

2012-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace GNU linker script for exports with export macros in WTF/JSC
        https://bugs.webkit.org/show_bug.cgi?id=77723

        Reviewed by Tor Arne Vestbø.

        * Tools.pro: Compile WTR again on all platforms with WK2.

2012-02-03  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Ensure that inspector disabled build works
        https://bugs.webkit.org/show_bug.cgi?id=77604

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-02-02  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add support for --makeargs to the ninja-based build
        https://bugs.webkit.org/show_bug.cgi?id=77688

        Reviewed by Adam Barth.

        * Scripts/webkitdirs.pm:
        (buildChromiumNinja):

2012-02-02  Eric Seidel  <eric@webkit.org>

        Run tests in serial on SnowLeopard to avoid CFURLCache crashes
        https://bugs.webkit.org/show_bug.cgi?id=75145

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_operating_system):
        (test_default_child_processes):

2012-02-02  Dirk Pranke  <dpranke@chromium.org>

       nrwt shouldn't blow up when there are errors in test_expectations.txt
       https://bugs.webkit.org/show_bug.cgi?id=73603

       Reviewed by Ojan Vafai.

       This change removes the distinction between 'errors' and 'warnings'
       in the test expectations parser. Now, any problem is a
       'warning', and if we are linting the file, warnings become fatal (errors).

        This will allow a normal run-webkit-tests run to proceed even if
        there are bad lines.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (ParseError.__init__):
        (ParseError.__str__):
        (ParseError.__repr__):
        (TestExpectationSerializer.to_string):
        (TestExpectationParser._parse_modifiers):
        (TestExpectationParser._parse_expectations):
        (TestExpectationParser._check_modifiers_against_expectations):
        (TestExpectationParser._tokenize):
        (TestExpectationLine.__init__):
        (TestExpectationLine.is_invalid):
        (TestExpectationsModel.add_expectation_line):
        (TestExpectationsModel._already_seen_better_match):
        (TestExpectations.__init__):
        (TestExpectations._report_warnings):
        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (assert_bad_expectations):
        (test_parse_warning):
        (test_overrides__duplicate):
        (ExpectationSyntaxTests.test_missing_expectation):
        (ExpectationSyntaxTests.test_missing_colon):
        (ExpectationSyntaxTests.test_too_many_colons):
        (ExpectationSyntaxTests.test_too_many_equals_signs):
        (ExpectationSyntaxTests.test_unrecognized_expectation):
        (SemanticTests.test_bug_format):
        (SemanticTests.test_bad_bugid):
        (SemanticTests.test_slow_and_timeout):
        (test_ambiguous):
        (test_more_modifiers):
        (test_order_in_file):
        (test_macro_overrides):
        (RebaseliningTest.assertRemove):
        (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):
        (TestExpectationSerializerTests.test_unparsed_to_string):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):

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

        Unreviewed, rolling out r106543.
        http://trac.webkit.org/changeset/106543
        https://bugs.webkit.org/show_bug.cgi?id=77671

        Made tests less stable (Requested by rniwa on #webkit).

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):
        (run_test):

2012-02-02  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77664
        Add API tests for didNewFirstVisuallyNonEmptyLayout

        Reviewed by Darin Adler.

        Two new tests.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didForceRepaint):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didNewFirstVisuallyNonEmptyLayout):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutFailsTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFailsTest::NewFirstVisuallyNonEmptyLayoutFailsTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutFailsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp: Added.
        (TestWebKitAPI):
        (NewFirstVisuallyNonEmptyLayoutTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutTest::NewFirstVisuallyNonEmptyLayoutTest):
        (TestWebKitAPI::NewFirstVisuallyNonEmptyLayoutTest::didCreatePage):

2012-02-02  Michael Saboff  <msaboff@apple.com>

        Add Michael Saboff to reviewers list.

        Rubber-stamped by Gavin Barraclough.

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

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

        Add myself as a committer

        Unreviewed

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

2012-02-02  Ryosuke Niwa  <rniwa@webkit.org>

        [PerformanceTests] tests have dependencies
        https://bugs.webkit.org/show_bug.cgi?id=77506

        Reviewed by Hajime Morita.

        Load an initialization page before each test after starting a DRT so that
        warming up DRT won't affect the performance test results.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):
        (test_initial_page_loaded):
        (test_initial_page_loaded.run_test):

2012-02-02  Ryosuke Niwa  <rniwa@webkit.org>

        Re-land r106442 per Adam's suggestion. We'll do both restarting DRT and loading a fake test first.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_passing_test):
        (test_run_silent_test):
        (test_run_failed_test):
        (test_run_tonguey_test):
        (test_run_timeout_test):
        (test_run_crash_test):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.__init__):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.stop):

2012-02-01  Jacob Goldstein  <jacobg@adobe.com>

        Webkit generate-coverage-data script needs update to use new test script
        https://bugs.webkit.org/show_bug.cgi?id=77597

        Reviewed by Dirk Schulze.

        * Scripts/generate-coverage-data:

2012-02-01  Adam Barth  <abarth@webkit.org>

        Update the tests to show that the mac-ews processes patches from
        non-committers.

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSytemTest.test_committer_only_ewses):
        (EarlyWarningSytemTest.test_builder_ewses):

2012-02-01  Adam Barth  <abarth@webkit.org>

        Mac-ews logs are huge
        https://bugs.webkit.org/show_bug.cgi?id=77045

        Reviewed by Eric Seidel.

        In order to get the cr-linux-ews bot to run tests on EC2, we created
        the chromium-xvfb port, which contained a number of tweaks to the
        Chromium port's behavior.  This patch refactors those tweaks so they
        can be shared with the mac-ews, mostly by moving them into the
        non-interactive mode of RunTests.

        * Scripts/webkitpy/common/config/ports.py:
        (WebKitPort):
        (WebKitPort.layout_tests_results_path):
        (ChromiumPort.run_javascriptcore_tests_command):
        (ChromiumXVFBPort):
        (ChromiumXVFBPort.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort):
        (MockPort.layout_tests_results_path):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (WebKitPortTest.test_chromium_xvfb_port):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_missing_layout_test_results):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (CommitQueueTest.test_commit_queue):
        (test_rollout):
        (test_manual_reject_during_processing):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_no_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Roll out r106442. It made some tests more stable but others less stable.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_passing_test):
        (test_run_silent_test):
        (test_run_failed_test):
        (test_run_tonguey_test):
        (test_run_timeout_test):
        (test_run_crash_test):
        (test_run_test_set):

2012-02-01  Lucas Forschler  <lforschler@apple.com>

        Enable EWS for non-contributers.
        https://bugs.webkit.org/show_bug.cgi?id=77576
        
        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):

2012-02-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77383
        Add a different didFirstVisuallNonEmptyLayout heuristic to experiment with
        -and corresponding-
        <rdar://problem/10709560>

        Reviewed by Sam Weinig.

        WebKit2's WebLoaderClient has a temporary new function that must be accounted 
        for.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2012-02-01  Dirk Pranke  <dpranke@chromium.org>

        TestWebKitAPI isn't being built on chromium bots any more
        https://bugs.webkit.org/show_bug.cgi?id=77563

        Reviewed by Dimitri Glazkov.

        I accidentally dropped it in the refactoring in r105449.

        * TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp: Added.

2012-02-01  Hans Wennborg  <hans@chromium.org>

        Rename WebSpeechInputResult::set() to assign()
        https://bugs.webkit.org/show_bug.cgi?id=77540

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::addMockRecognitionResult):
        (MockWebSpeechInputController::speechTaskFired):

2012-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit1 API documentation is not generated when building with gtk-2.0
        https://bugs.webkit.org/show_bug.cgi?id=77542

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc: Check first whether there's
        webkitgtk-3.0.pc and if it doesn't exist use webkitgtk-1.0.pc
        instead.
        (get_webkit2_options): Return just the options since the
        pkg_config_path doesn't depend on options
        (get_webkit1_options): Ditto.
        (generate_doc): Helper function to create a generator and generate
        documentation for the given pkg-config file with the given options.
        * gtk/gtkdoc.py:
        (GTKDoc.__init__): Don't use ** for args parameter, since it's
        used as a dict and never expanded.
        (PkgConfigGTKDoc.__init__): Ditto.

2012-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] API documentation is not installed even when building with --enable-gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=77094

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add install-data-local and uninstall-local rules
        to install/uninstall WebKit1 and WebKit2 API documentation.

2012-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106460.
        http://trac.webkit.org/changeset/106460
        https://bugs.webkit.org/show_bug.cgi?id=77552

        It break unit tests if WEBKIT_TESTFONTS isn't defined.
        (Requested by Ossy on #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:

2012-02-01  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [Qt] Automatic clean build feature always do clean build with --no-webkit2
        https://bugs.webkit.org/show_bug.cgi?id=74519

        Reviewed by Tor Arne Vestbø.

        Set the PLUGIN_ARCHITECTURE_UNSUPPORTED define always.

        * qmake/mkspecs/features/features.prf:

2012-02-01  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] run-webkit-tests --qt  crashes if WEBKIT_TESTFONTS is not set
        https://bugs.webkit.org/show_bug.cgi?id=77466

        Reviewed by Kenneth Rohde Christiansen.

        Replicate the behavior of old-run-webkit-tests and check if WEBKIT_TESTFONTS
        is set or if we should raise an error.

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

2012-02-01  Philippe Normand  <pnormand@igalia.com> and Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Improve FrameLoader signals. Resource loading
        https://bugs.webkit.org/show_bug.cgi?id=49543

        Support for the new loader signals in DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (urlPath):
        (willSendRequestCallback):
        (urlSuitableForTestResult):
        (descriptionSuitableForTestResult):
        (didReceiveResponse):
        (didFinishLoading):
        (didFailLoadingWithError):
        (createWebView):

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should restart DRT for each test
        https://bugs.webkit.org/show_bug.cgi?id=77506

        Reviewed by Adam Barth.

        Always restart DRT when running performance tests in order to minimize the dependency between tests.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.stop):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_passing_test):
        (test_run_silent_test):
        (test_run_failed_test):
        (test_run_tonguey_test):
        (test_run_timeout_test):
        (test_run_crash_test):
        (test_run_test_set_kills_drt_per_run):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.__init__):
        (test_run_test_set_kills_drt_per_run.TestDriverWithStopCount.stop):

2012-01-31  Hans Wennborg  <hans@chromium.org>

        Speech Input: Report speech element rect relative to window rather than frame
        https://bugs.webkit.org/show_bug.cgi?id=76443

        Reviewed by Darin Fisher.

        Update LayoutTestController to allow for retrieving the speech
        element's position used in a request.

        In Chromium this is handled by the MockWebSpeechInputController;
        adding stubs for the other implementations.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputDumpRectCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController):
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp:
        (MockWebSpeechInputController::setDumpRect):
        (MockWebSpeechInputController::clearResults):
        (MockWebSpeechInputController::startRecognition):
        (MockWebSpeechInputController::MockWebSpeechInputController):
        (makeRectResult):
        (MockWebSpeechInputController::speechTaskFired):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h:
        (MockWebSpeechInputController):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputDumpRect):

2012-01-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add basic DRT/Efl implementation to support viewport test.
        https://bugs.webkit.org/show_bug.cgi?id=77320

        Reviewed by Andreas Kling.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::dumpConfigurationForViewport): call dumpConfigurationForViewport().

2012-01-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (WebKit2): event.keyCode is always zero when typing in Russian
        https://bugs.webkit.org/show_bug.cgi?id=77473
        <rdar://problem/10751357>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown):
        Added a new special keyDown value to test this.

2012-01-31  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix the mock port to work with DriverProxy, reftests
        https://bugs.webkit.org/show_bug.cgi?id=77170

        Reviewed by Eric Seidel.

        The DryrunPort used for benchmarking and testing NRWT has been
        broken since we added the DriverProxy code. It isn't really
        needed any more, so I've removed it.

        The MockDRT port was also broken by DriverProxy, and moreover,
        never worked w/ reftests. Since we don't exercise this module in
        the unit tests, the code had also bitrotted some. I have cleaned
        it up and made it use DriverInput and DriverOutput for
        consistency.

        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryRunPort.__init__):
        (DryRunPort):
        (DryRunPort.real_name):
        (DryRunPort.create_driver):
        (DryRunPort.driver_cmd_line):
        (DryRunPort._driver_class):
        (DryrunDriver):
        (DryrunDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.create_driver):
        (MockChromiumDRT.run_one_test):

2012-01-31  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests calls out to webkit-build-directory twice
        https://bugs.webkit.org/show_bug.cgi?id=77248

        Reviewed by Dirk Pranke.

        * Scripts/webkit-build-directory:
        If called with no arguments, print out both the top-level directory and the 
        configuration directory

        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):
        When called with no arguments, get and cache both the top-level and configuration directories.

        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.assert_configuration):
        (ConfigTest.test_build_directory.mock_webkit_build_directory):
        (ConfigTest.test_build_directory):
        (ConfigTest.test_default_configuration__notfound):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):
        Cache the build directory in the options object so that other users
        of the options object don't need to call out to webkit-build-directory.
        Also, properly support the existing --build-directory argument.

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Bump up the timeout for performance tests since DOM/DOMTable.html
        and Parser/html5-full-render.html are timing out on the bot.

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

2012-01-31  Ehsan Akhgari  <ehsan.akhgari@gmail.com>

        Fix the update_webgl_conformance_tests.py script in order to enable it
        to detect the SCM being used correctly.
        https://bugs.webkit.org/show_bug.cgi?id=77462

        Reviewed by Kenneth Russell.

        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (default_out_dir):

2012-01-31  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-from-bug should work regardless of your CWD
        https://bugs.webkit.org/show_bug.cgi?id=77482

        Reviewed by Adam Barth.

        webkit-patch only ever works with patches made from the root
        directory.  We should pass the CWD to svn-apply in the case
        where we're running not from the webkit root.  I believe
        this used to work in the past and regressed.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_apply_patch):

2012-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106302.
        http://trac.webkit.org/changeset/106302
        https://bugs.webkit.org/show_bug.cgi?id=77472

        Broke building DRT before running the tests (Requested by ojan
        on #webkit).

        * Scripts/webkit-build-directory:
        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):
        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.assert_configuration):
        (ConfigTest.test_build_directory.mock_webkit_build_directory):
        (ConfigTest.test_build_directory):
        (ConfigTest.test_default_configuration__notfound):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):

2012-01-31  Antoine Labour  <piman@chromium.org>

        Merge WebGraphicsContext3D creation and initialization, and move it to
        WebViewClient.
        https://bugs.webkit.org/show_bug.cgi?id=76593

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::initialize):
        * DumpRenderTree/chromium/TestWebPlugin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createGraphicsContext3D):
        (WebViewHost::createPlugin):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-31  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] build-webkit warning.
        https://bugs.webkit.org/show_bug.cgi?id=77411

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (isCrossCompilation):

2012-01-31  Dan Bernstein  <mitz@apple.com>

        When generating derived sources, use the same compiler that is used to compile WebKitTestRunner.

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

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

        If the QTDIR environment variable is set, the build system fails to compile WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=77112

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm:
        (determineIsQt):

2012-01-31  Adam Roben  <aroben@apple.com>

        Only call -typingAttributes on WebViews, not WebHTMLViews

        Looks like this case was just missed in r105908.

        Fixes <http://webkit.org/b/77432> REGRESSION (r105908): WebKit1.InspectorBarTest is crashing

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST): Call -typingAttributes on the WebView, just like we do 2 lines
        earlier.

2012-01-31  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] MiniBrowser: Show touch mocking indicators only when Ctrl is held down.
        https://bugs.webkit.org/show_bug.cgi?id=77221

        Reviewed by Kenneth Rohde Christiansen.

        This makes sure that the indicator isn't in the way when doing clicks or dealing with the rest of the UI.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent):

2012-01-26  Hans Wennborg  <hans@chromium.org>

        Speech Input: move MockSpeechInputClient into Chromium DumpRenderTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=77083

        Reviewed by Darin Fisher.

        Add MockWebSpeechInputController which provides a mock implementation
        of the WebSpeechInputController interface, and use that in
        DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        ():
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp: Added.
        (MockWebSpeechInputController::create):
        (MockWebSpeechInputController::addMockRecognitionResult):
        (MockWebSpeechInputController::clearResults):
        (MockWebSpeechInputController::startRecognition):
        (MockWebSpeechInputController::cancelRecognition):
        (MockWebSpeechInputController::stopRecording):
        (MockWebSpeechInputController::MockWebSpeechInputController):
        (MockWebSpeechInputController::speechTaskFired):
        (MockWebSpeechInputController::SpeechTask::SpeechTask):
        (MockWebSpeechInputController::SpeechTask::stop):
        (MockWebSpeechInputController::SpeechTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h: Added.
        (WebKit):
        (MockWebSpeechInputController):
        (MockWebSpeechInputController::taskList):
        (SpeechTask):
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost::speechInputControllerMock):
        (WebViewHost):
        ():

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Add landing html for Dromaeo dom-query test
        https://bugs.webkit.org/show_bug.cgi?id=77329

        Reviewed by Ryosuke Niwa.

        Added some more ignorable output patterns to allow warnings
        from a third party test suite.

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

2012-01-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Update download URLs to new domain.
        
        * waf/build/build_utils.py:
        (update_wx_deps):

2012-01-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, add JavaScriptCore/tools
        to the list of build directories.
        
        * waf/build/settings.py:

2012-01-30  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r105797): prepare-ChangeLog for a .cpp file can
        output an empty method name (i.e. "()")
        https://bugs.webkit.org/show_bug.cgi?id=77336

        Reviewed by Darin Adler.

        r105797 tried to detect a change outside methods, but it causes a bug that
        prepare-ChangeLog can output an empty method name, like this:

            * foo/bar/baz.cpp:
            (method1):
            ():
            (method2):

        This is because the cpp parser in prepare-ChangeLog cannot distinguish
        '{' as the beginning of a method with '{' as the beginning of an array definition
        at the top level.

            int a[] = { 1, 2, 3 };  // This '{' is the beginning of an array definition.

            void func() { // This '{' is the beginning of a method.
                ...;
            }

        This patch fixes prepare-ChangeLog so that it skips an array definition at the top level.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): Modified as described above.
        (generateFunctionLists): As a hack, modified so that prepare-ChangeLog does not output
        an empty method name. Ideally this should not happen but may happen, since the
        parsers are not perfect.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp: Added test cases.
        (NameSpace7):
        (NameSpace8):
        (Class109):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:

2012-01-30  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests calls out to webkit-build-directory twice
        https://bugs.webkit.org/show_bug.cgi?id=77248

        Reviewed by Dirk Pranke.

        This reduces to calls to webkit-build-directory to one call and
        saves 500ms for run-webkit-tests over a single file.

        * Scripts/webkit-build-directory:
        If called with no arguments, print out both the top-level directory and the 
        configuration directory.

        * Scripts/webkit-build-directory:
        * Scripts/webkitpy/layout_tests/port/config.py:
        (Config.build_directory):
        When called with no arguments, get and cache both the top-level and configuration directories.

        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        (ConfigTest.assert_configuration):
        (ConfigTest.test_build_directory.mock_webkit_build_directory):
        (ConfigTest.test_build_directory):
        (ConfigTest.test_default_configuration__notfound):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._build_path):
        Cache the root directory in the options object so that other users
        of the options object don't need to call out to webkit-build-directory.

2012-01-30  Ojan Vafai  <ojan@chromium.org>

        Parsing test_expecations.txt + Skipped lists takes too long
        https://bugs.webkit.org/show_bug.cgi?id=77059

        Reviewed by Dirk Pranke.

        This saves ~100ms on the Apple Mac port.
        -memoize a bunch of path methods.
        -Avoid doing multiple disk accesses per line.
        -Parse the skipped list directly instead of turning it into a test_expecations.txt
        formatting string and parsing that.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        (test_add_skipped_tests_duplicate):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.test_isfile):
        (Port.normalize_test_name):
        (Port.layout_tests_dir):
        (Port.abspath_for_test):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2012-01-30  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed. Add myself to CSS, GStreamer, Qt related watchlists.
        
        * Scripts/webkitpy/common/config/watchlist:

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix following bug#76855

        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        ():
        (TestWebKitAPI::TEST_F):

2012-01-26  No'am Rosenthal  <noam.rosenthal@nokia.com> and Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] WKTR: Use a software rendering pipiline when running tests.
        https://bugs.webkit.org/show_bug.cgi?id=76708

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::PlatformWebView::PlatformWebView): Use software rendering of layers since the wrapping QQuickView isn't shown.

2012-01-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Store build config immediately instead of waiting for a successfull build

        Otherwise we will not pick up changes to the config if the build is aborted,
        for example due to build errors or if the user pressed Ctrl+Z. We now write
        the new config before starting a build, but still defer to write the SVN
        revision once the build completes successfully.

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-30  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Add "New Window" button to the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=77281

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/plus.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

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

        Unreviewed rolling out r106222.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.handle_test_list):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__):
        * 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):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::setIsPixelTest):

2012-01-30  Hans Wennborg  <hans@chromium.org>

        Unreviewed, rolling out r106219.
        http://trac.webkit.org/changeset/106219
        https://bugs.webkit.org/show_bug.cgi?id=77083

        This broke Chromium's test_shell.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (WebKit):
        (LayoutTestController):
        ():
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp: Removed.
        * DumpRenderTree/chromium/MockWebSpeechInputController.h: Removed.
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost::speechInputControllerMock):
        (WebViewHost):
        ():

2012-01-26  Hans Wennborg  <hans@chromium.org>

        Speech Input: move MockSpeechInputClient into Chromium DumpRenderTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=77083

        Reviewed by Darin Fisher.

        Add MockWebSpeechInputController which provides a mock implementation
        of the WebSpeechInputController interface, and use that in
        DumpRenderTree.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        ():
        * DumpRenderTree/chromium/MockWebSpeechInputController.cpp: Added.
        (MockWebSpeechInputController::create):
        (MockWebSpeechInputController::addMockRecognitionResult):
        (MockWebSpeechInputController::clearResults):
        (MockWebSpeechInputController::startRecognition):
        (MockWebSpeechInputController::cancelRecognition):
        (MockWebSpeechInputController::stopRecording):
        (MockWebSpeechInputController::MockWebSpeechInputController):
        (MockWebSpeechInputController::speechTaskFired):
        (MockWebSpeechInputController::SpeechTask::SpeechTask):
        (MockWebSpeechInputController::SpeechTask::stop):
        (MockWebSpeechInputController::SpeechTask::runIfValid):
        * DumpRenderTree/chromium/MockWebSpeechInputController.h: Added.
        (WebKit):
        (MockWebSpeechInputController):
        (MockWebSpeechInputController::taskList):
        (SpeechTask):
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebKit):
        (WebViewHost::speechInputControllerMock):
        (WebViewHost):
        ():

2012-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106109.
        http://trac.webkit.org/changeset/106109
        https://bugs.webkit.org/show_bug.cgi?id=77302

        It made tests crash (Requested by Ossy_weekend on #webkit).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::PlatformWebView::PlatformWebView):

2012-01-28  Nico Weber  <thakis@chromium.org>

        [chromium] Add support for building standalone webkit/chromium checkouts with ninja.
        https://bugs.webkit.org/show_bug.cgi?id=77243

        Reviewed by Adam Barth.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (isChromiumNinja):
        (determineIsChromiumNinja):
        (buildChromiumNinja):
        (buildChromium):

2012-01-27  Kentaro Hara  <haraken@chromium.org>

        The cpp parser of prepare-ChangeLog treats if(...) {} as a method
        https://bugs.webkit.org/show_bug.cgi?id=77241

        Reviewed by Ryosuke Niwa.

        The cpp parser of prepare-ChangeLog is wrong, and an inner {} block
        in a method in some namespace or class is treated as a method.
        This patch fixes the bug.

            class C {
                void func()
                {
                    if (1) {    // This should not be treated as a method.
                    }
                }
            };

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp:
        (Class108):
        (Class108::func35):

2012-01-27  Enrica Casucci  <enrica@apple.com>

        Followup to http://trac.webkit.org/changeset/106171.
        Dan Bernstein pointed out correctly that I should
        have used copy instead of initWithString.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (-[LocalPasteboard initWithName:]):

2012-01-27  Enrica Casucci  <enrica@apple.com>

        DRT pasteboard object should return the correct pasteboard name.
        https://bugs.webkit.org/show_bug.cgi?id=77260
        
        Currently the name property always returns nil.
        Adding a memeber variable to store the pasteboard name and return its
        value from the name method instead of returning nil always.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (-[LocalPasteboard initWithName:]):
        (-[LocalPasteboard name]):

2012-01-27  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WK2] Implement the policy client
        https://bugs.webkit.org/show_bug.cgi?id=76343

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Update the list of skipped source files to include all clients.

2012-01-27  Ada Chan  <adachan@apple.com>

        Add test for WKBundleFrameGetParentFrame().
        https://bugs.webkit.org/show_bug.cgi?id=77161

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add ParentFrame.cpp and ParentFrame_Bundle.cpp.
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Get the check result from the injected bundle.
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST): Load simple-iframe.html and then wait for the injected bundle to post result.
        Make sure the check is successful.
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp: Added.
        (TestWebKitAPI):
        (ParentFrameTest):
        (TestWebKitAPI::ParentFrameTest::ParentFrameTest):
        (TestWebKitAPI::didFinishLoadForFrame): If the frame is a subframe, store it off for checking later.
        If the frame is the main frame, check whether it's indeed the subframe's parent frame and post the result
        to the test controller.
        (TestWebKitAPI::ParentFrameTest::didCreatePage): Set the page loader client on this page.

2012-01-27  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] DumpRenderTree lacks --no-timeout command line option
        https://bugs.webkit.org/show_bug.cgi?id=77196

        Reviewed by Martin Robinson.

        Add the --no-timeout command line option and reorganize
        watchdog code to make running DumpRenderTree without
        timeout possible.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setWaitToDumpWatchdog):
        (shouldSetWaitToDumpWatchdog):
        (initializeGlobalsFromCommandLineOptions):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):

2012-01-27  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Enable the automatic touch->mouse mocking on the new Qt5 hashes
        https://bugs.webkit.org/show_bug.cgi?id=77122

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):

2012-01-27  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after adding ICU support (r105997).
        https://bugs.webkit.org/show_bug.cgi?id=77118

        Define WTF_USE_ICU_UNICODE if we are on mac.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-01-27  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        Update committers.py with new contributors.
        https://bugs.webkit.org/show_bug.cgi?id=77207

        I added six new contributors into committers.py:

        - Adam Kallai
        - Balazs Ankes
        - Janos Badics
        - Nandor Huszka
        - Roland Takacs
        - Szilard Ledan-Muntean

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

2012-01-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Add Vsevolod Vlasov to reviewers list.

        Reviewed by Pavel Feldman.

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

2012-01-26  No'am Rosenthal  <noam.rosenthal@nokia.com> and Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] WKTR: Use a software rendering pipiline when running tests.
        https://bugs.webkit.org/show_bug.cgi?id=76708

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::PlatformWebView::PlatformWebView): Use software rendering of layers since the wrapping QQuickView isn't shown.

2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, add WebCore/testing/js
        to the list of source directories we build.

        * waf/build/settings.py:

2012-01-26  Filip Pizlo  <fpizlo@apple.com>

        Tools/Scripts/commit-log-editor is broken due to $_ getting clobbered
        https://bugs.webkit.org/show_bug.cgi?id=77177

        Reviewed by Jon Honeycutt.

        * Scripts/commit-log-editor:

2012-01-26  Ojan Vafai  <ojan@chromium.org>

        Decrease sleep time when killing server_process on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=77169

        Reviewed by Eric Seidel.

        This shaves another ~70ms off single test runtime.

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

2012-01-26  Ojan Vafai  <ojan@chromium.org>

        Remove builder name so http://trac.webkit.org/changeset/106035 actually works.
        https://bugs.webkit.org/show_bug.cgi?id=77164

        Reviewed by Dirk Pranke.

        http://trac.webkit.org/changeset/106035 depends on builder_name being
        falsey by default. There's other code that requires it to be iterable
        by default. So, make it be the empty string.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

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

        run-perf-test should include relative file paths in test names
        https://bugs.webkit.org/show_bug.cgi?id=77144

        Reviewed by Adam Barth.

        Include all directory names in the test name separated by "/".
        e.g. Bindings/event-target-wrapper.html translates to Bindings/event-target-wrapper

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._process_parser_test_result):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):

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

        webkitpy: re-land cleanup of test scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=77153

        Reviewed by Eric Seidel.

        This is an attempt to reland the change in bug 76973 / 
        r105935. My earlier attempt to manipulate PYTHONPATH
        seems to only work some of the time, for reasons that
        elude me. Directly adding Tools/Scripts to sys.path from
        inside the test script appears to work (more?) reliably.

        Also, it seemed like the files didn't actually get deleted
        the last time; I don't know why.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (command_line):
        (ExecutiveTest):
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        (main):
        * Scripts/webkitpy/common/system/fileutils.py: Removed.
        * Scripts/webkitpy/test/cat.py: Removed.
        * Scripts/webkitpy/test/cat_unittest.py: Removed.
        * Scripts/webkitpy/test/echo.py: Removed.
        * Scripts/webkitpy/test/echo_unittest.py: Removed.

2012-01-26  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests calls "nm" when it doesn't need to
        https://bugs.webkit.org/show_bug.cgi?id=77143

        Reviewed by Dirk Pranke.

        If we are not running any test that can be skipped by checking
        the DRT feature list or looking at the list of symbols, avoid calling
        out to DRT or calling "nm".

        This saves ~700ms on my Mac Pro. In cases where you still have to call out
        to "nm" it's only a couple ms slower.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._should_check_for_missing_features):
        (WebKitPort):
        (WebKitPort._should_check_for_missing_symbols):
        (WebKitPort._skipped_tests_for_unsupported_features):
        (WebKitPort.skipped_layout_tests):
        (WebKitPort.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest.test_skipped_directories_for_symbols):
        (test_skipped_directories_for_features):
        (test_skipped_directories_for_features_no_matching_tests_in_test_list):
        (test_skipped_layout_tests):

2012-01-26  Benjamin Poulain  <bpoulain@apple.com>

        Support a suffix on ChangeLog filenames based on a configuration file
        https://bugs.webkit.org/show_bug.cgi?id=76956

        Reviewed by Kentaro Hara.

        Modify the tools used to generate, edit and resolve ChangeLogs to support
        the addition of a suffix to the ChangeLog filename.

        This patch makes it easier to support alternate ChangeLog files in branches.

        * Scripts/VCSUtils.pm:
        (changeLogSuffix):
        (changeLogFileName):
        * Scripts/commit-log-editor:
        * Scripts/prepare-ChangeLog:
        (getLatestChangeLogs):
        (generateNewChangeLogs):
        (generateFileList):
        * Scripts/resolve-ChangeLogs:
        (findChangeLog):

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

        Unreviewed, rolling out r106038.
        http://trac.webkit.org/changeset/106038
        https://bugs.webkit.org/show_bug.cgi?id=77142

        Caused a bunch of skipped tests to not be skipped. (Requested
        by ojan on #webkit).

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.parse):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.test_dirs):
        (Port.normalize_test_name):
        (Port.update_baseline):
        (Port.layout_tests_dir):
        (Port.relative_perf_test_filename):
        (Port.abspath_for_test):

2012-01-25  Ojan Vafai  <ojan@chromium.org>

        Parsing test_expecations.txt + Skipped lists takes too long
        https://bugs.webkit.org/show_bug.cgi?id=77059

        Reviewed by Dirk Pranke.

        This saves ~100ms on the Apple Mac port.
        -memoize a bunch of path methods.
        -Avoid doing multiple disk accesses per line.
        -Parse the skipped list directly instead of turning it into a test_expecations.txt
        formatting string and parsing that.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.parse_skipped_tests):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectations.__init__):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.test_isfile):
        (Port.normalize_test_name):
        (Port.layout_tests_dir):
        (Port.abspath_for_test):

2012-01-25  Ojan Vafai  <ojan@chromium.org>

        Only store the SVN revision in the summarized results if we're on a builder
        https://bugs.webkit.org/show_bug.cgi?id=76976

        Reviewed by Dirk Pranke.

        This shaves another ~130ms off the single test run-webkit-tests runtime.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.get_result):
        (ResultSummaryTest):
        (ResultSummaryTest.get_result_summary):
        (ResultSummaryTest.get_unexpected_results):
        (ResultSummaryTest.test_no_svn_revision):
        (ResultSummaryTest.test_svn_revision):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.use_trac_links_in_results_html):

2012-01-26  Luciano Wolf  <luciano.wolf@openbossa.org>

        [Qt][WK2] fast/loader tests failed after r94178
        https://bugs.webkit.org/show_bug.cgi?id=67388

        Reviewed by Simon Hausmann.

        Applying the same fix used for Qt-WebKit1 from bug #67254 -
        [Qt][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67254
        Translate file:///tmp/LayoutTests/* urls into the repository LayoutTests directory, which is
        derived from the running location of DumpRenderTree binary.

        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::pathToLocalResource):

2012-01-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Implement overridePreference for boolean preferences in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=77033

        Reviewed by Alexey Proskuryakov.

        For now overridePreference supports boolean values.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setXSSAuditorEnabled):
        (WTR::LayoutTestController::overridePreference):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Reset the overrides
        explicitly and properly disable the use of PageCache when resetting the
        state. Tests that use PageCache can now enable it via overridePreference.

2012-01-26  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Support opening multiple URL's from the command line in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=77100

        Reviewed by Simon Hausmann.

        This patch makes the MiniBrowser read multiple URL's from the command
        line such that there will be one browser window opened for each URL.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2012-01-26  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] The Qt MiniBrowser crashes when given multiple URL's
        https://bugs.webkit.org/show_bug.cgi?id=77009

        Reviewed by Simon Hausmann.

        This patch fixes a crash in BrowserWindow::newWindow() where a
        BrowserWindow-object is constructed with a 0 pointer as the
        WindowOptions parameter which leads to a crash.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow):
        * MiniBrowser/qt/BrowserWindow.h:

2012-01-26  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Use ICU if available
        https://bugs.webkit.org/show_bug.cgi?id=76821

        Reviewed by Simon Hausmann.

        Adding unicode defines for a Qt 5 based build.

        * qmake/mkspecs/features/features.prf:

2012-01-26  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [WK2] WebKitTestRunner needs layoutTestController.setGeolocationPermission
        https://bugs.webkit.org/show_bug.cgi?id=42545

        Reviewed by Zoltan Herczeg.

        Implement the setGeolocationPermission method.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setGeolocationPermission):
        (WTR):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (LayoutTestController):

2012-01-26  Balazs Kelemen  <kbalazs@webkit.org>

        [NRWT] Support --ignore-metrics
        https://bugs.webkit.org/show_bug.cgi?id=76278

        Reviewed by Tony Chang.

        Port the feature from ORWT.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_compare_test):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverOutput):
        (DriverOutput.strip_metrics):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverOutputTest):
        (DriverOutputTest.test_strip_metrics):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        (parse_args):

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

        Unreviewed, rolling out r105935 and r105954.
        http://trac.webkit.org/changeset/105935
        http://trac.webkit.org/changeset/105954
        https://bugs.webkit.org/show_bug.cgi?id=77080

        test-webkitpy is still broken (Requested by abarth on
        #webkit).

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (never_ending_command):
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        * Scripts/webkitpy/common/system/fileutils.py:
        (make_stdout_binary):
        * Scripts/webkitpy/test/cat.py:
        (command_arguments):
        (main):
        * Scripts/webkitpy/test/cat_unittest.py:
        (CatTest):
        (CatTest.assert_cat):
        (CatTest.test_basic):
        (CatTest.test_no_newline):
        (CatTest.test_unicode):
        (CatTest.test_as_command):
        * Scripts/webkitpy/test/echo.py:
        (command_arguments):
        (main):
        * Scripts/webkitpy/test/echo_unittest.py:
        (EchoTest):
        (EchoTest.test_basic):
        (EchoTest.test_no_newline):
        (EchoTest.test_unicode):
        (EchoTest.test_argument_order):
        (EchoTest.test_empty_arguments):
        (EchoTest.test_no_arguments):
        (EchoTest.test_as_command):

2012-01-26  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] Detect cross-compilation in webkitdirs.pm to not generate gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=76138

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (isCrossCompilation):
        (buildAutotoolsProject):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Kentaro is a reviewer now.  Yay!

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

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        nrwt: running w/ no arguments fails
        https://bugs.webkit.org/show_bug.cgi?id=77064

        Unreviewed, build fix.

        This change fixes a regression introduced in r105944
        where running without --platform <foo> or one of the other
        platform switches would cause a null deref :(.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-01-25  Eric Seidel  <eric@webkit.org>

        Automatically CC someone from Apple on any changes to Obj-C public API
        https://bugs.webkit.org/show_bug.cgi?id=77053

        Reviewed by Timothy Hatcher.

        This has long been de-facto practice, seems now that we have
        fancy watchlist support, we should just make the tools
        do this automatically.

        * Scripts/webkitpy/common/config/watchlist:

2012-01-25  Antoine Labour  <piman@chromium.org>

        Updating status in committers.py.

        Unreviewed.

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

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: executive_unittest fails if PYTHONPATH isn't set
        https://bugs.webkit.org/show_bug.cgi?id=77058

        Reviewed by Eric Seidel.

        r105935 broke executive_unittest by changing which script we
        were running and not ensuring that the PYTHONPATH was set up
        properly.

        This change also fixes a regression introduced recently where
        test-webkitpy wasn't figuring out the path to Tools/Scripts
        right, either (so running ./test-webkitpy would fail).

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (script_dir):
        (ExecutiveTest.setUp):
        (ExecutiveTest):
        (ExecutiveTest.tearDown):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Disable tests on the mac-ews while we sort out hte stability issues.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):

2012-01-23  Dirk Pranke  <dpranke@chromium.org>

        investigate use of 'mac' and 'win' as fully-specified port names for the apple ports
        https://bugs.webkit.org/show_bug.cgi?id=76475

        Reviewed by Eric Seidel.

        This patch cleans up the internal usage of port names for the
        Apple mac and Apple win ports so that 'mac' and 'win are never
        considered "fully specified" port names: they are still legal
        input to the PortFactory.get() routine, but only if run on the given
        platform (i.e. trying to PortFactory.get('mac') on windows or
        linux will return an error, since we don't know which version of
        the port is desired.

        This also cleans up handling of the webkit2 variants, so that
        the full port names consistently follow the
        <operating_system>-<version>[-<wk2>] convention.

        Lastly this patch adds some assertions and removes some
        try/catch logic to catch more programming and usage errors;
        previously mac-tiger might've been allowed -- and it would've
        translated into using just the baselines in platform/mac -- but
        now it should fail.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.determine_full_port_name):
        (ApplePort.__init__):
        (ApplePort):
        (ApplePort._port_name_with_version):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_mac):
        (FactoryTest.test_win):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest.test_versions):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinTest.test_versions):

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: print nicer errors while linting expectations files, remove redundant tests
        https://bugs.webkit.org/show_bug.cgi?id=76955

        Reviewed by Adam Barth.

        This change cleans up the errors that are printed so that the
        are more "quickfix" compatible (path:lineno).

        Also, there were a bunch of redundant tests between
        layout_tests.models.test_expectations_unittest and
        style.checkers.test_expectations_unittest. The latter should
        just expect the former to do most of the testing.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_modifiers):
        (TestExpectations._report_errors):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_error_nonfatal):
        (SemanticTests.test_bad_bugid):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.assert_lines_lint):
        (TestExpectationsTestCase.test_valid_expectations):
        (TestExpectationsTestCase.test_invalid_expectations):
        (TestExpectationsTestCase.test_tab):

2012-01-25  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-* should always continue after failures
        https://bugs.webkit.org/show_bug.cgi?id=77057

        Reviewed by Adam Barth.

        As far as I can tell there is only one potential drawback to always
        forcing: that if you're somehow in the wrong directory it will create new
        directories for new files.  Since webkit-patch always cd's to the root
        it seems that's not a drawback.  The drawback of not using --force for
        svn-apply, is that it will stop after the first failure, which is rarely
        (if ever) the desired behavior.  This just removes the force option
        (which was strangely hidden behind --non-interactive).  This should
        make for a better user experiance.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        (MockCheckout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_chromium_deps):
        (CheckoutTest):
        (CheckoutTest.test_apply_patch):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest._default_options):
        * Scripts/webkitpy/tool/steps/applypatch.py:
        (ApplyPatch.options):
        (ApplyPatch.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        nrwt: should be able to run --platform test interactively
        https://bugs.webkit.org/show_bug.cgi?id=76959

        Reviewed by Adam Barth.

        As part of refactoring the Port interfaces, in r103254 I made
        passing a Host object to the Port mandatory; previously TestPort
        objects would create their own (mock) hosts. However,
        new-run-webkit-tests always passed a real Host, not a MockHost,
        and so you couldn't run new-run-webkit-tests --platform test
        interactively to debug test failures.

        This change fixes that by creating a MockHost instead of a real
        host if you say --platform test*.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests --lint-test-files should lint all the ports by default
        https://bugs.webkit.org/show_bug.cgi?id=76749

        Reviewed by Ojan Vafai.

        Currently run-webkit-tests --lint-test-files will only lint the
        test_expectations for the single port determined by the command
        line options. This is not obvious and can produce unintended results
        if you want to lint the chromium port (probably the normal case
        for using --lint-test-files) but don't specify a port name or
        --chromium.

        I think we should probably lint *all* of the ports if no port
        name is supplied. This change implements that, and also moves
        the linting logic out of the Manager class, since this really
        has nothing to do with Managers. It has little to do with
        run-webkit-tests, but splitting it into a different script would
        introduce compatibility issues. It might make sense to do that
        anyway, in a separate patch and combining that with cleaning up
        the style checker to share more code.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._strip_test_dir_prefix):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (lint):
        (run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (LintTest.test_all_configurations): added.
        (LintTest.test_lint_test_files): added.
        (LintTest.test_lint_test_files__errors): added.
        (MainTest.test_lint_test_files): removed.
        (MainTest.test_lint_test_files__errors): removed.

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up a bunch of test scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=76973

        Reviewed by Eric Seidel.

        There were several helper modules in the webkitpy.test package
        that appear to only be used by executive_unittest.py. I am
        rolling them all into that file to make that clearer.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        (command_line):
        (main):
        * Scripts/webkitpy/common/system/fileutils.py: Removed.
        * Scripts/webkitpy/test/cat.py: Removed.
        * Scripts/webkitpy/test/cat_unittest.py: Removed.
        * Scripts/webkitpy/test/echo.py: Removed.
        * Scripts/webkitpy/test/echo_unittest.py: Removed.

2012-01-25  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up a bunch of test scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=76973

        Reviewed by Eric Seidel.

        There were several helper modules in the webkitpy.test package
        that appear to only be used by executive_unittest.py. I am
        rolling them all into that file to make that clearer.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_args_type):
        (ExecutiveTest.test_run_command_with_unicode):
        (ExecutiveTest.test_running_pids):
        (command_line):
        (main):
        * Scripts/webkitpy/common/system/fileutils.py: Removed.
        * Scripts/webkitpy/test/cat.py: Removed.
        * Scripts/webkitpy/test/cat_unittest.py: Removed.
        * Scripts/webkitpy/test/echo.py: Removed.
        * Scripts/webkitpy/test/echo_unittest.py: Removed.

2012-01-25  Eric Seidel  <eric@webkit.org>

        Remove Python 2.5 support from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=71593

        Reviewed by Adam Barth.

        Just removing support from this one core file.
        I'll commit the rest of the (large) change once we've
        gone 24 hours and seen that no bots have exploded.
        We can roll out this one change if we break bots
        and then roll in the rest once those bots are fixed.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.cpu_count):

2012-01-25  Hajime Morita  <morrita@google.com>

        ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
        https://bugs.webkit.org/show_bug.cgi?id=76863

        Reviewed by Dimitri Glazkov.

        Added a feature flag.

        * Scripts/build-webkit:
        * qmake/mkspecs/features/features.prf:

2012-01-25  Martin Robinson  <mrobinson@igalia.com>

        [WK2] Navigation events not triggered by a mouse event claim to be triggered by the left mouse button during policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=76344

        Reviewed by Sam Weinig.

        Add a test verifying that the mouse button during policy decisions for
        events not triggered by mouse events is NoButton.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction): Added test.
        (TestWebKitAPI::decidePolicyForNewWindowAction): Added test.

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

        run-perf-tests should timeout sooner
        https://bugs.webkit.org/show_bug.cgi?id=77026

        Reviewed by Adam Barth.

        Bump off the timeout from 10 minutes to 4 minutes.

        Also use float instead of str in test result values to compress the size of json files bots upload.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._process_parser_test_result):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):

2012-01-25  Enrica Casucci  <enrica@apple.com>

        WebView should implement typingAttributes methods to work correctly with the Inspector bar in Mail.
        https://bugs.webkit.org/show_bug.cgi?id=76951
        <rdar://problem/9325158>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm: Modified to reflect the changes to WebView
        and WebHTMLView.
        (TestWebKitAPI::TEST):

2012-01-23  MORITA Hajime  <morrita@google.com>

        [Refactoring][Internals] Should have InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=76424

        Reviewed by Kent Tamura.

        * GNUmakefile.am: Added so new files.

2012-01-25  Takashi Toyoshima  <toyoshim@chromium.org>

        webkitpy: new-run-webkit-websocket is broken
        https://bugs.webkit.org/show_bug.cgi?id=76999

        Reviewed by Dirk Pranke.

        r105674 broke new-run-webkit-websocket, since options.chromium
        doesn't exist any more. new-run-webkit-httpd was also broken
        and already fixed at r105835.
        * Scripts/new-run-webkit-websocketserver:
        (main):

2012-01-25  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [WK2] WebKitTestRunner needs layoutTestController.setPopupBlockingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=63458

        Reviewed by Adam Roben.

        Implement the setPopupBlockingEnabled method.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPopupBlockingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2012-01-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Cleanup testfonts handling
        https://bugs.webkit.org/show_bug.cgi?id=76068

        Reviewed by Simon Hausmann.

        Factor test font initialization into it's own file  so test
        font users can share the implementation by adding the file
        to their build.
        Use fonts.conf from the test font directory to not require the
        current directory to be the WebKit root.
        Fix the -use-test-fonts option of QtTestBrowser by initializing
        the fonts earlier, before it is too late (namely before calling
        show on the main window).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/QtInitializeTestFonts.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp.
        (WebKit::initializeTestFonts):
        * DumpRenderTree/qt/QtInitializeTestFonts.h: Added.
        * DumpRenderTree/qt/fonts.conf: Removed. No need for this since
        we will use the one from the test fonts directory.
        * DumpRenderTree/qt/main.cpp:
        (main): Fix the ifdefs to make it clear that the code to
        set up the Dpi has not been ported to Qt5 yet.
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (launcherMain):
        (LauncherApplication::handleUserOptions):
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts): Remove the code to set up the Dpi
        because it does not work with Qt5.

2012-01-25  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] build-webkit --qt requires a git-svn or SVN checkout.

        Reviewed by Tor Arne Vestø.

        Don't require it by making svnRevisionForDirectory return "unknown"
        instead of bailing out with an error.

        * Scripts/VCSUtils.pm:
        (svnRevisionForDirectory):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Temporarily disable running the unit tests on the Chromium EWS.  These
        tests don't work properly (see
        https://bugs.webkit.org/show_bug.cgi?id=76979) and are currently
        blocking the EWS.

        * Scripts/webkitpy/common/config/ports.py:
        (ChromiumPort):

2012-01-25  Adam Barth  <abarth@webkit.org>

        Update results.html version of PixelZoomer
        https://bugs.webkit.org/show_bug.cgi?id=76965

        Reviewed by Ojan Vafai.

        Improve readability as suggested by Ojan.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/pixelzoomer.js:

2012-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Page clients don't need to be GObjects anymore in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=76899

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): WebKitWebLoaderClient has been renamed to
        WebKitLoaderClient.

2012-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Trigger Chromium Mac Release (Perf) on new commits.

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

2012-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit needs public performance tests running on public bots
        https://bugs.webkit.org/show_bug.cgi?id=10266

        Reviewed by Adam Barth.

        Completes the initial implementation of WebKit Perf bots. Add a build step for run-perf-test
        and make google-mac-4 run it, and upload the results to webkit-perf.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTests):
        (RunAndUploadPerfTests.start):
        (UploadPerfTestResults):
        (BuildAndPerfTestFactory):
        (BuildAndPerfTestFactory.__init__):

2012-01-24  Ojan Vafai  <ojan@chromium.org>

        Initializing the browser property of the Bugzilla class takes too long
        https://bugs.webkit.org/show_bug.cgi?id=76960

        Reviewed by Adam Barth.

        Lazily initialize it. This saves ~150ms on a no-op run-webkit-tests call
        on my Mac Pro.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.__init__):
        (Bugzilla._get_browser):
        (Bugzilla):
        (Bugzilla._set_browser):

2012-01-24  Mark Rowe  <mrowe@apple.com>

        Death to JavaScriptGlue.

        Rubber-stamped by Geoffrey Garen.

        * BuildSlaveSupport/build-launcher-app:
        (copyNightlyLauncher):
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build):
        * Scripts/webkitpy/common/config/build_unittest.py: Update the test to use another Mac-specific
        path in conjunction with a cross-platform path.
        (ShouldBuildTest):

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl should test stdout and stderr
        https://bugs.webkit.org/show_bug.cgi?id=75836

        Reviewed by David Kilzer.

        Previously parser_unittests.pl can just test the returned value of
        get_function_line_ranges() in prepare-ChangeLog. This patch fixes
        parser_unittests.pl so that it also tests the stdout and stderr of
        get_function_line_ranges().

        This patch adds css_unittests_warning.css, which contains test cases
        for warning messages of the CSS parser of prepare-ChangeLog.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        (captureOutput): Captures the stdout and stderr of a given method.
        (convertAbsolutepathToWebKitPath): Converts absolute paths in a given
        string to relative paths.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests_warning-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests_warning.css: Added.
        (element1):
        (element2):
        (element3):
        (element4):
        ():
        (element5):
        (element6):

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:
        Just updated the test results, i.e. added stdout and stderr results.
        No essential changes in the test results.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/java_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt: Ditto.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt: Ditto.

2012-01-24  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: new-run-webkit-httpd is broken
        https://bugs.webkit.org/show_bug.cgi?id=76963

        Reviewed by Adam Barth.

        r105674 broke new-run-webkit-httpd, since options.chromium
        doesn't exist any more. We didn't catch this because we don't
        run the integration tests by default anywhere :(.

        * Scripts/new-run-webkit-httpd:
        (run):
        (main):

2012-01-24  Adam Barth  <abarth@webkit.org>

        garden-o-matic pixel zoomer should let you look at every pixel of the image
        https://bugs.webkit.org/show_bug.cgi?id=76962

        Reviewed by Ojan Vafai.

        Previously, you couldn't get up to the right and bottom pixels.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/pixelzoomer.js:

2012-01-24  Enrica Casucci  <enrica@apple.com>

        WebHTMLView should implement typingAttributes methods to work correctly with the Inspector bar in Mail.
        https://bugs.webkit.org/show_bug.cgi?id=76951
        <rdar://problem/9325158>

        Added test to verify that WebHTMLView supports the typingAttributes method and that it
        works as expected.
        
        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST):

2012-01-24  James Robinson  <jamesr@chromium.org>

        Put a space between the trac link and ellipsis in sheriffbot rollout message so it linkifies better in some IRC clients
        https://bugs.webkit.org/show_bug.cgi?id=76884

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout.execute):
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        (SheriffIRCBotTest.test_rollout):
        (SheriffIRCBotTest.test_revert):
        (SheriffIRCBotTest.test_multi_rollout):
        (SheriffIRCBotTest.test_rollout_with_r_in_svn_revision):
        (SheriffIRCBotTest.test_multi_rollout_with_r_in_svn_revision):
        (SheriffIRCBotTest.test_rollout_invalidate_reason):
        (test_multi_rollout_invalidate_reason):

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        The cpp parser of prepare-ChangeLog cannot detect a change in classes and namespaces
        https://bugs.webkit.org/show_bug.cgi?id=75531

        Reviewed by David Kilzer.

        Previously, the cpp parser of prepare-ChangeLog could not detect a change
        outside methods. Consider the following cpp file.

            namespace N {
            int a;     // this change does not appear on ChangeLog.
            class C {
                int b;     // this change does not appear on ChangeLog.
                void f()
                {
                    int c;     // this change appears on ChangeLog.
                }
                int d;     // this change does not appear on ChangeLog.
            };
            int e;     // this change does not appear on ChangeLog.
            };

        The previous prepare-ChangeLog outputs just methods in which a change is found:
            (N::C::f):

        This patch fixes prepare-ChangeLog so that it outputs namespaces, classes
        and methods in which a change is found:
            (N):
            (N::C):
            (N::C::f):

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): Modified as described above.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp: Added test cases.
        (Class104):
        (Class105):
        (Class106):
        (Class106::func32):
        (Class106::func33):
        (NameSpace3):
        (NameSpace4):
        (NameSpace5):
        (NameSpace6):
        (Class107):
        (NameSpace5::NameSpace6::Class107::func34):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:

2012-01-24  Kentaro Hara  <haraken@chromium.org>

        prepare-ChangeLog outputs warnings for top-level { ... } blocks
        https://bugs.webkit.org/show_bug.cgi?id=75943

        Reviewed by David Kilzer.

        Currently, prepare-ChangeLog outputs warnings for top-level { ... } blocks,
        because it does not distinguish '}' at the end of a subroutine
        with '}' at the end of a if or for statement.

        foo.pl:
            if (1) {
            }
            for (@v) {
            }

        output:
            nested functions found at top-level at foo.pl:2
            nested functions found at top-level at foo.pl:4

        This patch fixes the bug.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_perl):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl:
        Added test cases. No change in the test results.

2012-01-24  Dirk Pranke  <dpranke@chromium.org>

        r105674 broke check-webkit-style for chromium's test_expectations.

        Unreviewed, build fix.
        
        We now need to pass in a platform name of 'chromium' if we want
        the chromium port; options.chromium is no longer recognized. I
        will follow this patch up with a separate patch that has a test,
        but this at least fixes the build.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_exepectations_path):

2012-01-20  Ojan Vafai  <ojan@chromium.org>

        check-webkit-style of the chromium test_expectations.txt file takes too long
        https://bugs.webkit.org/show_bug.cgi?id=76745

        Reviewed by Dimitri Glazkov.

        When in lint mode, have TestExpectations test all configurations instead
        of looping over each configuration. This also has the benefit of making
        the error output considerably more concise.

        Also, got rid of the double-printing of errors when linting through check-webkit-style.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.lint):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations._report_errors):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_error_nonfatal):
        (test_error_on_different_platform):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):
        (TestExpectationsChecker.check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_exepectations_path):
        (TestExpectationsTestCase.assert_lines_lint):

2012-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix attempt after r105543.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_as_multipart_form_data):

2012-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r105543.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_as_multipart_form_data):

2012-01-24  Vincent Scheib  <scheib@chromium.org>

        [Chromium] Add Pointer Lock test hooks and mock implementation to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=76411

        Reviewed by Adam Barth.

        Breaking up https://bugs.webkit.org/show_bug.cgi?id=75762
        into a series of patches, this change adds a trivial
        pointer lock implementation to the Chromium port's DumpRenderTree
        and exposes LayoutTestController hooks to force failure conditions.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::didLosePointerLock):
        (LayoutTestController::setPointerLockWillFailAsynchronously):
        (LayoutTestController::setPointerLockWillFailSynchronously):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestPointerLock):
        (WebViewHost::requestPointerUnlock):
        (WebViewHost::isPointerLocked):
        (WebViewHost::didCompletePointerLock):
        (WebViewHost::didNotCompletePointerLock):
        (WebViewHost::didLosePointerLock):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::setPointerLockWillFailAsynchronously):
        (WebViewHost::setPointerLockWillFailSynchronously):

2012-01-24  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed, skip WK2 API test timing out on some GTK bots.

        WebKit2APITests/TestDownloads is consistently timing out on the
        32bit release and 64bit debug bots.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip WebKit2APITests/TestDownloads.

2012-01-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the build with the newes Qt5 hashes
        https://bugs.webkit.org/show_bug.cgi?id=76657

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication): Disable the automatic touch->mouse event synthesis
        for now to prevent an infinite loop where Qt always creates mouse events out of our touch mock events.

2012-01-24  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Distinguish between Cygwin and cmd.exe in the way we set env variables

        We can't use win32-msvc* to decide whether or not to use (set FOO=bar), as
        building with MinGW inside cmd.exe will require the same construct. Instead
        we assume that when the first character in PWD is a '/' we're running under
        Cygwin, and use the normal unix way of setting environment variables.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2012-01-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Some qmake build files must include Qt5's "quick" module.
        https://bugs.webkit.org/show_bug.cgi?id=76671

        Unreviewed build fix.

        * MiniBrowser/qt/MiniBrowser.pro:
        * WebKitTestRunner/Target.pri:

2012-01-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Fix the event timestamps for touch mocking

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent): We should not set QEvent::None as the
        timestamp argument in the QWindowSystemInterface::handleTouchEvent call.

2012-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement DownloadClient in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=72952

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Ignore WebKitDownloadClient.

2012-01-23  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] editing/deleting/5408255.html results are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=53644

        Reviewed by Martin Robinson.

        WEBKIT_TOP_LEVEL environment variable is now set directly in either
        WebKitTestRunner or DumpRenderTree through usage of a compilation-time
        macro. This way both tools can be run outside the test harness without
        the need to manually set the environment variable.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getTopLevelPath):
        * GNUmakefile.am:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):

2012-01-23  Dmitry Lomov  <dslomov@google.com>

        [Chromium] Implement layoutTestController.workerThreadCount in DRT
        https://bugs.webkit.org/show_bug.cgi?id=74653.

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::workerThreadCount):
        * DumpRenderTree/chromium/LayoutTestController.h:

2012-01-23  Dirk Pranke  <dpranke@chromium.org>

        nrwt: make --chromium work like --qt
        https://bugs.webkit.org/show_bug.cgi?id=76875

        Reviewed by Adam Barth.

        --chromium used to have to be handled differently from --qt
        due to the way the PortFactory was implemented; there's not
        really a good reason for that any more so this patch makes
        things slightly more consistent and eliminates the
        options.chromium flag (--chromium is now truly a synonym for
        --platform chromium).

        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._default_port):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.setUp):
        (FactoryTest.test_chromium_mac):
        (FactoryTest.test_chromium_linux):
        (FactoryTest.test_chromium_win):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-23  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests needs to propagate --chromium
        https://bugs.webkit.org/show_bug.cgi?id=76870

        Reviewed by Eric Seidel.

        run-webkit-tests removes '--chromium' argument from @ARGV when
        determining which port to run, which means that that doesn't
        propagate to new-run-webkit-tests. That's bad (and is handled
        for the other ports by re-adding the flag, but apparently we're
        just now noticing for Chromium).

        * Scripts/run-webkit-tests:

2012-01-23  Brian Weinstein  <bweinstein@apple.com>

        More build fixing after r105646.

        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        (TestWebKitAPI::TestNode::key):

2012-01-23  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix - r105646 broke this.

        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        (TestWebKitAPI::TestNode::TestNode):
        (TestWebKitAPI::TestNode::key):
        (TestWebKitAPI::RedBlackTreeTest::assertEqual):
        (TestWebKitAPI::RedBlackTreeTest::assertSameValuesForKey):
        (TestWebKitAPI::RedBlackTreeTest::testDriver):

2012-01-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105658.
        http://trac.webkit.org/changeset/105658
        https://bugs.webkit.org/show_bug.cgi?id=76883

        We want this eventually, but not right at this moment
        (Requested by abarth on #webkit).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

2012-01-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should support Chromium Mac Lion
        https://bugs.webkit.org/show_bug.cgi?id=76880

        Reviewed by Eric Seidel.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:

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

        check-webkit-style whitespace/operators triggers on overloaded division operator
        https://bugs.webkit.org/show_bug.cgi?id=76650

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_operator_methods):

2012-01-23  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should report server-side errors
        https://bugs.webkit.org/show_bug.cgi?id=76802

        Reviewed by Tony Chang.

        Report errors whenever server's response doesn't match "OK".

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.upload_single_text_file):
        (FileUploader.upload_as_multipart_form_data):
        (FileUploader._upload_data.callback):
        (FileUploader):
        (FileUploader._upload_data):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._upload_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_upload_json):
        (test_upload_json.MockFileUploader.upload_single_text_file):

2012-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests ignore Skipped list on chromium
        https://bugs.webkit.org/show_bug.cgi?id=76764

        Reviewed by Dirk Pranke.

        Move skipped_perf_tests from WebKit port to Base port so that Chromium port
        can also find skipped list. Chromium port only uses test_expectations.txt for
        layout tests but performacne tests don't use test_expectations.txt so Chromium port
        also needs to use Skipped list.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port._tests_from_skipped_file_contents):
        (Port):
        (Port._expectations_from_skipped_files):
        (Port.skipped_perf_tests):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_skipped_perf_tests):
        (PortTest.test_skipped_perf_tests.add_text_file):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._skipped_tests_for_unsupported_features):
        (WebKitPort._skipped_file_search_paths):
        (WebKitPort.skipped_layout_tests):

2012-01-23  Andy Estes  <aestes@apple.com>

        Fix the build after r105635.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>

        Basic enhancements to StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67081

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] run-gtk-tests randomly fails while running the xprop comand
        https://bugs.webkit.org/show_bug.cgi?id=76817

        Reviewed by Gustavo Noronha Silva.

        No need to use xprop to remove the AT_SPI_BUS property since
        run-gtk-tests will always run new instances of Xvfb.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip TestWebKitAccessibility.
        (TestRunner.run): Uncomment lines for launching the accessibility
        bus and registry daemon, and remove lines for running xprop.

2012-01-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't warn about override and final being C++11 extensions

        Clang will emit a warning when these extensions are used without passing
        --std=c++11, but we use feature checking to decide if we have the right
        extensions, so we can safely ignore these warnings. The XCode and Windows
        project files have the same workaround.

        The reason for adding the flag to QMAKE_OBJECTIVE_CFLAGS as well is that
        we only have one extra compiler for Objective-C, which is also used for
        Objective-C++ sources, so we have to pass the flag, even if it doesn't
        make sense for Objective-C.

        Reviewed by Simon Hausmann.

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

2012-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Change how build-webkit decides when to do full incremental builds

        Instead of relying on update-webkit (which isn't run on the bots) to
        decide when to do a full incremental build (make qmake), we let the
        build-webkit script itself check the current SVN revision against the
        previous build (by storing it in .webkit.config).

        If the two differ we assume a full incremental build is needed, since
        the new revisions might have introduced problematic things like new
        Q_OBJECT macros. If not, we assume the developer is doing changes
        locally, and revert to doing a plain 'make'.

        In addition, when the build fails in the latter case, we inform the
        developer of possible pitfalls and how to manually run 'make qmake'.

        Reviewed by Ossy.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-23  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] run-gtk-tests randomly fails while running the xprop comand
        https://bugs.webkit.org/show_bug.cgi?id=76817

        Reviewed by Philippe Normand.

        Temporarily comment the lines related to launching the ATSPI bus
        and registry daemon, which are making the bots to fail randomly.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip TestWebKitAccessibility, as it won't run
        properly if the ATSPI infrastructure is not properly initialized.
        (TestRunner.run): Comment lines related to initialization of ATSPI.

2012-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Windows python test build fix.

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

2012-01-22  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] DumpRenderTree converts "file:///" to a path differently
        https://bugs.webkit.org/show_bug.cgi?id=76631

        Reviewed by Martin Robinson.

        DumpRenderTree should print "/" as the last path component if the
        path is a lone slash instead of empty output.

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

2012-01-20  David Levin  <levin@chromium.org>

        The leaky DC check should use adoptPtr as a signal instead of OwnPtr to get less false positives.
        https://bugs.webkit.org/show_bug.cgi?id=76752

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_leaky_patterns):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (LeakyPatternTest.test_create_dc):
        (LeakyPatternTest.test_create_compatible_dc):

2012-01-20  Shawn Singh  <shawnsingh@chromium.org>

        Changed my status in commiters.py

        Unreviewed.

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

2012-01-20  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests --lint-test-files crawls the whole LayoutTests subtree
        https://bugs.webkit.org/show_bug.cgi?id=76748

        Reviewed by Ryosuke Niwa.

        It crawls the whole subtree and then doesn't use the data. Cutting this out
        saves 4 seconds warm and 17 seconds cold on my Mac Pro.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (run):

2012-01-20  Adam Barth  <abarth@webkit.org>

        Another tiny tweak to the garden-o-matic CSS.  This makes things line
        up slightly nicer when there aren't any failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#summary):

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

        run-perf-tests should support --test-results-server option
        https://bugs.webkit.org/show_bug.cgi?id=76680

        Reviewed by Adam Barth.

        Add --test-results-server, --builder-name, and --build-number options to run-perf-tests
        to be used by perf bots. Also refactor file_uploader as needed.

        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader.__init__):
        (FileUploader.upload_single_file):
        (FileUploader.upload_as_multipart_form_data):
        (FileUploader):
        (FileUploader._upload_data):
        (FileUploader._upload_data.callback):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.upload_json_files):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_json):
        (PerfTestsRunner._upload_json):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):
        (test_run_with_upload_json):
        (test_run_with_upload_json.mock_upload_json):
        (test_upload_json):
        (test_upload_json.MockFileUploader):
        (test_upload_json.MockFileUploader.__init__):
        (test_upload_json.MockFileUploader.upload_single_file):
        (test_parse_args):

2012-01-20  Adam Barth  <abarth@webkit.org>

        The party time image overlaps real content!  This patch makes the
        image centered vertically.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:
        (#onebar.partytime #summary):

2012-01-19  Ojan Vafai  <ojan@chromium.org>

        Refactor TestExpectationsParser in preparation for caching the results
        https://bugs.webkit.org/show_bug.cgi?id=76669

        Reviewed by Dimitri Glazkov.

        Make everything private expect for the parse method. 
        Eventually, we'll need the expectations lines to not be modified
        outside of TestExpectationsParser so we can cache the results.
        This makes check-webkit-style of the chromium test_expectations.txt file
        go from ~17 seconds to ~12 seconds on my Mac Pro.

        This patch is just a refactor in preparation, so no new tests.

        * 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):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._tokenize):
        (TestExpectationParser._tokenize_list):
        (TestExpectationsModel._clear_expectations_for_test):
        (TestExpectations.__init__):
        (TestExpectations._add_expectations):
        (TestExpectations._add_skipped_tests):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (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.assert_round_trip):
        (TestExpectationSerializerTests.assert_list_round_trip):
        * Scripts/webkitpy/tool/commands/expectations.py:
        (OptimizeExpectations.execute):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningExpectationsUpdater.update_expectations):

2012-01-20  Adam Barth  <abarth@webkit.org>

        Follow-up to previous patch: don't produce NaN when the revision number
        is missing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js:

2012-01-20  Adam Barth  <abarth@webkit.org>

        Garden-o-matic should tell me which revisions have been checked by all the bots
        https://bugs.webkit.org/show_bug.cgi?id=76722

        Reviewed by Dimitri Glazkov.

        This information helps me know when it's safe for me to roll a
        candidate revision.

        * 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/model_unittests.js:

2012-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        build-webkit: Don't spit out congratulations message on Ctrl+C

        Reviewed by Andreas Kling.

        * Scripts/build-webkit:

2012-01-20  Philippe Normand  <pnormand@igalia.com>

        [GTK] Allow extra jhbuild modulesets
        https://bugs.webkit.org/show_bug.cgi?id=76691

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuildrc: Extra modulesets and modules can be added in
        JHBuild using the WEBKIT_EXTRA_MODULESETS and WEBKIT_EXTRA_MODULES
        env variables respectively. Use comma-separated values. Example:
        WEBKIT_EXTRA_MODULES=file:///path/to/module.set,file:///other/path.

2012-01-20  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Expose accessibility hierarchy in WebKit2 to ATK/AT-SPI based ATs
        https://bugs.webkit.org/show_bug.cgi?id=72589

        Reviewed by Martin Robinson.

        Ensure the accessibility infrastructure is available when running
        the unit tests, otherwise WK2's accessibility tests won't work.

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner._lookup_atspi2_binary): New. Looks for the directory
        where at-spi2's stuff is located (like at-spi-bus-launcher and
        at-spi2-registryd).
        (TestRunner.run): Initialize the accessibility infrastructure.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Add 'WebKitWebViewBaseAccessible.*'.

        * gtk/jhbuild.modules: Added at-spi2-core and at-spi2-atk.

2012-01-20  Hayato Ito  <hayato@chromium.org>

        Add ShadowRoot.idl which is enabled by newly introduced SHADOW_DOM flag.
        https://bugs.webkit.org/show_bug.cgi?id=76353

        Reviewed by Hajime Morita.

        Add ShadowRoot.idl, which is enabled only on chromium port since this is
        under development feature.
        ShadowRoot.idl contains minimum API so that we can test it.
        Other APIs should be added on other changes so that we can isolate issues.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2012-01-20  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] GTK's DRT not to log events for already defunct objects
        https://bugs.webkit.org/show_bug.cgi?id=76620

        Reviewed by Martin Robinson.

        Do not log 'state-change:defunct' events.

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        (printAccessibilityEvent): Early return if a
        'state-change:defunct' signal is passed.
        (axObjectEventListener): Pass the signal name and value in
        separate parameters to printAccessibilityEvent.

2012-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix. Wrong variable being used as the cwd for git
        remote update command.

        * gtk/run-with-jhbuild:
        (update_jhbuild):

2012-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] ensure the jhbuild used by webkit is as up-to-date as needed
        https://bugs.webkit.org/show_bug.cgi?id=76585

        Reviewed by Martin Robinson.

        This allows us to specify a minimum version of jhbuild required,
        while also providing stability against changes done to the master
        branch, by letting us choose what is the exact version that will
        be used.

        * gtk/run-with-jhbuild: refactored for more hackability and easier
        reading
        (jhbuild_installed): checks whether jhbuild is installed
        (jhbuild_cloned): checks whether jhbuild has been cloned
        (jhbuild_at_expected_revision): checks whether jhbuild is at the
        expected revision
        (update_jhbuild): brings jhbuild to the expected revision
        (clone_jhbuild): clones jhbuild
        (install_jhbuild): build and installs jhbuild
        (update_webkitgtk_libs): runs update-webkitgtk-libs
        (ensure_jhbuild): high-level logic to decide whether and which of
        the steps above are executed

2012-01-19  Alexey Proskuryakov  <ap@apple.com>

        [WK2] DumpRenderTree converts "file:///" to a path differently
        https://bugs.webkit.org/show_bug.cgi?id=76653

        Reviewed by John Sullivan.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: (WTR::lastFileURLPathComponent):
        Do print a slash if there are no path components.

2012-01-19  Eric Seidel  <eric@webkit.org>

        webkit-patch cannot rollout patches without changelog/bug number
        https://bugs.webkit.org/show_bug.cgi?id=75962

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractRolloutPrepCommand._prepare_state):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (AbstractRolloutPrepCommandTest.test_prepare_state):

2012-01-19  Alexey Proskuryakov  <ap@apple.com>

        [WK2] fast/url/degenerate-file-base.html fails
        https://bugs.webkit.org/show_bug.cgi?id=76619

        Reviewed by Adam Roben.

        A URL generated form local path for loading had an extra slash, making document.URL
        incorrect in all WebKit2 tests (file://localhost//path/to/test.html).

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

2012-01-18  Ojan Vafai  <ojan@chromium.org>

        check-webkit-style of the chromium test_expectations.txt file doesn't test all chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=76510

        Reviewed by Adam Barth.

        Unlike other style rules, if you get the syntax of the test_expectations.txt
        file wrong, the layout tests won't run. Also, this check is simple and only
        slows down committing if you actually modify one of the test_expectations.txt files.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations):
        (TestExpectationsChecker.check):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_check_covers_all_configurations):
        (TestExpectationsTestCase.test_check_covers_all_configurations.mock_check_test_expectations):
        (TestExpectationsTestCase):
        (assert_lines_lint):

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

        Build fix. Revert an unintentional change to WebKitDriver in r105443.

        * Scripts/webkitpy/layout_tests/port/driver.py:
        (DriverProxy.__init__):

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

        remove the duplicated build rules from WebKit.gyp, Tools.gyp
        https://bugs.webkit.org/show_bug.cgi?id=73384

        Reviewed by Tony Chang.

        This patch removes the no-longer-necessary conditional logic for
        build_webkit_exes_from_webkit_gyp; we now always build the exes
        from their own dedicated gyp files.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-01-19  Alexey Proskuryakov  <ap@apple.com>

        make-new-script-test should work with HTTP tests
        https://bugs.webkit.org/show_bug.cgi?id=76603

        Reviewed by Adam Roben.

        * Scripts/make-new-script-test:
        (makePathToSharedSources): Renamed from makeTestRelativePathToSharedSources(), since it
        now also creates absolute paths for HTTP.

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

        Some perf tests time out when ran by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=76612

        Reviewed by Dirk Pranke and Eric Seidel.

        Always pass --no-timeout to DumpRenderTree from run-perf-tests.
        Otherwise some tests such as Parser/xml-parser.html will timeout.

        --no-timeout option is currently supported by Chromium and Mac ports.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.create_driver):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.__init__):
        (ChromiumDriver._wrapper_options):
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (Driver.__init__):
        (DriverProxy.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver.__init__):
        (WebKitDriver.cmd_line):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitDriverTest.test_read_binary_block):
        (WebKitDriverTest):
        (WebKitDriverTest.test_no_timeout):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (create_runner):

2012-01-19  Ben Wells  <benwells@chromium.org>

        Add support for window.print to chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=76479

        When used in a test window.print goes into print mode and then
        straight out again. This will allow the afterprint event to be
        tested by having the afterprint event happen before the dump
        happens.

        Reviewed by Mihai Parparita.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::printPage):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-18  Enrica Casucci  <enrica@apple.com>

        editingAttributedStringFromRange in WebHTMLConverter does not handle NSUnderlineStyleAttributeName.
        https://bugs.webkit.org/show_bug.cgi?id=76588
        <rdar://problem/9325183>

        Added test.
        
        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST):

2012-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Do full incremental builds until bots use update-webkit

        Rubber-stamped by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Fix the Qt build

        Unreviewed build fix.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make build-webkit always do safe incremental builds after update-webkit

        When building against Qt5 with GCC we would just run 'make' in the build dir,
        and rely on the dependency files output by GCC (-MD) to handle dependency
        tracking, but that fails for special-cases like adding a Q_OBJECT macro
        to a header.

        To guarantee that an incrmental build will work, we have to run 'make qmake',
        which we now do on every build-webkit that's followed by a successful run
        of update-webkit. The reasoning is that update-webkit can result in such
        potential corner-cases being applied, and since we can't know for sure
        unless we inspect the diff and account for all the corner cases we assume
        the worst and always run 'make qmake'.

        After a succesful run of build-webkit we proceed to do just 'make' for any
        subsequent runs, since we assume that the developer knows what kind of
        changes he/she is doing, and when a 'make qmake' is needed.

        Reviewed by Simon Hausmann.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineCurrentSVNRevision):
        (currentSVNRevision):
        (buildQMakeProjects):
        * qmake/mkspecs/features/default_post.prf:

2012-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=76594

        Reviewed by Adam Barth.

        Add a support for Skipped list in run-perf-tests; also skip files in resources directories.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.perf_tests_dir):
        (Port.skipped_perf_tests):
        (Port.skips_perf_test):
        (Port.relative_perf_test_filename):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.perf_tests_dir):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._expectations_from_skipped_files):
        (WebKitPort):
        (WebKitPort.skipped_layout_tests):
        (WebKitPort.skipped_perf_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (test_run_test_set_with_json_output):
        (test_run_test_set_with_json_source):
        (test_collect_tests_with_skipped_list):
        (test_collect_tests_with_skipped_list.add_file):

2012-01-18  Dirk Pranke  <dpranke@chromium.org>

        Fix path to chromium_src_dir introduced in previous change.

        Unreviewed, build fix.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2012-01-18  Alexey Proskuryakov  <ap@apple.com>

        Need infrastructure to test Content-Disposition filename encoding support
        https://bugs.webkit.org/show_bug.cgi?id=76572
        <rdar://problem/6421825>

        Reviewed by Sam Weinig.

        Made policy delegate log suggested file name when resource has Content-Disposition: attachment.

        WebKitTestRunner does not have a policy delegate yet, bug 42546.

        * DumpRenderTree/mac/PolicyDelegate.mm:
        (dispositionTypeFromContentDispositionHeader):
        (-[PolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):

2012-01-18  Ojan Vafai  <ojan@chromium.org>

        Fix tests from http://trac.webkit.org/changeset/105332.

        The code assumed that if you passed an options object with a configuration
        attribute that it would have a valid value. A bunch of the testing mocks
        do things like having a configuration value of None.

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

2012-01-18  Ojan Vafai  <ojan@chromium.org>

        Shave 0.5 seconds off check-webkit-style runtime for test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=76576

        Reviewed by Adam Barth.

        Avoid calling default_configuration in base.py. We don't need it for
        checking test_expectations.txt style. It takes ~0.5 seconds to run on my
        Mac Pro. It's the call to "perl Tools/Scripts/webkit-build-directory --top-level"
        from common.executive.

        At some point someone should probably look into why that call is so slow
        since it's on the critical path for run-webkit-tests and build-webkit startup.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._determine_port_from_exepectations_path):

2012-01-18  Dirk Pranke  <dpranke@chromium.org>

        [chromium] move Tools.gyp, switch build-webkit --chromium to All.gyp
        https://bugs.webkit.org/show_bug.cgi?id=76505

        Reviewed by Tony Chang.

        Update chromium build script to use All.gyp instead of WebKit.gyp

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Renamed from Source/WebKit/chromium/Tools.gyp.
        * Scripts/webkitdirs.pm:

2012-01-18  Sam Weinig  <sam@webkit.org>

        Don’t hardcode the path to ‘make‘.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2012-01-18  Joshua Bell  <jsbell@chromium.org>

        Adding myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=76569

        Unreviewed.

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

2012-01-18  Adam Barth  <abarth@webkit.org>

        Up the cap on test failures tolerated by the EWS so the mac-ews can run to completion
        https://bugs.webkit.org/show_bug.cgi?id=76567

        Reviewed by Eric Seidel.

        Current the AppleMac port has slightly more failures than we allow on
        the EWS, causing the mac-ews to spin.  This patch ups the limit a bit,
        which should hopefully let the mac-ews run to completion.  Once
        AppleMac has fewer failures, we can lower the cap again.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        (LayoutTestResultsReaderTest.test_layout_test_results):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2012-01-18  Eric Carlson  <eric.carlson@apple.com>

        Provide access to user's list of preferred languages
        https://bugs.webkit.org/show_bug.cgi?id=76138

        Reviewed by Alexey Proskuryakov.

        * GNUmakefile.am: Add JSInternalsCustom.cpp.

2012-01-18  Adam Barth  <abarth@webkit.org>

        Add Chromium Linux GPU 32 to the list of allowed Chromium Linux
        configurations.

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

2012-01-18  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium needs methods to scroll an object into view or to a specific location.
        https://bugs.webkit.org/show_bug.cgi?id=73460

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::scrollToMakeVisibleCallback):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocusCallback):
        (AccessibilityUIElement::scrollToGlobalPointCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):

2012-01-17  Enrica Casucci  <enrica@apple.com>

        Missing NSForegroundColorAttributeName should be treated as black instead of transparent.
        https://bugs.webkit.org/show_bug.cgi?id=76490
        <rdar://problem/9460733>

        Added TestWebKitAPI test.
        
        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new test file.
        * TestWebKitAPI/Tests/mac/InspectorBar.mm: Added test that calls
        changeAttributes to the WebView.
        
2012-01-18  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Consolidate layout test crash logging
        https://bugs.webkit.org/show_bug.cgi?id=75088

        Reviewed by Simon Hausmann.

        Move backtrace generating logic into WTFReportBacktrace
        and add a way to deinstall signal handlers if we know
        that we have already printed the backtrace.

        * DumpRenderTree/qt/main.cpp:
        (crashHandler):
        (setupSignalHandlers):
        (WTFCrashHook):
        (main):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::crashHandler):
        (WTR::setupSignalHandlers):
        (WTR::crashHook):
        (WTR::InjectedBundle::platformInitialize):

2012-01-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix after r105256.

        There was a cyclic dependency between self._port and self._host assigments.

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

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

        Add new watchlist rule for the Qt build system

        Reviewed by Simon Hausmann.

        * Scripts/webkitpy/common/config/watchlist:

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

        [Qt] Move OTHER_FILES from WebKit.pro to Tools.pro

        Reviewed by Simon Hausmann.

        * Tools.pro:

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

        [Qt] Allow building only a subset of the WebKit sub-projects

        Fixes build-jsc, broken in r104825.

        We no longer need the intermediate buildQMakeQtProject(), as we're the
        only port using qmake, and buildQMakeProject is now highly Qt specific.

        <http://webkit.org/b/76179>

        Reviewed by Simon Hausmann.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):

2012-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should generate a json file that summaries the result
        https://bugs.webkit.org/show_bug.cgi?id=76504

        Reviewed by Adam Barth.

        Add an ability to generate a json file to run-perf-test in the preparation for perf bots.
        New option --outout-json-path specifies the json file's path, and --source-json-path specifies
        another json file to be merged into the generated json file.

        Also fixed a bug that --build wasn't set by default.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.webkit_base):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        (PerfTestsRunner):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner.run):
        (PerfTestsRunner._generate_json_if_specified):
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._process_parser_test_result):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest):
        (create_runner):
        (test_run_test_set):
        (test_run_test_set_for_parser_tests):
        (test_run_test_set_with_summary_json):
        (test_collect_tests):
        (test_parse_args):

2012-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105244.
        http://trac.webkit.org/changeset/105244
        https://bugs.webkit.org/show_bug.cgi?id=76518

        broke Chromium Mac (Requested by rolandsteiner on #webkit).

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::removeSelection):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::removeSelection):

2012-01-17  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Chromium needs methods to scroll an object into view or to a specific location.
        https://bugs.webkit.org/show_bug.cgi?id=73460

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::scrollToMakeVisibleCallback):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocusCallback):
        (AccessibilityUIElement::scrollToGlobalPointCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::scrollToMakeVisible):
        (AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (AccessibilityUIElement::scrollToGlobalPoint):

2012-01-17  Adam Barth  <abarth@webkit.org>

        Enable tests on the mac-ews
        https://bugs.webkit.org/show_bug.cgi?id=76502

        Reviewed by Simon Fraser.

        Apple now has five machines running the mac-ews.  Lucas Forschler has
        asked that we try enabling tests to see if we have enough bandwidth.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (MacEWS):

2012-01-17  Sanjoy Das  <sanjoy@playingwithpointers.com>

        Add a check-webkit-style exception for GDBInterface.cpp
        https://bugs.webkit.org/show_bug.cgi?id=76187

        Add an exception for Source/JavaScriptCore/jit/GDBInterface.cpp so
        that it does not fail the style check.

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checker.py: Tell the style checker to not run
        readability/naming tests on
        Source/JavaScriptCore/jit/GDBInterface.cpp.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier): Add a test for
        the above exception.

2012-01-17  Hajime Morrita  <morrita@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=76245
        [Mac][DRT] should allow query string for the file URL.

        Reviewed by Tony Chang.

        Taught DRT about file:// as a url instead of a file path.
        We are now able to use a path file:///foo/bar.html?baz as a url
        with which DRT opens "/foo/bar.html" with "baz" as a query string.

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

2012-01-17  Ojan Vafai  <ojan@chromium.org>

        Check style on test_expectations.txt files before commit
        https://bugs.webkit.org/show_bug.cgi?id=76484

        Reviewed by Adam Barth.

        Unlike other style rules, if you get the syntax of the test_expectations.txt
        file wrong, the layout tests won't run. Also, this check is simple and only
        slows down committing if you actually modify one of the test_expectations.txt files.

        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        (Commit.run):
        * Scripts/webkitpy/tool/steps/commit_unittest.py: Added.
        (CommitTest):
        (CommitTest.test_check_test_expectations):

2012-01-17  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] Debug build fails with debug qt5
        https://bugs.webkit.org/show_bug.cgi?id=76463

        Reviewed by Simon Hausmann.

        Add QNetworkCookie include in order to satisfy sizeof in QTypeInfo in debug builds.

        * QtTestBrowser/cookiejar.h:

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

        webkitpy: fix json import on linux
        https://bugs.webkit.org/show_bug.cgi?id=76481

        Reviewed by Adam Barth.

        For some reason, the version of simplejson autoinstalled on my linux
        box seems to be broken. We should really only be using
        simplejson if json isn't available anyway, so this change looks
        for json first.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.test_test_timings_trie):

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

        Fix failures in test-webkitpy caused by r105177.

        Unreviewed, build fix.

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

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

        webkitpy: make PortFactory.get() be fully data-driven
        https://bugs.webkit.org/show_bug.cgi?id=76360

        Reviewed by Eric Seidel.

        Refactor PortFactory.get() to be fully data-driven.

        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        (PortFactory._default_port):
        (PortFactory.get):
        (PortFactory.get.in):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.assert_port):

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

        webkitpy: add determine_full_port_name(), clean up port.__init__()
        https://bugs.webkit.org/show_bug.cgi?id=76357

        Reviewed by Adam Barth.

        Each Port class is now required to implement a 'port_name' field
        that will match the start of all ports constructed by this class and
        a 'determine_full_port_name' field that will make the port
        fully-qualified.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port):
        (Port.determine_port_name):
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort.for):
        (ChromiumPort.__init__):
        (ChromiumPort):
        (ChromiumPort._chromium_base_dir):
        (ChromiumPort.path_from_chromium_base):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (ChromiumGpuLinuxPort):
        (ChromiumGpuLinuxPort.__init__):
        (ChromiumGpuMacPort):
        (ChromiumGpuMacPort.__init__):
        (ChromiumGpuWinPort):
        (ChromiumGpuWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        (ChromiumLinuxPort.determine_port_name):
        (ChromiumLinuxPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        (ChromiumMacPort.determine_port_name):
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort):
        (ChromiumWinPort.determine_port_name):
        (ChromiumWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryRunPort):
        (DryRunPort.determine_port_name):
        (DryRunPort.__init__):
        * Scripts/webkitpy/layout_tests/port/efl.py:
        (EflPort):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory):
        (PortFactory._default_port):
        (PortFactory.get):
        (PortFactory.get.in):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.assert_port):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeLinux32Port):
        (GoogleChromeLinux32Port.determine_port_name):
        (GoogleChromeLinux64Port):
        (GoogleChromeLinux64Port.determine_port_name):
        (GoogleChromeMacPort):
        (GoogleChromeMacPort.determine_port_name):
        (GoogleChromeWinPort):
        (GoogleChromeWinPort.determine_port_name):
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        (MacPort.determine_port_name):
        (MacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_versions):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort):
        (MockDRTPort.determine_port_name):
        (MockDRTPort.__init__):
        (MockDRT):
        (MockDRT.determine_port_name):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase.make_port):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort):
        (QtPort.determine_port_name):
        (QtPort.__init__):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort):
        (TestPort.determine_port_name):
        (TestPort.__init__):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.__init__):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        (WinPort.determine_port_name):
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort.__init__):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort):
        (get_test_config):

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

        webkitpy: clean up port code in preparation for static port names
        https://bugs.webkit.org/show_bug.cgi?id=76356

        Reviewed by Adam Barth.

        To fix bug 76215 and be able to determine appropriate port names
        in webkitpy without actually constructing Port objects, we need
        to shuffle some logic in the chromium ports to be able to figure
        out whether we built DRT in 32 or 64-bit mode.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._chromium_base_dir):
        (ChromiumPort.__init__):
        (ChromiumPort.path_from_chromium_base):
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort):
        (ChromiumLinuxPort._determine_driver_path_statically):
        (ChromiumLinuxPort._static_build_path):
        (ChromiumLinuxPort._determine_architecture):
        (ChromiumLinuxPort.__init__):
        (ChromiumLinuxPort._build_path):

2012-01-17  Hao Zheng  <zhenghao@chromium.org>

        Do not remove pixel failures for ref tests.
        https://bugs.webkit.org/show_bug.cgi?id=76243

        Reviewed by Tony Chang.

        'NRWT --no-pixel-tests' complains when reftests are expected to
        be image mismatch.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._update_summary_with_result):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (is_reftest_failure):
        (determine_result_type):

2012-01-17  Balazs Ankes  <Ankes.Balazs@stud.u-szeged.hu>

        REGRESSION(r81225): ORWT should ignore reftests
        https://bugs.webkit.org/show_bug.cgi?id=67936

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:
        (isUsedInReftest): $filename should be the first parameter
        (findTestsToRun): run test if it isn't reftest

2012-01-17  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Fix python unit test I broke with r105142

        * Scripts/webkitpy/common/config/ports_unittest.py:
        (WebKitPortTest.test_gtk_port):

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

        [Qt] Don't set the 'primary' flag when mocking touch-points in MiniBrowser

        Qt 5 no longer has that flag.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2012-01-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        GTK+ EWS needs to run update-webkitgtk-libs after applying a patch
        https://bugs.webkit.org/show_bug.cgi?id=75857

        Reviewed by Adam Barth.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): move cleaning the build to happen early,
        and handle --update-gtk right after that
        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command): pass --update-gtk as an option to
        build-webkit, so that it is used in the EWS

2012-01-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add _debug postfix to targets when building debug only

        Reviewed by Simon Hausmann.

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

2012-01-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add more files to project-files for easier navigation in Qt Creator

        Reviewed by Simon Hausmann.

        * Tools.pro:
        * qmake/config.tests/README: Added.

2012-01-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] fast/dom/constructed-objects-prototypes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=75432

        Reviewed by Martin Robinson.

        * Scripts/build-webkit: Enable video-track in GTK.

2012-01-16  Takashi Toyoshima  <toyoshim@chromium.org>

        Add toyoshim as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=76390

        Reviewed by Hajime Morita.

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

2012-01-16  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build fix after r104155. Several debug targets were not
        properly including the '*Common' property sheets.

        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugCairoCFLite.vsprops:
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops:

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

        REGRESSION(r105072): It broke committers_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=76396

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest._assert_fuzz_match): It should handle more names.
        (CommittersTest.test_contributors_by_fuzzy_match_with_legacy_names): Fix the testcase.

2012-01-16  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Include gtk+3 in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=76284

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Add some gtk+3 to the jhbuild moduleset.

2012-01-16  Dan Winship  <danw@gnome.org>

        Add myself as a committer

        Unreviewed

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

2012-01-16  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Unreviewed; fix the build when --as-needed and --no-copy-dt-needed-entries are passed to the linker.

        Some recent versions of a few Linux distributions have started passing
        --as-needed and --no-copy-dt-needed-entries by default to the linker,
        which broke the build when SHARED_CORE was turned on, as libwtf_efl.so
        needed a few symbols from libjavascriptcore_efl.so.

        * DumpRenderTree/efl/CMakeLists.txt: Explicitly pass WTF_LIBRARY_NAME
        before JavaScriptCore_LIBRARY_NAME in DumpRenderTree_LIBRARIES so the
        libraries are searched in the right order by the linker.

2012-01-16  Philippe Normand  <pnormand@igalia.com>

        [GTK] set audio resources path in NRTW
        https://bugs.webkit.org/show_bug.cgi?id=76380

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server): Set $AUDIO_RESOURCES_PATH so
        the uninstalled audio resources are used during webaudio tests.

2012-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ldflags and cflags should take precedence over the existing flags in gtkdoc.py
        https://bugs.webkit.org/show_bug.cgi?id=76369

        Reviewed by Xan Lopez.

        If there's an installed version of webkit and there are new
        symbols in the build tree, gtkdoc-scanobj fails due to undefined
        references, because the env ldflags are given before the local
        ones.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_scangobj):

2012-01-15  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-video on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75867

        Reviewed by Philippe Normand.

        Add --[no-]video-track to build-webkit, since video track feature
        depends on video.

        * Scripts/build-webkit:

2012-01-14  James Robinson  <jamesr@chromium.org>

        [chromium] Failing webkit_unit_tests does not make the cr-linux EWS bubble red
        https://bugs.webkit.org/show_bug.cgi?id=76313

        Reviewed by Adam Barth.

        The exit code of this script should be the exit code of webkit_unit_tests. Tested manually.

        * Scripts/run-chromium-webkit-unit-tests:

2012-01-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r105017.
        http://trac.webkit.org/changeset/105017
        https://bugs.webkit.org/show_bug.cgi?id=76333

        broke the build (Requested by philn-tp on #webkit).

        * gtk/jhbuild.modules:

2012-01-14  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Include gtk+3 in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=76284

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Add some gtk+3 to the jhbuild moduleset.

2012-01-13  Adam Barth  <abarth@webkit.org>

        Remove --dry-run support from webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=76300

        Reviewed by Dirk Pranke.

        This is the rest of the patch from Bug 76300.  I landed it separtely
        because main.py had some stray conflict markers that I needed to clean
        up first.

        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester._run_tests):

2012-01-13  Adam Barth  <abarth@webkit.org>

        test-webkitpy does not run
        https://bugs.webkit.org/show_bug.cgi?id=76318

        Unreviewed.

        Looks like some conflict markers got left in the file.

        * Scripts/webkitpy/test/main.py:
        (Tester.run):

2012-01-13  Adam Barth  <abarth@webkit.org>

        Remove --dry-run support from webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=76300

        Reviewed by Dirk Pranke.

        We don't use this functionality for anything, and it doesn't really
        work.  Someone in #webkit tried using it and and got sad/confused.  We
        should just remove it.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.push_local_commits_to_server):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.__init__):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (_shared_test_commit_with_message):
        (GitSVNTest.test_commit_text_parsing):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.commit_with_message):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.__init__):
        (Bugzilla.quips):
        (Bugzilla.authenticate):
        (Bugzilla.add_attachment_to_bug):
        (Bugzilla.add_patch_to_bug):
        (Bugzilla.create_bug):
        (Bugzilla.clear_attachment_flags):
        (Bugzilla.set_flag_on_attachment):
        (Bugzilla.obsolete_attachment):
        (Bugzilla.add_cc_to_bug):
        (Bugzilla.post_comment_to_bug):
        (Bugzilla.close_bug_as_fixed):
        (Bugzilla.reassign_bug):
        (reopen_bug):
        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester.run_tests):

2012-01-13  David Levin  <levin@chromium.org>

        check-webkit-style: should encourage the use of Own* classes for Windows DC.
        https://bugs.webkit.org/show_bug.cgi?id=76227

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_leaky_patterns): The new check.
        (process_line): Added a call to the new check.
        (CppChecker): Added the new error type.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase):
        (CppStyleTestBase.perform_leaky_pattern_check):
        The check for only leaky pattern errors.
        (LeakyPatternTest): Test cases.

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up handling of test directories, QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=76238

        Reviewed by Adam Barth.

        This patch cleans up a bunch of hacks related to how we find all
        of the python unit tests and set up the sys.path variable in
        test-webkitpy.

        This patch changes how test-webkitpy works slightly in that we
        will now look for test files under Tools/Scripts and Source/WebKit2/Scripts
        rather than just Tools/Scripts/webkitpy and Source/WebKit2/Scripts/webkit.
        This greatly simplifies the mapping of paths to module names and
        appears to have no significant performance impact or other drawbacks.

        There are other ways that we could remove all of the hacks and
        still have a more flexible mapping of paths to module names, but
        the ones I've thought of so far add a decent amount of complexity to
        the implementation and don't seem to buy us much.
        
        * QueueStatusServer/__init__.py:
        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:
        (Tester._modules_from_paths):
        (Tester._is_module):

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: should support classes and individual test names as well as modules
        https://bugs.webkit.org/show_bug.cgi?id=76233

        Reviewed by Adam Barth.

        The default unittest.main() supports a list of individual
        TestCase classes or individual tests as well as modules. This
        change adds support for the same to test-webkitpy, so now you
        can say

          % test-wekbitpy webkitpy.test.cat_unittest.CatTest

        and

          % test-wekbitpy webkitpy.test.cat_unittest.CatTest.test_basic

        in addition to

          % test-wekbitpy webkitpy.test.cat_unittest

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/cat_unittest.py:
        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester.run):
        (Tester):
        (Tester._find_modules):
        (Tester._exclude):
        (Tester._run_tests):
        (Tester._is_module):
        (Tester._log_exception):

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: add basic code coverage support
        https://bugs.webkit.org/show_bug.cgi?id=76201

        Reviewed by Adam Barth.

        This test adds basic code coverage support to test-webkitpy; if
        you pass the -c flag, we will generate a new coverage file. We
        can start simply with this and add more features as necessary.

        This patch requires coverage to be already installed on the
        machine. I am not auto-installing this for now.

        * Scripts/webkitpy/test/main.py:
        (Tester.parse_args):
        (Tester.run_tests):

2012-01-13  Dirk Pranke  <dpranke@chromium.org>

        StatusBubbleTest.test_build_bubble is failing
        https://bugs.webkit.org/show_bug.cgi?id=76222

        Reviewed by Adam Barth.

        * QueueStatusServer/handlers/statusbubble_unittest.py:
        (StatusBubbleTest.test_build_bubble):

2012-01-13  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        nrwt should use multiple http shards
        https://bugs.webkit.org/show_bug.cgi?id=75958

        Add --max-locked-shards option to the nrwt for manual set
        the maximum number of the locked shards

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._max_locked_shards):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ShardingTests.get_shards):
        (ShardingTests.test_multiple_locked_shards):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-13  Raphael Kubo da Costa  <kubo@profusion.mobi>

        prepare-ChangeLog: Look for a text editor in a few more variables.
        https://bugs.webkit.org/show_bug.cgi?id=76289

        Reviewed by Ryosuke Niwa.

        A text editor was looked for only in the CHANGE_LOG_EDITOR and
        CHANGE_LOG_EDIT_APPLICATION environment variables before falling back
        to the OS X-specific open(1) command.

        As there does not seem to be a common way of looking for a text editor
        among the scripts in Tools/Scripts right now, just look at $VISUAL and
        $EDITOR (set much more often than the other variables in Unix systems)
        before falling back to open(1).

        * Scripts/prepare-ChangeLog:
        (openChangeLogs):

2012-01-13  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] gtkdoc.py ignoring LDFLAGS and CFLAGS environment variables
        https://bugs.webkit.org/show_bug.cgi?id=76269

        Reviewed by Martin Robinson.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_scangobj):

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

        [Qt][WK2]REGRESSION(r104881):It broke hundreds of tests
        https://bugs.webkit.org/show_bug.cgi?id=76247

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Disable mock scrollbars on Qt by default. (workaround)

2012-01-13  Hajime Morrita  <morrita@chromium.org>

        [Mac][DRT] Should support --no-timeout
        https://bugs.webkit.org/show_bug.cgi?id=76242

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions): Added "--no-timeout" to the options list.
        (setWaitToDumpWatchdog): Added to encapsulate the waitToDumpWatchdog global variable.
        (shouldSetWaitToDumpWatchdog): Added to check the useTimeoutWatchdog flag set by the option.
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setWaitToDump): Now calls shouldSetWaitToDumpWatchdog() to check the flag.

2012-01-12  Simon Fraser  <simon.fraser@apple.com>

        Mitigate scrollbar differences when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=67217

        Reviewed by Dan Bernstein.
        
        Enable mock scrollbars by default for tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2012-01-12  Ryosuke Niwa  <rniwa@webkit.org>

        Need a script to run tests in PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=76132

        Reviewed by Adam Barth.

        Add run-perf-tests to run performance tests using parser/resources/runner.js.
        Unfortunately, there isn't an easy way of telling which test uses which format
        so hard-code directory that uses Chromium perf-bot style (only inspector perf. tests for now).

        All test outputs are re-formatted to match Chromium perf-bot style.

        * Scripts/run-inspector-perf-tests.py:
        * Scripts/run-perf-tests: Added.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner):
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        (PerfTestsRunner._print_status):
        (PerfTestsRunner._run_tests_set):
        (PerfTestsRunner._process_chromium_style_test_result):
        (PerfTestsRunner._should_ignore_line_in_parser_test_result):
        (PerfTestsRunner._process_parser_test_result):
        (PerfTestsRunner._run_single_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.TestDriver.run_test):
        (create_runner):
        (run_test):
        (test_run_test_set):
        (test_run_test_set_for_parser_tests):
        (test_collect_tests):

2012-01-12  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port unit tests in preparation for making port_name mandatory
        https://bugs.webkit.org/show_bug.cgi?id=76123

        Reviewed by Adam Barth.

        This change updates the unit tests to be more consistent in how
        ports are created, in preparation for making port_name a
        mandatory parameter to the constructor and removing any version
        interpretation from it.

        There should be no functional changes in this patch, but some
        tests that are no longer relevant have been removed or reworked.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_get_option__default):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest):
        (ChromiumLinuxPortTest.assert_architecture):
        (ChromiumLinuxPortTest.test_determine_architecture_fails):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest):
        (ChromiumPortTest.test_all_test_configurations):
        (ChromiumPortTest.TestMacPort.__init__):
        (ChromiumPortTest.TestLinuxPort.__init__):
        (ChromiumPortTest.TestWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest):
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        (EflPortTest):
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        (GtkPortTest):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest):
        (MockDRTPortTest.make_port):
        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort._port_flag_for_scripts):
        (QtPort.__init__):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest.test_baseline_search_path):
        (QtPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest):
        (WinPortTest._assert_search_path):
        (WinPortTest.test_baseline_search_path):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort.__init__):

2012-01-12  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: clean up logging and provide a real --help message
        https://bugs.webkit.org/show_bug.cgi?id=76142

        Reviewed by Adam Barth.

        This test is mostly more refactoring - it calls objects in
        unittest directly instead of routing through unittest.main() --
        in order to gain more control over the logging and to provide a
        correct --help message. This will also give us a better
        foundation for adding more feautures down the road.

        This patch adds different levels of logging controlled by the
        '-s', '-q', and '-v' options (see --help for details), and
        removes the --verbose-logging option.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:
        (Tester):
        (Tester.clean_packages):
        (Tester.__init__):
        (Tester.parse_args):
        (Tester.configure):
        (Tester._configure_logging):
        (Tester.find_modules):
        (Tester._exclude):
        (Tester._modules_from_paths):
        (Tester.run_tests):

2012-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Make the new WTF module build on Qt
        https://bugs.webkit.org/show_bug.cgi?id=76163

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/modules/wtf.prf: Pull in WTF from the new location.

2012-01-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, mac DumpRenderTree fix.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):

2012-01-12  Vsevolod Vlasov  <vsevik@chromium.org>

        WebKitTestRunner should not print console message line number when it is equal to zero.
        https://bugs.webkit.org/show_bug.cgi?id=76167

        Reviewed by Csaba Osztrogonác.

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

2012-01-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Make default console messages line numbers consistent.
        https://bugs.webkit.org/show_bug.cgi?id=74075

        Reviewed by Pavel Feldman.

        Unset line numbers are not printed to console now.
        Added Source/WebCore/inspector to efl DumpRenderTree include path.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAddMessageToConsole):
        * DumpRenderTree/efl/CMakeLists.txt:
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onConsoleMessage):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewConsoleMessage):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::javaScriptConsoleMessage):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (LayoutWebViewEventHandler::OnConsoleMessageEvent):

2012-01-10  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: push more logic into webkitpy.test.main, clean up code
        https://bugs.webkit.org/show_bug.cgi?id=76021

        Reviewed by Eric Seidel.

        I plan to add more functionality to test-webkitpy, but it is
        difficult to hack on now; this patch is the first of two that
        brings test-webkitpy more inline with current coding style by
        pushing more logic into the webkitpy.test.main.Tester class (so
        that it will be testable itself).
        
        There should be no functional changes in this patch.

        * Scripts/test-webkitpy:
        (_path_from_webkit_root):
        * Scripts/webkitpy/test/main.py:
        (Tester):
        (Tester.init):
        (Tester.configure_logging):
        (Tester.configure_logging.filter):
        (Tester.clean_packages):
        (Tester.run_tests):

2012-01-11  Wei Jia  <wjia@chromium.org>

        implement layout tests for <video> with media stream
        https://bugs.webkit.org/show_bug.cgi?id=74882

        Reviewed by Kent Tamura.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/WebUserMediaClientMock.cpp: Added.
        (WebKit::WebUserMediaClientMock::create):
        (WebKit::WebUserMediaClientMock::IsMockStream):
        (WebKit::WebUserMediaClientMock::requestUserMedia):
        (WebKit::WebUserMediaClientMock::cancelUserMediaRequest):
        * DumpRenderTree/chromium/WebUserMediaClientMock.h: Added.
        (WebKit::WebUserMediaClientMock::~WebUserMediaClientMock):
        (WebKit::WebUserMediaClientMock::WebUserMediaClientMock):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::userMediaClient):
        (WebViewHost::userMediaClientMock):
        (WebViewHost::createMediaPlayer):
        (WebViewHost::mediaStreamUtil):
        (WebViewHost::testMediaStreamClient):
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix chromium-win's version remapping to work correctly on Win 7 SP1.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):

2012-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        Sheriffbot build fix. Don't emit empty lines on IRC.

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

2012-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        last-green-revision should report the revision that succeeded on all bots
        https://bugs.webkit.org/show_bug.cgi?id=76109

        Reviewed by Adam Barth.

        Add an algorithm to find the last known good revision among the specified bots. For a revision to be
        considered green by this algorithm, all matching builders must have a successful run at the revision
        or two consecutive successful runs before and after the revision.

        Also fixed a bug in irc_command that the result wasn't posted on IRC properly and a bug in queries.py
        that resulted in an exception when the user didn't pass BUILDER_NAME argument.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot._revisions_for_builder):
        (BuildBot):
        (BuildBot._find_green_revision):
        (BuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_revisions_for_builder):
        (test_find_green_revision):
        (test_last_green_revision):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (LastGreenRevision.execute):
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        (SheriffIRCBotTest.test_lgr):
        * Scripts/webkitpy/tool/commands/queries.py:
        (LastGreenRevision):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, fix build bustage on win32 introduced by r104725.

        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockChromiumDRTTest.test_pixeltest__fails):

2012-01-11  Jochen Eisinger  <jochen@chromium.org>

        [Chromium] mimic the (old) behavior of the mac port for (re)setting the color profile
        https://bugs.webkit.org/show_bug.cgi?id=75618

        Eventually, we should get away from setting the display's color profile, as the mac port is doing now.

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestHelper.mm:
        (installLayoutTestColorProfile):
        (restoreUserColorProfile):
        (main):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy: fix -v and eliminate some spurious warnings
        https://bugs.webkit.org/show_bug.cgi?id=76099

        Reviewed by Adam Barth.

        when we added support for --xml output, we broke the -v flag.

        Also, fix the code to swallow a harmless warning from
        VCSUtils.pm and fix a deprecated warning in jsonchecker.py.

        test-webkitpy is now silent again except for the one known
        logging issue.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.commit_message_for_this_commit):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (test_commit_message_for_this_commit):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONChecker.check):
        (JSONChecker.line_number_from_json_exception):
        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: webkitpy.layout_tests.port tests should only use MockSystemHost, not MockHost
        https://bugs.webkit.org/show_bug.cgi?id=76084

        Reviewed by Adam Barth.

        This will help make it easier to catch layering violations. This
        change just refactors test code; there are no changes to
        production code.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.make_port):
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest.test_parse_reftest_list):
        (PortTest.test_httpd_returns_error_code):
        (PortTest.test_virtual_methods):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.assert_port_works):
        (ChromiumGpuTest._assert_baseline_path):
        (ChromiumGpuTest.test_graphics_type):
        (ChromiumGpuTest.test_default_tests_paths.test_paths):
        (ChromiumGpuTest.test_test_files):
        (ChromiumGpuTest.test_test_files.test_paths):
        (ChromiumGpuTest):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.assert_architecture):
        (ChromiumLinuxPortTest.test_check_illegal_port_names):
        (ChromiumLinuxPortTest.test_determine_architecture_fails):
        * Scripts/webkitpy/layout_tests/port/driver_unittest.py:
        (DriverTest.make_port):
        (DriverTest):
        (DriverTest.assertVirtual):
        (DriverTest._assert_wrapper):
        (DriverTest.test_virtual_driver_methods):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockDRTPortTest.test_port_name_in_constructor):
        (MockDRTTest.assertTest):
        (MockDRTTest.test_main):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort.__init__):
        (WebKitPortUnitTests.test_default_options):
        (test_runtime_feature_list):
        (test_test_expectations):

2012-01-11  Ojan Vafai  <ojan@chromium.org>

        Style skipped tests in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=76091

        Reviewed by Tony Chang.

        * TestResultServer/static-dashboards/dashboard_base.js:
        Removed "FLAKY" from this list since we don't ever mark individual runs
        as flaky. Also deleted an outdated line.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2012-01-11  Ojan Vafai  <ojan@chromium.org>

        Remove gtest normalization code from the test results server
        https://bugs.webkit.org/show_bug.cgi?id=76089

        Reviewed by Tony Chang.

        The normalization now happens on the gtest side.

        * TestResultServer/model/jsonresults.py:
        (JsonResults.merge):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_gtest):

2012-01-11  Ojan Vafai  <ojan@chromium.org>

        Be more aggressive about deleting unnecessary results from the test-results-server json files
        https://bugs.webkit.org/show_bug.cgi?id=76086

        Reviewed by Tony Chang.

        Remove any tests that only contain skip/pass/nodata values whose runtime
        is less than 5 seconds.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._normalize_results_json):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_remove_test):
        (JsonResultsTest.test_merge_keep_test_with_all_pass_but_slow_time):

2012-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        last-green-revision should give us per-bot information
        https://bugs.webkit.org/show_bug.cgi?id=76011

        Reviewed by Adam Barth.

        Rewrote last-green-revision command. Instead of finding a revision for which all bots succeeded,
        we report the latest green run on each bot from the last 100 runs.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot._fetch_builder_page):
        (BuildBot):
        (BuildBot._green_revision_for_builder):
        (BuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_green_revision_for_builder):
        (test_last_green_revision):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (LastGreenRevision.execute):
        * Scripts/webkitpy/tool/commands/queries.py:
        (LastGreenRevision.execute):

2012-01-11  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up version detection in webkitpy.layout_tests.port
        https://bugs.webkit.org/show_bug.cgi?id=76016

        Reviewed by Adam Barth.

        This change updates the code in webkitpy.layout_tests.port to
        use the new os_name and os_version fields on host.platform. This
        gets layout_tests.port out of the version parsing business. Most
        of the diffs are just cleaning up test code to accomodate the
        changes.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive):
        (MockExecutive.ignore_error):
        (MockExecutive2):
        (MockExecutive2.ignore_error):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_mac):
        (MockPlatformInfo.is_linux):
        (MockPlatformInfo.is_win):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.__init__):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        (ChromiumMacPort.check_wdiff):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest):
        (ChromiumMacPortTest.assert_name):
        (ChromiumMacPortTest.test_versions):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        (ChromiumPortTest.TestMacPort.__init__):
        (ChromiumPortTest.TestLinuxPort.__init__):
        (ChromiumPortTest.TestWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinTest):
        (ChromiumWinTest.assert_name):
        (ChromiumWinTest.test_versions):
        (ChromiumWinTest.test_baseline_path):
        (ChromiumWinTest.test_build_path):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._port_name_from_arguments_and_options):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest):
        (FactoryTest.setUp):
        (FactoryTest.assert_port):
        (FactoryTest.test_mac):
        (FactoryTest.test_win):
        (FactoryTest.test_google_chrome):
        (FactoryTest.test_gtk):
        (FactoryTest.test_qt):
        (FactoryTest.test_chromium_gpu):
        (FactoryTest.test_chromium_gpu_linux):
        (FactoryTest.test_chromium_gpu_mac):
        (FactoryTest.test_chromium_gpu_win):
        (FactoryTest.test_chromium_mac):
        (FactoryTest.test_chromium_linux):
        (FactoryTest.test_chromium_win):
        (FactoryTest.test_unknown_specified):
        (FactoryTest.test_unknown_default):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (TestGoogleChromePort):
        (TestGoogleChromePort._verify_baseline_path):
        (TestGoogleChromePort._verify_expectations_overrides):
        (TestGoogleChromePort.test_get_google_chrome_port):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacTest):
        (assert_name):
        (test_tests_for_other_platforms):
        (test_version):
        (test_versions):
        (test_is_version_methods):
        (test_setup_environ_for_server):
        (_assert_search_path):
        (test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.make_port):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest):
        (WinPortTest.test_show_results_html_file):
        (WinPortTest._assert_search_path):
        (WinPortTest._assert_version):

2012-01-11  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] Remove workaround introduced into bug 75470
        https://bugs.webkit.org/show_bug.cgi?id=75889

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-01-10  Dmitry Lomov  <dslomov@google.com>

        [Chromium] Remove obsolete references to WebWorker class.
        https://bugs.webkit.org/show_bug.cgi?id=76020

        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h: Removed.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

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

        [Qt] Some css3 filter tests are failing after r104698
        https://bugs.webkit.org/show_bug.cgi?id=76055

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference): Add WebKitAcceleratedCompositingEnabled preference.

2012-01-11  Tony Chang  <tony@chromium.org>

        Don't remove 0 byte files when running build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=75997

        Reviewed by Csaba Osztrogonác.

        If QTDIR is set, isQt() is true even when running build-webkit --chromium.

        * Scripts/webkitdirs.pm:
        (determineIsQt):

2012-01-10  David Kilzer  <ddkilzer@apple.com>

        Add TestWebKitAPI tests for KURL
        <http://webkit.org/b/75774>

        Reviewed by Adam Barth.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add a
        WebCore folder and KURL.cpp source file to the project.
        * TestWebKitAPI/Tests/WebCore/KURL.cpp: Added.
        (TestWebKitAPI::WebCore::SetUp): Initialize the main thread
        during setup since this test doesn't go through WebKit or
        WebKit2.
        (TestWebKitAPI::TEST_F): Add two basic tests.

2012-01-10  David Kilzer  <ddkilzer@apple.com>

        Extract common code for comparing WTF::String objects into WTFStringUtilities.h

        Reviewed by Adam Barth.

        Needed for: <http://webkit.org/b/75774> Add TestWebKitAPI tests for KURL

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
        WTFStringUtilities.h to the project.
        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Update to use
        WTFStringUtilities.h.
        * TestWebKitAPI/WTFStringUtilities.h: Added.
        (WTF::operator<<):

2012-01-10  Vincent Scheib  <scheib@chromium.org>

        Clarify run-webkit-tests options reset-results and new-baseline
        https://bugs.webkit.org/show_bug.cgi?id=75993

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2012-01-10  Simon Fraser  <simon.fraser@apple.com>

        Disabled mock scrollbars should draw differently
        https://bugs.webkit.org/show_bug.cgi?id=75995

        Reviewed by James Robinson.

        When the scrollbar is disabled, paint the entire track of
        mock scrollbars with a lighter gray, and hide the thumb.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DRTMockScroller drawKnob]):
        (-[DRTMockScroller drawRect:]):

2012-01-10  James Robinson  <jamesr@chromium.org>

        [chromium] Run webkit_unit_tests as part of webkit-patch build-and-test
        https://bugs.webkit.org/show_bug.cgi?id=75988

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/ports.py:
        (WebKitPort.run_webkit_unit_tests_command):
        (WebKitPort):
        (ChromiumPort.run_webkit_unit_tests_command):
        (ChromiumPort):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_webkit_unit_tests_command):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.test_build_and_test):
        (test_land):
        (test_land_red_builders):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

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

        webkitpy: add os_name, os_version to platforminfo
        https://bugs.webkit.org/show_bug.cgi?id=75931

        Reviewed by Eric Siedel.

        As a first step in cleaning up the version parsing logic in
        webkitpy.layout_tests.port, this adds common routines for
        getting the os_name and os_version fields to the PlatformInfo
        class. Nothing uses them yet but I've added FIXME's to some of
        the code that needs to be deleted in the port files.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo):
        (PlatformInfo._determine_os_name):
        (PlatformInfo._determine_mac_version):
        (PlatformInfo._determine_linux_version):
        (PlatformInfo._determine_win_version):
        (PlatformInfo.display_name):
        (PlatformInfo.total_bytes_memory):
        (PlatformInfo._compute_bytes_from_vm_stat_output):
        (PlatformInfo.free_bytes_memory):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py: Added.
        (TestPlatformInfo):
        (TestPlatformInfo.make_info):
        (TestPlatformInfo.make_info.mock_run_command):
        (TestPlatformInfo.setUp):
        (TestPlatformInfo.tearDown):
        (TestPlatformInfo.test_basic):
        (TestPlatformInfo.integration_test_basic):
        (TestPlatformInfo.test_display_name_mac):
        (TestPlatformInfo.test_display_name_win32):
        (TestPlatformInfo.test_memory_mac):
        (TestPlatformInfo.test_memory_win32):
        (TestPlatformInfo.test_determine_os_name):
        (TestPlatformInfo.test_determine_mac_version):
        (TestPlatformInfo.test_determine_linux_version):
        (TestPlatformInfo.test_determine_win_version_from_tuple):
        (TestPlatformInfo.test_determine_win_version_from_cmd):
        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort):

2012-01-10  Adam Roben  <aroben@apple.com>

        Make it possible to type data: URLs into MiniBrowser on Windows

        Fixes <http://webkit.org/b/75084> Crash when trying to navigate to a data: URL in
        MiniBrowser on Windows

        Reviewed by Darin Adler.

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::handleMessage): Instead of checking for an "http://" prefix when deciding
        whether to prepend "http://", just look for whether the typed URL contains a colon. If it
        does, we assume it already has a scheme and don't modify it.

2012-01-10  Adam Roben  <aroben@apple.com>

        Make MiniBrowser automatically escape invalid URL characters typed in its URL field

        Fixes <http://webkit.org/b/75086> Crash when typing a data: URL containing double-quotes in
        MiniBrowser on Windows

        Reviewed by Darin Adler.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::goToURL): Pass the typed string through
        CFURLCreateStringByAddingPercentEscapes before trying to create a URL from it.

2012-01-10  Ben Wells  <benwells@chromium.org>

        Adding myself (benwells) to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=75971

        Reviewed by Ojan Vafai.

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

2012-01-10  Mario Sanchez Prada  <msanchez@igalia.com>

        AX: support helpText() in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=40193

        Reviewed by Chris Fleizach.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::helpText): Implemented.

2012-01-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104572.
        http://trac.webkit.org/changeset/104572
        https://bugs.webkit.org/show_bug.cgi?id=75967

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

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::sendOrQueueEvent):
        (EventSender::replaySavedEvents):
        (EventSender::eventFilter):
        * DumpRenderTree/qt/EventSenderQt.h:

2012-01-10  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt] fast/events/dont-loose-last-event test fails on WK1
        https://bugs.webkit.org/show_bug.cgi?id=73894

        Reviewed by Simon Hausmann.

        Empty the entire event queue when requested besides using
        sendEvent instead of postEvent to make sure all events were
        delivered.
        This commit also removes not working DRT code to handle drag and drop,
        for more refs see: https://bugs.webkit.org/show_bug.cgi?id=31332

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

2012-01-10  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Add the CSS_FILTERS feature flag to Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-01-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed -Werror build fix.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication): Re-order initialization to match
        declaration.

2012-01-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove dependency to uitools
        https://bugs.webkit.org/show_bug.cgi?id=75952

        Reviewed by Tor Arne Vestbø.

        QUiLoader is used for creating QLabel/QProgressBar widgets for
        a layout test, to verify some widget embedding feature. Unfortunately
        in Qt 5, QUiLoader is part of qttools, which depends on webkit, which
        depends on qttools. Since we don't really _need_ QUiLoader for our tests,
        let's break the circular dependency.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::createPlugin):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/webpage.cpp:
        (WebPage::createPlugin):
        * qmake/mkspecs/features/minimal_qt.prf:
        * qmake/mkspecs/features/uitools.prf: Removed.

2012-01-10  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Don't expose m_windowOptions as part of the public interface in MiniBrowserApplication
        https://bugs.webkit.org/show_bug.cgi?id=75894

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowserApplication.h:
        (MiniBrowserApplication::windowOptions):
        * MiniBrowser/qt/main.cpp:
        (main):

2012-01-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] DRT crashes with Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=75951

        Reviewed by Ossy.

        * DumpRenderTree/qt/fonts.conf: Add missing last-resort font fallback for Qt 5 where
        Qt relies on font-config to define the default font family.

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

        [Qt] REGRESSION(r100130): Clean build feature is broken.
        https://bugs.webkit.org/show_bug.cgi?id=75863

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2012-01-10  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Fix keyboard shortcuts in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=75885

        In QML events are propagated through parents. But since the
        WebView may consume key events, a shortcut might never reach
        the top QtQuickItem.
        Therefore an application wide event handling function in C++
        needs to take care of shortcuts for MiniBrowser.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::reload):
        (BrowserWindow::focusAddressBar):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2012-01-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add --efl alias for --platform=efl to run-webkit-test
        https://bugs.webkit.org/show_bug.cgi?id=75937

        Reviewed by Andreas Kling.
        
        * Scripts/run-webkit-tests: Add --efl alias.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Add --efl alias.
        (parse_args):

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

        -[DOMRange renderedImageForcingBlackText:] fails with non-user-selectable text
        https://bugs.webkit.org/show_bug.cgi?id=75920

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm:
        (TestWebKitAPI::TEST): Added a test for a range in a
        -webkit-user-select: none; block.

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

        webkitpy.layout_tests.port.mock_drt_unittest.MockChromiumDRTTest has been failing on cr-win
        https://bugs.webkit.org/show_bug.cgi?id=75884

        Reviewed by Ryosuke Niwa.

        Fix regression introduced (revealed?) in r104340. Chromium file         
        url syntax is different on win32 and the test results weren't           
        expecting that.                                                         

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations._report_errors):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_parse_error_nonfatal):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTTest.input_line):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (TestRebaseliner.make_rebaseliner):
        (TestRebaseliner.test_one_platform):
        (TestRebaseliner.test_all_platforms):
        (TestRebaseliner.test_png_file_with_comment):
        (TestRebaseliner.test_png_file_with_comment_remove_old_checksum):
        (TestRebaseliner.test_png_file_with_comment_as_duplicate):
        (TestRealMain.test_all_platforms):

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

        Fix regression in test-webkitpy introduced by removing the webkitpy/python24 directory.

        Unreviewed, build fix.

        test-webkitpy had a built-in self-test routine to verify that
        deleting the .pyc files worked correctly. When I removed the
        python24 directory in r104482, I broke the self-test.

        I have deleted the self-test for now. Since I am reworking
        test-webkitpy I will make sure the new version is adequately
        tested.

        * Scripts/test-webkitpy:
        (configure_logging):
        (_clean_pyc_files):
        (_clean_packages):
        (init):

2012-01-09  Justin Novosad  <junov@chromium.org>

        [Chromium] remove all references to the legacy accelerated 2d Canvas
        implementation
        https://bugs.webkit.org/show_bug.cgi?id=75108

        Purging an old settings flag that is no longer referenced

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAccelerated2dCanvasEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2012-01-09  Adam Roben  <aroben@apple.com>

        Convert Cygwin paths to Windows paths before passing them to DRT

        Fixes <http://webkit.org/b/64468> <rdar://problem/10663409> WIN: DumpRenderTree hangs under
        NRWT

        I couldn't find a way to test this because I couldn't figure out how to override the
        cygpath function as it is used by WebKitDriver.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._command_from_driver_input): On Cygwin, convert the test's path to a
        Windows-style path before passing it to DRT.

2012-01-06  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: revamp version checking
        https://bugs.webkit.org/show_bug.cgi?id=75765

        Reviewed by Adam Barth.

        The version-checking code in webkitpy/python24/versioning seems really
        awkward and overdesigned, especially since we don't support python 2.4
        any more.

        In addition, I am tired of getting warnings about Python 2.6 being "a
        newer release than what is supported" :).

        I'm taking a page from the depot_tools python code and just creating a
        new webkitpy.common.version_check module that will print a message on
        stderr and call sys.exit() if we're running an unsupported version.

        * Scripts/check-webkit-style:
        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-tests:
        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/test-webkitpy:
        (configure_logging):
        (init):
        * Scripts/webkit-patch:
        (main):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive._child_process_encoding):
        (Executive._should_encode_child_process_arguments):
        * Scripts/webkitpy/common/version_check.py: Copied from Tools/Scripts/rebaseline-chromium-webkit-tests.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/python24/__init__.py: Removed.
        * Scripts/webkitpy/python24/versioning.py: Removed.
        * Scripts/webkitpy/python24/versioning_unittest.py: Removed.

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

        Remove Chromium Mac CG from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=75873

        Reviewed by Ojan Vafai.

        This configuration no longer exists.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testOverrideJustBuildType):
        (testPlatformAndBuildType):

2012-01-06  Adam Roben  <aroben@apple.com>

        Print an error message when NRWT can't run Apache

        Fixes <http://webkit.org/b/75712> NRWT mysteriously exits when Apache returns an error code

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.check_httpd): Print an error message when Apache returns an error code instead of
        failing silently.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_check_httpd_success): Test that we don't print anything when we successfully
        run Apache.
        (PortTest.test_httpd_returns_error_code): Test that we print an error message when Apache
        fails.

2012-01-09  Gabor Rapcsanyi  <rgabor@webkit.org>

        [Gtk][ARM] Cross compiler buildbot is failing after r103040
        https://bugs.webkit.org/show_bug.cgi?id=75846

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):

2012-01-09  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Add support for dynamically enabling and disabling touch mocking in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75807

        This patch adds a new icon to navigationbar of the Qt MiniBrowser
        which allows you to dynamically toggle whether touch mocking is
        enabled or disabled.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::touchMockingEnabled):
        (WindowOptions::setTouchMockingEnabled):
        * MiniBrowser/qt/icons/touch.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

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

        Unreviewed. Fix make distcheck issues.

        * MiniBrowser/gtk/GNUmakefile.am:

2012-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104421.
        http://trac.webkit.org/changeset/104421
        https://bugs.webkit.org/show_bug.cgi?id=75816

        Need to rebaseline some tests on Linux (Requested by noamr on
        #webkit).

        * qmake/mkspecs/features/features.prf:

2012-01-08  Adam Barth  <abarth@webkit.org>

        Remove support for Chromium Mac CG from garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=75814

        Reviewed by Eric Seidel.

        This configuration no longer exists.  This patch is mostly a matter of
        updating config.js and removing the examples from the unit tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.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-01-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Add the CSS_FILTERS feature flag to Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        Categorize bots by ports instead of core/non-core separation
        https://bugs.webkit.org/show_bug.cgi?id=75766

        Reviewed by Eric Seidel.

        Rename categorizes so as to preserve the original ordering of bots per Eric's suggestion
        (Chromium still comes before GTK and Qt).

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the concept of core builders from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=75809

        Reviewed by Ryosuke Niwa.

        Treat all bots equally since core/non-core sepration has been removed from build.webkit.org,
        and remove the relevant code.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__):
        (BuildBot._matches_regexps):
        (BuildBot._builder_statuses_with_names_matching_regexps):
        (BuildBot.builder_statuses):
        (BuildBot.failure_map):
        (BuildBot._latest_builds_from_builders):
        (BuildBot.last_green_revision):
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py:
        (MockBuildBot.builder_statuses):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_status_parsing):
        (test_last_green_revision):
        (test_last_green_revision.mock_builds_from_builders):

2012-01-08  Adam Barth  <abarth@webkit.org>

        Remove Chromium Mac CG concept from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=75810

        Reviewed by Ryosuke Niwa.

        This configuration no longer exists.  We can remove all the supporting
        code from webkitpy.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_move_baselines):
        (BaselineOptimizerTest.test_chromium_covers_mac_win_linux):
        (BaselineOptimizerTest.test_chromium_mac_redundant_with_apple_mac):
        (BaselineOptimizerTest.test_common_directory_includes_root):
        (BaselineOptimizerTest.test_complex_shadowing):
        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build):
        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest):
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumPort):
        (ChromiumPort._generate_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_default_tests_paths):
        (ChromiumGpuLinuxPort.tests):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.integration_test_chromium_gpu_mac):
        (ChromiumGpuTest.assert_port_works):
        (ChromiumGpuTest.test_baseline_paths):
        (ChromiumGpuTest.test_graphics_type):
        (ChromiumGpuTest.test_default_tests_paths):
        (ChromiumGpuTest.test_test_files):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort):
        (ChromiumMacPort.__init__):
        (ChromiumMacPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_graphics_type):
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumPortTest.test_all_test_configurations):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._port_name_from_arguments_and_options):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_chromium_gpu_mac):
        (FactoryTest.test_chromium_mac):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (GetGoogleChromePortTest._verify_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockChromiumDRTTest.test_chromium_parse_options):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (test_url_fetcher):
        (test_zip_factory):
        (test_archive):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline_expectations):

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        Categorize bots by ports instead of core/non-core separation
        https://bugs.webkit.org/show_bug.cgi?id=75766

        Reviewed by Adam Barth.

        Get rid of the concept of core/non-core builders, and categorize build bots by ports instead.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2012-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r104403.
        http://trac.webkit.org/changeset/104403
        https://bugs.webkit.org/show_bug.cgi?id=75803

        It broke all tests on Qt5 (Requested by Ossy_weekend on
        #webkit).

        * qmake/mkspecs/features/features.prf:

2012-01-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS_FILTERS in Qt build
        https://bugs.webkit.org/show_bug.cgi?id=75777

        Add the CSS_FILTERS feature flag to Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2012-01-04  Kentaro Hara  <haraken@chromium.org>

        Rewrite the CSS parser of prepare-ChangeLog with unittests.
        https://bugs.webkit.org/show_bug.cgi?id=75202

        Reviewed by David Kilzer.

        The current CSS parser can just parse simple CSSes like

            foo bar baz {
                property1: value;
                property2: value;
            }

        , and cannot parse comments nor a CSS in which a selector and {
        appears in different lines. This patch rewrites the CSS parser
        (i.e. get_selector_line_ranges_for_css()) so that it can parse more CSSes
        shown in css_unittests.css.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests.css

        * Scripts/prepare-ChangeLog:
        (get_selector_line_ranges_for_css):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests.css: Added.
        (element1):
        (element2):
        (element3):
        (element4.p):
        (element5.p.q.r.s):
        (element6#p):
        (element7 element8):
        (element9.p element10.q):
        (element11#p element12#q):
        (element13, element14):
        (.p):
        (#p):
        (.p element15 #q element16.r element17#s):
        (element18:target):
        (element19):
        (element20):
        (element21):
        (element22):

2012-01-04  Kentaro Hara  <haraken@chromium.org>

        The Perl parser of prepare-ChangeLog can parse here-documents
        https://bugs.webkit.org/show_bug.cgi?id=73208

        Reviewed by David Kilzer.

        Currently prepare-ChangeLog cannot recognize here-documents in Perl,
        which results in wrong subroutine names in ChangeLogs.
        With this patch, prepare-ChangeLog can judge whether the line of "}"
        is the end of a subroutine or a line inside a here-document.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_perl):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl:
        Added test cases for here-documents.
        (func7):
        (func8):
        (func9):
        (func10):
        (func11):
        (func12):
        (func13):
        (func14):
        (func15):
        (func16):

2012-01-08  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the JavaScript parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75201

        Reviewed by David Kilzer.

        javascript_unittests.js is a unittest for get_function_line_ranges_for_javascript()
        of prepare-ChangeLog.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_javascript): Before this patch, a string found was just
        omitted from parsing. Thus,

            str = "foo"
            function func() {
            }

        was recognized as equivalent to

            str = function func() {
            }

        This patch replaces a string with a dummy identifier 'string_appeared_here'
        to tell the parser that a string appeared there.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests.js: Added.
        (func1):
        (func2):
        (func3):
        (func4):
        (func5):
        (func6):
        (func7):
        (func8):
        (func9):
        (func10):
        (func11):
        (func12):
        (funcOverloaded):
        (Func1.prototype.get x1):
        (Func1.prototype.get x2):
        (Func1.prototype.set x1):
        (Func1.prototype.set x3):
        (Func2.prototype.func13):
        (Func2.prototype.func14):
        (Func2.prototype.func15):
        (func16.func17):
        (func16.func18):
        (func16.func19):
        (func16):

2012-01-08  David Levin  <levin@chromium.org>

        [chromium] Add layout test support for autosize code in FrameView.
        https://bugs.webkit.org/show_bug.cgi?id=73631

        Reviewed by Dmitry Titov.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Expose the new autoresize method.
        (LayoutTestController::reset): Set the autoresize mode back to false.
        (LayoutTestController::enableAutoResizeMode): A way to turn on autoresizing from javascript code in DumpRenderTree.
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAutoResize): Handle the autoresize callback so that the outer bounds change appropriately.
        * DumpRenderTree/chromium/WebViewHost.h:

2012-01-07  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] Each test takes roughly half a second to load
        https://bugs.webkit.org/show_bug.cgi?id=70699

        Reviewed by Martin Robinson.

        Set the XDG_CACHE_HOME environment variable when testing with
        WebKitTestRunner. This way the testing is started with a non-existing
        application cache. If the cache exists and is not empty, the emptying
        and vacuuming that is performed before every test can consume a lot of
        time.

        This is just a temporary workaround until it becomes possible to set
        a desired directory to be used as the application cache location through
        WebKitWebContext.

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

2012-01-07  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable requestAnimationFrame in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=75773

        Reviewed by Martin Robinson.

        Enable requestAnimationFrame for the Gtk port.

        * Scripts/build-webkit:

2012-01-06  Jarred Nicholls  <jarred@sencha.com>

        Unreviewed build-webkit fix for Chromium to properly use make if gyp generates Makefiles.

        * Scripts/webkitdirs.pm:
        (buildChromium):
        Missing parentheses.

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Fix DRT build on case-sensitive file systems.

        Fix case of include of WebDynamicScrollBarsView.h
        
        * DumpRenderTree/mac/DumpRenderTree.mm:

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Pixel results from DumpRenderTree and WebKitTestRunner don't match because of colorspace issues
        https://bugs.webkit.org/show_bug.cgi?id=75662

        Reviewed by Dan Bernstein.
        
        The pixel results generated by DumpRenderTree and WebKitTestRunner differed because
        of color profile issues. Fix by keeping everything in device RGB and ensuring that the
        test window uses the main display's color space, so that the pixel values in the bitmap
        that gets checksummed are identical to the CSS colors.
        
        Removed the code that switches the display profile in DRT, since that is no longer required.

        * DumpRenderTree/PixelDumpSupport.h: Remove unused function declarations.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (crashHandler): Remove code that switches display profiles.
        (prepareConsistentTestingEnvironment): Ditto.
        (dumpRenderTree): Ditto.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm: Ditto.
        (createBitmapContext): Use DeviceRGB for the bitmap colorspace.
        (createBitmapContextFromWebView): Add comment about the colorspace handling.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage): Use a RetainPtr, add comment.
        (WTR::computeMD5HashStringForContext): Simplify the #ifdefs around the braces.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Set the window's colorspace to that of the main display.
        (WTR::PlatformWebView::windowSnapshotImage): Add comment about colorspaces.

2012-01-06  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: specify individual suites and tests on the command-line

        Reviewed by Adam Roben.

        Fixes: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        The run-api-tests script will now accept a list of arguments on
        the command-line that are used as prefix filters.  To run all
        tests in a suite that starts with "WTF" (WTF and WTF_Vector)
        use:

            $ run-api-tests WTF

        To run only the tests in the "WTF" suite, not the "WTF_Vector"
        suite, use:

            $ run-api-tests WTF.

        * Scripts/run-api-tests: Filter tests if any prefix arguments
        are passed on the command-line.

2012-01-06  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: change internal representation of tests to array of "SuiteName.TestName" strings

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        * Scripts/run-api-tests:
        (dumpTestsBySuite): Update to accept array of tests instead of
        hash data structure.
        (runTestsBySuite): Ditto.
        (listAllTests): Rename from populateTests().  Update to return
        an array of tests instad of the hash data structure.

2012-01-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up test/uri conversion routines
        https://bugs.webkit.org/show_bug.cgi?id=75648

        Reviewed by Eric Seidel.

        This change moves test_to_uri and uri_to_test from the Port
        class to the Driver class (the routines were only being
        called by the drivers), and removes a bunch of stale and/or
        busted logic.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/driver.py:
        (is_http_test):
        (test_to_uri):
        (uri_to_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (run_one_test):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTTest.input_line):
        (input_line):
        (expected_output):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (_command_from_driver_input):

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Mitigate scrollbar differences when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=67217

        Reviewed by Dan Bernstein.
        
        Add an NSScroller subclass that draws mock scrollbars identically
        to the WebCore mock scrollbar theme, and register it with the
        WebDynamicScrollbarsView.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DRTMockScroller rectForPart:]):
        (-[DRTMockScroller drawKnob]):
        (-[DRTMockScroller drawRect:]):
        (registerMockScrollbars):
        (prepareConsistentTestingEnvironment):

2012-01-05  Jon Lee  <jonlee@apple.com>

        Update DRT on Mac to draw resize handles on text areas.

        Reviewed by John Sullivan.

        Enable resize handles on text areas so that we don't have to create two different sets of pixel test results,
        between WK1 and WK2. This will require rebaselining existing textarea pixel tests.

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

2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move listing of include paths and libs to pri files in sources

        Includepaths are sometimes modified by non-Qt contributors so keeping
        them in files inside Sources makes it more likely that they are updated
        along with project files for the other ports.

        Using pri files instead of prf files for this also has the benefit that
        the include() from the main target file can be parsed and followed by
        Qt Creator -- something that does not work with load().

        Dependency from a target to a library through the WEBKIT variable are
        handled through forwarding-files in Tools/qmake/mkspecs/modules, which
        set the source root of the module and include the right pri file.

        Ideally we'd use the variant of include() that takes an optional
        namespace to read the variables into, or the fromfile() function,
        but both of these add an overhead of about 40% on the total qmake
        runtime, due to making a deep copy of all the variables in the
        project or re-reading all the prf files from scratch.

        Reviewed by Simon Hausmann.
        Reviewed by Ossy.

        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/modules/javascriptcore.prf: Added.
        * qmake/mkspecs/modules/webcore.prf: Added.
        * qmake/mkspecs/modules/webkit2.prf: Added.
        * qmake/mkspecs/modules/wtf.prf: Added.

2012-01-06  JungJik Lee  <jungjik.lee@samsung.com>

        [EFL] Add pre-render handling code in EWebLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=73430

        Reviewed by Zoltan Herczeg.

        Add pre-render handling code by pressing Insert key.

        * EWebLauncher/main.c:
        (on_key_down):

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

        NRWT should use test_expectation.txt on wk2 platforms
        https://bugs.webkit.org/show_bug.cgi?id=75417

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (path_to_test_expectations_file):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_path_to_test_expectations_file):

2012-01-05  Jochen Eisinger  <jochen@chromium.org>

        Don't hardcode expected file URIs in as they depend on the platform
        https://bugs.webkit.org/show_bug.cgi?id=75666

        Reviewed by Dirk Pranke.

        * 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_default):
        (MainTest.test_results_directory_relative):

2012-01-05  Anders Carlsson  <andersca@apple.com>

        Crash when trying to invalidate the NPRuntimeObjectMap for a plug-in in a subframe
        https://bugs.webkit.org/show_bug.cgi?id=75667
        <rdar://problem/10389454>

        Reviewed by Kevin Decker.

        Add an evaluate method to the plug-in test scriptable object that can be used to evaluate a given JS string.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::executeScript):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeObjectFromDestroyedPlugin.cpp:
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::hasMethod):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::invoke):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::hasProperty):

2012-01-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port factory methods
        https://bugs.webkit.org/show_bug.cgi?id=75590

        Reviewed by Eric Seidel.

        This change consolidates much of the "factory method" logic
        of determining which port objects to create for a given set
        of configurations by merging the separate factory methods in
        chromium_gpu and google_chrome into PortFactory so that at least
        all of the logic is in one place.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (_port_name_from_arguments_and_options):
        (get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (test_google_chrome):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeLinux32Port):
        (GoogleChromeLinux32Port.baseline_search_path):
        (test_expectations_overrides):
        (architecture):
        (GoogleChromeLinux64Port):
        (GoogleChromeLinux64Port.baseline_search_path):
        (GoogleChromeMacPort):
        (GoogleChromeMacPort.baseline_search_path):
        (GoogleChromeWinPort):
        (GoogleChromeWinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (_verify_baseline_path):

2012-01-05  Jochen Eisinger  <jochen@chromium.org>

        Replace webkitpy.common.system.filesystem.file_path_as_url with webkitpy.common.system.path.abspath_to_uri
        https://bugs.webkit.org/show_bug.cgi?id=75617

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.exists):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.exists):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (GenericFileSystemTests.teardown_generic_test_dir):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.to.show_results_html_file):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_results_directory_absolute):

2012-01-05  Adam Roben  <aroben@apple.com>

        Remove some unnecessary code from old-run-webkit-tests

        Thanks to r104187/r104188, we no longer need to set PATH before launching DumpRenderTree or
        WebKitTestRunner.

        Fixes <http://webkit.org/b/75640> ORWT unnecessarily sets PATH before launching DRT/WTR on
        Windows

        Reviewed by Eric Seidel.

        * Scripts/old-run-webkit-tests:
        (top level):
        (openDumpTool):
        Removed calls to setPathForRunningWebKitApp.

2012-01-05  Adam Roben  <aroben@apple.com>

        Teach NRWT to use run-safari to open results.html on Apple's Windows port

        NRWT was trying to use User.open_url, which doesn't work on Cygwin. But run-safari is
        better, since we always want to open results.html using the user's build of WebKit, not
        whatever their default browser is.

        Fixes <http://webkit.org/b/75629> <rdar://problem/10648621> NRWT fails to open results.html
        for Apple's Windows port

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.show_results_html_file): Changed to use run_safari, like MacPort does. Also removed
        an obsolete comment.

        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_show_results_html_file): Updated expected results.

2012-01-05  Adam Roben  <aroben@apple.com>

        Prepend Safari.exe's path to the command-line passed to CreateProcess

        Safari expects the first argument in the command-line to be the path to Safari.exe itself.
        This is how things get set up when Safari is launched normally (e.g., by Explorer). Safari
        thus ignores the first argument when looking for command-line arguments. WebKitLauncherWin
        was not including the path to Safari.exe in the command-line, so Safari was ignoring the
        first argument that WebKitLauncherWin was trying to pass to it.

        Fixes <http://webkit.org/b/56571> First argument passed to WebKit.exe is ignored by Safari

        Reviewed by Steve Falkenburg.

        * WebKitLauncherWin/WebKitLauncherWin.cpp:
        (_tWinMain): Construct a command-line for CreateProcess that first contains a double-quoted
        path to Safari.exe, then contains any arguments that were passed to WebKitLauncherWin.

2012-01-05  Adam Roben  <aroben@apple.com>

        Stop using explicit memory management in WebKitLauncherWin

        We now use stack-allocated STL objects instead.

        Prep work for <http://webkit.org/b/56571> First argument passed to WebKit.exe is ignored by
        Safari

        Reviewed by Steve Falkenburg.

        * WebKitLauncherWin/WebKitLauncherWin.cpp:
        (getStringValue):
        (applePathFromRegistry):
        (safariInstallDir):
        (safariBrowserExe):
        (_tWinMain):
        Changed to use stack-allocated STL objects instead of malloc/free.

2012-01-05  Adam Roben  <aroben@apple.com>

        Turn WebKitTestRunner into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Safari and Apple Application Support directories to PATH before
        trying to load WebKit so that SafariTheme.dll, CoreGraphics.dll and friends can be found.

        Fixes <http://webkit.org/b/75486> <rdar://problem/10638124> NRWT fails to launch Apple's
        Windows port of DumpRenderTree/WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * WebKitTestRunner/WebKitTestRunner.sln: Added WebKitTestRunnerLauncher and
        ImageDiffLauncher, which I forgot to add to this .sln when that project was created.

        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Changed to build WebKitTestRunner.dll instead of WebKitTestRunner.exe.

        * WebKitTestRunner/win/WebKitTestRunnerLauncher.vcproj: Copied from
        Tools/WebKitTestRunner/win/WebKitTestRunner.vcproj but changed to build
        the stub launcher.

        * WebKitTestRunner/win/WebKitTestRunnerLauncherCommon.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebug.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugAll.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherProduction.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherRelease.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherReleaseCairoCFLite.vsprops: Added.

        * WebKitTestRunner/win/main.cpp:
        (dllLauncherEntryPoint): Renamed from main. This is what the stub launcher calls.

2012-01-05  Adam Roben  <aroben@apple.com>

        Turn DumpRenderTree into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Safari and Apple Application Support directories to PATH before
        trying to load WebKit so that SafariTheme.dll, CoreGraphics.dll and friends can be found.

        Part of <http://webkit.org/b/75486> <rdar://problem/10638124> NRWT fails to launch Apple's
        Windows port of DumpRenderTree/WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * DumpRenderTree/DumpRenderTree.sln: Added DumpRenderTreeLauncher and ImageDiffLauncher,
        which I forgot to add to this .sln when that project was created.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dllLauncherEntryPoint): Renamed from main. This is what the stub launcher calls.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:
        Changed to build DumpRenderTree.dll instead of DumpRenderTree.exe.

        * DumpRenderTree/win/DumpRenderTreeLauncher.vcproj: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherCommon.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebug.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugAll.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherProduction.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherRelease.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeLauncherReleaseCairoCFLite.vsprops: Added.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (modifyPath): Moved code to modify PATH here from main/wWinMain. Changed to also prepend
        Safari's directory to PATH so that SafariTheme.dll can be found.

        (main):
        (wWinMain):
        Changed to use the new modifyPath function.

2012-01-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Never enable FontConfig on Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=75616

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf:

2012-01-05  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r104159.
        http://trac.webkit.org/changeset/104159
        https://bugs.webkit.org/show_bug.cgi?id=75590

        Chromium port GPU tests cannot be executed.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (get):
        (_default_tests_paths):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.assert_port_works):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory._port_name_from_arguments_and_options):
        (PortFactory):
        (PortFactory._get_kwargs):
        (PortFactory.get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.test_google_chrome.names):
        (FactoryTest.test_google_chrome):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GetGoogleChromePort):
        (GetGoogleChromePort.GoogleChromeLinux32Port):
        (GetGoogleChromePort.GoogleChromeLinux32Port.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeLinux32Port.test_expectations_overrides):
        (GetGoogleChromePort.GoogleChromeLinux32Port.architecture):
        (GetGoogleChromePort.GoogleChromeLinux64Port):
        (GetGoogleChromePort.GoogleChromeLinux64Port.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeLinux64Port.test_expectations_overrides):
        (GetGoogleChromePort.GoogleChromeLinux64Port.architecture):
        (GetGoogleChromePort.GoogleChromeMacPort):
        (GetGoogleChromePort.GoogleChromeMacPort.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeMacPort.test_expectations_overrides):
        (GetGoogleChromePort.GoogleChromeWinPort):
        (GetGoogleChromePort.GoogleChromeWinPort.baseline_search_path):
        (GetGoogleChromePort.GoogleChromeWinPort.test_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (GetGoogleChromePortTest._verify_baseline_path):
        (GetGoogleChromePortTest._verify_expectations_overrides):

2012-01-05  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up port factory methods
        https://bugs.webkit.org/show_bug.cgi?id=75590

        Reviewed by Eric Seidel.

        This change consolidates much of the "factory method" logic
        of determining which port objects to create for a given set
        of configurations by merging the separate factory methods in
        chromium_gpu and google_chrome into PortFactory so that at least
        all of the logic is in one place.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (_port_name_from_arguments_and_options):
        (get):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (test_google_chrome):
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        (GoogleChromeLinux32Port):
        (GoogleChromeLinux32Port.baseline_search_path):
        (test_expectations_overrides):
        (architecture):
        (GoogleChromeLinux64Port):
        (GoogleChromeLinux64Port.baseline_search_path):
        (GoogleChromeMacPort):
        (GoogleChromeMacPort.baseline_search_path):
        (GoogleChromeWinPort):
        (GoogleChromeWinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (_verify_baseline_path):

2012-01-04  Adam Roben  <aroben@apple.com>

        Turn ImageDiff into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Apple Application Support directory to PATH before trying to load
        WebKit so that CoreGraphics.dll and friends can be found.

        Fixes <http://webkit.org/b/75572> ImageDiff.exe can't be run without first munging PATH

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        Changed to build ImageDiff.dll instead of ImageDiff.exe.

        * DumpRenderTree/win/ImageDiffLauncher.vcproj: Copied from
        Tools/DumpRenderTree/win/ImageDiff.vcproj but changed to build the stub launcher.

        * DumpRenderTree/win/ImageDiffLauncherCommon.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherDebug.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherDebugAll.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherProduction.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherRelease.vsprops: Added.
        * DumpRenderTree/win/ImageDiffLauncherReleaseCairoCFLite.vsprops: Added.

        * DumpRenderTree/win/ImageDiffWin.cpp: Added.
        (dllLauncherEntryPoint): This function is called by the stub launcher and just calls through
        to main.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (main):
        (wWinMain):
        Added support for launching console programs. When USE_CONSOLE_ENTRY_POINT is defined, the
        stub launcher acts as a console program and calls a console version of
        dllLauncherEntryPoint.

2012-01-04  Adam Roben  <aroben@apple.com>

        Turn MiniBrowser into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Apple Application Support directory to PATH before trying to load
        WebKit so that CoreGraphics.dll and friends can be found.

        Fixes <http://webkit.org/b/68576> <rdar://problem/10163853> MiniBrowser fails to launch when
        double-clicked

        Reviewed by Anders Carlsson.

        * MiniBrowser/MiniBrowser.vcproj:
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops:
        Changed to build MiniBrowser.dll instead of MiniBrowser.exe.

        * MiniBrowser/Configurations/MiniBrowserLauncherCommon.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebug.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugAll.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherDebugCairoCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherProduction.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherRelease.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserLauncherReleaseCairoCFLite.vsprops: Added.

        * MiniBrowser/MiniBrowserLauncher.vcproj: Copied from Tools/MiniBrowser/MiniBrowser.vcproj
        but changed to build the stub launcher.

        * MiniBrowser/win/main.cpp: Moved the /manifestdependency code to DLLLauncherMain.cpp, since
        it needs to be compiled into the .exe instead of the .dll.
        (DllMain): Added. We use this to store the DLL's HINSTANCE.
        (dllLauncherEntryPoint): Renamed from _tWinMain. This is what gets called by the
        DLLLauncherMain code.

        * win/DLLLauncher/DLLLauncherMain.cpp: Moved the /manifestdependency code from MiniBrowser
        to here.

2012-01-04  Adam Roben  <aroben@apple.com>

        Make WinLauncher's window frame respond to clicks/drags again

        Fixes <http://webkit.org/b/75562> REGRESSION (r84990): Can't drag WinLauncher by its title
        bar when Aero is disabled

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.cpp:
        (WndProc): Always call up to our parent wndproc when we don't handle WM_NCHITTEST ourselves.
        Also removed an unnecessary "break" keyword.

2012-01-04  Adam Roben  <aroben@apple.com>

        Turn WinLauncher into a stub .exe launcher and a .dll that contains all the real code

        This allows us to add the Apple Application Support directory to PATH before trying to load
        WebKit so that CoreGraphics.dll and friends can be found. Eventually all our WebKit apps
        should use this mechanism.

        Fixes <http://webkit.org/b/68578> <rdar://problem/10163861> WinLauncher fails to launch when
        double-clicked

        Reviewed by Anders Carlsson.

        * WinLauncher/WinLauncher.cpp: Removed InitInstance.
        (DllMain): Added. Stores the DLL HINSTANCE in the global hInst variable. This used to be
        done by the now-removed InitInstance function.
        (dllLauncherEntryPoint): Renamed from _tWinMain. This is the function that our stub launcher
        calls. Merged code from InitInstance into this function, and change to use the global hInst
        variable, which corresponds to WinLauncher.dll, rather than the HINSTANCE passed into this
        function, which corresponds to WinLauncher.exe.

        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherCommon.vsprops:
        Changed to build WinLauncher.dll instead of WinLauncher.exe.

        * WinLauncher/WinLauncherLauncher.rc: Added.
        * WinLauncher/WinLauncherLauncherResource.h: Added.
        This just references the WinLauncher.ico file to set the application icon (though it looks
        like that's a default icon).

        * WinLauncher/WinLauncherLauncher.vcproj: Copied from Tools/WinLauncher/WinLauncher.vcproj
        but changed to build WinLauncher.exe using the new DLLLauncherMain.cpp file.

        * WinLauncher/WinLauncherLauncherCommon.vsprops: Added.
        * WinLauncher/WinLauncherLauncherDebug.vsprops: Added.
        * WinLauncher/WinLauncherLauncherDebugAll.vsprops: Added.
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops: Added.
        * WinLauncher/WinLauncherLauncherProduction.vsprops: Added.
        * WinLauncher/WinLauncherLauncherRelease.vsprops: Added.
        * WinLauncher/WinLauncherLauncherReleaseCairoCFLite.vsprops: Added.

        * win/DLLLauncher/DLLLauncherMain.cpp: Added.
        (enableTerminationOnHeapCorruption): Uses HeapSetInformation to tell Windows to kill the
        program if it detects heap corruption.
        (getStringValue): Helper function to read a string value from the registry.
        (applePathFromRegistry): Helper function to read the InstallDir for a given Apple
        application from the registry.
        (appleApplicationSupportDirectory): Helper function to return the path to the Apple
        Application Support directory.
        (copyEnvironmentVariable): Helper function to copy an environment variable's value.
        (prependPath): Helper function to prepend a directory to the PATH.
        (fatalError): Helper function to display an error to the user.
        (wWinMain): Add Apple Application Support to the PATH, then load our DLL and call its
        dllLauncherEntryPoint function.

2012-01-05  Kentaro Hara  <haraken@chromium.org>

        prepare-ChangeLog cannot parse python code that nests classes and defs
        https://bugs.webkit.org/show_bug.cgi?id=75524

        Reviewed by Ryosuke Niwa.

        This patch fixes the python parser of prepare-ChangeLog so that it can parse
        python code that nests classes and defs, like this:

        class C:
            pass
            def f():
                pass
            pass

        Also, this patch fixes the python parser so that it inserts a dummy line
        at the end of the file to pop out all popped scopes.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python):

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests.py:
        Added test cases that nest classes and defs.
        (func7):
        (func7.func8):
        (func7.func8.func9):
        (Class2):
        (Class2.Class3):
        (Class2.Class3.Class4):
        (Class5):
        (Class5.func10):
        (Class5.func11):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt:

2012-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename webkit_web_view_load_alternate_html as webkit_web_view_replace_content in WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=75433

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewLoadFailed): Reset the progress bar when load fails.
        (browserWindowConstructed): Connect to load-failed signal.

2012-01-04  Dan Bernstein  <mitz@apple.com>

        Add a --target-web-process option to the debug-* scripts. When specified, the scripts will
        start WebProcess under gdb and WebProcess will then run the client executable.

        This is the Tools part of fixing <http://webkit.org/b/75444> Debugging WebProcess requires running a UI process first and waiting to attach

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (shouldTargetWebProcess): Added.
        (determineShouldTargetWebProcess): Added. Checks for --target-web-process.
        (execMacWebKitAppForDebugging): Changed to target gdb at WebProcess and pass the path to the
        app using the -client-executable option if targeting the web process.

2012-01-04  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Adding myself to committers list.

        Unreviewed.

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

2012-01-04  David Kilzer  <ddkilzer@apple.com>

        Revert fix for Bug 75064: TestWebKitAPI: initialize the main thread before running tests

        This reverts commit r103546.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):

2012-01-04  James Robinson  <jamesr@chromium.org>

        [chromium] Move WebMimeRegistry and dependencies to Source/Platform
        https://bugs.webkit.org/show_bug.cgi?id=74583

        Reviewed by Darin Fisher.

        Teaches the WEBKIT_EXPORT check about the chromium WebKit platform API header location.

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

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix link order of static libraries and unbreak QtWin32

        We were keeping the correct static link order between the intermediate
        WebKit libraries, but not the internal dependencies for each of those
        libraries. The load() will in some instances mess with LIBS, so we need
        to ensure that the dependent libraries are added after the library we
        are linking against.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies

        The custom qmake variable 'WEBKIT' is used for signaling that a
        target depends in some way on other subproject of the WebKit
        project. For now this is limited to the set of intermediate
        libraries: wtf, javascriptcore, webcore, and webkit2.

        This replaces the previous convension of using load(foo) for
        just include paths, and CONFIG += foo to also link against foo.

        Adding a dependency results in additional include paths being
        available, and potentially linking to the library. This is
        decided by the build system based on conditions such as what
        kind of target is being built and the general build config.

        An advantage to his approach is that it simplifies the individual
        foo.prf files, for example by allowing us to use INCLUDEPATH +=
        and LIBS += as normal instead of prepending.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/Target.pri:
        * qmake/README:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/javascriptcore.prf:
        * qmake/mkspecs/features/qtwebkit.prf:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:
        * qmake/mkspecs/features/wtf.prf:

2012-01-04  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Add UI for JavaScript Prompt dialog in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75488

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/Dialog.qml:
        * MiniBrowser/qt/qml/DialogLineInput.qml: Copied from Tools/MiniBrowser/qt/qml/Dialog.qml.
        * MiniBrowser/qt/qml/PromptDialog.qml: Copied from Tools/MiniBrowser/qt/qml/Dialog.qml.

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use rpath for WTR's InjectedBundle to pick up the right QtWebKit

        It wasn't really a problem at runtime since the right QtWebKit was
        already loaded as a dependency of the web process, but the ldd output
        would still be busted.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/Target.pri:

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move use of $$qtLibraryTarget() to a single place

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/webcore.prf:

2012-01-04  Mary Wu  <mary.wu@torchmobile.com.cn>

        Enable DOWNLOAD_ATTRIBUTE in BlackBerry porting
        https://bugs.webkit.org/show_bug.cgi?id=75238

        Reviewed by Antonio Gomes.

        Add ENABLE_DOWNLOAD_ATTRIBUTE webkit feature into the build script so that 
        it could initiate download directly if it has the download attribute in the link 
        and doesn't need to open new blank page for the target="_blank". Enabling this 
        feature in the BlackBerry porting also prepares for later blob feature implementation.

        * Scripts/build-webkit: Modified to handle ENABLE_DOWNLOAD_ATTRIBUTE. Make it default on
        for the BlackBerry porting.

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix a runtime warning when hovering hyperlink auditing setting in MiniBroweser settings dialog
        https://bugs.webkit.org/show_bug.cgi?id=75475

        Reviewed by Martin Robinson.

        The problem is that the property blurb contains <a ping> and tree
        view uses gtk_tooltip_set_markup() internally, so we need to
        escape the text.

        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (browserSettingsDialogConstructed): Escape property blurb before
        storing it in the GtkTreeModel.

2012-01-03  Jochen Eisinger  <jochen@chromium.org>

        When showing results.html pass a correct URL to webbrowser.open
        https://bugs.webkit.org/show_bug.cgi?id=75438

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/system/filesystem.py:
        (file_path_as_url):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (file_path_as_url):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (test_file_path_as_url):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (test_show_results_html_file):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (test_results_directory_relative):

2012-01-03  Ojan Vafai  <ojan@chromium.org>

        shrink the header on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=65153

        Reviewed by Adam Roben.

        Move some of the "show" links to be to the right of the header
        instead of below the header when they content they're showing
        is hidden. That way we don't waste vertical space on them.

        No new tests. This code is covered by existing tests.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2012-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a tool to analyze change logs
        https://bugs.webkit.org/show_bug.cgi?id=72243

        Reviewed by Eric Seidel.

        Add the initial implementation of analyze-changelog command. This version supports parsing multiple changelogs
        in a single directory and summarizes the result in json files. It also copies summary.html to the output directory
        for visualizing json files.

        Usage: webkit-patch analyze-changelog [--changelog-count N] <CHANGELOG_DIR> <OUTPUT_DIR>
        where CHANGELOG_DIR is the directory to look for changelogs, OUTPUT_DIR is the directory into which the tool
        generates json files, and N is the number of changelogs to parse.

        * Scripts/webkitpy/common/config/contributionareas.py: Added names().
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added readline and iterator support to ReadableTextFileObject.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py: Added.
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/data/summary.html: Added.
        * Scripts/webkitpy/tool/steps/options.py:

2012-01-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a tool to analyze change logs
        https://bugs.webkit.org/show_bug.cgi?id=72243

        Reviewed by Eric Seidel.

        Add the initial implementation of analyze-changelog command. This version supports parsing multiple changelogs
        in a single directory and summarizes the result in json files. It also copies summary.html to the output directory
        for visualizing json files.

        Usage: webkit-patch analyze-changelog [--changelog-count N] <CHANGELOG_DIR> <OUTPUT_DIR>
        where CHANGELOG_DIR is the directory to look for changelogs, OUTPUT_DIR is the directory into which the tool
        generates json files, and N is the number of changelogs to parse.

        * Scripts/webkitpy/common/config/contributionareas.py: Added names().
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added readline and iterator support to ReadableTextFileObject.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py: Added.
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/data/summary.html: Added.
        * Scripts/webkitpy/tool/steps/options.py:

2012-01-03  Adam Roben  <aroben@apple.com>

        Make Port subclasses override the operating_system method rather than setting an attribute

        Without this patch, any use of Port.operating_system() within a port's __init__ method would
        return the default value ("mac"). This was confusing the version-checking logic inside
        ApplePort.__init__ on Windows.

        Fixes <http://webkit.org/b/75479> <rdar://problem/10637385> REGRESSION (r102161): NRWT
        crashes on launch on Windows 7 SP1

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__): Replaced uses of self._operating_system with self.operating_system().

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__): Removed code that set the self._operating_system attribute. Subclasses
        should now override the operating_system method instead.
        (Port.operating_system): Changed to always return "mac". Subclasses should override to
        return something else.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        (ChromiumLinuxPort.__init__):
        (ChromiumLinuxPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        (ChromiumMacPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        (ChromiumWinPort.__init__):
        (ChromiumWinPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.__init__):
        (MacPort.operating_system):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.__init__):
        (WinPort.operating_system):
        Changed to override the operating_system method rather than setting the _operating_system
        attribute, since setting the attribute isn't sufficient for code inside __init__ methods.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.__init__):
        (QtPort._path_to_webcore_library):
        Changed to use self.operating_system() instead of self._operating_system, for consistency
        with other Port-related code.

        (QtPort.operating_system): Added this override of Port.operating_system that returns the
        value we determined in our __init__ method.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestPort.operating_system): Added this override of Port.operating_system that returns the
        value we determined in our __init__ method.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        (ChromiumLinuxPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        (ChromiumWinPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest.test_operating_system):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_operating_system):
        Test that all ports return the expected operating system string.

2012-01-03  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] run-gtk-test should ignore files with names without a "test" or "Test" prefix
        https://bugs.webkit.org/show_bug.cgi?id=75474

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests: Ignore files whose name does not start
        with a "test" (for WK1's API tests) or a "Test" prefix (for WK2).

2012-01-03  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Add UI for JavaScript Confirmation dialog in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75472

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ConfirmDialog.qml: Added.

2012-01-03  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Add UI for JavaScript Alert dialog in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=75471

        Reviewed by Tor Arne Vestbø.

        Add simple UI for JavaScript Alert dialogs. This patch also adds a
        simple DialogButton QML type and a Dialog QML type which will be
        reusable for other JavaScript dialogs.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/AlertDialog.qml: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/Dialog.qml: Added.
        * MiniBrowser/qt/qml/DialogButton.qml: Added.

2012-01-03  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt][WK2] MiniBrowser doesn't show url bar
        https://bugs.webkit.org/show_bug.cgi?id=75470

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/BrowserWindow.qml: Remove clipping until it is fixed
        on QtDeclarative (QTBUG-23422).

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify loader client WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=74605

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-gtkdoc: Ignore WebKitWebLoaderClient since it's now
        private API.

2012-01-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Clean up detection of fontconfig

        We decide in features.prf whether or not fontconfig is available, and
        set the HAVE_FONTCONFIG define accordingly. All leaf project files
        should use this define to decide whether or not to link against
        fontconfig, not do their own detection.

        We don't need to add link_pkgconfig to CONFIG in each project file,
        as we selectivly enable that configuration in defaults_post when
        needed.

        Reviewed by Ossy.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/unix/default_post.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2012-01-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Introduce qmake replace function for the active build config

        Reviewed by Ossy.

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

2012-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use gdk_screen_get_monitor_workarea() when available for screenAvailableRect()
        https://bugs.webkit.org/show_bug.cgi?id=75435

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Make sure DRT links to X11.
        * WebKitTestRunner/GNUmakefile.am: Make sure WTR links to X11.

2011-12-04  Philippe Normand  <pnormand@igalia.com>

        [WK2][GTK] WebSettings support in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=73773

        Reviewed by Martin Robinson.

        Patch heavily inspired from the WebKit GtkLauncher to support
        command-line WebSettings. Example: --enable-fullscreen=TRUE.
        The full list of options can be consulted with --help-websettings.

        * MiniBrowser/gtk/main.c:
        (loadURI):
        (parseOptionEntryCallback):
        (isValidParameterType):
        (getOptionEntriesFromWebKitSettings):
        (addSettingsGroupToContext):
        (main):

2012-01-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] GtkLauncher settings improvements
        https://bugs.webkit.org/show_bug.cgi?id=75439

        Reviewed by Martin Robinson.

        * GtkLauncher/main.c:
        (filenameToURL): We can use NULL in C.
        (isValidParameterType): Utility function to filter GParamTypes
        that can be edited.
        (getOptionEntriesFromWebKitWebSettings): Avoid handling
        construct-only properties and use the isValidParameterType
        function. Makes the code a bit cleaner.

2012-01-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove whitespace/declaration style exception
        https://bugs.webkit.org/show_bug.cgi?id=75424

        Reviewed by David Levin.

        Remove *whitespace/eclaration* style rule. However, EWebLauncher and MiniBrowser are EFL simple
        application. So, they still need to use EFL coding style.

        * Scripts/webkitpy/style/checker.py:

2012-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a way to change web view settings in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71568

        Reviewed by Philippe Normand.

        Add a preferences button to the toolbar that shows a dialog to
        change settings of the current web view. It uses a GtkTreeView
        with a custom cell renderer to support multiple types of values.

        * MiniBrowser/gtk/BrowserCellRendererVariant.c: Added.
        (browserCellRendererVariantFinalize):
        (browserCellRendererVariantGetProperty):
        (browserCellRendererVariantSetModeForValue):
        (browserCellRendererVariantSetProperty):
        (browserCellRendererVariantGetRendererForValue):
        (browserCellRendererVariantCellRendererTextEdited):
        (browserCellRendererVariantCellRendererSpinEdited):
        (browserCellRendererVariantCellRendererActivate):
        (browserCellRendererVariantCellRendererRender):
        (browserCellRendererVariantCellRendererStartEditing):
        (browserCellRendererVariantCellRendererGetPreferredWidth):
        (browserCellRendererVariantCellRendererGetPreferredHeight):
        (browserCellRendererVariantCellRendererGetPreferredWidthForHeight):
        (browserCellRendererVariantCellRendererGetPreferredHeightForWidth):
        (browserCellRendererVariantCellRendererGetAlignedArea):
        (browser_cell_renderer_variant_init):
        (browser_cell_renderer_variant_class_init):
        (browser_cell_renderer_variant_new):
        * MiniBrowser/gtk/BrowserCellRendererVariant.h: Added.
        * MiniBrowser/gtk/BrowserSettingsDialog.c: Added.
        (cellRendererChanged):
        (browserSettingsDialogSetProperty):
        (browser_settings_dialog_init):
        (browserSettingsDialogConstructed):
        (browser_settings_dialog_class_init):
        (browser_settings_dialog_new):
        * MiniBrowser/gtk/BrowserSettingsDialog.h: Added.
        * MiniBrowser/gtk/BrowserWindow.c:
        (settingsCallback):
        (browser_window_init):
        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/browser-marshal.list: Added.

2012-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement create/ready-to-show/close signals in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=74711

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewClose): Destroy the window.
        (webViewReadyToShow): Use WindowProperties of the new view to
        setup and show the window.
        (webViewCreate): Create a new view and add it to a browser window.
        (browser_window_init):
        (browserWindowConstructed): Connect to WebKitWebView::create signal.

2011-12-31  Dan Bernstein  <mitz@apple.com>

        MiniBrowser sets the WKView’s frame incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=75393

        Reviewed by Anders Carlsson.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Removed Make Launchable build phase,
        which is not needed since the binray is linked with the frameworks search path set to the
        built products directory.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Changed to set the WKView’s frame to its
        container’s bounds rather than its frame.
        * MiniBrowser/mac/make-launchable.sh: Removed.

2011-12-29  Dan Bernstein  <mitz@apple.com>

        debug-safari --no-saved-state fails to start the debugger
        https://bugs.webkit.org/show_bug.cgi?id=75374

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging): Pass the --args option to gdb so that it passes arguments to
        the executable being debugged.

2011-12-29  Sam Weinig  <sam@webkit.org>

        It should be easier to iterate a Vector backwards
        https://bugs.webkit.org/show_bug.cgi?id=75359

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add new Vector test.

        * TestWebKitAPI/Tests/Vector.cpp: Added.
        (TestWebKitAPI::TEST):
        Test Vector iterators, reverse_iterators and new reversed proxy.

2011-12-28  Dmitry Lomov  <dslomov@google.com>

        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103785.
        http://trac.webkit.org/changeset/103785
        https://bugs.webkit.org/show_bug.cgi?id=75332

        Broke builders; looks like clobbering didnt help (Requested by
        dslomov on #webkit).

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-28  Dmitry Lomov  <dslomov@google.com>


        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103620.
        http://trac.webkit.org/changeset/103620
        https://bugs.webkit.org/show_bug.cgi?id=75316

        Causes many crashes (Requested by abarth on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r103734.
        http://trac.webkit.org/changeset/103734
        https://bugs.webkit.org/show_bug.cgi?id=75278

        Broke cr-mac (Requested by dslomov on #webkit).

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-27  Dmitry Lomov  <dslomov@google.com>


        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-27  Anders Carlsson  <andersca@apple.com>

        Function should handle wrapping/unwrapping RefPtr and PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=75266

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::Number::create):
        (TestWebKitAPI::Number::~Number):
        (TestWebKitAPI::Number::value):
        (TestWebKitAPI::Number::Number):
        (TestWebKitAPI::multiplyNumberByTwo):
        (TestWebKitAPI::TEST):

2011-12-24  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the C++ parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75191

        Reviewed by Ryosuke Niwa.

        cpp_unittests.cpp is the unittests for get_function_line_ranges_for_cpp()
        of prepare-ChangeLog.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Renames get_function_line_ranges_for_c()
        to get_function_line_ranges_for_cpp().
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp: Added.
        (func1):
        (func2):
        (func3):
        (func4):
        (func5):
        (func6):
        (func7):
        (func8):
        (func9):
        (func10):
        (func11):
        (func12):
        (func13):
        (func14):
        (func15):
        (funcOverloaded):
        (Class::func16):
        (Class1::Class2::func17):
        (Class2::func18):
        (Class2::func19):
        (Class2::func20):
        (Class2::func21):
        (Class2::func22):
        (func23):
        (func24):
        (Class2::func25):
        (Class1::func26):
        (Class2::func27):
        (Class3::func28):
        (Class7::operator+):
        (Class100::Class100):
        (Class101::~Class101):
        (Class102::Class102):
        (Class103::Class103):
        (Struct1::func29):
        (Struct2::func30):
        (NameSpace1::func30):
        (NameSpace1::NameSpace2::func31):

2011-12-24  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the Java parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75195

        Reviewed by Ryosuke Niwa.

        java_unittests.java is unittest cases for get_function_line_ranges_for_java()
        of prepare-ChangeLog.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_java): Fixed a parser bug.

            interface I
            {
                void f()
                {
                }
            }

        should be recognized as "I.f", and

            class C interface I
            {
                void f()
                {
                }
            }

        should be recognized as "C.f".
        Without this patch, both are recognized as "I.f".

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/java_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/java_unittests.java: Added.
        (Simple):
        (Simple.func1):
        (Simple.func2):
        (Simple.func3):
        (Simple.func4):
        (Simple.func5):
        (Simple.func6):
        (Simple.func7):
        (Simple.func8):
        (Simple.func9):
        (Simple.func10):
        (Simple.funcOverloaded):
        (Simple.func11):
        (Simple.func12):
        (Simple.func13):
        (Simple.func14):
        (Simple.func15):
        (Simple.func16):
        (Simple.func17):
        (Simple.func18):
        (Simple.func19):
        (Simple.func20):
        (Simple.func21):
        (Derived1):
        (Derived1.Derived1):
        (Derived1.func22):
        (Interface1):
        (Interface2):
        (Interface2.func23):
        (Derived2):
        (Derived2.Derived2):
        (Derived2.func23):

2011-12-24  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the Python parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=75197

        Reviewed by Ryosuke Niwa.

        python_unittests.py is the unittest for get_function_line_ranges_for_python()
        of prepare-ChangeLog. The unittest just contains classes and defs that are not nested.
        This is because the current python parser is wrong, and it cannot correctly parse nested
        classes and defs (even one def in a class), nor class inheritance.
        We will fix it in another patch.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python): Ignores comment lines that starts from #.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt: Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests.py: Added.
        (func1):
        (func2):
        (func3):
        (funcInsideComment):
        (func4):
        (func5):
        (func6):
        (funcOverloaded):
        (Class1):

2011-12-24  Dan Bernstein  <mitz@apple.com>

        Set SHARED_PRECOMPS_DIR when Xcode is set to use a custom build product path.

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-12-24  Dan Bernstein  <mitz@apple.com>

        Make build-webkit aware of additional Xcode build location defaults.

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (determineXcodeVersion): Added. This was previously in determineBaseProductDir().
        (readXcodeUserDefault): Added. Factored out from determineBaseProductDir().
        (determineBaseProductDir): Changed to check for a custom build location
        style specified as an absolute location.

2011-12-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r103619.
        http://trac.webkit.org/changeset/103619
        https://bugs.webkit.org/show_bug.cgi?id=66509

        Broke chromium clang build

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-23  Daniel Bates  <dbates@webkit.org>

        Provide option to disable Mac OS 10.7 application resume when using
        {debug, run}-{safari, minibrowser, test-runner, test-webkit-api}, and run-webkit-app
        https://bugs.webkit.org/show_bug.cgi?id=66902

        Reviewed by David Kilzer.

        Add an optional command line argument --no-saved-state to disable
        application resume (state restoration) for the session on Mac OS 10.7.

        For instance, when debugging an issue in Safari it is useful to be able
        to temporarily disable application resume. Currently you can disable
        application resume when launching Safari from within Xcode. We should
        expose a similar option in our command line tools.

        * Scripts/debug-minibrowser: Call printHelpAndExitForRunAndDebugWebKitAppIfNeeded()
        to print a help message and exit() if the command line argument --help was given.
        * Scripts/debug-safari: Ditto.
        * Scripts/debug-test-runner: Ditto.
        * Scripts/run-minibrowser: Ditto.
        * Scripts/run-safari: Ditto.
        * Scripts/run-test-runner: Ditto.
        * Scripts/run-test-webkit-api: Ditto.
        * Scripts/run-webkit-app: Ditto.
        * Scripts/webkitdirs.pm:
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Added.
        (argumentsForRunAndDebugMacWebKitApp): Added.
        (runMacWebKitApp): If the --no-saved-state command line argument was given then
        disable application resume for the session.
        (execMacWebKitAppForDebugging): Ditto.

2011-12-23  Dmitry Lomov  <dslomov@google.com>

        [WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=66509
        Just renames, merges and removal of dead code. Here are the list of renames:
          - WebCommonWorkerClient merged with WebWorkerClient and renamed to WebSharedWorkerClient
          - NewWebCommonWorkerClient renamed to WebCommonWorkerClient
          - WebWorkerBase merged into WebSharedWorkerImpl
          - NewWebWorkerBase renamed into WebWorkerBase
 
        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::createWorker):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createWorker):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-12-23  Kentaro Hara  <haraken@chromium.org>

        Let parser_unittests.pl call different language parsers
        https://bugs.webkit.org/show_bug.cgi?id=75081

        Reviewed by David Kilzer.

        We introduced parser_unittests.pl in bug 74994 , but it is implemented
        to always call get_function_line_ranges_for_perl(). In order to enable unittests
        for other languages, this patch lets parser_unittests.pl call different language
        parsers depending on the languages.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:

2011-12-22  Adam Roben  <aroben@apple.com>

        Snow Leopard test fix

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): Python 2.6.1 doesn't seem to like specifying testRunner=None to
        unittest.main, even though that's the default. So now we explicitly specify a
        TextTestRunner.

2011-12-22  Chris Fleizach  <cfleizach@apple.com>

        AX: attributed strings do not include AXHeading information when a link is contained within the heading
        https://bugs.webkit.org/show_bug.cgi?id=75059

        Reviewed by Darin Adler.

        Support the ability to check if an arbitrary attribute is present within an
        attributed string that can be retrieved through an AccessibilityTextMarkerRange.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributedStringForTextMarkerRangeContainsAttributeCallback):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: runAllTests() and runTest() should not use global variables

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        * Scripts/run-api-tests:
        (runTestsBySuite): Rename from runAllTests().  Add arguments for
        list of tests and $verbose.
        (runTest): Add $verbose argument.

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: inline runAllTestsInSuite() into runAllTests()

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        In order to make it easy to run one or more individual suites,
        or one more individual tests, it's easier to call a single
        method with different data structures than individual methods.

        * Scripts/run-api-tests:
        (runAllTests): Inline runAllTestsInSuite().

2011-12-22  Adam Roben  <aroben@apple.com>

        Add a --xml flag to test-webkitpy

        test-webkitpy --xml will, in addition to providing the standard text output on stdout, write
        JUnit-style XML files to a test-webkitpy-xml-reports subdirectory in the working directory.
        This is useful for working with tools that consume JUnit-style XML files.

        Fixes <http://webkit.org/b/75090> Would like a way to generate JUnit-style XML files when
        running test-webkitpy

        Reviewed by Darin Adler.

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): If the --xml flag is passed, create an XMLTestRunner and pass it to
        unittest.main(). Otherwise pass no test runner so that unittest will choose its own default.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_xmlrunner):
        Added code to install unittest-xml-reporting as webkitpy.thirdparty.autoinstalled.xmlrunner.
        This change is untested because it's basically impossible to get a test to pass when --xml
        is passed to test-webkitpy (because xmlrunner will already have been imported by the time
        the test runs).

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI: initialize the main thread before running tests
        <http://webkit.org/b/75064>

        Reviewed by Adam Roben.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController): Call
        WTF::initializeMainThread() to prevent assertions in Debug
        builds.

2011-12-22  David Kilzer  <ddkilzer@apple.com>

        run-api-tests: dumpAllTests() should not use global variables

        Reviewed by Adam Roben.

        Part of: <http://webkit.org/b/75065> run-api-tests should be able to run individual suites and tests

        * Scripts/run-api-tests: Renamed $dump to $dumpTests.
        (dumpTestsBySuite): Rename from dumpAllTests() and pass in
        global data as an argument.  Sort suite names and test names
        alphabetically to match output when running tests.

2011-12-22  Leo Yang  <leo.yang@torchmobile.com.cn>

        [BlackBerry] Enable blob for the BlackBerry porting
        https://bugs.webkit.org/show_bug.cgi?id=75074

        Reviewed by George Staikos.

        * Scripts/build-webkit:

2011-12-22  Kentaro Hara  <haraken@chromium.org>

        Add unittests for the Perl parser of prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74994

        Reviewed by David Kilzer.

        This patch adds unittests for get_function_line_ranges_for_perl() of prepare-ChangeLog.

        Test: Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl: Added.
        Runs unittests specified in @testFiles.
        You can reset expected results by specifying a --reset-results option.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl: Added.
        Contains simple methods.
        (func1):
        (func2):
        (func3):
        (func4):
        (func5):
        (func6):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt: Added.
        This test result is generated by the --reset-results option.

2011-12-21  Eric Seidel  <eric@webkit.org>

        Add webkit.review.bot@gmail.com and commit-queue@webkit.org as "contributors"
        so that they appear in the bugzilla autocomplete CC list.
        I also removed the "radar" irc nick (which I believe does not exist)
        and removed the uneeded [] around the radar bugzilla email.

        Unreviewed.

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

2011-12-21  Daniel Bates  <dbates@rim.com>

        Teach build-jsc how to build JavaScriptCore for the EFL, BlackBerry, and WinCE ports
        https://bugs.webkit.org/show_bug.cgi?id=74985

        Reviewed by Eric Seidel.

        * Scripts/build-jsc:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortName): Added.

2011-12-21  Daniel Bates  <dbates@rim.com>

        Extract BlackBerry CMake arguments from build-webkit into separate function
        https://bugs.webkit.org/show_bug.cgi?id=74981

        Reviewed by Rob Buis.

        Towards adding support for using Tools/Scripts/build-jsc for the BlackBerry port, move
        the CMake argument logic from Tools/Scripts/build-webkit to function webkitdirs::blackberryCMakeArguments()
        and have cmakeBasedPortArguments() call this function for the BlackBerry CMake argument list.
        This will allow us to get the BlackBerry CMake arguments in Tools/Scripts/build-jsc so
        that we can pass them to the CMake build system when building JavaScriptCore.

        * Scripts/build-webkit: Move construction of CMake argument list from here to
        webkitdirs::blackberryCMakeArguments(). Also, remove exported function blackberryTargetArchitecture()
        since it's only called within webkitdirs.pm now. Formerly we exported this function so that we could
        call it from build-webkit.
        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments): Added.
        (cmakeBasedPortArguments): Modified to call blackberryCMakeArguments() when building the
        BlackBerry port.

2011-12-21  Daniel Bates  <dbates@webkit.org>

        Extract WinCE CMake arguments from build-webkit into separate function
        https://bugs.webkit.org/show_bug.cgi?id=74983

        Reviewed by Rob Buis.

        Towards adding support for using Tools/Scripts/build-jsc for the WinCE port, extract the
        WinCE-specific CMake argument from Tools/Scripts/build-webkit into webkitdirs::cmakeBasedPortArguments().
        This will allow us to get the WinCE-specific CMake argument in Tools/Scripts/build-jsc so
        that we can pass it to the CMake build system when building JavaScriptCore.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortArguments): Added.

2011-12-21  Kentaro Hara  <haraken@chromium.org>

        In prepare-ChangeLog, replace constant global variables with "use constant"
        https://bugs.webkit.org/show_bug.cgi?id=74992

        Reviewed by Ryosuke Niwa.

        This patch replaces the following constant global variables with "use constant"s.
            - $changeLogTimeZone
            - $SVN
            - $GIT
            - %supportedTestExtensions

        * Scripts/prepare-ChangeLog:
        (changeLogNameFromArgs):
        (changeLogEmailAddressFromArgs):
        (resolveConflictedChangeLogs):
        (generateNewChangeLogs):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (findOriginalFileFromSvn):
        (determinePropertyChanges):
        (generateFileList):
        (reviewerAndDescriptionForGitCommit):

2011-12-20  Dirk Pranke  <dpranke@chromium.org>

        nrwt: rename field references from _fs to _filesystem
        https://bugs.webkit.org/show_bug.cgi?id=74898

        Reviewed by Adam Barth.

        This is a simple cleanup; most of the code uses
        self._filesystem, but some used self._fs; this change renames
        the latter to the former to be more consistent.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.collect_tests):
        (Manager._strip_test_dir_prefix):
        (Manager._split_into_chunks_if_necessary):
        (Manager.results_directory):
        (Manager._clobber_old_results):
        (Manager._upload_json_files):
        (Manager.print_config):
        (Manager._copy_results_html_file):
        (Manager._show_results_html_file):
        (Manager._log_worker_stack):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator._normalize_results_json):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGeneratorBase.__init__):
        (JSONResultsGeneratorBase.generate_json_output):
        (JSONResultsGeneratorBase.generate_times_ms_file):
        (JSONResultsGeneratorBase.upload_json_files):
        (JSONResultsGeneratorBase._get_svn_revision):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (Base.__init__):

2011-12-20  Kentaro Hara  <haraken@chromium.org>

        Replace webkitperl/run-leaks_unittest/RunLeaks.pm with webkitperl/LoadAsModule.pm
        https://bugs.webkit.org/show_bug.cgi?id=74836

        Reviewed by David Kilzer.

        webkitperl/run-leaks_unittest/RunLeaks.pm can be used for unit-testing of run-leaks only.
        This patch creates more generalized webkitperl/LoadAsModule.pm, which can be also used
        for unit-testing of other Perl scripts. We are planning to use it for unit-testing
        of prepare-ChangeLog.

        Using LoadAsModule.pm, you can load a Perl script as follows.
        The first argument is the arbitrary package name you want to use, and the second argument
        is the name of the Perl script you want to load.

            use LoadAsModule qw(RunLeaks run-leaks);
            RunLeaks::someFunctionDefinedInRunLeaks(...);

        Tests: Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl
               Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl
               Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl

        * Scripts/webkitperl/LoadAsModule.pm: Added.
        * Scripts/webkitperl/run-leaks_unittest/RunLeaks.pm: Removed.
        (import):
        (readFile):
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl: Used LoadAsModule instead of RunLeaks.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl: Ditto.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl: Ditto.

2011-12-20  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] WK2 Debugging quirks need some improvement
        https://bugs.webkit.org/show_bug.cgi?id=74859

        Reviewed by Simon Hausmann.

        Improvements added to make debugging WebKit2 more
        confortable and efficient:
        1. Unify debugging quirks. From now all of them are controlled
        by the QT_WEBKIT2_DEBUG environment variable.
        2. Disable crash handlers for WebKitTestRunner if debugging quirks
        are used to make it possible to use postmortem debugging via core dumps
        which is extremely useful for debugging bugs triggered by layout tests.
        3. Disable test timeout for WebKitTestRunner if debugging quirks
        are used because that makes debugging impossible.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformRunUntil):

2011-12-20  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt][WK2] Implement favicon support
        https://bugs.webkit.org/show_bug.cgi?id=71082

        Reviewed by Simon Hausmann.

        A favorite icon was added on MiniBrowser's url bar as example.
        We display a default icon when the page doesn't have an icon ready.

        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/favicon.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-12-19  Sam Weinig  <sam@webkit.org>

        Add support for scrollLineDown: and scrollLineUp: NSResponder selectors
        https://bugs.webkit.org/show_bug.cgi?id=74907

        Reviewed by Dan Bernstein.

        Add ScrollByLineCommands API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm: Added.
        * TestWebKitAPI/Tests/WebKit2/simple-tall.html: Added.

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove port.executive, port.filesystem, port.user properties
        https://bugs.webkit.org/show_bug.cgi?id=74896

        Reviewed by Eric Seidel.

        Following on the refactoring of the port and host objects, this
        removes the public executive, filesystem, and user properties
        from the Port interface (protected versions of executive and
        filesystem still exist). There is still some more clean up to
        make the code more consistent and rearrange some other files to
        talk to Hosts directly instead of getting them off of the Port
        class.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager.results_directory):
        (Manager._log_worker_stack):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_fallback_path_in_config):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_InlineManager.start_worker):
        (_InlineWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.safe_init):
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfiguration.from_port):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        (Port.tests):
        (Port.show_results_html_file):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_layout_tests_skipping):
        (PortTest.test_test_dirs):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (HtmlGenerator.__init__):
        (HtmlGenerator.show_html):
        (real_main):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (TestHtmlGenerator.make_generator):

2011-12-19  Daniel Bates  <dbates@webkit.org>

        Pass command line arguments to GDB when debugging a Mac WebKit application
        https://bugs.webkit.org/show_bug.cgi?id=72829

        Reviewed by David Kilzer.

        Pass through any command line arguments given to debug-{safari, minibrowser}
        to GDB so that they may influence the application instance launched by GDB.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging):

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: remove executive,filesystem,user parameters from Port constructor
        https://bugs.webkit.org/show_bug.cgi?id=74878

        Reviewed by Eric Seidel.

        This change concludes the refactoring that makes Host a required
        parameter for Port and ensures that all access to filesystem,
        executives, etc. is going through the Host.

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

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: finish refactoring port classes to make a host mandatory
        https://bugs.webkit.org/show_bug.cgi?id=74566

        Reviewed by Eric Seidel.

        This change makes all Port objects take a required (System)Host
        parameter, and updates the TestPort object to no longer create a
        mock filesystem or add files to the existing filesystem by
        default.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__):
        * Scripts/webkitpy/layout_tests/port/factory.py:
        (PortFactory.__init__):
        (PortFactory._get_kwargs):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__):
        (TestPort.__init__):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (passing_run):
        (logging_run):
        (get_tests_run):
        (MainTest.test_single_file):
        (MainTest.test_stderr_is_saved):
        (MainTest.test_test_list):
        (MainTest.test_test_list_with_prefix):
        (MainTest.test_missing_and_unexpected_results):
        (MainTest.test_missing_and_unexpected_results_with_custom_exit_code):
        (MainTest.test_crash_with_stderr):
        (MainTest.test_no_image_failure_with_image_diff):
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):
        (MainTest.test_exit_after_n_failures_upload):
        (MainTest.test_results_directory_absolute):
        (MainTest.test_results_directory_relative):
        (MainTest.test_retries_directory):
        (MainTest.test_tolerance.get_port_for_run):
        (MainTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist):
        (EndToEndTest.test_end_to_end):
        (EndToEndTest.test_reftest_with_two_notrefs):
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner.__init__):
        (main):
        (real_main):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        (test_host_port_and_filesystem):
        (TestRebaseliner.make_rebaseliner):
        (TestRealMain.test_all_platforms):
        (TestHtmlGenerator.make_generator):

2011-12-19  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: update unit tests in preparation for making host a mandatory parameter to Port objects
        https://bugs.webkit.org/show_bug.cgi?id=74562

        Reviewed by Eric Seidel.

        Apart from a minor change to style/checkers/test_expectations.py
        to take a host as a parameter to a TestExpectationsChecker(),
        there are only refactoring changes to unit tests here.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest._test_json_generation):
        (JSONGeneratorTest.test_test_timings_trie):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (Base.__init__):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.make_port):
        (PortTest.test_layout_tests_skipping):
        (PortTest.test_test_dirs):
        (PortTest.test_additional_platform_directory):
        (PortTest.test_uses_test_expectations_file):
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest.test_parse_reftest_list):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryRunPort.__init__):
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        (FactoryTest.setUp):
        (FactoryTest.tearDown):
        (FactoryTest.assert_port):
        (FactoryTest.assert_platform_port):
        (FactoryTest.test_unknown_specified):
        (FactoryTest.test_unknown_default):
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        (GetGoogleChromePortTest._verify_expectations_overrides):
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        (MockDRTPortTest.make_port):
        (MockDRTTest.assertTest):
        (MockDRTTest.test_main):
        (MockChromiumDRTTest.test_pixeltest__fails):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (TestWebKitPort.__init__):
        (WebKitPortTest.test_skipped_directories_for_symbols):
        (test_skipped_directories_for_features):
        (test_skipped_layout_tests):
        (test_skipped_file_search_paths):
        (test_root_option):
        (test_test_expectations):
        (test_build_driver):
        (test_linux_distro_detection):
        (test_apache_config_file_name_for_platform):
        (test_path_to_apache_config_file):
        (WebKitDriverTest.test_read_block):
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.__init__):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase._expect_port_for_expectations_path):
        (TestExpectationsTestCase.assert_lines_lint):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config.TestMacPort):

2011-12-19  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [Efl] Fix path returned by builtDylibPathForName in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=74854

        Reviewed by Csaba Osztrogonác.

        Since r101052, libewebkit.so is built in a different location, so we
        need to adjust the path returned by builtDylibPathForName.

        usesPerConfigurationBuildDirectory also needs to be fixed, as the Efl
        port also respects Release/Debug configurations.

        These changes should make run-launcher finally work correctly with
        webkit-efl.

        * Scripts/webkitdirs.pm:
        (usesPerConfigurationBuildDirectory):
        (builtDylibPathForName):

2011-12-19  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Add support for modal event loop processing for WTR
        https://bugs.webkit.org/show_bug.cgi?id=74852

        Reviewed by Kenneth Rohde Christiansen.

        Rewrote event loop processing: Instead of terminating the event loop
        in notifyDone() - something no other platform does - we now respect the
        "bool& condition" parameter passed to platformRunUntil. This ensures
        proper termination even when the condition is changed from within a
        nested event loop, because only when we _exit_ from the nested event
        loop we will check the condition and terminate the test properly.

        In addition this patch implements TestController::runModal by means of
        a nested event loop, which is passed to the platform webview that is
        supposed to be modal. It is that view's responsibility to exit the
        loop, upon destruction. I believe that's similar to how it works on the Mac,
        where it doesn't seem that NSApp's runModalForWindow is terminate via
        abort/stopModal but simply because the window is closed.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::setModalEventLoop):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::runModal):

2011-12-18  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r103149): prepare-ChangeLog outputs a warning
        https://bugs.webkit.org/show_bug.cgi?id=74808

        Reviewed by David Kilzer.

        Added the prototype declaration of main() to avoid warning messages.
        Sorted subroutine declarations in the alphabetical order.

        * Scripts/prepare-ChangeLog:

2011-12-17  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt] Fix QtTestBrowser compilation with QtWidgets module
        https://bugs.webkit.org/show_bug.cgi?id=74791

        Reviewed by Andreas Kling.

        * QtTestBrowser/QtTestBrowser.pro:

2011-12-17  Kentaro Hara  <haraken@chromium.org>

        Remove top-level code completely from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74698

        Reviewed by Darin Adler.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest manner.
        This patch just moves all top-level code into main().

        * Scripts/prepare-ChangeLog:
        (main):

2011-12-16  Dean Jackson  <dino@apple.com>

        Move webkit-bug-importer to Contributor. It won't
        autocomplete as an Account.
        See https://bugs.webkit.org/show_bug.cgi?id=74739
        for some discussion.

        Unreviewed.

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

2011-12-16  Dean Jackson  <dino@apple.com>

        Add webkit-bug-importer@group.apple.com to accounts
        so that it autocompletes in bugzilla.

        Unreviewed.

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

2011-12-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, skipping 3 failing GTK API tests.

        * Scripts/run-gtk-tests:

2011-12-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK API tests build fix attempt.

        * Scripts/run-gtk-tests: Run xvfb on a display not used by NRWT.

2011-12-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, unskipping GTK testdownload. Should pass on the bot now.

        * Scripts/run-gtk-tests:

2011-12-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix the build for newer Qt5
        https://bugs.webkit.org/show_bug.cgi?id=74703

        Reviewed by Csaba Osztrogonác.

        * QtTestBrowser/launcherwindow.h: Add missing forward declaration.
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::sendTouchEvent): Allocate QTouchDevice and use with QTouchEvent constructor.
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Ditto.
        (WTR::EventSenderProxy::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent): Ditto.
        (MiniBrowserApplication::notify): Adapt to changed API for marking primary touch point.

2011-12-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Detect and force clean build when feature defines are added

        Reviewed by Ossy.

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

        * Scripts/webkitdirs.pm:

2011-12-16  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Remove all global variables from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74681

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables be used only through parameter passing.
        This patch removes all global variables from prepare-ChangeLog.
            - $mergeBase
            - $gitCommit
            - $gitIndex

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (changeLogNameFromArgs):
        (changeLogEmailAddressFromArgs):
        (generateNewChangeLogs):
        (printDiff):
        (diffFromToString):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (generateFileList):
        (isConflictStatus):

2011-12-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Rounding errors on 32-bit machines causes tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=72254

        Initial patch by vanuan@gmail.com.
        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): Pass additional
        CXXFLAGS to autogen in an attempt to harmonize floating point
        values between 32-bit and 64-bit architectures.

2011-12-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Make distcheck fails during the install
        https://bugs.webkit.org/show_bug.cgi?id=74274

        No review, since this is a build fix.

        * GNUmakefile.am: Remove BUILT_SOURCES from the dependency list for the gtkdoc
        step. BUILT_SOURCES includes forwarding header generation for WebKit2, which
        always runs. This means that the gtkdoc step was always running when make was
        invoked. Generating gtkdoc during 'make install' was triggering a race condition
        with the library file. Later we can fix generate-forwarding-headers and unbreak
        'make docs,' but this bandaid is sufficient to let us release.

2011-12-15  Eric Seidel  <eric@webkit.org>

        NRWT should use free + inactive memory for default_child_processes on OS X (and never return < 1 process)
        https://bugs.webkit.org/show_bug.cgi?id=74650

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._compute_bytes_from_vm_stat_output):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):

2011-12-15  Filip Pizlo  <fpizlo@apple.com>

        bencher script should support remote benchmarking on platforms that don't have ruby
        https://bugs.webkit.org/show_bug.cgi?id=74659

        Rubber-stamped by Sam Weinig.
        
        Added the ability to have bencher generate a benchmarking playload that consists of
        copies of all of the benchmarks, optionally copies of all of the frameworks and
        binaries to run all of the VMs, and a sh script that runs the benchmarks in random
        order, which then spits out a raw results file that bencher can parse.
        
        In normal operating mode, you never see this, as it just generates the payload and
        script internally, runs it, parses the results, and spits them out.
        
        The --remote mode has been changed to use this style, so any remote host that has
        sshd, passwordless login support, a ~/.bencher file that points to a "tempPath", and
        a sh-compatible shell can be used for remote benchmarking.
        
        The feature to include VMs in the benchmarking payload is by default only activated
        when using --remote, but it can also be activated when doing local benchmarking; the
        benefit is that you remove any pathname-related performance pathologies. All VMs
        become equal because they are all located in
        /path/to/bencher/directory/temp/benchdata/vmN where N is the configuration number
        (usually 0 or 1).
        
        Also fixed bugs in the DumpRenderTree support. It's now possible to run all benchmarks
        through DumpRenderTree. This is only a bit slower than running in jsc.

        * Scripts/bencher:

2011-12-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: clean up TestPort to (mostly) not create a new filesystem
        https://bugs.webkit.org/show_bug.cgi?id=74556

        This change modifies the TestPort to be ready to add tests to an
        existing filesystem instead of creating a new filesystem; we
        leave unit_test_filesystem() in for now for compatibility.

        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
          - call add_unit_tests_to_mock_filesystem by default to make
            the MockHost more generally useful for layout_test unit tests.
        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__):
        (add_unit_tests_to_mock_filesystem):
        (add_file):
        (unit_test_filesystem):
        (TestPort.__init__):
        (TestPort._set_default_overriding_none):

2011-12-15  Dirk Pranke  <dpranke@chromium.org>

        webkitpy: cleanup prior to systemhostifying the layout_test/port* classes
        https://bugs.webkit.org/show_bug.cgi?id=74551

        This is some minor cleanup prior to making all of the host/port
        changes described in bug 74138.

        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
          - make sure the scm object is initialized with the same mock
            executive and filesystem objects.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.clear_written_files):
          - add a routine that will be useful in testing.
        (MockFileSystem.maybe_make_directory):
        (MockFileSystem.write_binary_file):
          - fix bugs to make sure directories are created properly.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (_Process.run):
          - add clarifying comments.
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        (MockDRTPort.__init__):
        (MockDRT.__init__):
          - add clarifying comments.

2011-12-15  Anders Carlsson  <andersca@apple.com>

        Regression (r102866): Navigating away from or closing a page with a plugin crashes
        https://bugs.webkit.org/show_bug.cgi?id=74655

        Reviewed by Sam Weinig.

        Add a bunch of tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-15  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=74469
        Escape paths to svn commands so our tools can handle filenames with @ symbols.

        Reviewed by Adam Roben.

        * Scripts/VCSUtils.pm:
        (scmMoveOrRenameFile):
        (scmAddExecutableBit):
        (scmRemoveExecutableBit):
        (determineSVNRoot):
        (svnRevisionForDirectory):
        (pathRelativeToSVNRepositoryRootForPath):
        (svnStatus):
        (escapeSubversionPath):
        * Scripts/parse-malloc-history:
        (main):
        * Scripts/prepare-ChangeLog:
        (diffCommand):
        (statusCommand):
        (findOriginalFileFromSvn):
        (determinePropertyChanges):
        * Scripts/resolve-ChangeLogs:
        (conflictFiles):
        (resolveConflict):
        (showStatus):
        * Scripts/svn-apply:
        (patch):
        (scmCopy):
        (scmAdd):
        (scmRemove):
        * Scripts/svn-create-patch:
        (findBaseUrl):
        (findMimeType):
        (findSourceFileAndRevision):
        (generateDiff):
        (generateFileList):
        (manufacturePatchForAdditionWithHistory):
        * Scripts/svn-unapply:
        (patch):
        (revertDirectories):

2011-12-15  Michael Bruning  <michael.bruning@nokia.com>

        [qt][wk2] MiniBrowser: Add pressed state for viewport info button.
        https://bugs.webkit.org/show_bug.cgi?id=74617

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/qml/BrowserWindow.qml: Added state dependent coloring
        for viewport info button, adjusted height and added rounded corners.

2011-12-15  Andy Estes  <aestes@apple.com>

        TestFailures: store the name of the buildbot results directory in a property
        https://bugs.webkit.org/show_bug.cgi?id=74663

        Reviewed by Adam Barth.
        
        Store the name of the results directory as a property on Buildbot's
        prototype. This allows subclasses of Buildbot to customize the results
        directory.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Buildbot.js:
        (Buildbot.prototype.resultsDirectoryURL):

2011-12-15  Tony Chang  <tony@chromium.org>

        [chromium] pass --delete_unversioned_trees to gclient on the bots
        https://bugs.webkit.org/show_bug.cgi?id=74565

        Reviewed by Kenneth Russell.

        It was temporarily removed in r102891 to keep the bots green.  Now
        that the bots have cycled, we can add it back.

        * Scripts/update-webkit-chromium:

2011-12-15  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, make several global variables be used only through parameter passing
        https://bugs.webkit.org/show_bug.cgi?id=74497

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables be used only through parameter passing.
            - $bugDescription
            - $bugNumber
            - $name
            - $emailAddress
            - $gitReviewer
            - $writeChangeLogs

        * Scripts/prepare-ChangeLog:
        (fetchBugDescriptionFromURL):
        (generateNewChangeLogs):
        (reviewerAndDescriptionForGitCommit):

2011-12-15  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Add a few more web database functions to ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=72148

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):

2011-12-15  Martin Kosiba  <mkosiba@google.com>

        Fix find on web pages with -webkit-user-select: none for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=72281

        Reviewed by Ryosuke Niwa.

        Provided a partial findString implementation. This doesn't support
        all of the FindOptions since they're not exposed via WebFindOptions.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::findString):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-12-15  Kenneth Russell  <kbr@google.com>

        [chromium] Add DRT support for WebKitPageCacheSupportsPluginsPreferenceKey
        https://bugs.webkit.org/show_bug.cgi?id=74581

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-12-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Improve the look of the viewport info overlay

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/qml/ViewportInfoItem.qml:

2011-12-15  Igor Oliveira  <igor.oliveira@openbossa.org>

        [Qt] Support requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=74528

        Add build-option for requestAnimationFrame feature.

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2011-12-15  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add WebCoreSupport and WebKit APIs to include WebCore's include path

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/webcore.prf:

2011-12-15  Michael Brüning  <michael.bruning@nokia.com>

        [QT][WK2]Add (experimental) viewport info view to Minibrowser/qt.
        https://bugs.webkit.org/show_bug.cgi?id=72893

        Reviewed by Kenneth Rohde Christiansen.

        This patch extends QQuickWebViewExperimental by a property named
        viewportInfo, which contains the viewport scalability and
        layout and contents size information. This property is exposed to
        QML through the experimental extension for QQuickWebView.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/icons/info.png: Added.
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ViewportInfoItem.qml: Added.

2011-12-15  Shinya Kawanaka  <shinyak@google.com>

        [chromium] WebViewHost::requestCheckingOfText should return immediately if text is empty.
        https://bugs.webkit.org/show_bug.cgi?id=74586

        Reviewed by Hajime Morita.

        No new tests. Covered by existing tests.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestCheckingOfText):
          Returns immediately if text is empty.

2011-12-15  Alexander Færøy  <ahf@0x90.dk>

        [Qt] QtWebKit fails to build on Mac OS X after r102776
        https://bugs.webkit.org/show_bug.cgi?id=74593

        Reviewed by Simon Hausmann.

        CONFIG =+ link_pkgconfig is needed such that the correct parameters
        are passed to the compiler.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2011-12-14  Tony Chang  <tony@chromium.org>

        [chromium] Remove redundant third_party entries from chromium DEPS
        https://bugs.webkit.org/show_bug.cgi?id=74472

        Reviewed by Kenneth Russell.

        * Scripts/update-webkit-chromium: Temporarily keep unversioned trees.

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, replace $isGit and $isSVN with
        VCSUtils::isGit() and VCSUtils::isSVN().
        https://bugs.webkit.org/show_bug.cgi?id=74485

        Reviewed by David Kilzer.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. This patch replaces $isGit and $isSVN
        with VCSUtils::isGit() and VCSUtils::isSVN(). This patch also removes firstDirectoryOrCwd(),
        assuming that no user will mix Git/SVN checkouts and thus we can judge SVN or Git
        just by looking at the current working directory.

        * Scripts/prepare-ChangeLog: Removed firstDirectoryOrCwd().
        (diffFromToString):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (diffHeaderFormat):
        (generateFileList):
        (isAddedStatus):
        (isConflictStatus):
        (statusDescription):
        (extractLineRange):

2011-12-14  Sam Weinig  <weinig@apple.com>

        Remove whitespace from InheritedPropertySheets attributes in
        vsprops files to appease the Visual Studio project migrator.

        Reviewed by Adam Roben.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebug.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugAll.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugCairoCFLite.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/DumpRenderTreeDebug.vsprops:
        * DumpRenderTree/win/DumpRenderTreeDebugAll.vsprops:
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops:
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops:
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffDebug.vsprops:
        * DumpRenderTree/win/ImageDiffDebugAll.vsprops:
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffProduction.vsprops:
        * DumpRenderTree/win/ImageDiffRelease.vsprops:
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserDebug.vsprops:
        * MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops:
        * MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops:
        * MiniBrowser/Configurations/MiniBrowserRelease.vsprops:
        * MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinDebug.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinDebugAll.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinDebugCairoCFLite.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/InjectedBundleDebug.vsprops:
        * WebKitTestRunner/win/InjectedBundleDebugAll.vsprops:
        * WebKitTestRunner/win/InjectedBundleDebugCairoCFLite.vsprops:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops:
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops:
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerDebug.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerDebugAll.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerDebugCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops:
        * WinLauncher/WinLauncherDebug.vsprops:
        * WinLauncher/WinLauncherDebugAll.vsprops:
        * WinLauncher/WinLauncherDebugCairoCFLite.vsprops:
        * WinLauncher/WinLauncherProduction.vsprops:
        * WinLauncher/WinLauncherRelease.vsprops:
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops:
        * record-memory-win/record-memory-winDebug.vsprops:
        * record-memory-win/record-memory-winDebugAll.vsprops:
        * record-memory-win/record-memory-winDebugCairoCFLite.vsprops:
        * record-memory-win/record-memory-winProduction.vsprops:
        * record-memory-win/record-memory-winRelease.vsprops:
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Windows build fix.

        Move CHECKs out of the destructor.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::B::~B):
        (TestWebKitAPI::TEST):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        binding a member function should ref/deref the object pointer if needed
        https://bugs.webkit.org/show_bug.cgi?id=74552

        Reviewed by Sam Weinig.

        Add new tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::B::B):
        (TestWebKitAPI::B::~B):
        (TestWebKitAPI::B::ref):
        (TestWebKitAPI::B::deref):
        (TestWebKitAPI::B::f):
        (TestWebKitAPI::B::g):
        (TestWebKitAPI::TEST):

2011-12-14  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        Removed macro definitions which is now provided by Platform.h

        * DumpRenderTree/chromium/config.h:
        * DumpRenderTree/config.h:
        * DumpRenderTree/ForwardingHeaders/runtime/JSExportMacros.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/ExportMacros.h: Added.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Add new ForwardingHeaders.
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r102761.
        http://trac.webkit.org/changeset/102761
        https://bugs.webkit.org/show_bug.cgi?id=74485

        we came up with a better fix than this (see comments in bug
        74485)

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (printDiff):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (generateFileList):
        (isAddedStatus):
        (isConflictStatus):
        (statusDescription):
        (extractLineRange):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Work around a bug in the MSVC2005 compiler
        https://bugs.webkit.org/show_bug.cgi?id=74550

        Reviewed by Sam Weinig.

        Re-enable tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Test fonts are not used with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72513

        My last unreviewed buildfix for this crazy bug.

        * qmake/mkspecs/features/features.prf:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Windows build.

        Disable all the tests until I can figure out what's going on here.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Fix the Windows build.

        Disable some of the tests for now.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        bind should handle member functions
        https://bugs.webkit.org/show_bug.cgi?id=74529

        Reviewed by Sam Weinig.

        Add tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::A::A):
        (TestWebKitAPI::A::f):
        (TestWebKitAPI::A::addF):
        (TestWebKitAPI::TEST):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add unary and binary bind overloads
        https://bugs.webkit.org/show_bug.cgi?id=74524

        Reviewed by Sam Weinig.

        Add tests.

        * TestWebKitAPI/Tests/WTF/Functional.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::multiplyByTwo):
        (TestWebKitAPI::multiplyByOneAndAHalf):
        (TestWebKitAPI::multiply):
        (TestWebKitAPI::subtract):

2011-12-14  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        [Qt] Test fonts are not used with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72513

        MIPS and SH4 buildfix after r102776 and r102795.

        Reviewed by Csaba Osztrogonác.

        * qmake/mkspecs/features/features.prf:

2011-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed speculative MIPS and SH4 buildfix after r102776.

        * qmake/mkspecs/features/features.prf:

2011-12-14  Andreas Kling  <kling@webkit.org>

        Make my e-mail address a little more awesome.

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

2011-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Rollout r102769, because it broke Qt-4.8 builds.

        * qmake/mkspecs/features/webcore.prf:

2011-12-14  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Test fonts are not used with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72513

        Reviewed by Simon Hausmann.

        Don't depend on Q_WS_X11 anymore since it's not the Qt5
        way to detect the platform. Make the guards depend
        on our own configtest for fontconfig. For Qt4 we can still
        use the preassumption that we have it on Linux.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::initializeFonts):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/main.cpp:
        (main): Additionally remove a nonsense piece of code that was
        trying to reset the font settings - which is not necessary -
        after we have already returned from main.
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/Target.pri: Remove unnecessary fontconfig linkage
        from WTR. It is not needed. We set up the fonts via the injected bundle.
        * qmake/config.tests/fontconfig/fontconfig.cpp: Added.
        (main):
        * qmake/config.tests/fontconfig/fontconfig.pro: Added.
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile:

2011-12-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't add WebCoreSupport and WebKit APIs to include WebCore's include path

        Followup to r102679

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

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/webcore.prf:

2011-12-14  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Mobile theme could use a little refresh
        https://bugs.webkit.org/show_bug.cgi?id=74293

        Have MiniBrowser use the mobile theme when not
        passed --desktop.

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):

2011-12-14  João Paulo Rechi Vita  <jprvita@openbossa.org>

        [Qt] [Gardening] Remove qt-4.7 layout tests dir
        https://bugs.webkit.org/show_bug.cgi?id=74426

        Building trunk now depends on Qt >= 4.8, so no need to keep this directory
        on the tree.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        (QtPort.qt_version):
        (QtPort.baseline_search_path):
        (QtPort._skipped_file_search_paths):
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        (QtPortTest._assert_search_path):

2011-12-14  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, make $isGit and $isSVN be used only
        through parameter passing
        https://bugs.webkit.org/show_bug.cgi?id=74485

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables be used only through parameter passing.
            - $isGit
            - $isSVN

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (printDiff):
        (diffFromToString):
        (diffCommand):
        (statusCommand):
        (createPatchCommand):
        (diffHeaderFormat):
        (generateFileList):
        (isAddedStatus):
        (isConflictStatus):
        (statusDescription):
        (extractLineRange):

2011-12-14  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] DeviceOrientationClientMockQt should be removed in favor of DeviceOrientationClientMock
        https://bugs.webkit.org/show_bug.cgi?id=74417

        Reviewed by Simon Hausmann.

        Based on original patch by Kenneth Christiansen.

        Already covered by current tests.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] Bad text rendering since r101343
        https://bugs.webkit.org/show_bug.cgi?id=73744

        Reviewed by Martin Robinson.

        Turn cairo hint metrics off for better font metrics reporting in
        the tests. This is especially important for SVG.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeGtkSettings):

2011-12-13  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Remove several global variables from prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74389

        Reviewed by David Kilzer.

        We are planning to write unit-tests for prepare-ChangeLog in a run-leaks_unittest
        manner. This bug is one of the incremental refactorings to remove all top-level
        code and global variables from prepare-ChangeLog. In this patch,
        we make the following global variables being used only through parameter passing.
            - %paths
            - $changedFiles
            - $conflictFiles
            - $functionLists
            - $bugURL

        * Scripts/prepare-ChangeLog:
        (findChangeLogs):
        (generateNewChangeLogs):
        (processPaths):
        (generateFileList):
        (firstDirectoryOrCwd):

2011-12-13  Anders Carlsson  <andersca@apple.com>

        Add a very bare-bones implementation of bind and Function to WTF
        https://bugs.webkit.org/show_bug.cgi?id=74462

        Reviewed by Sam Weinig.

        Add basic tests for WTF::Function and WTF::bind.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/Functional.cpp: Added.
        (TestWebKitAPI::returnFortyTwo):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-12-13  Robin Dunn  <robin@alldunn.com>

        [wx] Add a URL argument to wxWebView constructor.
        https://bugs.webkit.org/show_bug.cgi?id=74316
        
        Reviewed by Kevin Ollivier.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (MyApp::OnInit):
        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2011-12-13  Raphael Kubo da Costa  <kubo@profusion.mobi>

        watchlist: Add watchlist for EFL, CMake and libsoup code and put myself on it.
        https://bugs.webkit.org/show_bug.cgi?id=74430

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-12-13  Peter Beverloo  <peter@chromium.org>

        [Chromium] Pull in FreeType and decrease check-out complexity for Android
        https://bugs.webkit.org/show_bug.cgi?id=74401

        Decrease the check-out complexity by removing the need to first run
        "update-webkit-chromium --chromium" prior to running it with
        "--chromium-android", which was caused by an unversioned third_party/
        directory being created. This moves the Android NDK to Source/WebKit/
        chromium/, coming from third_party/ in that directory.

        Reviewed by Adam Barth.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2011-12-13  Andy Wingo  <wingo@igalia.com> and Martin Robinson <mrobinson@igalia.com>

        build-jsc passing incorrect args to buildGtkProject
        https://bugs.webkit.org/show_bug.cgi?id=74308

        Reviewed by Gustavo Noronha Silva.

        * Scripts/build-webkit: Instead of invoking buildGtkProject with
        another argument about webkit2, unshift a --disable-webkit2
        argument onto the buildArgs.
        * Scripts/webkitdirs.pm: Remove $enableWebKit2 arg. Only save autogen.sh
        arguments for WebKit to prevent unnecessary reconfiguration when build-webkit
        and build-jsc are run one after the other.

2011-12-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(102679): It broke Qt5-WK1 build
        https://bugs.webkit.org/show_bug.cgi?id=74413

        Unreviewed buildfix.

        * qmake/mkspecs/features/webcore.prf: Temporarily revert a part of r102679 until a proper fix.

2011-12-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed speculativ debug buildfix after r102679.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/main.cpp:

2011-12-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of layering violations in includes

        WebKit/qt/API and WebKit/qt/WebCoreSupport should not be included
        in the webcore.prf, but rather in each target that specificly needs
        headers in these location. We used to include them directly in webcore
        since we had layering violations between WebCore and WebKit, but now
        that they are gone there's no reason to do that.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/launcherwindow.h:
        * WebKitTestRunner/InjectedBundle/Target.pri:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:

2011-12-13  János Badics  <dicska@gmail.com>

        [NRWT] It crashes intermittently when there are WebProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=73451

        Use self.poll() instead of self._proc.poll() because it checks if self._proc is None or not.

        Reviewed by Kenneth Rohde Christiansen.

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

2011-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ API docs build.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Ignore WebKitUIClient since it's private
        API.

2011-12-13  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed, removed one of my email addresses to use the apprpriate one.

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

2011-12-12  Ádám Kallai  <Kallai.Adam@stud.u-szeged.hu>

        [Qt] Fix skip list search path and expected file search path in ORWT
        https://bugs.webkit.org/show_bug.cgi?id=74281

        Expected file search path fixed.

        Print all used skipped list and expected search path in verbose mode similar to NRWT.

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:
        (buildPlatformResultHierarchy):
        (buildPlatformTestHierarchy):
        (readSkippedFiles):

2011-12-12  Nándor Huszka  <huszka.nandor@stud.u-szeged.hu>

        [Qt] Missing layoutTestController.dumpWillCacheResponse
        https://bugs.webkit.org/show_bug.cgi?id=74287

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpWillCacheResponse):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] platform/gtk/fonts/custom-font-missing-glyphs.html fails on 64-bit Debug
        https://bugs.webkit.org/show_bug.cgi?id=73771

        Reviewed by Gustavo Noronha Silva.

        When using a fallback font during testing, always use DejaVu Sans. This prevents
        falling back to DejaVu Serif on some systems.

        * DumpRenderTree/gtk/fonts/fonts.conf: Fall back to DejaVu Sans.

2011-12-08  Pierre Rossi  <pierre.rossi@gmail.com>

        Add myself as a committer

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

2011-12-12  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Support customizing popup menus with QML
        https://bugs.webkit.org/show_bug.cgi?id=73560

        Reviewed by Tor Arne Vestbø.

        Add an Item Selector to our WebView using the experimental API.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/ItemSelector.qml: Added.

2011-12-12  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] MiniBrowser should only visualize mock touch points when in non-desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=74283

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::sendTouchEvent):

2011-12-12  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, move into a method the top-level code
        to show ChangeLogs diff and open ChangeLogs in an editor
        https://bugs.webkit.org/show_bug.cgi?id=74266

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog
        in a run-leaks_unittest manner. This patch is one of the incremental
        refactorings to remove all top-level code and global variables from
        prepare-ChangeLog.

        * Scripts/prepare-ChangeLog: Moved the top-level code to show ChangeLogs diff into printDiff().
        Moved the top-level code to open ChangeLogs in an editor into openChangeLogs().
        Renamed @changed_files to @changedFiles.
        Renamed %conflict_files to %conflictFiles.
        (generateFunctionLists):
        (printDiff):
        (openChangeLogs):

2011-12-11  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Move top-level code to resolve conflicted ChangeLogs into a method
        https://bugs.webkit.org/show_bug.cgi?id=74257

        Reviewed by Ryosuke Niwa.

        We are planning to write unit-tests for prepare-ChangeLog
        in a run-leaks_unittest/ manner. This patch is one of the incremental
        refactorings to remove all top-level code and global variables from
        prepare-ChangeLog.

        * Scripts/prepare-ChangeLog: Moved top-level code to get the latest ChangeLogs
        into getLatestChangeLogs(), and moved top-level code to resolve conflicted ChangeLogs
        into resolveConflictedChangeLogs().
        (getLatestChangeLogs):
        (resolveConflictedChangeLogs):

2011-12-11  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Move top-level code to generate a new ChangeLog into a method
        https://bugs.webkit.org/show_bug.cgi?id=74253

        Reviewed by David Kilzer.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing,
        which requires to remove top-level code and global variables. This patch is one of
        the incremental refactorings for that.

        * Scripts/prepare-ChangeLog: Moved top-level code to generate a new ChangeLog into generateNewChangeLogs().
        (generateFunctionLists):
        (findChangeLogs):
        (generateNewChangeLogs):
        (generateFileList): Removed an unnecessary variable $didChangeRegressionTests.

2011-12-10  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, move top-level code to find ChangeLogs into a method
        https://bugs.webkit.org/show_bug.cgi?id=74175

        Reviewed by Ryosuke Niwa.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing.
        This requires to remove top-level code. This patch is one of the incremental refactorings
        for that.

        * Scripts/prepare-ChangeLog: Moved top-level code to find ChangeLogs into findChangeLogs().
        (findChangeLogs):

2011-12-10  Andreas Kling  <kling@webkit.org>

        Add my Apple e-mail to committers.py.

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

2011-12-09  Dirk Pranke  <dpranke@chromium.org>

        chromium win build: revert build_webkit_exes_from_webkit_gyp change
        https://bugs.webkit.org/show_bug.cgi?id=74225

        This change sets build_webkit_exes_from_webkit_gyp back to 1;
        the "All.gyp" solution doesn't work on windows.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-09  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt] Click's count is limited to three continuous clicks.
        https://bugs.webkit.org/show_bug.cgi?id=45666

        Reviewed by Kenneth Rohde Christiansen.

        Update m_time at every call to leapForward, so double clicks
        event are correctly sent by EventSender.

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

2011-12-09  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] Reduce top-level code in prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=74172

        Reviewed by Ryosuke Niwa.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing.
        This requires to remove top-level code. This patch is one of the incremental refactorings
        for that.

        * Scripts/prepare-ChangeLog: Moved some top-level code into generateFunctionLists().
        (generateFunctionLists):

2011-12-09  Sam Weinig  <sam@webkit.org>

        Expose a WKConnectionRef which represents the connection to/from the WebProcess/UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=74218

        Reviewed by Anders Carlsson.

        Add a test of the WKConnectionRef API.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKConnection.cpp: Added.
        (TestWebKitAPI::didCreateConnection):
        (TestWebKitAPI::connectionDidReceiveMessage):
        (TestWebKitAPI::connectionDidClose):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKConnection_Bundle.cpp: Added.
        (TestWebKitAPI::connectionDidReceiveMessage):
        (TestWebKitAPI::WKConnectionTest::WKConnectionTest):
        (TestWebKitAPI::WKConnectionTest::initialize):

2011-12-09  David Levin  <levin@chromium.org>

        Hash* iterators should allow comparison between const and const versions.
        https://bugs.webkit.org/show_bug.cgi?id=73370

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.gypi: Add the new test file to the build.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.
        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Added.
        (TestWebKitAPI::TEST): Add a test for the new functionality.

2011-12-09  Dirk Pranke  <dpranke@chromium.org>

        chromium: visual studio projects are busted when build_webkit_exes_from_webkit_gyp==0
        https://bugs.webkit.org/show_bug.cgi?id=74212

        Reviewed by Tony Chang.

        The change introduced in r102201 to split the executables out of
        WebKit.gyp apparently doesn't work right on Windows, since
        WebKit.gyp and Tools.gyp refer to dependent projects by
        different relative paths (it appears gyp doesn't normalize the
        paths). This change moves Tools.gyp to be in the same directory
        as WebKit.gyp (and All.gyp), which should fix this and
        conveniently will also solve the problem of how to add Tools.gyp
        to the chromium DEPS file.

        * Tools.gyp: Renamed to ../Source/WebKit/chromium/Tools.gyp

2011-12-09  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In prepare-ChangeLog, move top-level code to fetch a bug description from URL into a method
        https://bugs.webkit.org/show_bug.cgi?id=74173

        Reviewed by Ryosuke Niwa.

        The objective is to make prepare-ChangeLog a loadable Perl module for unit testing.
        This requires to remove top-level code. This patch is one of the incremental refactorings
        for that.

        * Scripts/prepare-ChangeLog: Moved top-level code to fetch a bug description from URL into fetchBugDescriptionFromURL().
        (fetchBugDescriptionFromURL):

2011-12-09  Tony Chang  <tony@chromium.org>

        Switch the chromium mac bots to using skia test results
        https://bugs.webkit.org/show_bug.cgi?id=74201

        Reviewed by Ryosuke Niwa.

        This is reverting http://trac.webkit.org/changeset/97781 and changing
        the name in master.cfg to no longer have cg in the name.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (appendCustomBuildFlags):
        (RunWebKitTests.start):

2011-12-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Remove a wrongly placed ASSERT.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2011-12-09  Cary Clark  <caryclark@google.com>

        layout_test update to accommodate new use_skia=1 default on Chromium-Mac
        https://bugs.webkit.org/show_bug.cgi?id=74118

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (get):
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        (ChromiumMacPortTest.test_versions):
        (ChromiumMacPortTest.test_graphics_type):

2011-12-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use new qmake option in Qt5 to prevent dependency issues with GNUmake

        The GNUmake + gcc_MD_depends options together produce .d files using GCC, but
        this failed when moving files in the source tree, as the .d file would contain
        stale dependencies on the old source file location. By keeping the object files
        (and hence the depdendency files) in a proper tree structure inside the objects
        directory we can prevent this failure.

        A side benefit is that we can also have objects with the same name inside the
        same project.

        Reviewed by Simon Hausmann.

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

2011-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Update unit test after r102412.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):

2011-12-09  Kentaro Hara  <haraken@chromium.org>

        REGRESSION(r102105): run-bindings-tests should output full diff results
        https://bugs.webkit.org/show_bug.cgi?id=74166

        Reviewed by Adam Barth.

        Since r102105, the output of run-bindings-tests is truncated to 500 characters.
        run-bindings-tests should output full diff results.

        * Scripts/webkitpy/bindings/main.py: Replaced e.message_with_output() with e.output.
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):

2011-12-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix compilation with newly separated Qt 5 QtQuick module
        https://bugs.webkit.org/show_bug.cgi?id=73990

        Reviewed by Kenneth Rohde Christiansen, tweaked by Csaba Osztrogonác.

        Fix QtQuick includes after move from QtDeclarative to QtQuick.

        * MiniBrowser/qt/BrowserWindow.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-12-08  Adam Klein  <adamk@chromium.org>

        [MutationObservers] V8LazyEventHandler breaks microtask delivery semantics
        https://bugs.webkit.org/show_bug.cgi?id=73492

        Reviewed by Adam Barth.

        Add eventSender.scheduleAsynchronousKeyDown, needed to cause a
        keypress event without any script on the stack.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::keyDown):
        (KeyDownTask::KeyDownTask):
        (KeyDownTask::runIfValid):
        (EventSender::scheduleAsynchronousKeyDown):
        * DumpRenderTree/chromium/EventSender.h:

2011-12-08  Hayato Ito  <hayato@chromium.org>

        [gdb] Pretty printer for a 8-bit version of WTF::StringImpl and LChar*.
        https://bugs.webkit.org/show_bug.cgi?id=73980

        Reviewed by Tony Chang.

        * gdb/webkit.py:
        (guess_string_length):
        (ustring_to_string):
        (lstring_to_string):
        (LCharStringPrinter):
        (LCharStringPrinter.to_string):
        (WTFStringImplPrinter.get_length):
        (WTFStringImplPrinter.to_string):
        (WTFStringImplPrinter.is_8bit):
        (WTFStringPrinter.stringimpl_ptr):
        (WTFStringPrinter.get_length):
        (WTFStringPrinter.to_string):
        (add_pretty_printers.lookup_function):

2011-12-08  Pierre Rossi  <pierre.rossi@gmail.com>

        Drop ENABLE_NO_LISTBOX_RENDERING, and make it a runtime decision.
        https://bugs.webkit.org/show_bug.cgi?id=73916

        Reviewed by Kent Tamura.

        * qmake/mkspecs/features/features.prf:

2011-12-08  Adrienne Walker  <enne@google.com>

        Unreviewed contributor additions to committers.py.

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

2011-12-08  David Reveman  <reveman@chromium.org>

        [Chromium] Add per-tile painting flag to DumpRenderTree and rename AcceleratedDrawing to AcceleratedPainting in chromium specific code.
        https://bugs.webkit.org/show_bug.cgi?id=74017

        Reviewed by James Robinson.
        
        Add support for command line flag enable-per-tile-painting in DumpRenderTree.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedPaintingEnabled):
        (TestShell::setPerTilePaintingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver._wrapper_options):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2011-12-08  Dirk Pranke  <dpranke@chromium.org>

        create a "SystemHost" object for webkitpy to slim down the Host object
        https://bugs.webkit.org/show_bug.cgi?id=72680

        Reviewed by Eric Siedel.

        This creates a SystemHost object that other objects that should
        only have dependencies on functionality in webkitpy.common.system
        can use; this will allow them to not require a full Host.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/system/systemhost.py: Added.
        * Scripts/webkitpy/common/system/systemhost_mock.py: Added.

2011-12-08  Chris Fleizach  <cfleizach@apple.com>

        AX: platform/mac/accessibility/search-with-frames.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=74093

        Reviewed by Darin Adler.

        Take care of the case when an incoming element is null.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2011-12-08  Alexander Færøy  <ahf@0x90.dk>

        [Qt] Visualize mock point ID's in the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=74098

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/qml/MockTouchPoint.qml:

2011-12-08  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: AccessibilityController should support listening to notifications on all elements.
        https://bugs.webkit.org/show_bug.cgi?id=72866

        Adds addNotificationListener and removeNotificationListener methods
        to AccessibilityController, to listen to notifications on any element
        rather than a specific element. Mac (DRT and WKTR) and Chromium (DRT)
        implementations are all contained in this change.

        On Mac, refactors AccessibilityNotificationHandler into its own
        source file that can be used by both AccessibilityController and
        AccessibilityUIElement. (Both DRT and WKTR.)

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityController.cpp:
        (addNotificationListenerCallback):
        (removeNotificationListenerCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::notificationReceived):
        (AccessibilityController::addNotificationListenerCallback):
        (AccessibilityController::removeNotificationListenerCallback):
        * DumpRenderTree/chromium/AccessibilityController.h:
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/mac/AccessibilityNotificationHandler.h: Added.
        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm: Added.
        (-[NSString createJSStringRef]):
        (-[AccessibilityNotificationHandler init]):
        (-[AccessibilityNotificationHandler setPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (-[AccessibilityNotificationHandler startObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::addNotificationListener):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (notificationListenerProc):
        (AccessibilityController::addNotificationListener):
        (AccessibilityController::removeNotificationListener):
        (AccessibilityController::winNotificationReceived):
        (AccessibilityController::winAddNotificationListener):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::addNotificationListener):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (WTR::AccessibilityController::logAccessibilityEvents):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm: Added.
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.h: Added.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm: Added.
        (-[NSString createJSStringRef]):
        (-[AccessibilityNotificationHandler init]):
        (-[AccessibilityNotificationHandler setPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (-[AccessibilityNotificationHandler startObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::addNotificationListener):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-12-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r102352.

        * qmake/mkspecs/features/webkit2.prf:

2011-12-08  Adam Roben  <aroben@apple.com>

        Make finding crash logs by PID work on Snow Leopard

        Crash Reporter on Snow Leopard doesn't set the "app_description" extended attribute that we
        were using to check the PID of the crashed process. (Crash Reporter on Lion does.) Now we
        read the first line of the crash log and pull the PID out of there.

        Fixes <http://webkit.org/b/74094> "webkit-patch crash-log <process> <PID>" doesn't work on
        Snow Leopard

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_darwin): Read the first line of the crash log to get the process
        name and PID for the log, rather than checking the Lion-only app_description extended
        attribute. We now also reject the log if the process name doesn't match what we expect.

        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (make_mock_crash_report_darwin): Added. Returns a mock crash report given a process name and
        PID.
        (CrashLogsTest.assertLinesEqual): Added. This is a compatibility shim around
        unittest.TestCase.assertMultiLineEqual, which didn't exist before Python 2.7.
        (CrashLogsTest.test_find_log_darwin): Made the mock crash reports more believable by using
        the new make_mock_crash_report_darwin function. Also added tests for files that can't be
        read, files that actually contain a crash log for some other process, and files that are
        misformatted.

        * Scripts/webkitpy/common/system/filesystem.py: Removed FileSystem.getxattr, which is now
        unused.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__): Removed xattr support, which is now unused.
        (MockFileSystem.open_text_file_for_reading): Changed to actually pass the file's data to
        ReadableTextFileObject. This function was completely broken before!
        (ReadableBinaryFileObject.__init__): Made the data parameter non-optional to try to prevent
        bugs like the above.
        (ReadableTextFileObject.__init__): Added. Wraps the data in a StringIO object so we can do
        things like readline() and seek().

        (ReadableTextFileObject.close):
        (ReadableTextFileObject.read):
        Added. We override the superclass implementation to account for using a StringIO object.

        (ReadableTextFileObject.readline):
        (ReadableTextFileObject.seek):
        Added. These just call through to StringIO.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_crash_log):
        (MainTest.test_web_process_crash_log):
        Changed to use make_mock_crash_report_darwin.

2011-12-06  Jon Lee  <jonlee@apple.com>

        [WK2] Add permissions support (73960)
        https://bugs.webkit.org/show_bug.cgi?id=73960
        <rdar://problem/10357008>

        Reviewed by Darin Adler.

        Add null function item to comply with added callback to WKPageUIClient.

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

2011-12-08  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Visualize mock points in the Qt MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=74074

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateVisualMockTouchPoints):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/icons/touchpoint.png: Added.
        * MiniBrowser/qt/qml/MockTouchPoint.qml: Added.

2011-12-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WebKitTestRunner crashes with debug builds
        https://bugs.webkit.org/show_bug.cgi?id=74090

        Reviewed by Tor Arne Vestbø.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformInitialize): Call QQuickWebView::platformInitialize
        to ensure WTF/JSC threading is initialized.

2011-12-08  Dirk Pranke  <dpranke@chromium.org>

        fix build-webkit --chromium after breakage in r102201
        https://bugs.webkit.org/show_bug.cgi?id=74031

        Reviewed by Tony Chang.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-08  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r102280.
        http://trac.webkit.org/changeset/102280
        https://bugs.webkit.org/show_bug.cgi?id=74031

        Chromium/Windows build is broken

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-08  Nayan Kumar K  <nayankk@motorola.com>

        Adding myself to committers list.

        Unreviewed.

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

2011-12-07  Michael Saboff  <msaboff@apple.com>

        StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing.
        https://bugs.webkit.org/show_bug.cgi?id=73995

        Reenabled failing tests that the code part of the patch fixes.

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2011-12-07  MORITA Hajime  <morrita@google.com>

        [filter-build-webkit] should not emit reset color when --no-color is given
        https://bugs.webkit.org/show_bug.cgi?id=73992

        Reviewed by Daniel Bates.

        Stop printing control sequences when --no-color is given.
        After this change, the filter runs nicely even on environments
        like Emacs compilation-mode which cannot understand the control sequence.

        * Scripts/filter-build-webkit:
        (printLine):

2011-12-07  Eric Seidel  <eric@webkit.org>

        Use free memory to determine if we have space for DRT instances instead of total memory
        https://bugs.webkit.org/show_bug.cgi?id=74021

        Reviewed by Adam Barth.

        This will hopefully make the Mac buildbots behave better.

        I also reduced the expected memory needed per DRT now that
        we're properly accounting for the system memory in our calculations.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.total_bytes_memory):
        (PlatformInfo._compute_free_bytes_from_vm_stat_output):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.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):

2011-12-07  Dirk Pranke  <dpranke@chromium.org>

        fix build-webkit --chromium after breakage in r102201
        https://bugs.webkit.org/show_bug.cgi?id=74031

        Reviewed by Tony Chang.

        r102201 introduced a change to the chromium build that splits
        the executables out of WebKit.gyp into other gyp files, and adds
        a new "All.gyp" that builds everything. However, I forgot to
        update the build script to use All.gyp.

        * Scripts/webkitdirs.pm:
        (buildChromium):

2011-12-07  Tom Zakrajsek  <tomz@codeaurora.org>

        Moved myself to the committers list.

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

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix debug shlib build with V8.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/qtwebkit.prf: Don't link jscore with
        v8 builds.

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] V8 build fixes.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/javascriptcore.prf: Don't add
        Source/Thirdparty to the include search path here.
        * qmake/mkspecs/features/webcore.prf: Instead it belongs here, because it's
        used when building WebCore as well as using it, because header files like
        GraphicsContext3D.h include stuff from ThirdParty.

2011-12-07  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix project file generation for the Android bot after r102201
        https://bugs.webkit.org/show_bug.cgi?id=73996

        The gyp refactoring in r102201 was didn't explicitly exclude
        the Android operating system in Tools/Tools.gyp, which broke
        as gcc_version is not defined for that configuration.

        Reviewed by Andreas Kling.

        * Tools.gyp:

2011-12-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed. Disabled failing tests on chromium.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2011-12-06  Dirk Pranke  <dpranke@chromium.org>

        binaries in webkit.gyp should be split into a new file to break circular dependencies on webkit_support
        https://bugs.webkit.org/show_bug.cgi?id=73382

        Reviewed by Tony Chang.

        XCode (and hence GYP) can't handle circular dependencies between
        files (and projects). Accordingly, although the binaries in
        WebKit.gyp depend on webkit_support and webkit_support depends
        on webkit, we don't mention the latter dependency in the file.
        To fix this, this change moves the binaries like DRT into a new
        GYP file, and modifies gyp_webkit to build from that file
        instead of WebKit.gyp.

        * Tools.gyp: Added.

2011-12-06  Adam Roben  <aroben@apple.com>

        Add a pid parameter to CrashLogs.find_newest_log

        When a PID is passed, only crash logs corresponding to a crashed process with that PID are
        considered.

        Fixes <http://webkit.org/b/73942> webkitpy provides no way to specify the PID of the crashed
        process whose crash log you want to find

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_newest_log): Added an optional pid parameter.
        (CrashLogs._find_newest_log_darwin): Added a pid parameter. When specified, we look at each
        candidate log's app_description extended attribute to see if that log corresponds to a
        crashed process with the specified PID.

        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_newest_log_darwin): Added a few more mock crash logs with various
        contents and PIDs. Added tests that show that the pid parameter to find_newest_log is
        respected. Also fixed an erroneous use of assertTrue instead of assertEqual.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.getxattr): Added. On Darwin, calls through to the xattr module. On other
        systems, raises a KeyError, mimicking the behavior on Darwin when the given attribute isn't
        present.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__): Added an optional xattrs parameter. Documented other parameters.
        (MockFileSystem.getxattr): Added. Just pulls the given attribute out of the xattrs
        dictionary.

        * Scripts/webkitpy/tool/commands/queries.py:
        (CrashLog): Added help text. Added an optional PID parameter.
        (CrashLog.execute): Pass the PID, if any, through to find_newest_log.

2011-12-06  Adam Roben  <aroben@apple.com>

        Wait for Crash Reporter to finish even when it lets the crashed process die quickly

        NRWT was only waiting for Crash Reporter in cases where it was keeping the crashed process
        alive beyond the normal timeout limit. In cases where the crashed process was able to die
        faster, NRWT would assume that Crash Reporter had finished even though it often was still
        running, which would lead to an incorrect crash log being picked up.

        Part of <http://webkit.org/b/71380> NRWT incorrectly associates crash logs with tests

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        (ServerProcess._reset):
        (ServerProcess.write):
        (ServerProcess._check_for_crash): Changed to use new set_crashed function instead of setting
        .crashed directly. Added wait_for_crash_reporter parameter, which we pass along to
        set_crashed.

        (ServerProcess._handle_timeout): Fixed a logic error that would cause .crashed and
        .timed_out both to be set to True in cases where Crash Reporter took a long time to run. Now
        we bail out of handling the failure as a timeout if we find out that the process in fact
        crashed. We tell _check_for_crash not to wait for Crash Reporter because we've already done
        so.
        (ServerProcess.set_crashed): Added. When the process crashes, we wait for Crash Reporter to
        finish running (unless directed otherwise) so we can be sure the crash log has been saved to
        disk.

        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        (TrivialMockPort.is_crash_reporter): Added.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitDriver._check_for_driver_crash): Changed to use set_crashed. (This also fixed a typo
        that would have partially broken crash detection on Windows, if NRWT worked on Windows.)

2011-12-06  Adam Barth  <abarth@webkit.org>

        NRWT fails on unreleased versions of Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=72748

        Reviewed by Dirk Pranke.

        Hopefully this patch will make NRWT work on future versions on Mac OS X.
        Most of the infrastructure was already in place, but there were some
        asserts that failed.  I've tested this patch by haxoring the version
        detection logic to simulate an unknown version.  We might need to
        iterate based on feedback from folks with a real future version.

        * Scripts/webkitpy/layout_tests/port/apple.py:
        (ApplePort.__init__):
            - mac-future is an allowed port_name that's used internally by
              webkitpy to represent future versions of Mac OS X.
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (test_versions):
            - Test that we don't throw exceptions when dealing with future
              versions of Mac OS X.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._expectations_from_skipped_files):
            - Demote this logging message to "debug".  It's expected that
              mac-future doesn't have a Skipped file.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.__init__):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.__init__):
            - Re-order some code in these constructors so that
              self._operating_system is available to the ApplePort constructor.

2011-12-06  Tommy Widenflycht  <tommyw@google.com>

        Added myself as a committer.

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

2011-12-06  Peter Beverloo  <peter@chromium.org>

        Added myself as a committer.

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

2011-12-06  Kentaro Hara  <haraken@chromium.org>

        [Refactoring] In webkitpy/bindings/main.py, replace subprocess.Popen() with Executive
        https://bugs.webkit.org/show_bug.cgi?id=73637

        Reviewed by Adam Barth.

        This patch replaces subprocess.Popen() with Executive, similar to other
        Python scripts in webkitpy/. I manually confirmed that run-bindings-tests
        works well for cases where no exception is raised, no exception is raised
        but diff is found, and ScriptError is raised.

        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/bindings/main.py: Replaces subprocess.Popen() with Executive.
        (BindingsTests.__init__):
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):

2011-12-05  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] MiniBrowser should default to touch behavior
        https://bugs.webkit.org/show_bug.cgi?id=73863

        Reviewed by Chang Shu.

        MiniBrowser currently defaults to the traditional desktop behaviour
        instead of touch behaviour which is prefered.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::setUseTraditionalDesktopBehavior):
        (WindowOptions::useTraditionalDesktopBehavior):

2011-12-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        webkit.py: Really fix the printing of StringImpl now that 8-bit strings are present.
        https://bugs.webkit.org/show_bug.cgi?id=73878

        Reviewed by Tony Chang.

        r98624 turned StringImpl::m_data into StringImpl::{m_data8,m_data16}.
        r98785 made webkit.py always use m_data16, which does not work when
        the string is an 8-bit string (such as KURL::string()).

        I was not able to directly call StringImpl::is8Bit() in the Python
        code, so I just reproduced the implementation there.

        * gdb/webkit.py:
        (WTFStringPrinter.is_8bit): Reproduced StringImpl::is8Bit().
        (WTFStringPrinter.to_string):
        (JSCUStringPrinter.is_8bit): Reproduced StringImpl::is8Bit().
        (JSCUStringPrinter.to_string):

2011-12-05  Eric Seidel  <eric@webkit.org>

        Up the "expected ram for each DRT instance" to 400MB instead of 300MB
        in hopes of making the Snow Leopard bot stop timing out.

        Unreviewed.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):

2011-12-05  Eric Seidel  <eric@webkit.org>

        NRWT creates too many workers on RAM-limited machines
        https://bugs.webkit.org/show_bug.cgi?id=73847

        Reviewed by Dirk Pranke.

        Make NRWT restrict its number of workers when there isn't enough
        RAM to support them.
        Also re-enable parallel testing on the Mac bots which were
        failing due to not enough ram.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):
        * Scripts/webkitpy/common/host.py:
        (Host.__init__):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.cpu_count):
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo.display_name):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.display_name):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.default_child_processes):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_default_child_processes):
        (PortTest.test_pretty_patch_os_error):

2011-12-05  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Last mouse event could be lost if a JS call to eventSender.leapForward is made
        https://bugs.webkit.org/show_bug.cgi?id=73366

        Reviewed by Kenneth Rohde Christiansen.

        Empty the entire event queue when requested besides using
        sendEvent instead of postEvent to make sure all events were
        delivered.

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

2011-12-05  Adam Barth  <abarth@webkit.org>

        [Chromium] Remove no-longer-used forwarding headers in the WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=73845

        Reviewed by Darin Fisher.

        Update includes to point to the new header locations.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/GamepadController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/PlainTextController.cpp:
        * DumpRenderTree/chromium/Task.cpp:
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestWebPlugin.cpp:
        * DumpRenderTree/chromium/TestWebPlugin.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:

2011-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Add Aharon Lanin to the contributors list.

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

2011-12-05  Jarred Nicholls  <jarred@sencha.com>

        Moving myself from contributors to committers.

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

2011-12-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Add myself as a committer.

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

2011-12-05  Michael Brüning  <michael.bruning@nokia.com>

        [Qt] Rename QQuickWebView::canStop property to just loading 
        https://bugs.webkit.org/show_bug.cgi?id=73813

        Reviewed by Kenneth Rohde Christiansen.

        Replaced references to WebView.canStop with WebView.loading.

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-12-05  Dirk Pranke  <dpranke@chromium.org>

        run-webkit-tests: limit --child-processes properly on apple mac
        https://bugs.webkit.org/show_bug.cgi?id=73856

        Reviewed by Adam Roben.

        Fix typos in r102013 so that we correctly pass --child-processes=1 on
        the apple mac bots temporarily.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Temporarily set --child-process=1 on Mac because 20+ tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=73840

        Reviewed by Simon Fraser.

        Temporarily go back to single process mode on Mac.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-05  Adam Roben  <aroben@apple.com>

        Redeploy apple-macpro-7 and apple-xserve-1

        These slaves have been sitting idle since we removed our Leopard builders in r97496.

        Fixes <http://webkit.org/b/73829> REGRESSION (r97496): apple-macpro-7 and apple-xserve-1 are
        sitting idle

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Re-added apple-macpro-7 and
        apple-xserve-1. The former is now doing "SnowLeopard Intel Debug (WebKit2 Tests)", which
        allows apple-xserve-9 to be a build-only slave, and the latter is doing "Lion Intel Debug
        (WebKit2 Tests)".

2011-12-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Make the UI of the MiniBrowser slightly nicer

        Rubberstamped by Simon Hausmann.

        - Add proper padding
        - Show feedback when pressing on the toolbar icons
        - Make the text entry better looking

        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-12-05  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        NRWT should handle duplicated expectations
        https://bugs.webkit.org/show_bug.cgi?id=69750

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        (TestExpectations._report_errors):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (test_add_skipped_tests):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.test_expectations):
        (WebKitPort.skipped_tests):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_test_expectations):

2011-12-04  Eric Seidel  <eric@webkit.org>

        After success with Mac, Win and Gtk, turning on parallel testing
        by default for all platforms (except Qt).

        We'll add more platforms to the blacklist if we see problems.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-04  Sam Weinig  <sam@webkit.org>

        Add tests for RetainPtr::adoptNS/adoptCF
        https://bugs.webkit.org/show_bug.cgi?id=73470

        Reviewed by Adam Roben and Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp: Added.
        (TestWebKitAPI::TEST):
        Test that adopting using adoptCF creates a RetainPtr with a
        value whose retain count is 1.

        * TestWebKitAPI/Tests/WTF/ns: Added.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added.
        (TestWebKitAPI::TEST):
        Test that adopting using adoptNS creates a RetainPtr with a
        value whose retain count is 1.

2011-12-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Include cairo, pixman and gnome-icon-theme in the jhbuild modules
        https://bugs.webkit.org/show_bug.cgi?id=73748

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild.modules: Add some new modules the jhbuild moduleset.

2011-12-04  Philippe Normand  <pnormand@igalia.com>

        Another GTK build fix after r101922.

        Rubber-stamped by Martin Robinson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource): Plug possible String ref leak.

2011-12-04  Xan Lopez  <xlopez@igalia.com>

        Fix compiler warning in LayoutTestController

        Reviewed by Philippe Normand.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): fix warning.

2011-12-04  Alexandre Mazari  <scaroo@gmail.com>

        Add missing methods used by fast/notifications tests to LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=63616

        Reviewed by Martin Robinson.

        Add missing simulateDesktopNotificationClick method used by
        fast/notifications. Provide a default implementation for
        areDesktopNotificationPermissionRequestsIgnored and
        ignoreDesktopNotificationPermissionRequests.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): call into the port implementation.
        (simulateDesktopNotificationClickCallback): ditto.
        (ignoreDesktopNotificationPermissionRequestsCallback): default implementation.
        (LayoutTestController::staticFunctions): declare new methods.
        (LayoutTestController::ignoreDesktopNotificationPermissionRequests): default implementation.
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::areDesktopNotificationPermissionRequestsIgnored):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): dummy implementation.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::simulateDesktopNotificationClick): ditto.

2011-12-03  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Don't log document events in DRT
        https://bugs.webkit.org/show_bug.cgi?id=73746

        Reviewed by Martin Robinson.

        Stop connecting globally to document-related events.

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        (connectAccessibilityCallbacks): Removed connections.
        (disconnectAccessibilityCallbacks): Removed disconnections.

2011-12-03  Dan Bernstein  <mitz@apple.com>

        Added a test for <rdar://problem/10523721> Crash at WebCore::SubresourceLoader::releaseResources

        Reviewed by Darin Adler.

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

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        Another GTK build fix after r101922.

        Rubber-stamped by Martin James Robinson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource): return value needs to
        be a URI.

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Small fix for my previous patch. Do not try to delete a member
        of a dictionary that does not exist.

        Reviewed by Gustavo Noronha Silva.

        * gtk/run-with-jhbuild:
        (install_and_run_jhbuild):

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Fix jhbuild installation for people who have unusual MAKE environment
        variables such as 'make -j4' as the jhbuild build does not handle it.

        Reviewed by Gustavo Noronha Silva.

        * gtk/run-with-jhbuild:
        (install_and_run_jhbuild): Remove any MAKE environment variable before building jhbuild.

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Fix the update-webkitgtk-libs script to properly trigger a jhbuild installation
        when run for the first time.

        Reviewed by Gustavo Noronha Silva.

        * Scripts/update-webkitgtk-libs: Fix first run.

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r101922.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource): Added sentinel in
        g_build_filename call.

2011-12-03  Philippe Normand  <pnormand@igalia.com>

        GTK API tests build fix. Run the tests inside jhbuild.

        Rubber-stamped by Gustavo Noronha Silva.

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

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        Small build fix. Properly specify the path to the locally installed jhbuild.

        * Scripts/update-webkitgtk-libs: Fix jhbuild path.

2011-12-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67256

        Reviewed by Philippe Normand.

        Implement LayoutTestController::pathToLocalResource for GTK+. Instead of passing 
        WEBKIT_TEST_FONTS to the GTK+ test harnesses, pass a more generic WEBKIT_TOP_LEVEL,
        which points to the more generic top-level path of the WebKit checkout. This code is
        duplicated between WK1 and WK2 harnesses because we do not currently have a way to
        share code here.

        If WEBKIT_TOP_LEVEL is not provided, we search for the top level based on the binary
        location. This will cause the fallback to fail if you build into a non-typical location
        or even fake it with a symlink. In this case it's important to use the environment variable.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getTopLevelPath): Added.
        (initializeFonts): Use the new helper to get the font path.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Expose the new helper.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pathToLocalResource):Use the new helper to normalize
        test paths.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server):Pass the top-level path of the
        checkout instead of passing the font path.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getTopLevelPath): Added this helper.
        (WTR::inititializeFontConfigSetting): Use the helper to find the font path.

2011-12-02  David Levin  <levin@chromium.org>

        Rename WTF class from TemporarilyChange to TemporaryChange.
        https://bugs.webkit.org/show_bug.cgi?id=73479

        Reviewed by Eric Seidel.

        * DumpRenderTree/ForwardingHeaders/wtf/TemporarilyChange.h: Removed.
        * DumpRenderTree/ForwardingHeaders/wtf/TemporaryChange.h: Added.
        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/TemporaryChange.cpp: Renamed from Tools/TestWebKitAPI/Tests/WTF/TemporarilyChange.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-12-02  Tony Chang  <tony@chromium.org>

        [NRWT] reftest asserts intermittently on the Qt-WK2 bot
        https://bugs.webkit.org/show_bug.cgi?id=73453

        Reviewed by Ryosuke Niwa.

        We used to assert if a ref test didn't generate pixel results. Instead, just claim it is a failing test.
        The verbose output will include the failure reason.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Don't assert, return FailureReftestNoImagesGenerated instead.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py: Remove stray letter t.
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Add a new failure type: FailureReftestNoImagesGenerated
        (determine_result_type):
        (FailureReftestNoImagesGenerated.__init__):
        (FailureReftestNoImagesGenerated):
        (FailureReftestNoImagesGenerated.message):
        * Scripts/webkitpy/layout_tests/port/test.py: Add a test case for integration tests.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Update test counts.
        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_unexpected_failures):
        (EndToEndTest.test_end_to_end):

2011-12-02  Ryosuke Niwa  <rniwa@webkit.org>

        ChangeLog should be able to parse annotated changelogs
        https://bugs.webkit.org/show_bug.cgi?id=72703

        Reviewed by Eric Seidel.

        Make parse_entries_from_file aware of svn blame annotation such as "100000 ossy@webkit.org ",
        and extract the revision number for each entry.

        Also add a support to extract "svn blame" result from svn/git checkout to scm classes.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-12-02  Eric Seidel  <eric@webkit.org>

        Enable parallel testing for Win and Gtk bots
        after confirming with Lucas and Martin the bots should be OK.

        Unreviewed. (I ran the idea by Lucas and Martin.)

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-02  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ build.

        * gtk/jhbuild.modules: Properly specify the glib-networking
        dependency for soup.

2011-12-02  Martin Robinson  <mrobinson@igalia.com>

        Fix a syntax error in the committers.py file.

        * Scripts/webkitpy/common/config/committers.py: Add a missing comma.

2011-12-02  Ryosuke Niwa  <rniwa@webkit.org>

        Add Alan Stearns and Peter Linss to the contributors list.

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

2011-12-02  Kent Tamura  <tkent@chromium.org>

        [Chromium] Fix compilation warnings for ASSERT()
        https://bugs.webkit.org/show_bug.cgi?id=73623

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/ImageDiff.cpp:
         - Fix fprintf format: %s -> %d for __LINE__
         - Do nothing for ASSERT() if NDEBUG.

2011-12-02  Eric Seidel  <eric@webkit.org>

        Enable parallel testing for all Mac bots.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-02  Eric Seidel  <eric@webkit.org>

        Enable parallel testing for run-webkit-tests on Mac Lion.
        I plan to move all the machines to parallel testing shortly
        but we're starting with Lion.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (platformIsReadyForParallelTesting):

2011-12-02  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        Added helper method to identify whether the page has custom page size style.
        https://bugs.webkit.org/show_bug.cgi?id=73585

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::hasCustomPageSizeStyle):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-12-01  Ryosuke Niwa  <rniwa@webkit.org>

        [NRWT] reftest should support having multiple references per test
        https://bugs.webkit.org/show_bug.cgi?id=73613

        Reviewed by Dirk Pranke.

        Add a support for having multiple reference files for a single test.

        Because a reftest succeeds when it matches at least one of expected matches and fails when it matches
        at least one of expected mismatches, we compare expected mismatches first in order to minimize
        the number of reference files to open on DRT.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (interpret_test_failures): Remove checks no longer applicable.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ResultSummaryTest.test_interpret_test_failures): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Remove a bunch of code and just call port.reference_files.
        (SingleTestRunner._driver_input):
        (SingleTestRunner.run):
        (SingleTestRunner._run_reftest): Compare the output of the test to each reference file.
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__): Remove ref_file and is_mismatch_reftest because they are no longer used.
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.reference_files): Renamed from _reference_file_for. Returns a list of expectation, filename pairs.
        (_parse_reftest_list): Now supports parsing multiple entries for a single test.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_parse_reftest_list):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_unexpected_failures):
        (MainTest.test_reftest_skipped_if_unlisted): Renamed from test_missing_and_unexpected_results.
        (EndToEndTest.test_end_to_end):
        (EndToEndTest.test_reftest_with_two_notrefs): Added.

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Build libsoup without gnome dependencies (like keyring).

        * gtk/jhbuild.modules:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Also build gcrypt and p11-kit, and make them dependencies of
        gnutls.

        * gtk/jhbuild.modules:

2011-12-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for Windows build.

        * waf/build/wxpresets.py:

2011-12-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch post, post-commits, upload should warn when posting to a closed bug, and offer to reopen it
        https://bugs.webkit.org/show_bug.cgi?id=32006

        I decided not to make it warn, and just have it re-open the bug.
        That's not that different from today's behavior which will
        just silently attach the patch.

        This patch makes behavior between upload and land-safely consistent
        (previously one would assign patches and the other would not)
        as well as adds the ability for both to ensure that the bug is open.

        To test this I had to add a few more methods to MockBugzilla which
        (positively) affected a few other test results.

        I also made AbstractStep keep a cached copy of the Bug object
        and used the cached copy where appropriate (including for 'bug_title').
        This should reduce the number of bug fetches we perform.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/ensurebugisopenandassigned.py: Added.
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Also pass --no-interact to jhbuild when updating dependencies.

        * Scripts/update-webkitgtk-libs:

2011-12-02  Alice Boxhall  <aboxhall@chromium.org>

        Make _build_path check more thoroughly that build paths exist.
        https://bugs.webkit.org/show_bug.cgi?id=73601

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        (ChromiumMacPort._build_path):

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Add libffi to the jhbuild modules list as a glib dependency.

        Rubber-stamped by Martin Robinson.

        * gtk/jhbuild.modules:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        Build fix. Use internal pcre on glib, make gnutls a dependency of
        glib-networking, unset AR_FLAGS for jhbuild builds, and run jhbuild
        in non-interactive mode.

        * Scripts/update-webkitgtk-libs:
        * gtk/jhbuild.modules:
        * gtk/run-with-jhbuild:

2011-12-02  Adam Roben  <aroben@apple.com>

        Fix for Python 2.6

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunUnitTests.countFailures): Removed the flags parameter to re.split, which was only added
        in Python 2.7, and used whitespace instead of start-of-string/end-of-string markers when
        searching for "Tests that timed out:" etc. This makes our check less strict, but it
        shouldn't matter given the kinds of content we parse.

2011-12-02  Adam Roben  <aroben@apple.com>

        Fix names of failed/timed out tests in run-api-tests output

        Fixes <http://webkit.org/b/73663> run-api-tests prints suite names twice for failed or timed
        out tests

        We were ending up with the suite name doubled (e.g., "WebKit2.WebKit2.MouseMoveAfterCrash").

        Reviewed by Simon Fraser.

        * Scripts/run-api-tests:
        (runTest): Don't prepend the suite name to $test. It's already been prepended at the start
        of this function.

2011-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should respect build type
        https://bugs.webkit.org/show_bug.cgi?id=73296

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Pass the --debug to the generate-gtkdoc script.
        * gtk/common.py: If --build is passed give preference to the Debug build directory.

2011-12-02  Tony Chang  <tony@chromium.org>

        [nrwt] fix wdiff output
        https://bugs.webkit.org/show_bug.cgi?id=73604

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.wdiff_text):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_wdiff_text):

2011-12-02  Adam Roben  <aroben@apple.com>

        Teach build.webkit.org to display how many unit tests failed or timed out

        Fixes <http://webkit.org/b/73659> It's hard to tell how many unit tests are failing on
        build.webkit.org

        We now display something like "5 unit tests failed or timed out". Eventually we might want
        to split out how many failure vs. timeouts there were.

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestWithFailureCount): Moved this class up to the top of the file so it is before any other
        classes that may want to subclass it.
        (RunUnitTests): Changed to inherit from TestWithFailureCount.
        (RunUnitTests.countFailures): Added. Counts the number of tests following the "Tests that
        timed out:" and "Tests that failed:" lines, if present.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (StubStdio):
        (StubRemoteCommand):
        Added these two stub classes to mimic buildbot's RemoteCommand and log classes.

        (RunUnitTestsTest.assertFailures): Helper method to check that we interpreted the results of
        the test run correctly.

        (RunUnitTestsTest.test_no_failures_or_timeouts):
        (RunUnitTestsTest.test_one_failure):
        (RunUnitTestsTest.test_multiple_failures):
        (RunUnitTestsTest.test_one_timeout):
        (RunUnitTestsTest.test_multiple_timeouts):
        (RunUnitTestsTest.test_multiple_failures_and_timeouts):
        Test various cases.

2011-12-02  Adam Roben  <aroben@apple.com>

        Teach prepare-ChangeLog to treat master.cfg as a Python file

        Fixes <http://webkit.org/b/73658> prepare-ChangeLog doesn't show modified classes/functions
        in buildbot's master.cfg

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Use get_function_line_ranges_for_python if the filename is
        master.cfg.

2011-12-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Create a wrapper script that knows how to install jhbuild and run commands with it
        https://bugs.webkit.org/show_bug.cgi?id=73669

        Reviewed by Gustavo Noronha Silva.

        Add a wrapper script that knows how to install jhbuild and also to wrap commands
        in the jhbuild shell.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProject): Use the new wrapper script.
        (mustReRunAutogen): Ditto.
        (buildAutotoolsProject): Ditto.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.cmd_line): Ditto.
        * gtk/run-with-jhbuild: Added.

2011-12-01  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style how to check the syntax of JSON files

        Fixes <http://webkit.org/b/73590> check-webkit-style doesn't flag JSON syntax errors

        I previously landed this patch as r101711, but the new tests failed on Snow Leopard. This
        patch is identical to that one except for two change: assertIn(a, b) (which is new to Python
        2.7) has been replaced with assertTrue(a in b), and the test_missing_closing_brace test has
        been removed, since its output differs by platform.

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Added JSONChecker's categories to the set of all categories.
        (FileType): Added a JSON type. Incremented other types.
        (CheckerDispatcher._file_type): Use the JSON file type for .json files.
        (CheckerDispatcher._create_checker): Use a JSONChecker for JSON files.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_json): Added this helper method.
        (CheckerDispatcherDispatchTest.test_json_paths): Added. Based on test_python_paths.

        * Scripts/webkitpy/style/checkers/jsonchecker.py: Added. (I didn't name this just "json",
        which would have matched our other checkers, because I couldn't figure out how to call
        "json.loads" without hitting namespace conflicts.)
        (JSONChecker.__init__): Turn of line filtering so that we always check the whole file, not
        just the modified lines from a patch.
        (JSONChecker.check): Try to parse the lines as JSON. Mark an error if there was an
        exception.
        (JSONChecker.line_number_from_json_exception): Parse the json modules exception message to
        try to extract a line number.

        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Added.
        (MockErrorHandler.__init__):
        (MockErrorHandler.turn_off_line_filtering):
        (MockErrorHandler.__call__):
        Helper class. Copied from xml_unittest.py.

        (JSONCheckerTest.test_line_number_from_json_exception): Test the
        line_number_from_json_exception helper method.

        (JSONCheckerTest.assert_no_error):
        (JSONCheckerTest.assert_error):
        Helper methods to assert that we did or didn't get an error.

        (JSONCheckerTest.mock_handle_style_error): Helper method.

        (JSONCheckerTest.test_conflict_marker):
        (JSONCheckerTest.test_single_quote):
        (JSONCheckerTest.test_init):
        (JSONCheckerTest.test_no_error):
        Test various cases.

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Add glib, glib-networking, gnutls and libsoup to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=73664

        Reviewed by Martin Robinson.

        This patch adds our HTTP library and its main dependencies; this
        should not affect layout or rendering.

        * gtk/jhbuild.modules:

2011-12-02  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Also run DumpRenderTree under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=73646

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkDriver.cmd_line):

2011-12-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r101751 and r101775.
        http://trac.webkit.org/changeset/101751
        http://trac.webkit.org/changeset/101775
        https://bugs.webkit.org/show_bug.cgi?id=73191

        breaks Windows build

        * DumpRenderTree/chromium/config.h:
        * DumpRenderTree/config.h:
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2011-12-02  Kentaro Hara  <haraken@chromium.org>

        Move run-bindings-tests implementation to webkitpy/bindings/main.py
        https://bugs.webkit.org/show_bug.cgi?id=73619

        Reviewed by Adam Barth.

        As run-bindings-tests has been growing, this patch just moves its implementation
        to webkitpy/bindings/main.py to integrate with the rest of webkitpy.

        No change in behavior.

        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/bindings/__init__.py: Added.
        * Scripts/webkitpy/bindings/main.py: Added.
        (BindingsTests.__init__):
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):
        (BindingsTests.run_tests):

2011-12-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Tools/Scripts: eliminate find_test_files from Port class.
        https://bugs.webkit.org/show_bug.cgi?id=73553

        rebaseline.py and chromium_gpu.py use Port.find_test_files() the same way as it is used in Port.tests()
        I'd like to replace all calls to find_test_files with tests and eliminate find_tests_files.
        Also I'll move _is_test_file() and related functions close to Port.tests().

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.tests):
        (Port.is_reference_html_file):
        (Port._has_supported_extension):
        (Port._is_test_file):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest.test_is_test_file):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_default_tests_paths):
        (ChromiumGpuLinuxPort.tests):
        (ChromiumGpuCgMacPort.tests):
        (ChromiumGpuMacPort.tests):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        (ChromiumGpuTest.test_default_tests_paths.test_paths):
        (ChromiumGpuTest.test_default_tests_paths):
        (ChromiumGpuTest.test_test_files.test_paths):
        (ChromiumGpuTest):
        (ChromiumGpuTest.test_test_files):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.run_test):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (OptimizeBaselines._optimize_baseline):
        (OptimizeBaselines.execute):
        (AnalyzeBaselines._analyze_baseline):
        (AnalyzeBaselines.execute):

2011-12-01  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        Removed macro definitions which is now provided by Platform.h

        * DumpRenderTree/chromium/config.h:
        * DumpRenderTree/config.h:
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2011-12-01  Hayato Ito  <hayato@chromium.org>

        Explicitly pass tolerance=0 to port.diff_image in case of RefTestMismatch failure.
        https://bugs.webkit.org/show_bug.cgi?id=73406

        Reviewed by Ryosuke Niwa.

        WebKitPort's image_diff uses tolerance='0.1' in default.
        When reftests fail, we should use tolerace=0 when diff-ing images.

        Since ImageDiff on chromium port doesn't use tolerance value as of now,
        this change doesn't affect chromium port's behavior.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * 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/test.py:
        (TestPort.diff_image):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort.diff_image):
        (WebKitPort._start_image_diff_process):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_tolerance.ImageDiffTestPort.diff_image):

2011-12-01  Adam Klein  <adamk@chromium.org>

        Add Chromium ToT GTest build bots (and group selection support) to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=73599

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        ():
        (htmlForTestTypeSwitcher):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testHtmlForTestTypeSwitcherGroup):

2011-12-01  Ryosuke Niwa  <rniwa@webkit.org>

        Parse reftest.list and extract types of ref tests
        https://bugs.webkit.org/show_bug.cgi?id=66837

        Reviewed by Dirk Pranke.

        Add support for reftest.list to base port.

        * Scripts/webkitpy/common/find_files.py:
        (find):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.__init__): Initialize self._reftest_list. It's a dictionary mapping from a test directory
        to a dictionary of {test path: ("==" or "!=", reference file path)}
        (Port._get_reftest_list): Added; calls test_file.parse_reftest_list to fill self._reftest_list.
        (Port._reference_file_for): Added; obtains the reference file name given a test name.
        (Port.is_reftest): Added; Calls _reference_file_for.
        (Port.reftest_expected_filename): Calls _reference_file_for.
        (Port.reftest_expected_mismatch_filename): Ditto.
        (Port.find_test_files):
        (is_reference_html_file): Treat any file that starts with ref- or notref- or ends with
        -expected, -expected-mismach, -ref, or -notref as a reference file.
        (_is_test_file):
        (_parse_reftest_list): Added.
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_is_test_file):
        (PortTest.test_parse_reftest_list):
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        (DryrunDriver.run_test):
        * Scripts/webkitpy/layout_tests/port/test.py:
        (unit_test_filesystem.add_test_file):
        (unit_test_filesystem.add_file):
        (unit_test_filesystem):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (get_tests_run.RecordingTestDriver.run_test):
        (MainTest.test_unexpected_failures):
        (MainTest.test_missing_and_unexpected_results):
        (EndToEndTest.test_end_to_end):
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        (Rebaseliner._compile_rebaselining_tests):

2011-12-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101711.
        http://trac.webkit.org/changeset/101711
        https://bugs.webkit.org/show_bug.cgi?id=73605

        Broke 3 webkitpy tests (Requested by rniwa on #webkit).

        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_cpp):
        (CheckerDispatcherDispatchTest.test_cpp_paths):
        * Scripts/webkitpy/style/checkers/jsonchecker.py: Removed.
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Removed.

2011-12-01  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Add myself to GStreamer and WebKit2GTK+ watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2011-12-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Read fonts from the jhbuild root
        https://bugs.webkit.org/show_bug.cgi?id=73487

        Reviewed by Gustavo Noronha Silva.

        Read fonts from the jhbuild root instead of from the system. This will ensure
        that all testers use the same fonts instead of leaving this up to luck.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Load fonts from jhbuild root.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        (GtkPort.setup_environ_for_server): Pass an environment variable containing
        the path to the jhbuild root.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting): Load fonts from the jhbuild root.

2011-12-01  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style how to check the syntax of JSON files

        Fixes <http://webkit.org/b/73590> check-webkit-style doesn't flag JSON syntax errors

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Added JSONChecker's categories to the set of all categories.
        (FileType): Added a JSON type. Incremented other types.
        (CheckerDispatcher._file_type): Use the JSON file type for .json files.
        (CheckerDispatcher._create_checker): Use a JSONChecker for JSON files.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_json): Added this helper method.
        (CheckerDispatcherDispatchTest.test_json_paths): Added. Based on test_python_paths.

        * Scripts/webkitpy/style/checkers/jsonchecker.py: Added. (I didn't name this just "json",
        which would have matched our other checkers, because I couldn't figure out how to call
        "json.loads" without hitting namespace conflicts.)
        (JSONChecker.__init__): Turn of line filtering so that we always check the whole file, not
        just the modified lines from a patch.
        (JSONChecker.check): Try to parse the lines as JSON. Mark an error if there was an
        exception.
        (JSONChecker.line_number_from_json_exception): Parse the json modules exception message to
        try to extract a line number.

        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Added.
        (MockErrorHandler.__init__):
        (MockErrorHandler.turn_off_line_filtering):
        (MockErrorHandler.__call__):
        Helper class. Copied from xml_unittest.py.

        (JSONCheckerTest.test_line_number_from_json_exception): Test the
        line_number_from_json_exception helper method.

        (JSONCheckerTest.assert_no_error):
        (JSONCheckerTest.assert_error):
        Helper methods to assert that we did or didn't get an error.

        (JSONCheckerTest.mock_handle_style_error): Helper method.

        (JSONCheckerTest.test_conflict_marker):
        (JSONCheckerTest.test_single_quote):
        (JSONCheckerTest.test_init):
        (JSONCheckerTest.test_missing_closing_brace):
        (JSONCheckerTest.test_no_error):
        Test various cases.

2011-12-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add a helper function to find the current executable's path
        https://bugs.webkit.org/show_bug.cgi?id=73473

        Reviewed by Gustavo Noronha Silva.

        Update MiniBrowser to not pass the binary directory as an environment variable.
        This means that you can move the binaries around without it breaking.

        * MiniBrowser/gtk/main.c:
        (main): No longer set the environment variable.
        * WebKitTestRunner/GNUmakefile.am: No longer add the directory path define.
        * WebKitTestRunner/gtk/main.cpp:  Ditto.

2011-12-01  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Fix bad file =(.

        * gtk/jhbuild.modules:
        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProject):

2011-12-01  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Add freetype to our jhbuild setup
        https://bugs.webkit.org/show_bug.cgi?id=73488

        Reviewed by Martin Robinson.

        This adds the first library to our jhbuild setup, and makes sure
        build-webkit calls autogen.sh and make with jhbuild, so that the
        environment is properly set.

        * Scripts/webkitdirs.pm:
        (saveSum):
        (hashFile):
        (runAutogenForAutotoolsProject): save md5sum of jhbuild-related files, and
        call autogen under jhbuild run;
        (mustRunAutogen): generalized the arguments change checking to also force
        running autogen when jhbuild files change;
        (buildAutotoolsProject): run make under jhbuild;
        * gtk/jhbuild.modules: add freetype.

2011-12-01  Dominic Mazzoni  <dmazzoni@google.com>

        Fix WebKitTestRunner compile warnings with XCode 3.2
        https://bugs.webkit.org/show_bug.cgi?id=73378

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::verticalScrollbar):

2011-12-01  Adam Roben  <aroben@apple.com>

        Allow committers to use their Trac credentials to force builds on the buildbots

        Fixes <http://webkit.org/b/73353>

        A new class, CommitterAuth, handles authentication of WebKit committers. CommitterAuth uses
        three files to do its job: a config file that contains a list of WebKit committer usernames,
        an htdigest file that contains Trac credentials, and JSON file that gives the paths for
        those two files.

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth.py: Added.
        (Error): Basic wrapper around Exception that we use for cases where we couldn't even check
        whether credentials were valid or not.
        (CommitterAuth.__init__): Just store the path to auth.json.
        (CommitterAuth.auth_json): Load, parse, and return auth.json.
        (CommitterAuth.auth_json_filename): Return the path to auth.json.
        (CommitterAuth.authenticate): Return true if the user is a WebKit committer and their
        credentials are valid Trac credentials. Return false otherwise or if an error occurred while
        checking those conditions.
        (CommitterAuth.is_webkit_committer): Return true if the user is a WebKit committer. Return
        false otherwise or if an exception was thrown.
        (CommitterAuth.is_webkit_trac_user): Return true if the username/password are present in the
        Trac credentials htdigest file. Return false otherwise or if an exception was thrown.

        (CommitterAuth.open_auth_json_file):
        (CommitterAuth.open_trac_credentials_file):
        (CommitterAuth.open_webkit_committers_file):
        Open the specified file. These are mostly useful for testing purposes.

        (CommitterAuth.trac_credentials_filename):
        (CommitterAuth.webkit_committers_filename):
        Return the path to the specified file by retrieving it from auth.json.

        (CommitterAuth.webkit_committers): Load and parse the committers file and extract the list
        of WebKit committers from it.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth_unittest.py: Added.
        (CMStringIO.__enter__):
        (CMStringIO.__exit__):
        Helper class that makes it possible to use StringIO with the "with" statement.

        (open_override): Helper context manager for overriding the global "open" function
        temporarily.

        (CommitterAuthTest.setUp): Set up a somewhat-mocked CommitterAuth that is used by most
        tests.
        (CommitterAuthTest.fake_open_function): Returns a function that can be used in place of
        "open" to test that the expected path was opened.
        (CommitterAuthTest.test_authentication_success): Test that committers can authenticate
        successfully.
        (CommitterAuthTest.test_committer_without_trac_credentials_fails): Test that committers who
        somehow have no Trac account can't authenticate.

        (CommitterAuthTest.test_fail_to_open_auth_json_file):
        (CommitterAuthTest.test_fail_to_open_trac_credentials_file):
        (CommitterAuthTest.test_fail_to_open_webkit_committers_file):
        Test what happens when we can't open the three files we depend upon.

        (CommitterAuthTest.test_implements_IAuth): Test that we fulfill buildbot's expectations for
        an authentication class.

        (CommitterAuthTest.test_invalid_auth_json_file):
        (CommitterAuthTest.test_invalid_committers_file):
        (CommitterAuthTest.test_invalid_trac_credentials_file):
        (CommitterAuthTest.test_missing_auth_json_keys):
        Test what happens when the three files we depend upon are invalid in some way.

        (CommitterAuthTest.test_open_auth_json_file):
        (CommitterAuthTest.test_open_trac_credentials_file):
        (CommitterAuthTest.test_open_webkit_committers_file):
        Test that we open the expected paths.

        (CommitterAuthTest.test_trac_credentials_filename):
        (CommitterAuthTest.test_webkit_committers_filename):
        Test that we extract filenames out of auth.json correctly.

        (CommitterAuthTest.test_non_committer_fails):
        (CommitterAuthTest.test_unknown_user_fails):
        (CommitterAuthTest.test_username_is_prefix_of_valid_user):
        (CommitterAuthTest.test_wrong_password_fails):
        Test various failed authentication attempts.

        (CommitterAuthTest.test_webkit_committers): Test that we can parse the list of WebKit
        committers out of the committers file correctly.

        (CommitterAuthTest.fake_auth_json_file):
        (CommitterAuthTest.invalid_auth_json_file):
        (CommitterAuthTest.fake_committers_file):
        (CommitterAuthTest.invalid_committers_file):
        (CommitterAuthTest.fake_htdigest_file):
        (CommitterAuthTest.invalid_htdigest_file):
        Return various fake files for testing.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Specify an instance of CommitterAuth
        to be used for authentication in the web interface, and specify that only authenticated
        users may force builds.

2011-12-01  Adam Roben  <aroben@apple.com>

        Add an HTDigestParser class to webkitpy

        Fixes <http://webkit.org/b/73575> webkitpy doesn't provide a way to parse htdigest files

        This class can be used to parse Apache's htdigest files and check whether a given
        username/realm/password tuple is present in the file. Eventually this will be used for
        authenticating users on build.webkit.org (<http://webkit.org/b/73353>).

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/net/htdigestparser.py: Added.
        (HTDigestParser.__init__): Stores the parsed representation of the file.
        (HTDigestParser.authenticate): Hashes the username/realm/password tuple to generate a hashed
        password and returns whether the resulting tuple is present in the file.
        (HTDigestParser.entries): Just returns the parsed representation of the file.
        (HTDigestParser.parse_file): Splits each line on colons and checks that each line has the
        expected syntax ('username:realm:hashed_password'). If any line is invalid, we treat the
        whole file as invalid and all authentication attempts will fail.

        * Scripts/webkitpy/common/net/htdigestparser_unittest.py: Added.
        (HTDigestParserTest.assertEntriesEqual): Helper method to assert that fake_htdigest_file,
        optionally appended with some extra data, generates the expected entries.
        (HTDigestParserTest.test_authenticate): Tests that tuples present in the file can
        authenticate, and tuples not present cannot.
        (HTDigestParserTest.test_entries): Tests that we get the expected entries from
        fake_htdigest_file.

        (HTDigestParserTest.test_empty_file):
        (HTDigestParserTest.test_too_few_colons):
        (HTDigestParserTest.test_too_many_colons):
        (HTDigestParserTest.test_invalid_hash):
        Test various forms of invalid files.

        (HTDigestParserTest.fake_htdigest_file): Returns a fake valid htdigest file for testing.

2011-12-01  Philippe Normand  <pnormand@igalia.com>

        [GTK] Make the new 64-bit Release bot part of the core set
        https://bugs.webkit.org/show_bug.cgi?id=73570

        Reviewed by Adam Roben.

        The 64-bit Release bot re-introduced in r101676 replaces the 64-bit
        Debug bot which was already part of the core set. The GTK
        gardeners are willing to actively maintain it.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__):
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (test_builder_name_regexps):

2011-12-01  Philippe Normand  <pnormand@igalia.com>

        [GTK] Buildslave switch from 32-bit Debug to 64-bit Release
        https://bugs.webkit.org/show_bug.cgi?id=73547

        Reviewed by Adam Roben.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Rename
        the 32-bit Debug configuration to 64-bit Release. The new slave is
        a 64-bit machine already. The 32-bit slave will be shut down.

2011-12-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] build-jsc should not trigger gtkdoc generation
        https://bugs.webkit.org/show_bug.cgi?id=73552

        Reviewed by Philippe Normand.

        Do not generate gtkdoc when building projects other than WebKit. In particular, this ensures
        that build-jsc does not try to generate gtkdoc.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): Only generate gtkdoc if the project is "WebKit".

2011-12-01  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        tests_run0.txt gets clobbered when re-running failing tests
        https://bugs.webkit.org/show_bug.cgi?id=63844

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.results_directory):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        (AbstractWorker.__init__):
        (_ManagerConnection.start_worker):
        (_InlineManager.start_worker):
        (_MultiProcessManager.start_worker):
        (_WorkerConnection.__init__):
        (_InlineWorkerConnection.__init__):
        (_MultiProcessWorkerConnection.__init__):
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        (_TestWorker.__init__):
        (_TestsMixin.test_cancel):
        (_TestsMixin.test_done):
        (_TestsMixin.test_unknown_message):
        (InterfaceTest.test_managerconnection_is_abstract):
        (InterfaceTest.test_workerconnection_is_abstract):
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        (Worker.__init__):
        (Worker.safe_init):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_retries_directory):

2011-12-01  Adam Roben  <aroben@apple.com>

        Buildbot fix

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Moved all of the initialization of
        BuildmasterConfig not performed by loadBuilderConfig up to the top of the file. This makes
        it possible for build steps to reference things like the buildbotURL property of the config.

2011-11-30  Adam Roben  <aroben@apple.com>

        Use curl for downloading builds to test slaves

        Buildbot's built-in file transfer capabilities are transferring files much more slowly than
        curl does. This seems to be due to a combination of buildbot being single-threaded (and thus
        often busy servicing web requests, etc.) and using an IPC mechanism with fairly high
        overhead (courtesy of the Twisted framework).

        Eventually we'd like to make Buildbot's built-in transferring more efficient. In the
        meantime we'll try using curl for downloads and keep thinking about a solution for uploads.
        This should make the test slaves quite a bit faster, and should ease the CPU load on
        build.webkit.org a bit.

        Part of <http://webkit.org/b/73484> Mac slaves take 7+ minutes to upload or download a build

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added the CreateWebKitBuildDirectory
        to Test slaves. It's run just before DownloadBuiltProduct.
        (DownloadBuiltProduct): Changed to be a normal ShellCommand that invokes curl to perform the
        download.
        (CreateWebKitBuildDirectory): Added. Creates the WebKitBuild directory on a slave.
        FileDownload used to do this for us automatically.

2011-11-21  Philippe Normand  <pnormand@igalia.com>

        [GTK] enable-webaudio websetting
        https://bugs.webkit.org/show_bug.cgi?id=69836

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Update WebKitGTK
        enable-webaudio setting when a layout test requests it.

2011-11-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: I'd like to add a script for running perf tests for WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=73079

        The idea is to have performance tests for WebInspector.
        I was suggested to put these tests into PerformanceTests/inspector.
        They produce output in a format that is suitable for chromium perf bot drawing scripts.

        I'd like to reuse code for scanning folders for test files.
        Because of the fact that original test_files.py has common and layout specific parts
        I decided to extract the generic part and put it into webkitpy/common
        I think the two packages with name test_files look strange but I have no idea about a better name.

        Reviewed by Dirk Pranke.

        * Scripts/run-inspector-perf-tests.py: Added.
        * Scripts/webkitpy/common/find_files.py: Renamed from Tools/Scripts/webkitpy/layout_tests/port/test_files.py.
        (find):
        (_normalize):
        * Scripts/webkitpy/common/find_files_unittest.py: Added.
        (MockWinFileSystem.join):
        (MockWinFileSystem):
        (MockWinFileSystem.normpath):
        (TestWinNormalize.assert_filesystem_normalizes):
        (TestWinNormalize.test_mocked_win):
        (TestWinNormalize):
        (TestWinNormalize.test_win):
        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.tests):
        (Port.find_test_files):
        (Port._driver_class):
        (is_reference_html_file):
        (_has_supported_extension):
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        (PortTest.test_find_no_paths_specified):
        (PortTest.test_find_one_test):
        (PortTest.test_find_glob):
        (PortTest.test_find_with_skipped_directories):
        (PortTest.test_find_with_skipped_directories_2):
        (PortTest):
        (PortTest.test_is_test_file):
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        (_tests):
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/performance_tests/__init__.py: Added.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py: Added.
        (PerfTestsRunner.__init__):
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._collect_tests._is_test_file):
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        (PerfTestsRunner._run_tests_set):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Added.
        (MainTest.TestPort):
        (MainTest.TestPort.create_driver):
        (MainTest.TestDriver.run_test):
        (MainTest.TestDriver):
        (MainTest.TestDriver.stop):
        (MainTest.create_runner):
        (MainTest.run_test):
        (MainTest.test_run_passing_test):
        (MainTest.test_run_silent_test):
        (MainTest.test_run_failed_test):
        (MainTest.test_run_tonguey_test):
        (MainTest.test_run_timeout_test):
        (MainTest.test_run_crash_test):
        (MainTest.test_run_test_set):
        (MainTest.test_collect_tests):
        (MainTest):
        (MainTest.test_parse_args):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (OptimizeBaselines.execute):
        (AnalyzeBaselines.execute):

2011-11-30  nduca@chromium.org  <nduca@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::threadedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):

2011-11-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Nodes are reporting that focus can be set when they really can't
        https://bugs.webkit.org/show_bug.cgi?id=72791

        Reviewed by Beth Dakin.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isFocusable):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isFocusable):

2011-11-30  Alejandro G. Castro  <alex@igalia.com>

        Moved myself to the reviewers list.

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

2011-11-30  David Levin  <levin@chromium.org>

        [chromium] Move didUpdateLayout from WebFrameClient to WebViewClient.
        https://bugs.webkit.org/show_bug.cgi?id=73415

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didUpdateLayout): Move didUpdateLayout to account for
        it being moved to a new interface and having the parameter removed.
        * DumpRenderTree/chromium/WebViewHost.h: Ditto.

2011-11-30  Adam Roben  <aroben@apple.com>

        Make NRWT show DRT/WTR build logs when the build fails or --verbose is passed

        This will make it a lot easier to investigate build failures on the bots.

        Fixes <http://webkit.org/b/71160> NRWT doesn't show build output when building DRT

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_command): Include the mock output in the ScriptError we raise since it
        makes the expected output in WebKitPortTest.test_build_driver more closely mimic the output
        seen in practice.

        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_http_locking): Pass False for the configure_logging parameter to Printer.
        The Printer was modifying the root logger in way that would cause my new tests in
        WebKitPort.test_build_driver to fail. The value of the configure_logging parameter doesn't
        seem important to the functioning of this test, and passing False makes Printer not modify
        the root logger.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._run_script): Log the output of the command at the DEBUG level so it will show
        up when --verbose is passed but not otherwise.
        (WebKitPort._build_driver): When an error occurs, log the error message and the script's
        output at the ERROR level so it will always show up.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (WebKitPortTest.test_build_driver): Test that nothing is logged in the normal, successful
        cases. Test that the build scripts' output is logged when --verbose is passed or the build
        fails.

2011-11-30  Adam Roben  <aroben@apple.com>

        Add a way to set OutputCapture's log level

        This will be used by some unit tests I'm planning to add.

        Fixes <http://webkit.org/b/73469> OutputCapture can't be used to capture DEBUG messages

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.__init__): Initialize our internal logging level to INFO, which was the only
        level we ever used before this patch.
        (OutputCapture.set_log_level): Added. This is useful for testing what log level code that is
        being tested uses. Sets the log level for any current or future logging handlers.
        (OutputCapture.capture_output): Use our internal logging level instead of always using INFO.

        * Scripts/webkitpy/common/system/outputcapture_unittest.py: Added.
        (OutputCaptureTest.setUp): Create an OutputCapture to test.
        (OutputCaptureTest.log_all_levels): Helper method to log a message at each log level.
        (OutputCaptureTest.assertLogged): Helper method to assert that a particular set of strings
        was logged.
        (OutputCaptureTest.test_initial_log_level): Test that we start out at the INFO level.
        (OutputCaptureTest.test_set_log_level): Test that set_log_level correctly modifies the log
        level.

2011-11-29  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72751
        WebKit2.MouseMoveAfterCrash API test is failing 

        Reviewed by Sam Weinig.

        Like DumpRenderTree, the NSWindow should act as an active window.
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (-[ActiveOffscreenWindow isKeyWindow]):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):

2011-11-30  Gustavo Noronha Silva  <gns@gnome.org>

        Add step to update gtk dependencies to the buildbot
        https://bugs.webkit.org/show_bug.cgi?id=73455

        Reviewed by Martin Robinson.

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

2011-11-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Add a fullscreen option to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=73445

        Reviewed by Noam Rosenthal.

        This bypasses the compositor on the N9 to increase performances
        and remove the huge useless gray bar part of the window frame
        at the bottom.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::setStartFullScreen):
        (WindowOptions::startFullScreen):

2011-11-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add an initial jhbuild setup which installs fonts into the WebKitBuild
        https://bugs.webkit.org/show_bug.cgi?id=73425

        Reviewed by Gustavo Noronha Silva.

        Add initial jhbuild support to the GTK+ port. update-webkitgtk-libs will
        ensure that the jhbuild root is up-to-date. Currently the only module is
        the font module.

        * Scripts/update-webkitgtk-libs: Added.
        * gtk/common.py: Added a helper to get the number of CPUs.
        * gtk/jhbuild.modules: Added.
        * gtk/jhbuildrc: Added.

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove dependency of Qt DRT on JavaScriptCore.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/WorkQueue.cpp: Include the correct header file we're using anyway,
        instead of one that pulls in JavaScriptCore headers.
        * DumpRenderTree/qt/DumpRenderTree.pro: There's no need to pull in the JSC headers
        with load(javascriptcore).

2011-11-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101440 and r101442.
        http://trac.webkit.org/changeset/101440
        http://trac.webkit.org/changeset/101442
        https://bugs.webkit.org/show_bug.cgi?id=73429

        multiple crashes on layout tests (Requested by hayato on
        #webkit).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):

2011-11-30  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Fix broken DRT build for Aura Linux
        https://bugs.webkit.org/show_bug.cgi?id=72667

        Reviewed by Tony Chang.

        DRT now builds for Aura Linux. This, more or less, shares the same code as Android.

        The following changes have been made:

          1. Renamed TestShellAndroid to TestShellLinux.
          2. Stub code moved added in TestShellStub that will only compile on non-GTK Linux builds.
          3. Code common to Gtk, Aura, and Android moved to TestShellLinux.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Removed.
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        * DumpRenderTree/chromium/TestShellLinux.cpp: Copied from Tools/DumpRenderTree/chromium/TestShellGtk.cpp.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (setupFontconfig):
        (platformInit):
        * DumpRenderTree/chromium/TestShellStub.cpp: Added.
        (checkLayoutTestSystemDependencies):
        (openStartupDialog):

2011-11-30  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Set Result Before Early Exit for Fixed Layout Methods in LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=73328

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::enableFixedLayoutMode):
        (LayoutTestController::setFixedLayoutSize):

2011-11-29  Hayato Ito  <hayato@chromium.org>

        Skip writing the result of diff_image since non-chromium ports don't implement diff_image.
        https://bugs.webkit.org/show_bug.cgi?id=73381

        Reviewed by Ryosuke Niwa.

        This is a quick fix for the breakage of tests on non-chromium port.
        We should implement diff_image later on non-chromium ports.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):

2011-11-29  Balazs Ankes  <Ankes.Balazs@stud.u-szeged.hu>

        [NRWT] Fix --platform=qt-5.0 --new-baseline combo
        https://bugs.webkit.org/show_bug.cgi?id=72489

        Reviewed by Eric Seidel.

        Before the this fix always added "qt" option for the option list
        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-11-29  David Levin  <levin@chromium.org>

        Add a way to revert a variable to its previous value after leaving a scope.
        https://bugs.webkit.org/show_bug.cgi?id=73371

        Reviewed by Adam Barth.

        * DumpRenderTree/ForwardingHeaders/wtf/TemporarilyChange.h: Added.
        * TestWebKitAPI/TestWebKitAPI.gypi: Added test file to the build.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.
        * TestWebKitAPI/Tests/WTF/TemporarilyChange.cpp: Added.
        (TestWebKitAPI::TEST): Added a test for TemporarilyChange.

2011-11-28  Kentaro Hara  <haraken@chromium.org>

        Implement [Supplemental] IDL and support it in run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=73162

        Reviewed by Adam Barth.

        run-bindings-tests supports the [Supplemental] IDL in the following way.
            (1) It creates a file |x| listing all IDL files.
            (2) It generates a supplemental dependency file |y| using resolve-supplemental.pl and |x|.
            (3) For each IDL file |z|, it runs generate-bindings.pl with |y|.
                Then, generate-bindings.pl generates .h and .cpp files for the IDL file |z|,
                including all attributes in IDL files that are supplementing the IDL file |z|.

        * Scripts/run-bindings-tests:
        (generate_from_idl):
        (generate_supplemental_dependency):
        (detect_changes):
        (run_tests):
        (main):

2011-11-18  Nat Duca  <nduca@chromium.org>

        [chromium] Enable threaded compositing via CCThreadProxy::hasThread only
        https://bugs.webkit.org/show_bug.cgi?id=70838

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::threadedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost):
        (WebViewHost::~WebViewHost):

2011-11-29  Ojan Vafai  <ojan@chromium.org>

        List of builders in the flakiness dashboard is out of date
        https://bugs.webkit.org/show_bug.cgi?id=73347

        Reviewed by Adam Barth.

        The chromium gpu bots no longer run layout tests, so kill that
        group entirely.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:

2011-11-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't hard-code the list of WebKit2 generated sources

        The generated sources are... wait for it... generated. So
        use the generator itself to figure out which sources we need
        to compile.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2011-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add a method to detect 'make dist' errors without running 'make dist'
        https://bugs.webkit.org/show_bug.cgi?id=73216

        Reviewed by Philippe Normand.

        Add a script that tries to sniff out 'make dist' problems without running
        'make dist.' 'make distcheck' takes a very long time to run and this should
        reduce the amount of times it needs to be run consecutively.

        * gtk/common.py:
        (get_build_path.is_valid_build_directory): Guess the source directory
        by the existence of the GNUmakefile instead of the .libs directory. This
        allows one to run the script after running autogen.sh but before fully
        building.
        * gtk/find-make-dist-errors: Added.

2011-11-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove use of internal headers in the MiniBrowser

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.pro:

2011-11-29  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix debug-shlib build without webkit2

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/qtwebkit.prf: Respect no_webkit2.

2011-11-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r101307.

        * qmake/mkspecs/features/webkit2.prf: Add missing includepath.

2011-11-29  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=72848

        Add option to build-webkit.

        Reviewed by Dimitri Glazkov.

        * Scripts/build-webkit:

2011-11-28  Ojan Vafai  <ojan@chromium.org>

        gtest normalization in the test results server is sometimes wrong
        https://bugs.webkit.org/show_bug.cgi?id=73262

        Reviewed by Tony Chang.

        If a gtest has it's modified changed (e.g. add FLAKY_) then it will have two
        entries in the incremental JSON, one of the entries will have the correct data
        from the run and the other will have dummy no-data values. Make sure to
        always pick the one with real data.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._remove_gtest_modifiers):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_remove_gtest_modifiers):

2011-11-28  Ojan Vafai  <ojan@chromium.org>

        Some of the results.json files have results/times entries at the directory level
        https://bugs.webkit.org/show_bug.cgi?id=73261

        Reviewed by Tony Chang.

        This is just a bug that got introduced in a temporary push of the results server.
        This patch repairs the broken files. After all the bots have cycled, we can simplify
        this code to just assert that results/times are not at the directory level.

        Also, when catching exceptions, log the full stacktrace.

        * TestResultServer/model/jsonresults.py:
        (_is_directory):
        (JsonResults._load_json):
        (JsonResults._merge_tests):
        (JsonResults.merge):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_directory_hierarchy_extra_results_and_times):

2011-11-28  Tony Chang  <tony@chromium.org>

        ews bots should pass --force to update-webkit-chromium
        https://bugs.webkit.org/show_bug.cgi?id=73230

        Reviewed by Adam Barth.

        This makes it less likely for gclient changes to break the bots (e.g.,
        if a DEPS repository moves or is switched to a branch).

        Also pass --force when using |build-webkit --update-chromium| since this
        appears to only be used by the bots.

        Take 2: Add Options.non_interactive to update.py's options() method.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineIsChromium): Add --force-update to update-webkit --chromium.
        (forceChromiumUpdate):
        (buildChromium): Pass --force to update-webkit-chromium.
        * Scripts/webkitpy/tool/steps/update.py:
        (Update.run): Add --force-update if non-interactive (i.e., bots).
        * Scripts/webkitpy/tool/steps/update_unittest.py:

2011-11-28  Tony Chang  <tony@chromium.org>

        Revert r101279, broke the ews and cq bots.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineIsChromium):
        (buildChromium):
        * Scripts/webkitpy/common/config/ports.py:
        (WebKitPort.update_webkit_command):
        (ChromiumPort.update_webkit_command):
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.update_webkit_command):
        * Scripts/webkitpy/tool/steps/update.py:
        * Scripts/webkitpy/tool/steps/update_unittest.py: Removed.

2011-11-28  Ojan Vafai  <ojan@chromium.org>

        testlistjson on the test results server doesn't understand hierarchical results format
        https://bugs.webkit.org/show_bug.cgi?id=73246

        Reviewed by Tony Chang.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._delete_results_and_times):
        Instead of just getting the top-level keys, we now walk the tests tree and
        delete the results and times values.

        * TestResultServer/model/jsonresults_unittest.py:
        Simplify the test harness to take in the same JSON format for the tests
        that the actual results.json uses instead of something very similar but
        needlessly different. This also allows for testing the broken case of
        results and times values being at non-leaf level.

2011-11-28  Tony Chang  <tony@chromium.org>

        ews bots should pass --force to update-webkit-chromium
        https://bugs.webkit.org/show_bug.cgi?id=73230

        Reviewed by Adam Barth.

        This makes it less likely for gclient changes to break the bots (e.g.,
        if a DEPS repository moves or is switched to a branch).

        Also pass --force when using |build-webkit --update-chromium| since this
        appears to only be used by the bots.

        * Scripts/update-webkit:
        * Scripts/webkitdirs.pm:
        (determineIsChromium): Add --force-update to update-webkit --chromium.
        (forceChromiumUpdate):
        (buildChromium): Pass --force to update-webkit-chromium.
        * Scripts/webkitpy/tool/steps/update.py:
        (Update.run): Add --force-update if non-interactive (i.e., bots).
        * Scripts/webkitpy/tool/steps/update_unittest.py:

2011-11-28  Michael Saboff  <msaboff@apple.com>

        Fixed help message for --exclude-kraken to say that
        it excludes Kraken and not SunSpider.

        Rubber-stamped by Filip Pizlo.

        * Scripts/bencher:

2011-11-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101273.
        http://trac.webkit.org/changeset/101273
        https://bugs.webkit.org/show_bug.cgi?id=73244

        multiple test failures and timeouts (Requested by tony^work on
        #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Copied from Tools/DumpRenderTree/chromium/TestShellGtk.cpp.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (platformInit):
        (openStartupDialog):
        (checkLayoutTestSystemDependencies):
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (AlarmHandler):
        (setupFontconfig):
        (TestShell::waitTestFinished):
        (platformInit):
        * DumpRenderTree/chromium/TestShellLinux.cpp: Removed.
        * DumpRenderTree/chromium/TestShellStub.cpp: Removed.

2011-11-28  John Yani  <vanuan@gmail.com>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Reviewed and modified by Eric Seidel.

        This is a simpler version of John's patch which I'm landing.
        This just engages the hacks from the Host constructor on a global
        basis.

        * Scripts/webkitpy/common/host.py:
        (Host.__init__):
        (Host._engage_awesome_locale_hacks):

2011-11-28  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Fix broken DRT build for Aura Linux
        https://bugs.webkit.org/show_bug.cgi?id=72667

        Reviewed by Tony Chang.

        DRT now builds for Aura Linux. This, more or less, shares the same code as Android.

        The following changes have been made:

          1. Renamed TestShellAndroid to TestShellLinux.
          2. Stub code moved added in TestShellStub that will only compile on non-GTK Linux builds.
          3. Code common to Gtk, Aura, and Android moved to TestShellLinux.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Removed.
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        * DumpRenderTree/chromium/TestShellLinux.cpp: Copied from Tools/DumpRenderTree/chromium/TestShellGtk.cpp.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (setupFontconfig):
        (platformInit):
        * DumpRenderTree/chromium/TestShellStub.cpp: Added.
        (checkLayoutTestSystemDependencies):
        (openStartupDialog):

2011-11-28  Eric Seidel  <eric@webkit.org>

        Add Environment object to Host and fix the GCC smartquotes trouble seen on the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=71983

        Reviewed by Adam Barth.

        We'll add more code to Environment overtime,
        allowing us to mock out more of our direct interactions with os.environ.

        This patch also makes run_command print the passed in environment.

        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/system/environment.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_mock.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_unittest.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system fixes against V8.

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/webcore.prf: Get rid of old v8 cruft.
        * qmake/mkspecs/features/wtf.prf: If requested, pull in v8 from Qt and configure
        WTF accordingly to use v8. (WTF in the implementation needs it as well as users of WTF)

2011-11-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make sure the useFixedLayout feature is consistently handled
        https://bugs.webkit.org/show_bug.cgi?id=73212

        Reviewed by Simon Hausmann.

        The web page parameters are set to our Qt defaults and are now altered
        in the WebKitTestRunner.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WTF should be built as separate static library
        https://bugs.webkit.org/show_bug.cgi?id=73201

        Reviewed by Tor Arne Vestbø.

        * DumpRenderTree/qt/DumpRenderTree.pro: Require wtf.
        * MiniBrowser/qt/BrowserWindow.cpp: Remove unnecessary config.h inclusion and
        thus wtf dependency.
        * WebKitTestRunner/InjectedBundle/Target.pri: Require wtf.
        * WebKitTestRunner/Target.pri: Ditto.
        * qmake/mkspecs/features/default_post.prf: When re-ordering the static libs
        consider wtf, too.
        * qmake/mkspecs/features/javascriptcore.prf: Remove WTF specific build stuff,
        moved into wtf.prf.
        * qmake/mkspecs/features/qtwebkit.prf: For debug builds with shared libs, also
        link in libwtf.
        * qmake/mkspecs/features/wtf.prf: Added. Stuff needed for building and using WTF.

2011-11-28  Kentaro Hara  <haraken@chromium.org>

        run-bindings-tests shows diff error for a newly added binding test
        https://bugs.webkit.org/show_bug.cgi?id=73179

        Reviewed by Adam Barth.

        Currently, when we add a new binding test, say bindings/scripts/test/TestSupplemental.idl,
        run-bindings-tests just shows diff error because reference files
        (i.e. {V8,JS,...}TestSupplemental.h and {V8,JS,...}TestSupplemental.cpp) do not yet exist:

            FAIL: (V8) V8TestSupplemental.h
            diff: WebCore/bindings/scripts/test/V8/V8TestSupplemental.h: No such file or directory

        Instead, this patch treats a non-existent reference file as an empty file and
        shows the result of the newly added binding test, like this:

            FAIL: (V8) V8TestSupplemental.h
            --- WebCore/bindings/scripts/test/V8/V8TestSupplemental.h       1970-01-01 09:00:00.000000000 +0900
            +++ /tmp/tmpmX2i2F/V8TestSupplemental.h 2011-11-28 11:08:34.150707677 +0900
            @@ -0,0 +1,84 @@
            +/*
            +    This file is part of the WebKit open source project.
            +    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
            +
            (omitted)

        * Scripts/run-bindings-tests:
        (detect_changes): Just added an -N option to the diff command.

2011-11-28  Martin Robinson  <mrobinson@igalia.com>

        [Gtk][gtkdoc] Syntax error in Tools/gtk/generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=73165

        Reviewed by Philippe Normand.

        Fix some syntax errors in this script and remove an unused variable.

        * gtk/generate-gtkdoc:
        (get_webkit2_options.src_path): 
        (get_webkit2_options):
        (get_webkit1_options.src_path):

2011-11-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Enable the inspector.
        
        * waf/build/settings.py:

2011-11-26  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the build after r101174.

        * gtk/generate-gtkdoc: Properly handle empty PKG_CONFIG_PATHs.

2011-11-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Integrate build-gtkdoc into build-webkit and make
        https://bugs.webkit.org/show_bug.cgi?id=72626

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Added support for new scripts and "make docs".
        * Scripts/webkitdirs.pm: Call generate-gtkdoc when building.
        (buildAutotoolsProject):
        * gtk/generate-gtkdoc: Added.
        * gtk/gtkdoc.py: Renamed from Source/WebKit2/UIProcess/API/gtk/docs/gtkdoc.py.

2011-11-25  Ádám Kallai  <Kallai.Adam@stud.u-szeged.hu>

        [Qt] Add support for using OWRT with Qt5
        https://bugs.webkit.org/show_bug.cgi?id=72947

        Add qt-5.0 platform and don't pass -graphicssystem to QtTestBrowser if using Qt5.

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:

2011-11-25  Yury Semikhatsky  <yurys@chromium.org>

        [Chromium] Web Inspector: get rid of WebDevToolsFrontendClient::sendFrontendLoaded method
        https://bugs.webkit.org/show_bug.cgi?id=73126

        No need to have a separate client call for this. The front-end can store messages
        which arrive before front-end loaded and dispatch them later. This happens in layout
        tests only by the way as all other messages should be initiated by the front-end code.

        Reviewed by Pavel Feldman.

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2011-11-24  Kentaro Hara  <haraken@chromium.org>

        Replace subprocess.call() with subprocess.Popen()
        https://bugs.webkit.org/show_bug.cgi?id=73105

        Reviewed by Adam Barth.

        Currently, the stdout and stderr of the child processes of run-bindings-tests
        are mixed (or even gone away) with the stdout and stderr of run-bindings-tests itself.
        This is the problem of subprocess.call(), which does not synchronize the stdout and stderr
        between a parent process and a child process. This patch replaces subprocess.call() with
        subprocess.Popen() and synchronizes the stdout and stderr between them.
        This patch also makes output messages of run-bindings-tests more readable.

        With this patch, the output messages of run-bindings-tests look like as follows:

            PASS: (CPP) WebDOMTestObj.h
            PASS: (CPP) WebDOMTestObj.cpp
            FAIL: (CPP) WebDOMTestInterface.h
            --- Source/WebCore/bindings/scripts/test/CPP/WebDOMTestInterface.h      2011-11-25 13:34:09.313516268 +0900
            +++ /tmp/tmpDAV87G/WebDOMTestInterface.h        2011-11-25 13:44:42.712946812 +0900
            @@ -23,7 +23,7 @@
             #ifndef WebDOMTestInterface_h
             #define WebDOMTestInterface_h

            -#if ENABLE(Condition1) || ENABLE(Condition2)
            +#if ENABLE(Condition1) || ENABLE(Condition3)

             #include <WebDOMObject.h>
             #include <WebDOMString.h>
             @@ -53,5 +53,5 @@
             WebDOMTestInterface toWebKit(WebCore::TestInterface*);

             #endif
            -#endif // ENABLE(Condition1) || ENABLE(Condition2)
            +#endif // ENABLE(Condition1) || ENABLE(Condition3)
            PASS: (CPP) WebDOMFloat64Array.cpp
            PASS: (CPP) WebDOMFloat64Array.h

            Some tests FAIL! (To update the reference files, execute "run-bindings-tests --reset-results")

        * Scripts/run-bindings-tests:
        (generate_from_idl):
        (detect_changes):
        (run_tests):
        (main):

2011-11-24  Kentaro Hara  <haraken@chromium.org>

        Fix the current working directory of run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=73106

        Reviewed by Adam Barth.

        Currently, run-bindings-tests outputs the following error
        (although it outputs "all tests passed!" in the end):

            Testing the ObjC generator on TestObj.idl
            gcc: WebCore/bindings/objc/PublicDOMInterfaces.h: No such file or directory
            gcc: warning: '-x objective-c' after last input file has no effect
            gcc: no input files

        This is because CodeGeneratorObjC.pm assumes that the current working directory
        is WebKit/Source/, but run-bindings-tests sets the current working directory to WebKit/.
        Thus, this patch changes it to WebKit/Source/.

        * Scripts/run-bindings-tests:
        (generate_from_idl):
        (main):

2011-11-24  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of the buildDirForSource() function in the build system

        At some point the plan was to allow for running qmake on sub-trees
        of the sources, into the top level build directory, but this is no
        longer possible, so no reason to keep the convenience function around.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/javascriptcore.prf:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:

2011-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101107.
        http://trac.webkit.org/changeset/101107
        https://bugs.webkit.org/show_bug.cgi?id=73062

        Breaks the commit-queue (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/host.py:
        (Host._engage_awesome_windows_hacks):
        * Scripts/webkitpy/common/host_mock.py:
        (MockHost.__init__):
        * Scripts/webkitpy/common/system/environment.py: Removed.
        * Scripts/webkitpy/common/system/environment_unittest.py: Removed.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output):
        (Executive.run_and_throw_if_fail):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_and_throw_if_fail):
        (MockExecutive.run_command):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        (WebKitPort._driver_build_script_name):
        (WebKitPort._run_script):
        (WebKitPort._build_driver):
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        (test_build_driver):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build):

2011-11-23  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r101110.
        http://trac.webkit.org/changeset/101110
        https://bugs.webkit.org/show_bug.cgi?id=73057

        The bots have now cycled and this patch is no longer needed.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files):

2011-11-23  Ojan Vafai  <ojan@chromium.org>

        Temporarily save the incremental results json in order to identify bug
        https://bugs.webkit.org/show_bug.cgi?id=73057

        Reviewed by Dean Jackson.

        The test results server needed to be rolled back from tip of tree
        due to a JSON merging bug. It's hard to identify what the bug is without
        the raw data.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files):

2011-11-23  Ojan Vafai  <ojan@chromium.org>

        Merging two version 4 results hits an error in the test results server
        https://bugs.webkit.org/show_bug.cgi?id=73042

        Reviewed by Adam Barth.

        The old code assumed that if the aggregate results value was not a leaf
        value that the incremental results would exist, which is just totally
        wrong. Added a test for that case as well.

        * TestResultServer/model/jsonresults.py:
        (JsonResults._merge_tests):
        * TestResultServer/model/jsonresults_unittest.py:
        (JsonResultsTest.test_merge_build_directory_hierarchy_old_version):
        (JsonResultsTest.test_merge_build_directory_hierarchy):

2011-11-23  Eric Seidel  <eric@webkit.org>

        Add Environment object to Host and fix the GCC smartquotes trouble seen on the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=71983

        Reviewed by Adam Barth.

        We'll add more code to Environment overtime,
        allowing us to mock out more of our direct interactions with os.environ.

        This patch also makes run_command print the passed in environment.

        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/common/system/environment.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_mock.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/environment_unittest.py: Copied from Tools/Scripts/webkitpy/tool/steps/build.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:

2011-11-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Re-generate QtWebKit API forwarding headers when API changes

        The forwarding headers are generated by syncqt, and syncqt is run by qmake,
        so we need sync.profile to live in the same directory as the project file
        that will be touched when adding/removing API (api.pri in our case).

        Since the WebKit2 APIs live in a separate static library, we have to
        add the project file for WebKit2 as a dependency of the api.pri file
        as well, so that any changes to the WebKit2 API will still trigger a
        run of qmake (and then syncqt).

        Lastly, we use the new QMAKE_SYNCQT_OUTDIR variable in Qt 5 to ensure
        that the forwarding headers are still generated in the root build dir,
        not in the Source dir along with the internal forwarding headers.

        Reviewed by Andreas Kling.

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

2011-11-23  Johnny Ding  <jnd@chromium.org>

        Set right default value to baseURL in LayoutTestController::queueLoadHTMLString.
        https://bugs.webkit.org/show_bug.cgi?id=72950

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::queueLoadHTMLString):

2011-11-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should display a message if it can't find results to display
        https://bugs.webkit.org/show_bug.cgi?id=72991

        Reviewed by Dimitri Glazkov.

        Not all failures (e.g., TIMEOUT) have results that we can display.
        This patch adds a short message so that the user can see that we're
        done trying to load the results.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2011-11-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should explain more clearly what the builder lists at the top of the page mean
        https://bugs.webkit.org/show_bug.cgi?id=72992

        Reviewed by Dimitri Glazkov.

        This patch also prepares us to list other sorts of failures, like
        performance and unit test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.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:

2011-11-23  Ryan Sleevi  <rsleevi@chromium.org>

        Add new Chromium tests to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=72997

        Reviewed by Ojan Vafai.

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

2011-11-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic should support AUDIO failures
        https://bugs.webkit.org/show_bug.cgi?id=69477

        Reviewed by Dimitri Glazkov.

        This is a first iteration at supporting AUDIO failures in
        garden-o-matic.  We'll probably need to iterate a bit when we have a
        real audio failure in the tree to play with.  For example, we'll
        probably want to add and <audio> element to the "Examine" view to hear
        the differences, but that all can be done in a subsequent patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2011-11-23  Scott Graham  <scottmg@chromium.org>

        Adding gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=69451

        Reviewed by Darin Fisher.

        Add a 'gamepadController' to Chromium DRT. Allows for setting of mock
        gamepad data that will be retrieved when JS code pulls via API access.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/GamepadController.cpp: Added.
        (GamepadController::GamepadController):
        (GamepadController::bindToJavascript):
        (GamepadController::reset):
        (GamepadController::connect):
        (GamepadController::disconnect):
        (GamepadController::setId):
        (GamepadController::setButtonCount):
        (GamepadController::setButtonData):
        (GamepadController::setAxisCount):
        (GamepadController::setAxisData):
        (GamepadController::fallbackCallback):
        * DumpRenderTree/chromium/GamepadController.h: Added.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetTestController):
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::gamepadController):

2011-11-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Move the top-level logic to the top-level directory.
        https://bugs.webkit.org/show_bug.cgi?id=72685

        Reviewed by Brent Fulgham.

        * CMakeLists.txt: Added.
        * DumpRenderTree/efl/CMakeLists.txt: Keep building into Programs/.
        * EWebLauncher/CMakeLists.txt: Renamed from Tools/CMakeListsEfl.txt.
        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        * WinCELauncher/CMakeLists.txt: Renamed from Tools/CMakeListsWinCE.txt.

2011-11-17  Vincent Scheib  <scheib@chromium.org>

        Pointer Lock: Initial Tests for navigator.webkitPonter
        https://bugs.webkit.org/show_bug.cgi?id=72659

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
            Enabling PointerLock in TestShell

2011-11-22  Ryan Sleevi  <rsleevi@chromium.org>

        Update flakiness dashboard for new Chromium builders and tests
        https://bugs.webkit.org/show_bug.cgi?id=72931

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:

2011-11-22  Adam Roben  <aroben@apple.com>

        Remove some debugging code I accidentally left in r101005

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python):

2011-11-22  Adam Roben  <aroben@apple.com>

        Teach prepare-ChangeLog how to find changed classes/methods/functions in Python files

        Fixes <http://webkit.org/b/57008> prepare-ChangeLog doesn't find names of modified
        classes/methods in Python source files

        Reviewed by Dan Bates.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Call get_function_line_ranges_for_python for files ending in .py
        or that use python as their interpreter. Modified the code that extracts the interpreter to
        ignore a leading "/usr/bin/env " in the interpreter line, as is common for our Python
        scripts.
        (get_function_line_ranges_for_python): Added. Does simple parsing of Python files to look
        for class/def lines and generate ranges based on them.

2011-11-21  Yuta Kitamura  <yutak@chromium.org>

        [GTK] Enable WebSocket hybi tests
        https://bugs.webkit.org/show_bug.cgi?id=72870

        Reviewed by Xan Lopez.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        Reset the setting value to the default value (true).
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference):
        Change the setting value through a function in DumpRenderTreeSupportGtk.

2011-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        ChangeLogEntry should be able to parse entries with multiple authors
        https://bugs.webkit.org/show_bug.cgi?id=72690

        Reviewed by Eric Seidel.

        Support multi-author change log entries in ChangeLogEntry. Split author names using
        the same logic as splitting reviewer names. _authors now stores list of dictionaries
        with "name" and "email" as keys. Unlike reviewers, we can't always resolve authors to
        accounts because some contributors are never listed in committers.py. 

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/committers.py: Fixed a bug that *_by_{name|email}
        throws an exception when the argument is None.

2011-11-21  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Speed up debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=72882

        Reviewed by Tor Arne Vestbø.

        Introduce a special type of build that replaces the static jsc/wc/wk2
        static libraries with shared libraries, that individually are much faster
        to link and don't require relinking into the big library when changing just
        one file in one module. It can be enabled with
        --qmakearg="CONFIG+=force_static_libs_as_shared"

        * qmake/mkspecs/features/force_static_libs_as_shared.prf: Added. With this configuration,
        disable symbol visibility, static linkage and enable rpath.
        * qmake/mkspecs/features/functions.prf: Add a helper function to determine if
        we need to link the convenience libraries together or not and renamed linkStaticLibrary
        to just linkLibrary (because linkage is not necessarily static).
        * qmake/mkspecs/features/qtwebkit.prf: When using the trick, make sure to also
        link against jsc/wc/wk2 when linking app code against QtWebKit.
        * qmake/mkspecs/features/javascriptcore.prf: Use new +needToLinkLibrary helper
        function.
        * qmake/mkspecs/features/webcore.prf: Ditto.
        * qmake/mkspecs/features/webkit2.prf: Ditto.

2011-11-21  Adam Klein  <adamk@chromium.org>

        Update flakiness dashboard linkification regexps for crbug.com/100000 and above
        https://bugs.webkit.org/show_bug.cgi?id=72898

        Reviewed by Ojan Vafai.

        Also removed a comment that was going to be more trouble to keep up to
        date than seemed worthwhile (the code is now the documentation).

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-11-21  Dominic Mazzoni  <dmazzoni@google.com>

        [Chromium] WebAccessibilityNotification should use AssertMatchingEnums.
        https://bugs.webkit.org/show_bug.cgi?id=72895

        Reviewed by Chris Fleizach.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2011-11-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, run-gtk-tests temporary workaround after r98500.

        * Scripts/run-gtk-tests: Try to find the build directory like in
        build-gtkdoc, until webkit-build-directory --configuration gets fixed.

2011-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a way to skip unit tests in the bots
        https://bugs.webkit.org/show_bug.cgi?id=72879

        Reviewed by Philippe Normand.

        Rewrite the script in python to make it easier for everybody to
        change it and add support for skipping tests.

        * Scripts/run-gtk-tests:

2011-11-21  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Add more appcache functions to ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=72143

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setAppCacheMaximumSize): Use the right
        function, this is not related to the memory cache, but rather to the
        appcache.

2011-11-18  Adam Roben  <aroben@apple.com>

        Make NRWT consider all lines of output from parse-malloc-history, not just the first

        Fixes <http://webkit.org/b/72652> REGRESSION (NRWT): NRWT always reports "1 unique leaks
        found" even when there are more than 1 unique leaks

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector.count_total_bytes_and_unique_leaks): Pass re.MULTILINE to re.findall so that
        "^" will be considered to match the beginning of any line, not only the beginning of the
        string.

        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest.test_count_total_bytes_and_unique_leaks): Added a second callstack to the
        fake output and updated expectations to match.

2011-11-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Clean up MiniBrowser project file after recent changes
        https://bugs.webkit.org/show_bug.cgi?id=72869

        Reviewed by Simon Hausmann.

        Remove nonexistent files from OTHER_FILES after our touch and desktop webviews were merged.

        * MiniBrowser/qt/MiniBrowser.pro:

2011-11-21  Dominic Mazzoni  <dmazzoni@google.com>

        Accessibility: Multiselect list boxes need to report the active option in addition to which items are selected.
        https://bugs.webkit.org/show_bug.cgi?id=72479

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsSelectedOptionActiveCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::isSelectedOptionActiveGetterCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isSelectedOptionActive):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isSelectedOptionActive):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isSelectedOptionActive):

2011-11-21  Takashi Toyoshima  <toyoshim@chromium.org>

        Use Host().port_factory instead of webkitpy.layout_tests.port.factory.
        https://bugs.webkit.org/show_bug.cgi?id=72859

        Reviewed by Eric Seidel.
        
        * Scripts/new-run-webkit-websocketserver:

2011-11-20  Shinya Kawanaka  <shinyak@google.com>

        [Chromium] Layout test does not return correct misspelling positions if there are multiple misspelled words.
        https://bugs.webkit.org/show_bug.cgi?id=72655

        Reviewed by Hajime Morita.

        Fixed the calculation of offset.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::finishLastTextCheck):

2011-11-20  Ojan Vafai  <ojan@chromium.org>

        Change the final place where we use version 3 of the results json output
        https://bugs.webkit.org/show_bug.cgi?id=72838

        Reviewed by Adam Barth.

        This converts the json from being a flat map of test name --> results
        to being hierarchical by directory. This will make the json files 
        considerably smaller.

        Also cleaned up some functions that were returning/checking boolean values
        that were always True.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-11-20  Ojan Vafai  <ojan@chromium.org>

        Include the master name when querying the test results server.
        This will soon be required since leaving the master name out mean
        that multiple files could match the query.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Fix jsonp callback code to add the callback if json content
        is not jsonp.
        * TestResultServer/handlers/testfilehandler.py:

2011-11-19  Alice Boxhall  <aboxhall@chromium.org>

        Modify dashboard_base.js to optionally accept version 4 results json.

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/dashboard_base.js:
        (ADD_RESULTS):
        (flattenTrie):
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (testFlattenTrie):

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Stop storing results files as jsonp in the test results server
        https://bugs.webkit.org/show_bug.cgi?id=72814

        Reviewed by Adam Barth.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Remove the dependence on jsonp from more of new-run-webkit-tests and the test results server
        https://bugs.webkit.org/show_bug.cgi?id=72813

        Reviewed by Adam Barth.

        Once this lands, we can start storing pure json in the test results server and then
        we can delete the code with all the FIXMEs added here.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        Only add jsonp for full_results.json.
        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:
        Accept pure json uploads.
        * TestResultServer/static-dashboards/dashboard_base.js:
        (appendJSONScriptElementFor):
        Use the callback parameter so that the server can start returning pure json if it's left out.

2011-11-19  Ojan Vafai  <ojan@chromium.org>

        Allow json NRWT downloads to be pure json and not jsonp
        https://bugs.webkit.org/show_bug.cgi?id=72809

        Reviewed by Adam Barth.

        I'm moving the server to storing and serving up raw json instead of jsonp.
        You can still get the jsonp by passing a "callback" parameter, but there's no
        need for run-webkit-tests to get jsonp when all it wants is the raw json.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        Make the wrapper stripping only happen if the json is actually wrapped.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-11-18  Daniel Bates  <dbates@rim.com>

        Add CMake build infrastructure for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=72768

        Reviewed by Antonio Gomes.

        Add optional --blackberry command line argument to build-webkit to build the
        BlackBerry port.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (builtDylibPathForName):
        (determineIsQt):
        (isBlackBerry): Added.
        (determineIsBlackBerry): Added.
        (blackberryTargetArchitecture): Added.
        (isAppleWebKit):

2011-11-18  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r100835.
        http://trac.webkit.org/changeset/100835
        https://bugs.webkit.org/show_bug.cgi?id=72778

        Broke some page scale tests

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::scalePageBy):

2011-11-18  Adam Barth  <abarth@webkit.org>

        Prepare to move manual-tests out of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=72782

        Reviewed by Eric Seidel.

        Update this file to refer to the new location of ManualTests.

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

2011-11-18  James Robinson  <jamesr@chromium.org>

        [chromium] Set min/max page scale factors when calling eventSender.scalePageBy to avoid clamping
        https://bugs.webkit.org/show_bug.cgi?id=72778

        Reviewed by Kenneth Russell.

        Set the min/max page scale clamps when a test calls eventSender.scalePageBy() so that the scale isn't clamped.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::scalePageBy):

2011-11-18  Scott Graham  <scottmg@chromium.org>

        IDL changes for gamepad support
        https://bugs.webkit.org/show_bug.cgi?id=71753

        Reviewed by Adam Barth.

        Runtime enable gamepad in chromium test shell.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-10-27  Darin Fisher  <darin@chromium.org>

        [chromium] Improve fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=70477

        Reviewed by Adam Barth.

        Implement enter/exitFullScreen.  The implementation is asynchronous,
        via postDelayedTask, to simulate how the browser actually behaves.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::enterFullScreen):
        (WebViewHost::exitFullScreen):
        (WebViewHost::setAddressBarURL):
        (WebViewHost::enterFullScreenNow):
        (WebViewHost::exitFullScreenNow):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-11-18  Adam Roben  <aroben@apple.com>

        Ignore an ANGLE leak that is not WebKit's fault

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        Added ScanFromString to the call stacks to exclude on all OS versions.

2011-11-18  Adam Roben  <aroben@apple.com>

        Ignore another Lion-specific leak that is not WebKit's fault

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        Added SecTransformExecute to the call stacks to exclude.

2011-11-18  Yuta Kitamura  <yutak@chromium.org>

        [Qt] Enable WebSocket hybi tests
        https://bugs.webkit.org/show_bug.cgi?id=72687

        Reviewed by Simon Hausmann.

        Let LayoutTestControllerQt be able to switch WebSocket protocols via overridePreference().

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2011-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WK2] Invalid TestNetscapePlugin path when using new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=72707

        Reviewed by Philippe Normand.

        Make new-run-webkit-tests use the right path to locate the test
        plugin used by WebKitTestRunner.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-11-18  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WTR and InjectedBundle should not link statically against JSC/WTF
        https://bugs.webkit.org/show_bug.cgi?id=72697

        Reviewed by Kenneth Rohde Christiansen.

        * Tools.pro: Make WTR linux only for the moment.
        * WebKitTestRunner/InjectedBundle/Target.pri: Remove static jsc/wtf linkage.
        * WebKitTestRunner/Target.pri: Ditto.
        * qmake/mkspecs/features/default_post.prf: Don't build the main webkit sources
        with ELF visibility on Linux. Instead we're temporarily using an LD version script.

2011-11-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Change default size of the MiniBrowser

        Reviewed by Simon Hausmann.

        As we lay out desktop pages using the width of 980, change our default
        size to 980x735 so that we are not scaling down by default.

        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-11-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Clean up the use of DATA_DIR in the buildsystem
        https://bugs.webkit.org/show_bug.cgi?id=72681

        Reviewed by Daniel Bates.

        Instead of adding -DDATA_DIR in all scopes, only define it in
        WebCore/PlatformEFL.cmake, as WebCore is the only place that uses
        it.

        We can then define DATA_DIR to the generated theme directory for
        EWebLauncher, since it's what we want here.

        * CMakeListsEfl.txt:

2011-11-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Move platform includes last in DRT's include directories.
        https://bugs.webkit.org/show_bug.cgi?id=72684

        Reviewed by Daniel Bates.

        This is the first step in fixing the build when a platform include (in
        this case, Valgrind 3.7.0 ships its config.h) and the wrong config.h
        is included instead of WebKit's.

        * DumpRenderTree/efl/CMakeLists.txt:

2011-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        fuzzy_match doesn't recognize "Dan B" or "hyatt"
        https://bugs.webkit.org/show_bug.cgi?id=72636

        Reviewed by Eric Seidel.

        Make contributors_by_fuzz_match search string in shorthand names of contributors such as "Ryosuke N"
        and user names of email addreses such as rniwa in rniwa@webkit.org.

        Also import legacy contributor names and mispell lists from Eric's script on the bug 26533 as a test.

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

2011-11-17  Eric Seidel  <eric@webkit.org>

        Remove support for running check-webkit-style w/o a webkit checkout
        https://bugs.webkit.org/show_bug.cgi?id=72678

        Reviewed by Adam Barth.

        After talking to Dave Levin we've decided to remove this
        code.  I know of no users of check-webkit-style w/o a webkit checkout
        and this needlessly adds complexity.

        * Scripts/webkitpy/style/main.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Remove more direct uses of os.path
        https://bugs.webkit.org/show_bug.cgi?id=72677

        Reviewed by Adam Barth.

        Remove more uses of os.path, including refactoring
        CommitterValidator to use a Host object instead of
        manual hacks to emulate what SCM and FileSystem provide.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
         - Turns out none of our unittests actually looked at this path.
           now I've made it be a valid path.
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Teach TextFileReader about FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=72673

        Reviewed by Adam Barth.

        Unfortunately TextFileReader doesn't use FileSystem
        everywhere yet, so we can't move the unittests to
        using MockFileSystem, but we're close.

        * Scripts/webkitpy/style/filereader.py:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/style/main.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Give check-webkit-style a Host
        https://bugs.webkit.org/show_bug.cgi?id=72670

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
         - We don't run these unittests, but this one was looking for the wrong exception.
        * Scripts/webkitpy/style/main.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
         - This was create a new scm object even though it already had one?

2011-11-17  Eric Seidel  <eric@webkit.org>

        Move check-webkit-style change_directory code to more modern mocks
        https://bugs.webkit.org/show_bug.cgi?id=72664

        Reviewed by Adam Barth.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/main.py:
        * Scripts/webkitpy/style/main_unittest.py:

2011-11-17  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] enable ref tests
        https://bugs.webkit.org/show_bug.cgi?id=72601

        Re-enable ref tests. Run the driver under evenly numbered display if performing
        pixel tests or under oddly numbered display otherwise. This prevents the ref tests
        being run in an already used Xvfb instance if pixel tests are disabled.

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Also set Xvfb variable to None
        after the process is killed

2011-11-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Make check-webkit-style accept xxx_p.h as a primary header for xxx.cpp for Qt's sake
        https://bugs.webkit.org/show_bug.cgi?id=72620

        Reviewed by David Levin.

        Qt's convention of keeping private (but exposed) API suffixed by "_p.h" but not
        adding the suffix the cpp file. One example of false positive
        https://bugs.webkit.org/show_bug.cgi?id=72319#c12.

        * Scripts/webkitpy/style/checkers/cpp.py: accept headers ending with _p as primary if its
        basename contains the cpp's basename.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        Move check-webkit-style's guts into webkitpy/style/main.py
        https://bugs.webkit.org/show_bug.cgi?id=72657

        Reviewed by Adam Barth.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/main.py:

2011-11-17  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Reviewed by Adam Barth.

        Make NRWT use a clean environment, just like ORWT did.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-11-17  Dirk Pranke  <dpranke@chromium.org>

        Chromium Mac 10.5 CG dbg bots are failing to run webkit_gpu_tests
        https://bugs.webkit.org/show_bug.cgi?id=72615

        Reviewed by James Robinson.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-17  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Layer violation: qt_runtime.cpp accesses QWebElement and QTDRTNode
        https://bugs.webkit.org/show_bug.cgi?id=72595

        Reviewed by Noam Rosenthal.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Use new initialize() function to
        ensure the registration of the DRTNode JS bindings.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController): Remove unnecessary explicit qt meta type
        registration of QWebElement (now done implicitly through QWebPage ->
        QtWebElementRunTime::initialize code path)

2011-11-17  Adam Roben  <aroben@apple.com>

        Fix a crash-inducing typo I introduced in r100648

        Fixes <http://webkit.org/b/72642> REGRESSION (r100648): NRWT crashes on Chromium when
        handling a crashing test

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test): Get the driver name from the port.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        (ChromiumDriverTest.test_crashed_process_name): Simulate a crash and check that we got the
        right crashed process name.

2011-11-17  Adam Roben  <aroben@apple.com>

        Fix NRWT's parsing of the number of excluded leaks

        Fixes <http://webkit.org/b/72635> NRWT crashes when parsing leaks files from which certain
        leaks were excluded

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._parse_leaks_output): Extract just the number of excluded leaks from the
        regular expression match, not the entire matched string.

        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest): Added some example output that shows how things look when leaks are
        excluded.
        (LeakDetectorTest.test_parse_leaks_output): Test that we parse the number of exclusions
        correctly.

2011-11-17  Adam Roben  <aroben@apple.com>

        Make NRWT find crash logs for the crashed process, which may not necessarily be the driver process

        Fixes <http://webkit.org/b/72526> REGRESSION (NRWT): WebKitTestRunner crash log gets saved
        when web process crashes, but WebProcess crash log should get saved instead

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result): Simplified a little to share more code between the case where we
        crashed when running the test and where we crashed when checking the expected rendering for
        a reftest. Changed to pass the crashed process name down to write_crash_report.
        (TestResultWriter.write_crash_report): Added crashed_process_name parameter, which we pass
        along to CrashLogs.find_newest_log rather than always using the driver name.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        (ChromiumDriver.run_test): Pass the driver name as the name of the crashed process if we
        crashed.

        * Scripts/webkitpy/layout_tests/port/test.py:
        (TestInstance.__init__): Initialize new web_process_crash attribute.
        (unit_test_list): Added new web-process-crash-with-stderr test, which is used by the new
        test this patch adds.
        (TestDriver.run_test): Pass a crashed process name to DriverOutput based on whether the test
        specifies that the driver crashed or the web process crashed.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (MainTest.test_web_process_crash_log): Added. Similar to test_crash_log, but uses a test for
        which we pretend the web process crashed rather than the driver process.

        (MainTest.test_run_singly_actually_runs_tests):
        (MainTest.test_unexpected_failures):
        (EndToEndTest.test_end_to_end):
        Updated magic numbers to account for new unexpected failing test added to unit_test_list.

2011-11-17  Tony Chang  <tony@chromium.org>

        [chromium] stop spamming features warning on every build
        https://bugs.webkit.org/show_bug.cgi?id=72629

        Reviewed by Ojan Vafai.

        We toggle $blobSupport on if $mediaStreamSupport is on.  Since
        $mediaStreamSupport is on by default for chromium, make the default
        for $blobSupport also on.

        * Scripts/build-webkit:

2011-11-17  Adam Roben  <aroben@apple.com>

        Remove extra quoting of call stacks and types passed to run-leaks by NRWT

        Fixes <http://webkit.org/b/72623> REGRESSION (NRWT): run-webkit-tests --leaks reports leaks
        that are supposed to be ignored

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._leaks_args): Removed extra quoting of call stacks and types. Quoting is only
        required when passing arguments via the shell (which we aren't doing here). It is not
        required by Perl's option-parsing code (as the comment I removed mistakenly claimed).

        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        (LeakDetectorTest.test_leaks_args): Updated expectations.

2011-11-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, run-bindings-tests fix after r91028.

        * Scripts/run-bindings-tests: Use scm.detection module.

2011-11-17  Jochen Eisinger  <jochen@chromium.org>

        Silence a warning about control reaching the end of a non-void function
        https://bugs.webkit.org/show_bug.cgi?id=72616

        Reviewed by Tony Gentilcore.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::verticalScrollbar):

2011-11-17  Adam Roben  <aroben@apple.com>

        Ignore some leaks in frameworks we link against on Lion

        Fixes <http://webkit.org/b/72609> Lion Leaks bot complains about a bunch of leaks that
        aren't WebKit's fault

        Reviewed by Antti Koivisto.

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks):
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):
        Added some call stacks to exclude on Lion that represent leaks in lower-level frameworks.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        (MacPort.is_lion): Added.

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        (MacPortTest.test_is_version_methods): Added tests for the is_leopard/is_snowleopard/is_lion
        methods.

2011-11-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] Disable ref tests
        https://bugs.webkit.org/show_bug.cgi?id=72599

        Reviewed by Xan Lopez.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Enforce disabled ref
        tests to avoid massive flakiness.

2011-11-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move WebKit2 C++ APIs to private API and build QML extension plugin on top of that

        A new extension object has been added to QQuickWebView (the same approach should be used
        for other API classes that need experimental APIs). The QML extension mechanism is then
        built on top of the experimental object.

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

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/UrlLoader.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/qtwebkit-private.prf: Added.
        * qmake/mkspecs/features/qtwebkit.prf:

2011-11-17  Adam Barth  <abarth@webkit.org>

        Move test_results_uploader.py out of layout_package
        https://bugs.webkit.org/show_bug.cgi?id=72590

        Reviewed by Eric Seidel.

        Most of the lines of code in this file are wrong, but I've restrained
        myself and only changed a few of them to generalized this class to the
        common package.

        This is part of a series of patches to remove layout_package.

        * Scripts/webkitpy/common/net/file_uploader.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py: Removed.

2011-11-17  Adam Barth  <abarth@webkit.org>

        Unreviewed. Fix style nits in printing.py.

        * Scripts/webkitpy/layout_tests/views/printing.py:

2011-11-17  Adam Barth  <abarth@webkit.org>

        Minor style nits in run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=72583

        Reviewed by Eric Seidel.

        This patch just fixes some minor style issues as I work my way back
        into this code.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-11-17  Adam Barth  <abarth@webkit.org>

        Move test_result_writer out of layout_package
        https://bugs.webkit.org/show_bug.cgi?id=72586

        Rubber-stamped by Eric Seidel.

        This is part of a series of patches to remove layout_package.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py.
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py: Removed.
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-11-17  Adam Barth  <abarth@webkit.org>

        svn-apply shouldn't magically move files into Source anymore
        https://bugs.webkit.org/show_bug.cgi?id=72579

        Reviewed by Eric Seidel.

        The Source directory has existed for long enough that we don't need
        svn-apply to magically re-write old-style patches anymore.

        * Scripts/VCSUtils.pm:
        (parseGitDiffHeader):
        (parseSvnDiffHeader):

2011-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add a list of contribution areas
        https://bugs.webkit.org/show_bug.cgi?id=72566

        Reviewed by Eric Seidel.

        Added ContributionAreas class.

        * Scripts/webkitpy/common/config/contributionareas.py: Added.
        * Scripts/webkitpy/common/config/contributionareas_unittest.py: Added.

2011-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Refactor ChangeLogTest.test_parse_reviewer_text
        https://bugs.webkit.org/show_bug.cgi?id=72572

        Reviewed by Eric Seidel.

        Refactored the test code by introduing two helper functions.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-16  Eric Seidel  <eric@webkit.org>

        Add SCMDetector object to make scm detection mockable
        https://bugs.webkit.org/show_bug.cgi?id=72247

        Reviewed by Adam Barth.

        I think SCM detection may eventually be rolled into Checkout,
        but this patch at least makes it possible to mock code-paths
        which rely on scm detection.
        In the process of replacing callers of these free-functions
        I found that one of the functions was no longer used,
        and that one of the callers could instead just use the SCM
        object it already had access to through port.host.scm().
        I also discovered that I was not calling Host._initialize_scm()
        and thus host.scm() was always returning None!

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py:
        * Scripts/webkitpy/common/checkout/scm/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-11-16  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        The C++ standard library interferes with Objective-C exceptions when built with -fno-exceptions.
        Apply the workaround that we use in other projects to WebKitTestRunner.

        * WebKitTestRunner/Configurations/Base.xcconfig: Use the prefix header for all targets.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Ditto.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Work around the C++ standard library obnoxiousness.

2011-11-16  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix build after WTR AX support
        https://bugs.webkit.org/show_bug.cgi?id=72560

        Reviewed by Geoffrey Garen.

        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * WebKitTestRunner/InjectedBundle/Target.pri:

2011-11-16  Tony Chang  <tony@chromium.org>

        repurpose the flexbox bot for grid layout
        https://bugs.webkit.org/show_bug.cgi?id=72557

        Reviewed by Ryosuke Niwa.

        Since new flexbox is enabled everywhere, we don't need this bot
        anymore.  However, work on grid layout has begun, so we can use this
        bot to compile with ENABLE_CSS_GRID_LAYOUT.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Just rename
        the bot on the waterfall, I will change the slave config to enable
        the compile flag and tests.

2011-11-11  Adrienne Walker  <enne@google.com>

        [chromium] Expose mock scrollbars to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=72195

        Reviewed by James Robinson.

        Because mock scrollbars are a global setting, reset between runs.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2011-11-16  James Robinson  <jamesr@chromium.org>

        [chromium] Enable video and canvas 2d compositing triggers by default for layout tests in the compositing directory
        https://bugs.webkit.org/show_bug.cgi?id=72562

        Reviewed by Dirk Pranke.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):

2011-11-16  Tony Chang  <tony@chromium.org>

        [NRWT] speculative fix for multiple subprocess test on cygwin
        https://bugs.webkit.org/show_bug.cgi?id=72518

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py: cygwin probably
            tries to emulate posix fd behavior.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-11-16  Dirk Pranke  <dpranke@chromium.org>

        Revert r100509; change was committed twice (first time as r100491).
        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-16  Dirk Pranke  <dpranke@chromium.org>

        Run a dummy test in the gpu configurations if there's nothing to do.
        https://bugs.webkit.org/show_bug.cgi?id=72498

        Reviewed by James Robinson.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        contributors_by_fuzzy_match is super slow
        https://bugs.webkit.org/show_bug.cgi?id=72540

        Reviewed by Eric Seidel.

        Make contributors_by_name do case insensitive search using a dictionary.

        Also call contributors_by_name first in contributors_by_fuzzy_match now that it's fast
        because that's the most common case.

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

2011-11-16  David Levin  <levin@chromium.org>

        check-webkit-style should recognize functions even if they have OVERRIDE after them.
        https://bugs.webkit.org/show_bug.cgi?id=72515

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-11-16  Tony Chang  <tony@chromium.org>

        [NRWT] refactor drivers to require pixel_tests param
        https://bugs.webkit.org/show_bug.cgi?id=72517

        Reviewed by Ojan Vafai.

        No tests, just a refactoring.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-11-16  Dirk Pranke  <dpranke@chromium.org>

        Run a dummy test in the gpu configurations if there's nothing to do.
        https://bugs.webkit.org/show_bug.cgi?id=72498

        Reviewed by James Robinson.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-16  Chris Fleizach  <cfleizach@apple.com>

        WebKitTestRunner needs to support accessibility-related DRT APIs
        https://bugs.webkit.org/show_bug.cgi?id=42131

        Reviewed by Beth Dakin.

        Port the AX code in DRT to WKTestRunner by using IDL.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (horizontalScrollbarCallback):
        (verticalScrollbarCallback):
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: Added.
        (WTR::AccessibilityController::create):
        (WTR::AccessibilityController::AccessibilityController):
        (WTR::AccessibilityController::~AccessibilityController):
        (WTR::AccessibilityController::makeWindowObject):
        (WTR::AccessibilityController::wrapperClass):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::elementAtPoint):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h: Added.
        (WTR::AccessibilityController::logFocusEvents):
        (WTR::AccessibilityController::logValueChangeEvents):
        (WTR::AccessibilityController::logScrollingStartEvents):
        (WTR::AccessibilityController::logAccessibilityEvents):
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::notificationReceived):
        (WTR::AccessibilityController::resetToConsistentState):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp: Added.
        (WTR::AccessibilityTextMarker::create):
        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
        (WTR::AccessibilityTextMarker::~AccessibilityTextMarker):
        (WTR::AccessibilityTextMarker::platformTextMarker):
        (WTR::AccessibilityTextMarker::wrapperClass):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.h: Added.
        (WTR::AccessibilityTextMarker::isEqual):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp: Added.
        (WTR::AccessibilityTextMarkerRange::create):
        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (WTR::AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (WTR::AccessibilityTextMarkerRange::platformTextMarkerRange):
        (WTR::AccessibilityTextMarkerRange::wrapperClass):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.h: Added.
        (WTR::AccessibilityTextMarkerRange::isEqual):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: Added.
        (WTR::AccessibilityUIElement::create):
        (WTR::AccessibilityUIElement::wrapperClass):
        (WTR::AccessibilityUIElement::isValid):
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isActionSupported):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::accessibilityValue):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::isVisible):
        (WTR::AccessibilityUIElement::isOffScreen):
        (WTR::AccessibilityUIElement::isCollapsed):
        (WTR::AccessibilityUIElement::isIgnored):
        (WTR::AccessibilityUIElement::hasPopup):
        (WTR::AccessibilityUIElement::hierarchicalLevel):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::speak):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaIsGrabbed):
        (WTR::AccessibilityUIElement::ariaDropEffects):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: Added.
        (WTR::AccessibilityUIElement::platformUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::accessibilityController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityTextMarkerMac.mm: Added.
        (WTR::AccessibilityTextMarker::isEqual):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityTextMarkerRangeMac.mm: Added.
        (WTR::AccessibilityTextMarkerRange::isEqual):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: Added.
        (+[NSString stringWithJSStringRef:]):
        (-[NSString createJSStringRef]):
        (-[AccessibilityNotificationHandler initWithPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::descriptionOfValue):
        (WTR::attributesOfElement):
        (WTR::concatenateAttributeAndValue):
        (WTR::convertNSArrayToVector):
        (WTR::descriptionOfElements):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (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::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::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):
        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        (WTR::LayoutTestController::platformName):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2011-11-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix use of config.tests

        We were checking @buildArgs to determine if the optional argument was
        passed or not, but this is not the right way to do that in Perl. The
        right way is to not use a prototype for the function, and to pass
        the list as a reference (to avoid list expansion). That way we can
        check the number of arguments, and choose the right code path based
        on that.

        We were also missing a default-value of 0 for any feature that's not
        set in features.prf.

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (buildQMakeProject):

2011-11-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prospective fix for broken plugin tests

        Don't hide symbols for the NPAPI test plugin

        Rubber-stamped by Andreas Kling.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-11-16  Adam Roben  <aroben@apple.com>

        Move filenames/line numbers off to the right edge in Leaks Viewer

        Fixes <http://webkit.org/b/72510> Callstacks in Leaks Viewer are a little hard to read
        because filenames/line numbers are right next to function names

        Reviewed by Andreas Kling.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserImpl.js:
        (LeaksParserImpl.prototype._createNode): Separate the filename and line number out from the
        function name. Use the filename as the profile node's URL (we don't have enough info to
        compute a real URL currently) and the line number as the profile node's line number so the
        Inspector code will put them on the right side of the callstack graph.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (WebInspector.displayNameForURL): Stubbed this out. For now we don't ever get any URLs
        passed here, just filenames.

        (WebInspector.linkifyURLAsNode):
        (WebInspector.linkifyResourceAsNode):
        Copied and slightly modified from inspector.js.

2011-11-16  Adam Roben  <aroben@apple.com>

        Make Leaks Viewer load builds from the new Lion Leaks bot

        Fixes <http://webkit.org/b/72507> REGRESSION: Leaks Viewer no longer shows recent leaky builds

        Reviewed by Andreas Kling.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._displayURLPrompt): Use the Lion Leaks bot instead of the nonexistent
        SnowLeopard one.

2011-11-16  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Clean up the offline apps-related functions in ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=72132

        Reviewed by Kenneth Rohde Christiansen.

        `ewk_settings_cache' and `ewk_view_setting_cache' are too common
        prefixes for code that is related only to the HTML5 app cache
        features.

        Use `ewk_settings_application_cache' and
        `ewk_view_setting_application_cache' instead.

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

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf: Place the common hide_symbols and -Bsymbolic-functions
        magic here where we handle all TEMPLATE = lib .pro files (except plugins).
        * WebKitTestRunner/InjectedBundle/Target.pri: Mark the injected bundle as plugin, which also
        removes the .so.0.0.0 and just produces .so.

2011-11-16  Peter Beverloo  <peter@chromium.org>

        Explicitly include unistd.h in TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=72385

        This is needed for the sleep() call in the indicateTestFailure method,
        which seems to be implicitly available for other platforms. This is not
        the case on Android.

        Reviewed by Steve Block.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:

2011-11-16  Peter Beverloo  <peter@chromium.org>

        [Chromium] Update the Android NDK version being pulled in by update-webkit-chromium
        https://bugs.webkit.org/show_bug.cgi?id=72384

        Update to Android NDK r7, which was released last Friday. This adds
        support for RTTI and the -mimplicit-it gcc flag, which are required to
        respectively build ICU and Skia.

        Reviewed by Steve Block.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):

2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r100266.
        http://trac.webkit.org/changeset/100266

        Broke WTR.

        * qmake/mkspecs/features/default_post.prf:

2011-11-16  Eric Seidel  <eric@webkit.org>

        check-webkit-style broken by r99773: "Could not determine the port"
        https://bugs.webkit.org/show_bug.cgi?id=72275

        Reviewed by Adam Barth.

        I will continue engaging hacks, until windows improves.

        * Scripts/webkitpy/common/host.py:
         - Host uses self.executive instead of self._executive like Port does.
         - I wanted to test this, but it mutates global state -- thus impossible to unittest at this time.

2011-11-16  Eric Seidel  <eric@webkit.org>

        check-webkit-style broken by r99773: "Could not determine the port"
        https://bugs.webkit.org/show_bug.cgi?id=72275

        Reviewed by Adam Barth.

        Engage windows hacks harder.

        This is a speculative fix for ChromiumWin.  We're now
        creating an SCM object much earlier, so we need to
        engage our "awesome" windows hacks earlier.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-11-15  Darin Adler  <darin@apple.com>

        DRT's uiElementAttributeValueCallback function is leaky
        https://bugs.webkit.org/show_bug.cgi?id=72453

        Reviewed by Dan Bernstein.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementAttributeValueCallback): Use JSRetainPtr and don't leak.

2011-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        Implement edit-distance based reviewer recognition algorithm
        https://bugs.webkit.org/show_bug.cgi?id=72351

        Reviewed by Eric Seidel.

        Implement an algorithm to recognize reviewer's name based on its edit distance (or more precisely
        its Levenshtein distance) to each reviewer's full name, first, last and middle names, and IRC nicknames.
        Furthermore, we cap the maximum edit distance at len(name) - 1 to avoid matching a bogus string like
        "build fix" to a reviewer's name (e.g. with with edit distance 9).

        This algorithm is implemented in CommitterList.contributors_by_fuzzy_match. The function to compute
        the edit distance is implemented in edit_distance.py.

        Also moved _has_valid_reviewer from ValidateReviewer to ChangeLogEntry because we can no longer rely
        on the presence of ChangeLogEntry.reviewer() to verify that reviewer string is nicely formatted.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/common/editdistance.py: Added.
        * Scripts/webkitpy/common/editdistance_unittest.py: Added.
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py: Removed.

2011-11-15  Tony Chang  <tony@chromium.org>

        Skip a failing webkitpy test on cygwin.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-11-15  Sam Weinig  <sam@webkit.org>

        TestWebKitAPI should not put its resources in the root products directory
        https://bugs.webkit.org/show_bug.cgi?id=72446

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Change the copy resources phase to place the resources in a TestWebKitAPI.resources
        directory.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        (TestWebKitAPI::DeviceScaleFactorOnBack::url):
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        (TestWebKitAPI::DynamicDeviceScaleFactor::url):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::createURLForResource):
        Update calls to retrieve files from the bundle to look in the newly
        created subdirectory.

2011-11-15  Tony Chang  <tony@chromium.org>

        Fix a webkitpy test caused by renaming the accelerate-video flag in r100355.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed, fix test-webkitpy tests.  Move the check for image results
        earlier.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-15  James Robinson  <jamesr@chromium.org>

        [chromium] Fix flag name in chromium DumpRenderTree for accelerated video trigger
        https://bugs.webkit.org/show_bug.cgi?id=72444

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed, better fix for ref tests failures on SL Intel bot.
        Revert the previous change and return None if pixel results from
        either the test page or the expected page is missing.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-15  James Robinson  <jamesr@chromium.org>

        [chromium] Merge chromium-gpu layout test configurations into non-gpu versions
        https://bugs.webkit.org/show_bug.cgi?id=72402

        Reviewed by Dirk Pranke.

        Allows the compositing layout tests to run in the normal layout test run. This sets the default compositing
        triggers in DumpRenderTree to more closely match what we use in Chromium. There are two exceptions, canvas 2d
        and video (media) are still controlled by an explicit trigger so that they are true when platform=chromium-gpu
        and false otherwise, so that we can run the same set of tests in both configurations. This isn't necessary for
        the normal compositing triggers since we currently run the compositing tests in only one configuration - with
        compositing enabled.

        Since the compositing tests are currently marked WONTFIX SKIP on non-GPU platforms in test_expectations.txt this
        patch should not impact any tests.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedCompositingForVideoEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed, try to fix ref tests failures on SL Intel bot.
        It looks like ImageDiff isn't returning an image diff.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:

2011-11-15  Tony Chang  <tony@chromium.org>

        Unreviewed fix of ref-tests on GTK+.
        If a driver is never started, _xvfb_process is never set.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-11-14  Tony Chang  <tony@chromium.org>

        [NRWT] Reftests should run even when pixel tests are disabled.
        https://bugs.webkit.org/show_bug.cgi?id=60605

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Only skip ref tests if --no-ref-tests is passed.
            Also add an assert to make sure we get image hashes back when running ref tests.
        * Scripts/webkitpy/layout_tests/controllers/worker.py: Use Driver.has_crashed() instead of poll().
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py: Use DriverProxy.
        * Scripts/webkitpy/layout_tests/port/driver.py: Add DriverProxy which does the work
            of starting a pixel driver if needed.  It handles the logic of sending the test
            to the correct driver.  Also renamed Driver.poll() to Driver.has_crashed().
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py: Switch to using DriverProxy so we get test coverage.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Add --no-ref-tests.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Test --no-ref-tests.

2011-11-15  David Kilzer  <ddkilzer@apple.com>

        Don't use File::Slurp for run-leaks unit tests
        <http://webkit.org/b/72356>

        Reviewed by Daniel Bates.

        * Scripts/webkitperl/run-leaks_unittest/RunLeaks.pm: Added.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl:
        Extracted common package logic into RunLeaks.pm.  Fixed call to
        RunLeaks::parseLeaksOutput().
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl: Ditto.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl: Ditto.

2011-11-15  Peter Kasting  <pkasting@google.com>

        Handle svn 1.7 when detecting whether a directory is in an svn checkout.
        https://bugs.webkit.org/show_bug.cgi?id=72349

        Reviewed by Adam Roben.

        * Scripts/VCSUtils.pm:
        (isSVNDirectory):

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/default_post.prf: Place the common hide_symbols and -Bsymbolic-functions
        magic here where we handle all TEMPLATE = lib .pro files.

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed prospective --minimal build fix.

        * DumpRenderTree/qt/DumpRenderTree.pro: Avoid USE_SYSTEM_MALLOC=0
        and USE_SYSTEM_MALLOC=1 appearing in DEFINES at the same time.

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unreviewed --minimal build fix.

        * Scripts/build-webkit: Add to DEFINES+= from @options only if there is
        a define. The "coverage" option doesn't have one, causing "DEFINES+= =0"
        to make moc's preprocessor abort.

2011-11-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        build-webkit: Accept --cmakearg to pass additional arguments to CMake.
        https://bugs.webkit.org/show_bug.cgi?id=72156

        Reviewed by Daniel Bates.

        Similar to --makearg and --qmakearg, --cmakearg lets one pass
        additional arguments to CMake (eg. --cmakearg="-DFOO=bar").

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2011-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        Improve ChangeLogEntry's reviewer parsing algorithm part 2
        https://bugs.webkit.org/show_bug.cgi?id=72340

        Reviewed by Eric Seidel.

        This patch improves the recognition of NOBODY, wrestler names, and parenthesized clauses,
        and prepares ChangeLogEntry to support edit-distance-based reviewer-name recognition.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-14  Eric Seidel  <eric@webkit.org>

        check-webkit-style broken by r99773: "Could not determine the port"
        https://bugs.webkit.org/show_bug.cgi?id=72275

        Reviewed by Adam Barth.

        The TestExpectationsChecker was using a generic try/except block
        which caught all exceptions, so we didn't notice that failing
        to pass a Host to PortFactory was causing an exception in port instantiation.
        I've factored out the "lookup the port" logic into a separate function
        which I've now unittested.  This should fix the bug and prevent
        others like it from occuring the the future.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Add --css-grid-layout to build-webkit and the build systems
        https://bugs.webkit.org/show_bug.cgi?id=72320

        Reviewed by Ojan Vafai.

        * Scripts/build-webkit:
        Added the option.

2011-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100192.
        http://trac.webkit.org/changeset/100192
        https://bugs.webkit.org/show_bug.cgi?id=72328

        Caused infinite tests to fail (Requested by abarth on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2011-11-14  Tony Chang  <tony@chromium.org>

        Remove the CSS3_FLEXBOX compile time flag and enable on all ports
        https://bugs.webkit.org/show_bug.cgi?id=72196

        Reviewed by Ojan Vafai.

        * Scripts/build-webkit:

2011-11-14  John Yani  <vanuan@gmail.com>

        new-run-webkit-tests should not be locale dependent https://bugs.webkit.org/show_bug.cgi?id=68691
        Override LOCALE to en_US.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/base.py:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        [Chromium] build-webkit silently drops the features flags
        https://bugs.webkit.org/show_bug.cgi?id=72293

        Reviewed by Tony Chang.

        Chromium still ignores @features but now we give a warning!

        * Scripts/build-webkit: Check if one of the features is different
        from the default and print a warning in this case.

2011-11-14  David Kilzer  <ddkilzer@apple.com>

        run-leaks does not work on Lion?
        <http://webkit.org/b/71059>
        <rdar://problem/10428527>

        Reviewed by Adam Roben.

        The output of leaks(1) changed again in Lion to move the
        "leaks Report Version: 2.0" line from the first line of the
        output to just above the "Process " lines that run-leaks is
        interested in parsing.  This required using a more generic
        algorithm to find the start of the "Process " lines.

        * Scripts/run-leaks:
        (parseLeaksOutput): Make the code to skip headers more generic.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl: Added.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl: Added.
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl: Added.

2011-11-14  Lei Zhang  <thestig@chromium.org>

        Missing include in Tools/DumpRenderTree/chromium/AccessibilityUIElement.h:
        https://bugs.webkit.org/show_bug.cgi?id=72088

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/AccessibilityUIElement.h:

2011-11-14  Andrew Scherkus  <scherkus@chromium.org>

        [Chromium] Skip media layout tests on chromium-gpu-cg-mac-leopard platform
        https://bugs.webkit.org/show_bug.cgi?id=72147

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move the QtWebKit module file to match the layout of Qt's mkspecs

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/modules/qt_webkit.pri: Renamed from Tools/qmake/qt_webkit.pri.

2011-11-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Disable plugins on X11 for WK2

        Reviewed by Kenneth Rohde Christiansen.

        Currently plugins are in-process and they crash in the likely case of
        a plugin installation that uses Qt 4, which beautifully clashes with the
        Qt 5 based QtWebProcess.

        * qmake/mkspecs/features/features.prf:

2011-11-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add support for config tests for Qt 5

        This allows us to build and run configure-tests at build
        time to determine if a given platform feature is available.

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        * qmake/configure.pro: Added.
        * qmake/mkspecs/features/features.prf:
        * qmake/sync.profile: Added.

2011-11-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove the QStyle dependency in Qt's mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=67773

        This refactoring splits up RenderThemeQt with two
        subclasses, a QStyle-backed one, and a Mobile version
        that uses the old mobile theme for now.

        QStyle availability is detected at compile time, and
        its use is determined by the QT_WEBKIT_USE_MOBILE_THEME
        environment variable.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * qmake/mkspecs/features/features.prf: HAVE_QSTYLE detection,
        based on availability of QtWidgets.
        * qmake/mkspecs/features/webcore.prf: cleanup.

2011-11-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed, rolling out r100116.
        http://trac.webkit.org/changeset/100116

        r100104 was rolled out, so no longer needed

        * Scripts/run-bindings-tests:

2011-11-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed, rolling out r100104.
        http://trac.webkit.org/changeset/100104
        https://bugs.webkit.org/show_bug.cgi?id=72247

        broke windows builds

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py:
        * Scripts/webkitpy/common/checkout/scm/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-11-14  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix after r100104. run-binding-tests broke.

        * Scripts/run-bindings-tests: Explicitely use scm.detection.

2011-11-13  Eric Seidel  <eric@webkit.org>

        Add SCMDetector object to make scm detection mockable
        https://bugs.webkit.org/show_bug.cgi?id=72247

        Reviewed by Adam Barth.

        I think SCM detection may eventually be rolled into Checkout,
        but this patch at least makes it possible to mock code-paths
        which rely on scm detection.
        In the process of replacing callers of these free-functions
        I found that one of the functions was no longer used,
        and that one of the callers could instead just use the SCM
        object it already had access to through port.host.scm().
        I also discovered that I was not calling Host._initialize_scm()
        and thus host.scm() was always returning None!

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps.py:
        * Scripts/webkitpy/common/checkout/scm/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/detection.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-11-13  Gavin Peters  <gavinp@chromium.org>

        command line control of webcore log channels in chromium DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=72126
        
        The option --webcore-log-channels=<foo>,<bar>,<quux> is the same as
        what chromium takes.

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):

2011-11-12  Ariya Hidayat  <ariya@sencha.com>

        [Qt] Fix minor config typo in the build tool documentation
        https://bugs.webkit.org/show_bug.cgi?id=72194

        Reviewed by Andreas Kling.

        * qmake/README:

2011-11-11  Stephen Chenney  <schenney@chromium.org>

        [Chromium] DRT does not have LayoutTestController.pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=49257

        Adds the remaining missing layout test functionality for printing.

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Add bindings for new JS methods
        (parsePageNumber): Method to parse JS arguments for a page number
        (parsePageNumberSizeMargins): Method to parse JS arguments for page size and margins
        (LayoutTestController::pageSizeAndMarginsInPixels): Get the page size and margins for a given page.
        (LayoutTestController::isPageBoxVisible): get the visibility status for printing
        (LayoutTestController::pageProperty): get a specific CSS property when in printing mode
        * DumpRenderTree/chromium/LayoutTestController.h: Add declarations for new methods

2011-11-11  Darin Adler  <darin@apple.com>

        Remove all releaseRef implementations except for RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=71423

        Reviewed by Julien Chaffraix.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (createXMLStringFromWebArchiveData): Use leakRef instead of releaseRef.

2011-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        Make ChangeLogEntry's reviewer parsing algorithm support last 4 WebCore change logs
        https://bugs.webkit.org/show_bug.cgi?id=72090

        Reviewed by Eric Seidel.

        Significantly improve ChangeLogEntry's reviewer parsing algorithm. This version can successfully parse
        ChangeLog, ChangeLog-2011-10-19, ChangeLog-2011-06-04, ChangeLog-2011-02-16, and ChangeLog-2010-12-06.

        yay! r100002.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-11  Tony Chang  <tony@chromium.org>

        Remove --force from gclient sync.  The bots seem to have made it past
        the update step.

        * Scripts/update-webkit:

2011-11-11  Tony Chang  <tony@chromium.org>

        Add --force to gclient sync. Once the cq bots cycle, we can remove
        this since it slows down the normal sync.

        * Scripts/update-webkit:

2011-11-11  Marc-Antoine Ruel  <maruel@chromium.org>

        When --force is used, also use --reset
        https://bugs.webkit.org/show_bug.cgi?id=72129

        Reviewed by Dimitri Glazkov.

        * Scripts/update-webkit-chromium:

2011-11-11  Tony Chang  <tony@chromium.org>

        allow two chromium drivers to run at the same time in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=72067

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py: close_fds=True on
            posix prevents the subprocesses from sharing the same fd for stdin.
            Sharing the same fd prevents us from closing the files unless all references
            to the fd are closed.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: In addition
            to adding a test for this, speed up a test (from 3sec to 0) by fixing
            the timeout override. It looks like it regressed in r95875.

2011-11-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99964.
        http://trac.webkit.org/changeset/99964
        https://bugs.webkit.org/show_bug.cgi?id=72124

        Broke too many Qt tests (Requested by tronical_ on #webkit).

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/webcore.prf:

2011-11-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove the QStyle dependency in Qt's mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=67773

        This refactoring splits up RenderThemeQt with two
        subclasses, a QStyle-backed one, and a Mobile version
        that uses the old mobile theme for now.

        QStyle availability is detected at compile time, and
        its use is determined by the QT_WEBKIT_USE_MOBILE_THEME
        environment variable.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * qmake/mkspecs/features/features.prf: HAVE_QSTYLE detection,
        based on availability of QtWidgets.
        * qmake/mkspecs/features/webcore.prf: cleanup.

2011-11-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add missing include to PlatformWebViewQt

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-11-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix incremental builds on Windows after buildsystem refactor

        The qmake rules to ensure that we run make on the derived sources
        before running qmake on the target were inside a unix-scope, which
        resulted in flakey builds on Windows.

        We now generate a rule on all platforms that ensures that "make qmake"
        will always run make on the derived sources. In addition, on platforms
        that have GNU make (where "make incremental" does not run "make qmake",
        but only "make"), we add a similar rule that ensures that any time the
        target makefile is regenerated we first run qmake and make on the derived
        sources. This rule relies on GNU make's order-only-prerequisites to
        not trigger a qmake-run of the target every time we run make.

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

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/functions.prf:

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Remove QWebNavigationController
        https://bugs.webkit.org/show_bug.cgi?id=72113

        Reviewed by Andreas Kling.

        Adapt to the move of the QWebNavigationController functions/properties to
        QQuickWebView.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        * MiniBrowser/qt/qml/BrowserWindow.qml:

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system tweak

        Reviewed by Tor Arne Vestbø.

        Be a good qmake citizen, return true from our linkStaticLibrary
        "test" function.

        * qmake/mkspecs/features/functions.prf:

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add support for QT += webkit-private

        Reviewed by Tor Arne Vestbø.

        * qmake/qt_webkit.pri: Declare private headers.

2011-11-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix attempt after r99907. Since that revision
        GTK layout tests were not running at all...

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-11-10  Andrew Scherkus  <scherkus@chromium.org>

        [Chromium] only run media GPU layout tests on platforms supporting accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=72001

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-05  Filip Pizlo  <fpizlo@apple.com>

        bencher script should support remote benchmarking
        https://bugs.webkit.org/show_bug.cgi?id=71618

        Rubber-stamped by Geoff Garen.
        
        Added the following features:
        
        - Benchmark report tells you the hostname and machine model (according to
          'sysctl hw.model') of the machine you did the run on, and svn revision number
          (according to 'svn info') of the VMs you're testing.
        
        - The --remote option. You give this an ssh-style hostname (i.e. user@host is
          acceptable, in addition to just host, in which case your username is used)
          and it automatically packages the build directories of the VMs you're testing,
          sends them to the remote machine along with your copy of the bencher script
          and all of the options you passed.  This pretty much seamlessly allows you
          to run a set of benchmarks on any machine that is sufficiently compatible with
          yours (i.e. similar OS) and that has the appropriate ~/.bencher file, which
          must now include a tempPath setting that tells bencher where to put files
          when that machine is used as a slave in a remote benchmarking run.
          
        - Added yet another way of specifying which benchmarks to run. This was sort of
          necessary for --remote to work as expected. Previously, you either said what
          suites to exclude (for example --exclude-sunspider) or that you only wanted
          to run one suite to the exclusion of others (--sunspider-only). But it's
          often better to just be able to specify the list of suites you want. This is
          now supported. You can say, for example, --v8 --sunspider, which means, just
          run V8 and SunSpider. This is equivalent to saying --exclude-kraken, which is
          still supported.

        * Scripts/bencher:

2011-11-10  Tony Chang  <tony@chromium.org>

        Lazily start DRT instances in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=72038

        Reviewed by Eric Seidel.

        Just a refactoring, no new tests.

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-10  Ryosuke Niwa  <rniwa@webkit.org>

        ChangeLog mistakenly recognizes any string between '*' and ':' as touched files
        https://bugs.webkit.org/show_bug.cgi?id=72057

        Reviewed by Eric Seidel.

        Make the regular expression more explicit.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2011-11-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70023

        Reviewed by Simon Hausmann.

        Rework our basic plugin support in a way that does
        not need a bridge between Qt and X. The solution is
        based on getting the content drawed by the plugin
        from the server as an image and creating a QImage
        from it.

        * qmake/mkspecs/features/features.prf: Enable X11
        plugins if Qt is built with the xcb-xlib backend.

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix keyboard related layout tests after API refactoring

        Reviewed by Tor Arne Vestbø.

        Send key events to the handling page item, not the view.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::sendEvent):
        (WTR::PlatformWebView::postEvent):

2011-11-10  Alexandre Mazari  <amazari@igalia.com>

        [GTK] Make the ENABLE(FEATURE) macro work in DRT
        https://bugs.webkit.org/show_bug.cgi?id=71940

        Reviewed by Philippe Normand.

        * GNUmakefile.am:
        Add webcore_cppflags to Programs_DumpRenderTree_CPP so
        ENABLE_* variables are part of the environment.

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix focus related layout tests after API refactoring

        Reviewed by Tor Arne Vestbø.

        Make sure the focus is set on the page now, not on the view
        (which doesn't actually handle the focus).

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::WrapperWindow::handleStatusChanged):

2011-11-10  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Merge QTouchWebView and QDesktopWebView into one class
        https://bugs.webkit.org/show_bug.cgi?id=71355

        Reviewed by Kenneth Rohde Christiansen.

        Make MiniBrowser and WebKitTestRunner work again after the
        merge.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        * MiniBrowser/qt/main.cpp:
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/qml/DesktopView.qml: Removed.
        * MiniBrowser/qt/qml/TouchView.qml: Removed.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2011-11-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Change semantics of the haveQt() function to match API promises

        Having Qt 5 does not imply that we have Qt 4, from an API point of
        view, as a major version can in theory break BC/SC. Our minimum
        version of Qt 4 will always be the latest released version of Qt 4,
        so the only place we should use haveQt(4, x) is when checking for
        the minimum requirements.

        Reviewed by Simon Hausmann.

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

2011-11-07  Kaustubh Atrawalkar  <kaustubh@motorola.com> and Sergio Villar Senin  <svillar@igalia.com>

        [WK2] [GTK] Implement a MouseDown/MouseUp/MouseMoveTo/MouseScrollBy/LeapForward functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=69411

        Reviewed by Martin Robinson.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        use the EventSender instead of WebProcess Event Simulation.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::WTREventQueueItem::WTREventQueueItem):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::getMouseButtonModifiers):
        (WTR::eventSenderButtonToGDKButton):
        (WTR::EventSenderProxy::createMouseButtonEvent):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::replaySavedEvents):
        (WTR::EventSenderProxy::sendOrQueueEvent):
        (WTR::webkitModifiersToGDKModifiers):
        (WTR::getGDKKeySymForKeyRef):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::leapForward):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable exports and constructor functions in static libs

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf: Use --whole-archive and their
        mac/win32-msvc equivalents when linking static libraries into a shared
        library or executable.

2011-11-09  Hayato Ito  <hayato@chromium.org>

        [NRWT] Make results.html aware of reference filename in reftests.
        https://bugs.webkit.org/show_bug.cgi?id=71574

        Reviewed by Ryosuke Niwa.

        If a reference filename is different from the default one, include that in result summary
        so results.html can link to the correct reference file.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Update project files and
        add LTC stubs for new methods.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        (LayoutTestController::setBackingScaleFactor):
        * waf/build/settings.py:

2011-11-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Support XCode 4 when building deps.

        * wx/install-unix-extras:

2011-11-09  Eric Seidel  <eric@webkit.org>

        Remove the concept of platform-dependent unittests
        https://bugs.webkit.org/show_bug.cgi?id=71963

        Unreviewed.  Fix test-webkitpy on cygwin.

        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-11-09  Dana Jansens  <danakj@chromium.org>

        Add cc-bugs group to watch changes in chromium graphics
        https://bugs.webkit.org/show_bug.cgi?id=71690

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/committers.py: Make new Account superclass for non-contributor watch accounts
        * Scripts/webkitpy/common/config/committers_unittest.py: Test the Account superclass
        * Scripts/webkitpy/common/config/watchlist: Add cc-bugs@google.com to watch list
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Check for Accounts also, but require it to be the bugzilla email for any Account/Contributor/etc.

2011-11-09  Eric Seidel  <eric@webkit.org>

        Remove more platform-dependent unittests
        https://bugs.webkit.org/show_bug.cgi?id=71971

        Reviewed by Adam Barth.

        Tests which only run on a couple platforms will break.
        All tests should run on all platforms where possible.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:

2011-11-09  Ojan Vafai  <ojan@chromium.org>

        Merge in results to the test results server even if build numbers conflict
        https://bugs.webkit.org/show_bug.cgi?id=71967

        Reviewed by Tony Chang.

        This was initially meant to be a sanity check that we don't
        enter duplicate runs, but it turns out that we can reasonably get
        in these situations when a builder is clobbered (e.g. the build
        numbers start over again from 0).

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-11-09  Eric Seidel  <eric@webkit.org>

        Remove the concept of platform-dependent unittests
        https://bugs.webkit.org/show_bug.cgi?id=71963

        Reviewed by Adam Barth.

        These have been the source of never-ending sadness.
        We'd change behavior and forget to update results in
        some unittests because they were only run on certain platforms.
        This change removes a large source of these platform-dependent
        unittests, which was caused by the port_maker stuff.

        It's possible that this change will break test-webkitpy
        on some platforms, but that will be a one-time cost.
        I will fix the breakage by removing the platform-dependantness
        of any such broken tests.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:

2011-11-09  Eric Seidel  <eric@webkit.org>

        Make the Port object have a Host
        https://bugs.webkit.org/show_bug.cgi?id=71961

        Reviewed by Adam Barth.

        This has been a long time coming.
        Now that Port has a Host object, it's very easy
        to write unittests which use a properly mocked Port.
        Soon we will remove the executive, filesystem and user
        members of Port and get everything through the Host.

        Note how in many callsites we're actually removing
        explicit mocks, since we're now always going to get the
        correct Executive/User/FileSystem from the
        Host and callsites don't need to be careful to pass each one.

        This is prep-work for adding a new Environment member to
        Host and needing to be able to access the Environment
        member from Port functions w/o needing to pass an Environment
        object (or appropriate Mock) every place we create a Port object.
        Now that we have a single Host object to reach out through, its
        simple to add additional functionality (like Environment) while
        keeping our unittests properly mocked.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/port/apple.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-11-09  Dominic Mazzoni  <dmazzoni@google.com>

        [Chromium] Implement AccessibilityUIElement::insertionPointLineNumberGetterCallback
        https://bugs.webkit.org/show_bug.cgi?id=71561

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::insertionPointLineNumberGetterCallback):

2011-11-09  Benjamin Poulain  <bpoulain@apple.com>

        Implement dumpProgressFinishedCallback() for Mac layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=66772

        Reviewed by Simon Fraser.

        When dumpProgressFinishedCallback is enabled, DumpRenderTree should output
        "postProgressFinishedNotification" on FrameLoaderClient::postProgressFinishedNotification().

        On Mac, the FrameLoaderClient post a notification. This patch add handling for this notification
        in the FrameLoadDelegate and print the output in response to the notification.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate webViewProgressFinishedNotification:]):

2011-11-09  Philippe Normand  <pnormand@igalia.com>

        [GTK][DRT] window internals object is not reset after each test
        https://bugs.webkit.org/show_bug.cgi?id=71890

        Reviewed by Martin Robinson.

        Call WebCoreTestSupport::resetInternalsObject without going
        through DumpRenderTreeSupport.

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

2011-11-09  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementAttributeValue):

2011-11-09  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * DumpRenderTree/AccessibilityUIElement.h:

2011-11-09  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::makeJSAccessibilityUIElement):
        A bad merge added this check that is making the bots sad.

2011-11-09  Chris Fleizach  <cfleizach@apple.com>

        AX: crash when accessing selectedTab in a tab list
        https://bugs.webkit.org/show_bug.cgi?id=70938

        Reviewed by Beth Dakin.

        Add the ability to retrieve an element through an arbitrary attribute.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementAttributeValueCallback):
        (AccessibilityUIElement::uiElementAttributeValue):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementAttributeValue):

2011-11-09  Andy Wingo  <wingo@igalia.com>

        Add webkitdirs.pm:getArchitecture implementation for GTK
        https://bugs.webkit.org/show_bug.cgi?id=71370

        Reviewed by Xan Lopez.

        * Scripts/webkitdirs.pm (determineArchitecture): Add an
        implementation for ports using autotools, so that a vanilla
        `run-javascriptcore-tests --gtk' invocation doesn't pass --32-bit
        to build-jsc on x86-64 machines.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r99707.
        http://trac.webkit.org/changeset/99707

        Re-enable until we can disable it together with tests in one
        shot.

        * qmake/mkspecs/features/features.prf:

2011-11-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Disable use of QtUiTools if the library/module is not found

        We rely on the lookup order of prf files to inject our own uitools.prf
        that will verify that QtUiTools is in fact present before allowing the
        CONFIG += uitools to have any effect.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * qmake/mkspecs/features/uitools.prf: Added.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r99701.
        http://trac.webkit.org/changeset/99701

        Breaks Qt mac build

        * qmake/mkspecs/features/functions.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prospective build fix for Win32/Mac with xmlpatterns

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/features.prf: Disable XSLT support initially.
        We default to XSLT support if qxmlpatterns is available. However qxmlpatterns
        is not up to the task of full XSLT support, so we should disable it.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable exports and constructor functions in static libs

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf: Use --whole-archive and their
        mac/win32-msvc equivalents when linking static libraries into a shared
        library or executable.

2011-11-09  Philippe Normand  <pnormand@igalia.com>

        [GTK][DRT] window internals object is not reset after each test
        https://bugs.webkit.org/show_bug.cgi?id=71890

        Reviewed by Xan Lopez.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): reset the Internals object after each test.

2011-11-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Detect presence of QtUiTools and enable it only when available

        The disable_uitools option was a workaround for missing detection.

        Reviewed by Simon Hausmann.

        * QtTestBrowser/QtTestBrowser.pro:
        * qmake/mkspecs/features/default_post.prf:
        * qmake/mkspecs/features/default_pre.prf:

2011-11-09  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't override config for the build_pass of debug_and_release

        Qmake will parse the profile once for each configuration (debug and
        release), with the build_pass option set. In that situation we don't
        want to override what qmake is setting explicitly, otherwise the
        debug-step will end up hitting all the release-scopes.

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unbreak the Qt build (copy & paste mistake - oops)

        * qmake/mkspecs/features/functions.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize duplicated code for linking the static libs

        Reviewed by Tor Arne Vestbø.

        * qmake/mkspecs/features/functions.prf:
        * qmake/mkspecs/features/javascriptcore.prf:
        * qmake/mkspecs/features/webcore.prf:
        * qmake/mkspecs/features/webkit2.prf:

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system cleanup
        https://bugs.webkit.org/show_bug.cgi?id=71815

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/InjectedBundle/Target.pri: We don't need to link against the webkit2
        static library.
        * qmake/mkspecs/features/javascriptcore.prf: The wtf sources pull in a glib dependency
        (ownPtr functions for glib types). Propagate that to everyone using javascriptcore.

2011-11-08  Hayato Ito  <hayato@chromium.org>

        [NRWT] Make single_test_runner aware of reference filename of test_input.
        https://bugs.webkit.org/show_bug.cgi?id=71567

        Reviewed by Ryosuke Niwa.

        Make single_test_runner honor a reference filename of given test_input so that
        we can use any file as reference html, instead of depending on implicit naming convention.
        The typical use case is to support w3c reftests.

        No tests since no functional changes until there is a client.
        Test should be easily written with future clients.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        * Scripts/webkitpy/layout_tests/models/test_input.py:

2011-11-08  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71839
        Update the leaks bot OS to Lion.
        Update the config.json to reflect the update.

        Reviewed by Stephanie Lewis.

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

2011-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99626.
        http://trac.webkit.org/changeset/99626
        https://bugs.webkit.org/show_bug.cgi?id=71866

        "C++ exceptions cannot be disabled without influencing the
        Objective-C exceptions" (Requested by benjaminp on #webkit).

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2011-11-08  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Disable C++ exceptions from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=71834

        Reviewed by Darin Adler.

        DumpRenderTree Mac does not handle C++ exceptions. When such exception
        happens, it tends to cause the AutoReleasePool stack to be corrupted,
        which leads to crashes long after the exception was raised.

        This patch disabled C++ exceptions in order to catch the problems where
        they happen when a C++ exception is raised.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2011-11-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Moved myself to the reviewer list (yay!).

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

2011-11-08  Zeno Albisser  <zeno@webkit.org>

        Added myself as a committer.

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

2011-11-08  Andy Wingo  <wingo@igalia.com>

        Skip some ECMAScript tests that fail on Linux in some time zones.
        https://bugs.webkit.org/show_bug.cgi?id=71371

        Reviewed by Martin Robinson.

        * Scripts/run-javascriptcore-tests: Skip some more tests.

2011-11-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix after build system refactoring.

        * Scripts/run-qtwebkit-tests: Fix path of QtWebProcess for QML tests.

2011-11-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't set OBJECTS_DIR and DEFINES in default_pre

        If a pro file needs to access the OBJECTS_DIR it should use the
        form ${QMAKE_VAR_OBJECTS_DIR} to ensure the value is evaluated
        after defaults_post has been processed.

        Setting DEFINES in defaults_pre is also bad, as any DEFINES=foo on
        the command line will override whatever we set in defaults_pre.

        Reviewed by Simon Hausmann.

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

2011-11-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prevent duplicated sources in SOURCES/OBJECTIVE_SOURCES

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2011-11-07  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] MiniBrowser should use urlFromUserInput()
        https://bugs.webkit.org/show_bug.cgi?id=71680

        Use urlFromUserInput() / QUrl::fromUserInput() to automatically
        complete urls in MiniBrowser.

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::load):
        * MiniBrowser/qt/qml/BrowserWindow.qml:
        * MiniBrowser/qt/utils.cpp:
        (Utils::urlFromUserInput):
        * MiniBrowser/qt/utils.h:
        (Utils::Utils):

2011-11-07  Yuqiang Xian  <yuqiang.xian@intel.com>

        Added myself as a committer.

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

2011-11-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed webkitpy test fix after r99512.

        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:
        Xianzhu Wang is now a committer, so we can't nominate him as a committer anymore.

2011-11-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        Added myself as a committer.

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

2011-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99470.
        http://trac.webkit.org/changeset/99470
        https://bugs.webkit.org/show_bug.cgi?id=71740

        "Broke test-webkitpy" (Requested by eseidel2 on #webkit).

        * Scripts/webkitpy/common/config/watchlist:

2011-11-07  Tony Chang  <tony@chromium.org>

        [chromium] update flakiness dashboard to reflect current bots

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/builders.js: Remove (deps) debug
            bots and merged linux debug bots into a single bot.
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        (setupExpectationsTest):

2011-11-07  Dana Jansens  <danakj@chromium.org>

        Add cc-bugs group to watch changes in chromium graphics
        https://bugs.webkit.org/show_bug.cgi?id=71690

        Reviewed by James Robinson.

        * Scripts/webkitpy/common/config/watchlist:

2011-11-07  Balazs Ankes  <Ankes.Balazs@stud.u-szeged.hu>

        [NRWT] Parsing of test_expectations.txt should be agnostic to newline at end
        https://bugs.webkit.org/show_bug.cgi?id=70912

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/webkit.py: Add newline at the end of test_expectations.txt.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Make up the test_test_expectations method for the updated webkit.py.

2011-11-07  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests: support --repeat-each feature from old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=62199

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-11-07  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Rename WebView::scalePage to WebView::setPageScaleFactor to match WebCore
        https://bugs.webkit.org/show_bug.cgi?id=71485

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::scalePageBy):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Put the jsc binary in 'bin' instead of leaving it deep in the build tree

        Allows us to not package up the whole Source/JavaScriptCore directory for the
        buildbots.

        Reviewed-by Simon Hausmann.

        * BuildSlaveSupport/built-product-archive:
        * Scripts/webkitdirs.pm:
        (jscProductDir):

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Ensure we always export symbols for the QtWebKit API when building WebKit

        Reviewed-by Simon Hausmann.

        * qmake/mkspecs/features/default_post.prf:

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Sanitize qmake paths correctly before comparing

        The qmake function toSanitizedPath had a bug causing empty paths on MinGW,
        which caused us to always generate derived webcore sources, but never build
        them. The bug has been fixed, and we now also sanitize paths for the injected
        bundle derived sources.

        Reviewed by Simon Hausmann.

        * WebKitTestRunner/InjectedBundle/DerivedSources.pri:
        * qmake/mkspecs/features/functions.prf:

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Print right order for changing feature defines

        Reviewed by Simon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-11-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix after build system refactoring.

        * Scripts/run-qtwebkit-tests: Fix qml_import_path.

2011-11-06  Eric Seidel  <eric@webkit.org>

        Clarify how the symbol and runtime-feature based test exclusion works and cleanup the code a bit
        https://bugs.webkit.org/show_bug.cgi?id=66078

        Unreviewed.  Add an assert about the type of "args"
        to our Executive Mocks and fix a piece of code
        from this patch which was hitting that assert
        when executing for real.

        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-11-06  Eric Seidel  <eric@webkit.org>

        Split chunk handling out of prepare_lists_and_print_output to make it more readable
        https://bugs.webkit.org/show_bug.cgi?id=71629

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-11-06  Eric Seidel  <eric@webkit.org>

        Clarify how the symbol and runtime-feature based test exclusion works and cleanup the code a bit
        https://bugs.webkit.org/show_bug.cgi?id=66078

        Reviewed by Adam Barth.

        The runtime feature detection was fixed to work in bug 64472.
        In this bug I moved the symbol-based feature detection from
        popen() to Executive.run_command and cleaned up the callers
        and unittests to make sure that we're correctly parsing the
        nm output correctly.  The old code happened to work even though
        the runtime-features path was using "str in list" and the
        symbol features path was using "str in str" and it just happened
        to do what we wanted to.  Now runtime features and symbol feature
        blacklists are computed separately (and with better documentation).

        This system remains confusing, partially because these are black-lists
        which are amended to whatever static blacklist may exist for the
        port as part of a Skipped list file.

        For example, notice how the runtime feature list only has directory
        blacklists for a couple features.  If all features are off,
        how do we skip enough tests with only 2 entries in the blacklist map?
        The answer is that Windows is the only port to use runtime feature
        detection, and the win/Skipped file turns off all the other features
        statically (like mathml, mhtml, wss, etc.) where as some other ports (like AppleMac)
        which use symbol-based feature detection turn of mathml, wcss, etc
        using the blacklists found in _missing_symbol_to_skipped_tests.

        I also noticed a couple places where we still referenced xhtmlmp
        even though support for such has been removed from WebKit.  Removed those.

        This should result in no functional change.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
         - Use self._filesystem instead of os.path
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-11-06  Dan Bernstein  <mitz@apple.com>

        Made show-pretty-diff work when the input path contains spaces.

        Reviewed by Anders Carlsson.

        * Scripts/show-pretty-diff:

2011-11-05  Daniel Cheng  <dcheng@chromium.org>

        [chromium] Use the security origin instead of the URL when checking notification permissions
        https://bugs.webkit.org/show_bug.cgi?id=71590

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::checkPermission):
        * DumpRenderTree/chromium/NotificationPresenter.h:

2011-11-05  Darin Adler  <darin@apple.com>

        Fix a small leak in Mac version of LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=71615

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::applicationCacheDiskUsageForOrigin): Release the origin.
        (LayoutTestController::localStorageDiskUsageForOrigin): Ditto.

2011-11-04  Eric Seidel  <eric@webkit.org>

        Upgrade to the latest Mechanize
        https://bugs.webkit.org/show_bug.cgi?id=71594

        Reviewed by Adam Barth.

        I noticed our mechanize was somewhat out of date when removing Python 2.5 support.
        Mechanize is no longer two separate libraries, so importing it is much simpler.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-11-04  Stephen Chenney  <schenney@chromium.org>

        Crash in ScrollAnimator.cpp
        https://bugs.webkit.org/show_bug.cgi?id=69865

        The code in ScrollAnimator assumes that horizontal per-page mouse
        wheel events cannot happen, which is not true. This patch adds layout
        tests for all paging wheel event situations and fixes the broken
        horizontal case.

        Reviewed by Anders Carlsson

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::handleMouseWheel): Added the ability to specify that a
        mouse wheel event should be paging.

2011-11-04  Eric Seidel  <eric@webkit.org>

        Remove deprecated free functions in port.factory
        https://bugs.webkit.org/show_bug.cgi?id=71494

        Unreviewed.  Fix exception when running new-run-webkit-httpd.

        * Scripts/new-run-webkit-httpd:

2011-11-04  Adam Roben  <aroben@apple.com>

        Remove Leopard-specific code from build.webkit.org

        We don't have any Leopard bots anymore.

        Fixes <http://webkit.org/b/71583> build.webkit.org configuration contains obsolete Leopard code

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Removed now-unused StartATSServer
        and StopATSServer steps.
        (unitTestsSupported): Removed check for mac-leopard.
        (TestFactory.__init__): Removed Leopard-specific steps.

2011-11-04  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests autoinstalls python-irclib even though it doesn't need to
        https://bugs.webkit.org/show_bug.cgi?id=71549

        Reviewed by Adam Barth.

        Several members of Host didn't really belong there
        and were instead specific to WebKitPatch, so I've moved
        them up onto that class.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:

2011-11-04  Tony Chang  <tony@chromium.org>

        garden-o-matic: bring back party time!
        https://bugs.webkit.org/show_bug.cgi?id=71582

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Allow images from file:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/partytime.gif: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/partytime.gif.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js: Add length() for UpdateTracker.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Plumb through length().
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js: Toggle partytime.gif via css class.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css: Add css styling for partytime.

2011-11-04  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Fix the order of the items in the dumped history list.
        https://bugs.webkit.org/show_bug.cgi?id=71562

        It did not make much sense to hold the history list in a map, as we do not need
        the keys. And the printed items must be sorted by target, which is more easily
        done with a vector.

        Should make tests such as http/tests/navigation/error404-frames.html pass.

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/DumpHistoryItem.cpp:
        (compareHistoryItemsByTarget):
        (dumpHistoryItem):

2011-11-04  Patrick Gansterer  <paroga@webkit.org>

        [Qt] Remove ENABLE_SQLITE from qmake files
        https://bugs.webkit.org/show_bug.cgi?id=71546

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/webcore.prf:

2011-11-04  Adam Barth  <abarth@webkit.org>

        watchlist for WebIDL shouldn't trigger on Internals.idl
        https://bugs.webkit.org/show_bug.cgi?id=70657

        Reviewed by David Levin.

        Internals.idl isn't part of the Web-facing IDL in the project.

        * Scripts/webkitpy/common/config/watchlist:

2011-11-04  Anders Carlsson  <andersca@apple.com>

        Fix WKTR crash when running NPN_ConvertPoint test.

        Call notifyDone in a timeout - otherwise we'll end up entering layout from layout.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp:
        (ConvertPoint::NPP_SetWindow):

2011-11-04  Anders Carlsson  <andersca@apple.com>

        NPN_ConvertPoint plug-in test should be called from NPP_SetWindow
        https://bugs.webkit.org/show_bug.cgi?id=71570

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_SetWindow):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Remove the NPP parameter from NPP_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPPSetWindowCalledDuringDestruction.cpp:
        (NPPSetWindowCalledDuringDestruction::NPP_SetWindow):
        Remove the NPP parameter from NPP_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp:
        (PassDifferentNPPStruct::NPP_SetWindow):
        Remove the NPP parameter from NPP_SetWindow and use PluginTest::log for logging.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp:
        (ConvertPoint::NPP_SetWindow):
        Run the test from NPP_SetWindow and call notifyDone() when done.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow):
        Remove unnecessary parameter.

2011-11-04  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix run-qtwebkit-tests execution on the build bot(s).

        Rubber-stamped by Tor Arne Vestbø.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: The path to the tests
        changed slightly after the refactoring.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't warn about disabling WebKit2 when qmake does recursive includes

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't error out on wrong Qt version when qmake does recursive includes

        Reviewed by Simmon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Disable STDIN check before cleaning build dir

        It didn't work on the bots.

        Reviewed by Ossy.

        * Scripts/webkitdirs.pm:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't build all of webkit when running build-jsc

        In case the whole webkit project was built, but we then subsequently
        want to build only JSC, we need to run make in the proper subdirectory.

        This also means the incremental target needs to be added to all
        makefiles.

        Reviewed by Simmon Hausmann.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):
        * qmake/mkspecs/features/default_post.prf:

2011-11-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix run-javascriptcore-tests for Qt when it's executed by the bot.

        Reviewed by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (jscProductDir): jsc path changed.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Error out early if trying to build against Qt < 4.8

        Reviewed by Simon Hausmann.

        * qmake/mkspecs/features/default_pre.prf:

2011-11-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix run-launcher for Qt and Gtk.

        Rubber-stamped by Tor Arne Vestbø.

        * Scripts/webkitdirs.pm:
        (isWK2): Re-add isWK2(), as it's used in run-launcher.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Ignore '-2' if passed to build-webkit. WebKit2 is now built by default.

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:

2011-11-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use web view title as window title in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71544

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewURIChanged): Removed extra space.
        (webViewTitleChanged): Set window title using
        webkit_web_view_get_title().
        (browser_window_init): Set initial default window title.
        (browserWindowConstructed): Connect to WebView notify::title
        signal.

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Refactor and clean up the qmake build system

        The qmake build system has accumulated a bit of cruft and redundancy
        over time. There's also a fairly tight coupling between how to build
        the various targets, and _what_ to build, making it harder to add new
        rules or sources. This patch aims to elevate these issues somewhat.

        This is a short-list of the changes:

          * The rules for how to build targets are now mostly contained as
            prf-files in Tools/qmake/mkspecs/features. Using mkspecs also
            allows us to do pre- and post-processing of each project file,
            which helps to clean up the actual project files.

          * Derived sources are no longer generated as a separate make-step
            but is part of each target's project file as a subdir. Makefile
            rules are used to ensure that we run make on the derived sources
            before running qmake on the actual target makefile. This makes
            it easier to keep a proper dependency between derived sources
            and the target.

          * We use GNU make and the compiler to generate dependencies on
            UNIX-based systems running Qt 5. This allows us to lessen the
            need to run qmake, which should reduce compile time.

          * WebKit2 is now build by default if building with Qt 5. It can
            be disabled by passing --no-webkit2 to build-webkit.

        The result of these changes are hopefully a cleaner and easier
        build system to modify, and faster build times due to no longer
        running qmake on every single build. It's also a first step
        towards possibly generating the list of sources using another
        build system.

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

        Reviewed by Simon Hausmann.

        * DerivedSources.pro: Removed.
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::screenshot):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * Scripts/build-webkit:
        (unlinkZeroFiles):
        * Scripts/webkitdirs.pm:
        (qtFeatureDefaults):
        (promptUser):
        (buildQMakeProject):
        * Tools.pro:
        * WebKitTestRunner/DerivedSources.pri: Added.
        * WebKitTestRunner/DerivedSources.pro: Removed.
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.pro: Added.
        * WebKitTestRunner/InjectedBundle/Target.pri: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Removed.
        * WebKitTestRunner/Target.pri: Added.
        * WebKitTestRunner/WebKitTestRunner.pro:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Removed.
        * qmake/README: Added.
        * qmake/mkspecs/features/default_post.prf: Added.
        * qmake/mkspecs/features/default_pre.prf: Added.
        * qmake/mkspecs/features/features.prf: Renamed from Source/WebCore/features.pri.
        * qmake/mkspecs/features/functions.prf: Added.
        * qmake/mkspecs/features/javascriptcore.prf: Renamed from Source/JavaScriptCore/JavaScriptCore.pri.
        * qmake/mkspecs/features/mac/default_post.prf: Added.
        * qmake/mkspecs/features/mac/default_pre.prf: Added.
        * qmake/mkspecs/features/minimal_qt.prf: Added.
        * qmake/mkspecs/features/qtwebkit.prf: Added.
        * qmake/mkspecs/features/rpath.prf: Added.
        * qmake/mkspecs/features/unix/default_post.prf: Added.
        * qmake/mkspecs/features/unix/default_pre.prf: Added.
        * qmake/mkspecs/features/valgrind.prf: Added.
        * qmake/mkspecs/features/webcore.prf: Renamed from Source/WebCore/WebCore.pri.
        * qmake/mkspecs/features/webkit2.prf: Copied from Source/WebKit2/WebKit2.pri.
        * qmake/mkspecs/features/win32/default_post.prf: Added.
        * qmake/qt_webkit.pri: Renamed from Source/WebKit/qt/qt_webkit_version.pri.
        * qmake/syncqt-4.8: Added.
        (showUsage):
        ():
        (copyFile):
        (symlinkFile):

2011-11-04  Eric Seidel  <eric@webkit.org>

        Remove deprecated free functions in port.factory
        https://bugs.webkit.org/show_bug.cgi?id=71494

        Unreviewed.  Fixing exception seen when running test-webkitpy.

        Sorry, I previously had deleted the relevant rebaseline-chromium-webkit-tests
        unittest, since that script is nearly ready to be deleted.  But I added
        it back at the last second and failed to run the tests. :(
        This fixes the exception the bots were seeing.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:

2011-11-02  Xiaomei Ji  <xji@chromium.org>

        Enable ctrl-arrow move cursor by word in visual order in cr-win by command line flag.
        https://bugs.webkit.org/show_bug.cgi?id=71163

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/chromium/WebPreferences.cpp: Set visualWordMovementEabled to false in DRT.
        (WebPreferences::applyTo):

2011-11-03  Eric Seidel  <eric@webkit.org>

        Remove deprecated free functions in port.factory
        https://bugs.webkit.org/show_bug.cgi?id=71494

        Reviewed by Adam Barth.

        I removed port.factory.get, get_all, and all_port_names -- long-since deprecated
        free functions in factory.py.  To remove these required fixing all callsites
        to use MockHost, Host, or PortFactory where appropriate.  After this change
        we're only left with a handfull of places where we inappropraitely use a
        real Executive, FileSystem or User object during unittesting.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
         - These PortFactory overrides were from an earlier edition of my previous patch
           in the end, I removed MockPortFactory so all tests ended up with this same
           real PortFactory() with a MockHost.  This was simply redundent code.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
         - Use MockHost to get a mocked-out PortFactory.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
         - This code has no access to a Host object, so we just use a default PortFactory
           for now.  This will still incorrectly create real Executive/FileSystem objects
           durring unittesting, which is wrong. :(
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
         - Use a MockHost to get a mocked PortFactory.
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
         - Use a MockHost to get a mocked PortFactory.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
         - ditto.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
         - ditto.
        * Scripts/webkitpy/layout_tests/port/__init__.py:
         - factory.get no longer exists.  Yay!
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
         - Use a MockHost to get a mocked PortFactory.
           To do this efficiently, I created a helper function
           and combined all these (mostly redundant) tests into one test
           with several calls to the helper function.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
         - Pass MockUser and MockExecutive in these port testing subclasses.
         - I also removed a bunch of unecessary uses of mocktool. namespacing.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Awesome windows hacks should only happen on win32.  Once we started
           using MockExecutives these 'svn help' commands started printing in
           other tests, which is how I found this bug.
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
         - DryRunPort has no Host, so just use a PortFactory() directly.
           This will do the wrong thing if we're unittesting the DryRun port
           but it's no worse than the existing code.
        * Scripts/webkitpy/layout_tests/port/factory.py:
         - Remove the free functions.
         - Fix argument overriding to be able to override None.
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
         - Use a mocked-out PortFactory during testing.
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
         - Pass MockExecutive and MockUser to these manual Port instantiations.
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
         - No access to a Host object here, so just using PortFactory directly.
           This is wrong, but no more wrong than the existing code was.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
         - Use a MockHost to get a mocked out PortFactory.
        * Scripts/webkitpy/layout_tests/port/test.py:
         - Use our fancy _set_default_overriding_none system to clean this code up and pass a MockExecutive.
        * Scripts/webkitpy/layout_tests/port/win.py:
         - Don't run cmd /c ver from WinPort.__init__ or it shows up in unittests which have logging MockExecutive
           now that we're actually passing MockExecutive to most Port instantiations during testing.
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
         - Pass our new "unittesting" bool to _detect_version when actually unittesting.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Host is the future.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
         - Use a MockHost to get a mocked out PortFactory.  Once we have a mocked PortFactory
           we don't need to pass MockUser explicitly, it does that automatically for us.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
         - Use a MockHost to get a mocked out PortFactory.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
         - We don't have access to a Host object, so using PortFactory() directly.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
         - Remove unused variable.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
         - Host isn't accessible here, so using PortFactory() directly, which
           although unfortunate is no worse than before.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
         - Testing is much easier when you don't need to hack global state...
        * Scripts/webkitpy/tool/commands/expectations.py:
         - Use the port_factory on the tool.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
         - ditto.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
         - This unittest was wrong.  It was trying to pass the tool object, but failing to pass
           the arguments in the right order.  Fixing that made it use a MockFileSystem
           (like it had been trying to), which then required us to actually populate
           that MockFileSystem with fake expectation files (instead of using the ones on the real disk).
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
         - Get the port_factory from the tool.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
         - Ditto.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
         - Use a MockHost to get a mocked out Port object.

2011-11-03  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Allow choosing which backing store to use.
        https://bugs.webkit.org/show_bug.cgi?id=70532

        Reviewed by Antonio Gomes.

        This change makes it possible to change the backing store used by DRT
        from Tiled Backing Store (TBS) to Single Backing Store (SBS) by
        setting the environment variable DRT_USE_SINGLE_BACKING_STORE to 1.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (shouldUseSingleBackingStore):
        (chooseAndInitializeAppropriateSmartClass):
        (drtViewAdd):
        * DumpRenderTree/efl/DumpRenderTreeView.h:

2011-11-02  Erik Arvidsson  <arv@chromium.org>

        JS Test Harness: Remove more link tags
        https://bugs.webkit.org/show_bug.cgi?id=71339

        Reviewed by Ojan Vafai.

        * Scripts/make-new-script-test:
        (writeTestFile): Don't output <link>

2011-11-03  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Martin Robinson.

        [GTK] arguments passed to build-jsc are not taken into account
        https://bugs.webkit.org/show_bug.cgi?id=58333

        * Scripts/build-jsc:

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Show url of history items in a status bar in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71474

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowSetStatusText): Set status text and show/hide the
        status label.
        (resetStatusText): Reset status text when history menu is hidden.
        (browserWindowHistoryItemSelected): Show url of currently selected
        history item.
        (browserWindowCreateBackForwardMenu): Connect to hide signal of
        menu to reset the status text.
        (browserWindowConstructed): Use GtkOverlay if available to show
        status text.

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add back/forward menus to MiniBrowser using WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=71466

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowHistoryItemActivated): Go to selected back formard
        list item using webkit_web_view_go_to_back_forward_list_item()
        (browserWindowCreateBackForwardMenu): Create a GtkMenu for the
        given GList of WebKitBackForwardListItems.
        (browserWindowUpdateNavigationActions): Enable/disable back and
        forward buttons depending on whether it's possible to go
        back/forward. Create a menu for back and forward toolbar buttons.
        (backForwadlistChanged): Call browserWindowUpdateNavigationActions().
        (browserWindowConstructed): Connect to WebKitBackForwardList
        changed signal.

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove Maemo specific code paths
        https://bugs.webkit.org/show_bug.cgi?id=71476

        Reviewed by Kenneth Rohde Christiansen.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::init):
        (LauncherWindow::showLinkHover):
        (LauncherWindow::selectElements):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/locationedit.cpp:
        * QtTestBrowser/locationedit.h:

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Show load progress information in MiniBrowser using WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=71461

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (resetEntryProgress): Reset the entry progress after a while when
        load has been completed.
        (webViewLoadProgressChanged): Update location entry progress.
        (browserWindowConstructed): Connect to WebView
        notify::estimated-load-progress signal.

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKit2 C API from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71459

        Reviewed by Martin Robinson.

        Use the GTK+ API instead to add minimum functionality. The other
        features will be ported to GTK+ API in following patches.

        * MiniBrowser/gtk/BrowserWindow.c:
        (activateUriEntryCallback): Use webkit_web_view_load_uri().
        (goBackCallback): Use webkit_web_view_go_back().
        (goForwardCallback): Use webkit_web_view_go_forward().
        (webViewURIChanged): Update location entry with current uri using
        webkit_web_view_get_uri().
        (browserWindowFinalize):
        (browserWindowGetProperty):
        (browserWindowSetProperty):
        (browser_window_init):
        (browserWindowConstructed): Connect to notify::uri signal of
        WebView to be notified when the URI changes.
        (browser_window_class_init):
        (browser_window_new): Use WebKitWebView.
        (browser_window_get_view): Use WebKitWebView
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/WebBundle/WebBundleMain.c: Removed.
        * MiniBrowser/gtk/main.c:
        (loadURI): Use webkit_web_view_new().
        (main):

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Unable to start MiniBrowser after run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=71469

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-launcher: Pass @ARGV instead of @args, which is stripped
        from things like -2. Neither Gtk or Qt MiniBrowser like unknown command
        line arguments.

2011-11-03  Philippe Normand  <pnormand@igalia.com>

        [GTK] [WK2] ttf-liberation fonts moved to a new location (in Debian)
        https://bugs.webkit.org/show_bug.cgi?id=71445

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): set directoriesDescription only when needed.
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting): Add the new font path for Debian fonts and
        refactored the font files loading code to avoid copy/pastes, ease
        maintenance and future font directories additions.

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove GtkLauncher2
        https://bugs.webkit.org/show_bug.cgi?id=71449

        Reviewed by Martin Robinson.

        GtkLauncher2 is the GtkLauncher code compiled with webkit2. This
        made sense when we wanted to implement the exactly same wk1 API
        for wk2. Now the code would require an ifdef for most the api, so
        it's better to remove GtkLauncher2 and port MiniBrowser to the new
        GTK+ API.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (notifyProgressCb):
        (closeWebViewCb):
        (createBrowser):
        (addWebSettingsGroupToContext):
        (main):

2011-11-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] [DRT] ttf-liberation fonts moved to a new location (in Debian)
        https://bugs.webkit.org/show_bug.cgi?id=71359

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Add the new font path for Debian fonts and
        refactored the font files loading code to avoid copy/pastes, ease
        maintenance and future font directories additions.

2011-11-02  Eric Seidel  <eric@webkit.org>

        Move Mocks into _mock files near their implementations
        https://bugs.webkit.org/show_bug.cgi?id=71425

        Reviewed by Adam Barth.

        This entire change is splitting mocktool.py into separate _mock.py files
        and placing them next to their real implementations.

        I also deleted MockPortFactory (since it was wrong) and was just hiding
        the fact that the "skipped-ports" command was broken (and has been for a long time).
        So I made MockHost use a real PortFactory (passed a MockHost) and changed
        the skipped-ports implementation to use modern PortFactory methods.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_mock.py: Added.
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/deps_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py: Added.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/ports_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/common/host_mock.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_mock.py: Added.
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:
        * Scripts/webkitpy/common/net/irc/irc_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/net/statusserver_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/net/statusserver_unittest.py:
        * Scripts/webkitpy/common/net/web_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/common/system/platforminfo_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/system/user_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/gtk_unittest.py.
        * Scripts/webkitpy/common/system/workspace_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/common/watchlist/watchlist_mock.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/__init__.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        * Scripts/webkitpy/test/main.py:
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-11-02  Dan Bernstein  <mitz@apple.com>

        Fixed the build and removed another copy to ColorBits.ttf.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/ColorBits.ttf: Removed.

2011-11-02  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r98759-r98773): platform/mac/fonts/color-bitmap.html failing on Lion Intel Debug (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=71424

        Reviewed by Sam Weinig.

        Removed the ColorBits font and the code to register it in the process
        running the tests. The font was only used by the aforementioned test,
        which is now being removed.

        * DumpRenderTree/fonts/ColorBits-A.png: Removed.
        * DumpRenderTree/fonts/ColorBits.ttf: Removed.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (activateTestingFonts):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::inititializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):
        (WTR::activateFonts):

2011-11-02  Dan Bernstein  <mitz@apple.com>

        Fix an intermittent hang in RenderedImageFromDOMRange.

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::run): Made the call to -runMode:beforeDate: return
        immediately if there are no sources by passing a date in the distant past.

2011-11-02  Adam Roben  <aroben@apple.com>

        Add git-add-reviewer

        I've been using this script for a while to add reviewers to git commits in my local
        repository before pushing them to the Subversion repository. Basic usage is:

        git-add-reviewer HEAD^ "Joe Schmoe"
        or
        git-add-reviewer -i trunk

        Fixes <http://webkit.org/b/71419> Would like an easy way to add reviewer names to existing
        git commits

        Reviewed by Sam Weinig.

        * Scripts/git-add-reviewer: Added.
        (top level): Parse options, check that the working tree is clean, then run in either
        interactive or non-interactive mode as appropriate.
        (interactive): Write out a temp file that contains each commit with "NOBODY" next to it and
        open it in the user's editor. The user can replace "NOBODY" with reviewer names. When the
        editor exits, we check out the commit just before the earliest one we're modifying. Then
        for each commit, we check it out, update the reviewer, and amend the commit to contain the
        new reviewer. Finally, we update the branch that was originally checked out to point to the
        last amended commit.
        (nonInteractive): Check out the commit to modify, write the current commit message to the
        MERGE_MSG file so addReviewer will update it, add the reviewer to the ChangeLog(s), amend
        the commit, and rebase the original branch on top of the amended commit. (usage): Print out
        a usage message and exit.
        (requireCleanWorkTree): Do the same steps git-rebase does to ensure that the working tree
        and index are clean.
        (fail): Print out the specified error message, if any, and return false. This function is
        used as a return value in various error cases throughout the script.
        (cherryPick): Cherry-pick the specified commit and return 1 if we succeeded.
        (addReviewer): Add the specified reviewer to all the ChangeLogs modified in this commit, and
        to .git/MERGE_MSG, which will be used as the commit message for the next commit.
        (commit): Call git-commit and use .git/MERGE_MSG as the commit message.

        (addReviewerToChangeLog):
        (addReviewerToCommitMessage):
        These just call through to addReviewerToFile.

        (addReviewerToFile): Read in the file, replacing any "NOBODY" text with the reviewer name(s)
        and replacing "Reviewed" with "Rubber-stamped" if specified. Write the resulting text to a
        temp file, then move the temp file over the original file and stage it for the next commit.
        (head): Returns the name of the currently-checked-out branch.
        (isAncestor): Returns true if the first commit is an ancestor of the second.
        (toCommit): Converts a commitish to a commit ID using git-rev-parse.
        (changeLogsForCommit): Returns a list of all the ChangeLogs modified in the given commit.
        (resetToCommit): Checks out the given commit, throwing away any local changes.
        (writeCommitMessageToFile): Gets the commit message for the current commit and writes it to
        the specified file.
        (rebaseOntoHead): Rebases the specified branch onto HEAD.
        (checkout): Checks out the given commit.
        (getConfigValue): Reads the specified config variable from git-config.

2011-11-02  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_SHADERS flag
        https://bugs.webkit.org/show_bug.cgi?id=71394

        Reviewed by Sam Weinig.

        * Scripts/build-webkit:

2011-10-31  Eric Seidel  <eric@webkit.org>

        BaselineOptimizer tests should use mocks instead of real Executive/FileSystem objects
        https://bugs.webkit.org/show_bug.cgi?id=71237

        Reviewed by Adam Barth.

        Calling the static version of factory.get() with proper mocking
        requires passsing an explict filesystem, executive, etc.
        So instead, we use a PortFactory instance and pass it a Host pointer.
        I had to add a MockHost since we'd not needed a non-host tool before now.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/mocktool.py:

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

        Update for the WebKit2 API fixage.

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

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

        Fix build.

        Add new functions to the page loader client.

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

2011-11-02  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10336700> Add API to get rendered text image without having to select it
        https://bugs.webkit.org/show_bug.cgi?id=71407

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm: Added.
        (-[RenderedImageFromDOMRangeFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2011-11-02  Benjamin Poulain  <benjamin@webkit.org>

        Make the main frame's base path more explicit in _drt_descriptionSuitableForTestResult
        https://bugs.webkit.org/show_bug.cgi?id=71351

        Reviewed by Darin Adler.

        Add the delimiter "/" at the end of the path instead of adding +1 when using
        the path.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2011-11-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor is silent
        https://bugs.webkit.org/show_bug.cgi?id=70973

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didDetectXSS):
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didDetectXSS:]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (didDetectXSSForFrame):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didDetectXSSForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2011-11-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] REGRESSION: 5 editing tests fail
        https://bugs.webkit.org/show_bug.cgi?id=71117

        Reviewed by Andreas Kling.

        Make sure that the view is properly focused, in order to get the
        didBeginEditing DRT calls.

        This requires activating the window (the call will result in a FocusIn
        event to the window as well as setting QGuiApplication::focusWindow())
        as well as enabling the focus on the view item. The signature of
        setFocus has changed to take a boolean.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):

2011-11-02  Matt Falkenhagen  <falken@chromium.org>

        [chromium] Add per-script font preferences support in overridePreference
        https://bugs.webkit.org/show_bug.cgi?id=71110

        This allows a layout test to do something like:

        // Set standard font for Arabic to Ahem.
        overridePreference("WebKitStandardFontMap", [ "Arab", "Ahem" ]);

        This should make writing a layout test for per-script fonts easier.

        This change only affects the Chromium DumpRenderTree, but the other
        platforms should probably also have a similar change eventually.

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp: add per-script
        font preferences to overridePreference
        (LayoutTestController::cppVariantToWebStringArray):
        (setFontMap):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (setStandardFontFamilyWrapper):
        (setFixedFontFamilyWrapper):
        (setSerifFontFamilyWrapper):
        (setSansSerifFontFamilyWrapper):
        (setCursiveFontFamilyWrapper):
        (setFantasyFontFamilyWrapper):
        (applyFontMap):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h: add per-script font
        preference members
        (WebPreferences::UScriptCodeHashTraits::emptyValue):
        (WebPreferences::UScriptCodeHashTraits::constructDeletedValue):
        (WebPreferences::UScriptCodeHashTraits::isDeletedValue):

2011-11-02  Elliot Poger  <epoger@google.com>

        until use_skia=1 by default on mac, default port should be chromium-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=71312

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-11-02  Stephen Chenney  <schenney@chromium.org>

        printing layout test failures after r98634
        https://bugs.webkit.org/show_bug.cgi?id=71080

        Reviewed by Kent Tamura

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintPagesWithBoundaries): Added transforms invert the CG Bitmap so the coord system
        matches that for Skia.

2011-11-01  Sam Weinig  <sam@webkit.org>

        Can't complete ChangeLog when using resolve-Changelogs and webkit-tools-completion.sh
        https://bugs.webkit.org/show_bug.cgi?id=71346

        Reviewed by Dan Bernstein.

        * Scripts/webkit-tools-completion.sh:
        Add "-o default" which allows for completing files in addition to the word list.

2011-11-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Add support for touch event testing to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=71310

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/DerivedSources.pro: Build system foo to ensure the ENABLE_TOUCH_EVENTS
        define works in EventSendingController.idl
        * WebKitTestRunner/EventSenderProxy.h: Add declarations for Qt implementations of touch
        handlers.
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Add touch functions
        required by tests.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp: Forward touch messages to the
        ui process.
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::touchStart):
        (WTR::EventSendingController::touchMove):
        (WTR::EventSendingController::touchEnd):
        (WTR::EventSendingController::clearTouchPoints):
        (WTR::EventSendingController::releaseTouchPoint):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Include features.pri for feature
        defines.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): Forward incoming
        touch messages to the EventSenderProxy.
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Implement touch test harness functions.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::sendTouchEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Include features.pri for feature defines.

2011-11-01  Sam Weinig  <sam@webkit.org>

        resolve-ChangeLogs --help should be faster.

        Reviewed by Adam Roben.

        * Scripts/resolve-ChangeLogs:
        (usageAndExit):
        Add a call to usageAndExit() before doing work to find unmerged changelogs
        if --help or something illegal is provided on the command line.

2011-11-01  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] _drt_descriptionSuitableForTestResult generate an exception for absolute paths above the main frame
        https://bugs.webkit.org/show_bug.cgi?id=71342

        Reviewed by Darin Adler.

        [NSURL _drt_descriptionSuitableForTestResult] was generating a NSRangeException due to the call to
        [NSString substringFromIndex:] with an index out of the string range.

        The source of this path is the test-loading-archive-subresource-null-mimetype.html which load a subresource
        from the root of the disk.
        The problem was hidden because the exception are catched when calling the delegate.

        This patch changes _drt_descriptionSuitableForTestResult to return absolute string if the resource is not
        in a subdirectory of the main frame.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURL _drt_descriptionSuitableForTestResult]):

2011-11-01  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] --enable-hardware-gpu flag is not recognized by run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=71318

        Reviewed by James Robinson.
        
        Fixed a typo for --enable-hardware-gpu flag.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-11-01  Elliot Poger  <epoger@google.com>

        chromium-gpu port should default to chromium-gpu-mac, not chromium-gpu-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=71286

        Reviewed by Stephen White.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix build of WebKitTestRunner with ELF symbol visibility
        https://bugs.webkit.org/show_bug.cgi?id=71299

        Reviewed by Andreas Kling.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Use the properly exported symbol for the Qt
        build to enable WebCoreTestSupport::injectInternalsObject.
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Fix include path to DRTSupportQt

2011-11-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Merge common desktop and touch view APIs under a base class.
        https://bugs.webkit.org/show_bug.cgi?id=71280

        Reviewed by Andreas Kling.

        Remove unneded forwarding logic for TouchWebView since those properties are
        now in the view just as the desktop web view.

        * MiniBrowser/qt/qml/TouchView.qml:

2011-11-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        check-webkit-style: Allow names starting with "_q_".
        https://bugs.webkit.org/show_bug.cgi?id=70625

        Reviewed by Tor Arne Vestbø.

        Used by the Qt port as the standard prefix for private slots.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix valgrind error about uninitialized variable
        https://bugs.webkit.org/show_bug.cgi?id=71273

        Reviewed by Kenneth Christiansen.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify): Initialize isPrimary.

2011-10-31  Adam Roben  <aroben@apple.com>

        Make Leaks Viewer less strict when parsing leaks-related output from NRWT/ORWT

        Fixes <http://webkit.org/b/71258> REGRESSION (r98639): Leaks Viewer doesn't show recent
        leaky builds

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Relax a regex to gloss over differences in ORWT's vs.
        NRWT's leaks-related output (i.e., "M total leaks found!" vs. "M total leaks found for a
        total of N bytes!").

2011-10-31  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Rename ewk_view_setting_scripts_window_open_{get,set} after r93833
        https://bugs.webkit.org/show_bug.cgi?id=71228

        Reviewed by Antonio Gomes.

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

2011-10-31  Eric Seidel  <eric@webkit.org>

        webkitpy tests depend too much on the user's environment
        https://bugs.webkit.org/show_bug.cgi?id=71234

        Reviewed by Dirk Pranke.

        This change just makes a bunch of our older tests use
        more modern mocking to avoid trying to launch processes
        or read from the user's filesystem during unittesting.

        I found many of these by adding an assert in Executive.run_command
        that we were not unittesting.  I can't add that assert always
        as there are some valid uses of Executive during unittesting.
        Once I fix more of these, I may find a way to add such an assert conditionally.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2011-10-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] MiniBrowser doesn't resize as the size is always overridden
        https://bugs.webkit.org/show_bug.cgi?id=71212

        Reviewed by Simon Hausmann.

        Remove call overriden the size.

        * MiniBrowser/qt/main.cpp:
        (main):

2011-10-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98819, r98823, r98825, and r98830.
        http://trac.webkit.org/changeset/98819
        http://trac.webkit.org/changeset/98823
        http://trac.webkit.org/changeset/98825
        http://trac.webkit.org/changeset/98830
        https://bugs.webkit.org/show_bug.cgi?id=71199

        Broke Chromium Windows bot (Requested by rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-10-30  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Unreviewed.

        This is a temporary hack until someone from the cr-win port
        can take a look and determine which environment variable
        lighttpd is missing.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-10-30  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Unreviewed.  I would have preferred to have this reviewed,
        but relevant reviewers are asleep and bots are broken.

        This was a regression from moving to a clean environment.
        ChromiumWin (and possibly other ports), need the "PATH"
        environment copied over.  This wasn't caught in my testing
        because although we had unittests to cover this, they
        weren't being run on anything but windows.  The vast majority
        of this change is just fixing the unittests to use our
        modern MockFileSystem/MockUser/MockExecutive so they can
        be run on any system (and removing the platform checks from
        the unittests so they are run everywhere).

        The actual fix is the single line "PATH" string added to base.py.
        The rest of this change is just fixing the Chromium port unittests
        to run on all systems (including changing the Chromium port to
        use FileSystem.path_to_module instead of __file__).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:

2011-10-29  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Unreviewed.

        Fix the Qt port and unittest the function so we don't break it again.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-29  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests is locale dependent
        https://bugs.webkit.org/show_bug.cgi?id=68691

        Reviewed by Adam Barth.

        Make NRWT use a clean environment just like ORWT did.
        I've manually validated that NRWT now copies over
        the same environment variables that ORWT did.
        This new code is exercised by existing setup_environ_for_server tests.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/efl.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-10-29  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests: MASTER BUG: Switch all webkit.org bots over
        https://bugs.webkit.org/show_bug.cgi?id=34984

        Reviewed by Adam Barth.

        Move run-webkit-tests from using a white-list of supported NRWT ports
        to a blacklist of ports requiring ORWT.

        I've also added the ability to opt-in to parallel testing on a per-port basis.

        With these changes I'm going to officially declare this bug dead and
        work on remaining polish issues and individual developer complaints.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
        (platformIsReadyForParallelTesting):

2011-10-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98780.
        http://trac.webkit.org/changeset/98780
        https://bugs.webkit.org/show_bug.cgi?id=71173

        Broke Qt bots (Requested by rniwa on #webkit).

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-10-28  Rafael Weinstein  <rafaelw@chromium.org>

        webkit.py gdb visualizer is broken after change to StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=71154

        Reviewed by Tony Chang.

        r98624 changed StringImpl m_data to m_data32. This changes updates
        webkit.py to match.

        * gdb/webkit.py:

2011-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Fix typo in check-for-inappropriate-objc-class-names
        https://bugs.webkit.org/show_bug.cgi?id=71144

        Reviewed by Dan Bernstein.

        * Scripts/check-for-inappropriate-objc-class-names:

2011-10-28  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Add support for sending scroll-update events from EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=66272

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::reset):
        (EventSender::gestureScrollUpdate):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:

2011-10-28  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests: MASTER BUG: Switch all webkit.org bots over
        https://bugs.webkit.org/show_bug.cgi?id=34984

        Reviewed by Adam Barth.

        Move run-webkit-tests from using a white-list of supported NRWT ports
        to a blacklist of ports requiring ORWT.

        I've also added the ability to opt-in to parallel testing on a per-port basis.

        With these changes I'm going to officially declare this bug dead and
        work on remaining polish issues and individual developer complaints.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
        (platformIsReadyForParallelTesting):

2011-10-28  Eric Seidel  <eric@webkit.org>

        NRWT crashes when parsing leaks output due to UTF-8 decoding error
        https://bugs.webkit.org/show_bug.cgi?id=71112

        Reviewed by Adam Barth.

        Use read_binary_file instead of read_text_file and add a test
        case with some non-utf8 data to make sure we don't break this in the future.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:

2011-10-28  David Levin  <levin@chromium.org>

        watchlist should not CC the bug reporter
        https://bugs.webkit.org/show_bug.cgi?id=71079

        Reviewed by Adam Barth.

        Tested by test_apply_watch_list_local (webkitpy.tool.steps.applywatchlist_unittest.ApplyWatchListTest)
        which remains upchanged and thus verifies that the reporter doesn't get added to the cc line.

        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Add the new email in the output.
        * Scripts/webkitpy/tool/mocktool.py: Change the reporter and make them one of the people to cc.
        * Scripts/webkitpy/tool/steps/applywatchlist.py: Remove the reporter from the cc list.

2011-10-28  Zoltan Horvath  <zoltan@webkit.org>

        Add watchlist for QtWebKit2 API and for WK2's Qt specific files.
        https://bugs.webkit.org/show_bug.cgi?id=71116

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Adapt to QSG* to QQuick* API change in qtdeclarative
        https://bugs.webkit.org/show_bug.cgi?id=70494

        Reviewed by Kenneth Christiansen.

        Use QQuick* instead of QSG* as well as QStandardPaths
        instead of QDesktopLocation.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::setDiskCache):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        (WTR::WrapperWindow::handleStatusChanged):

2011-10-28  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Fix the Ctrl behavior for touch mocking in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=71106

        Reviewed by Simon Hausmann.

        Holding Ctrl allows multiple touch points to be held on the screen using
        mouse buttons. It would previously only prevent TouchReleased to be sent
        and would require another MouseButtonRelease to be sent without holding Ctrl.

        This patch makes sure that all held touch points are released when Ctrl
        is released if MouseButtonRelease was received.
        It also removes the touch QEvent::Type logic since it's currently handled
        by QtGui by observing the modified touch points.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        (MiniBrowserApplication::sendTouchEvent):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] MiniBrowser needs a -window-size option
        https://bugs.webkit.org/show_bug.cgi?id=70999

        Reviewed by Simon Hausmann.

        Add an -window-size option useful for testing the viewport handling.
        Also clean up the option handling.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        (WindowOptions::setRequestedWindowSize):
        (WindowOptions::requestedWindowSize):
        * MiniBrowser/qt/utils.cpp:
        (takeOptionValue):
        * MiniBrowser/qt/utils.h:

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Add allowScriptFromSource callback to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=71013

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setScriptsAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowScriptFromSource):
        (WebPermissions::setScriptsAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-10-28  Alexandru Chiculita  <achicu@adobe.com>

        Added myself as a committer.

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

2011-10-27  Adam Barth  <abarth@webkit.org>

        Remove WinCairo from the set of core builders.  WinCairo rarely builds
        and is never green.

        Rubber-stamped by Eric Seidel.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-10-27  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Connecting to localhost:8880 takes one second on Windows
        https://bugs.webkit.org/show_bug.cgi?id=64788

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        Bind to "localhost" instead of "127.0.0.1" to let pywebsocket listen on both
        IPv4 and IPv6 addresses. This should prevent the test reserved-opcodes.html
        from timing out on Windows, because this test tries to open a lot of
        connections to localhost and each attempt takes one second to fall back from
        IPv6 to IPv4 on Windows (I have no idea why Windows works like this, though).

2011-10-27  Adam Barth  <abarth@webkit.org>

        Dis-integrate run-bindings-tests with webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=71092

        Reviewed by Ryosuke Niwa.

        These tests aren't really adding any value.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-10-27  Eric Seidel  <eric@webkit.org>

        REGRESSION (r98639): NRWT crashes when parsing leaks output
        https://bugs.webkit.org/show_bug.cgi?id=71087

        Unreviewed.  Sadly we have no good way to test logging.

        * Scripts/webkitpy/layout_tests/port/leakdetector.py:

2011-10-27  David Levin  <levin@chromium.org>

        Test expectation errors should include the file name and platform in both the log and exception info.
        https://bugs.webkit.org/show_bug.cgi?id=71067

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:

2011-10-27  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests doesn't understand --qt or --gtk
        https://bugs.webkit.org/show_bug.cgi?id=63970

        Reviewed by Ojan Vafai.

        Add support for --qt and --gtk to NRWT.
        I also removed some incorrect comments in the option parsing
        code (options which we already implement, but said we didn't)
        as well as moved --platform parsing out of the "results_options"
        section into the top configuration section.

        Now run-webkit-tests no longer needs NRWT-specific code for passing
        --platform=qt, etc.

        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-10-27  Eric Seidel  <eric@webkit.org>

        REGRESSION (NRWT): build.webkit.org doesn't show the total number of leaks found during a test run on the Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=66227

        Reviewed by Adam Roben.

        I believe this should fix the bug.

        * Scripts/run-webkit-tests: make NRWT default for --leaks
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        (LeakDetector._parse_leaks_output): removed the (unneeded) process_pid argument, and made the regexp use named groups (even though we don't ever grab them by name)
        (LeakDetector.count_total_bytes_and_unique_leaks): renamed from parse_leak_files
        (LeakDetector.count_total_leaks): new file (the guts of this change) which is used to re-parse the leaks output during the summarize leaks phase.
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:
        Changes to reflect the rename of count_total_bytes_and_unique_leaks and a new test for count_total_leaks.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        Use count_total_leaks to spit out the total leak count like ORWT did, and remove the FIXME on the subject.

2011-10-27  Stephen Chenney  <schenney@chromium.org>

        [Chromium] Need setPrinting
        https://bugs.webkit.org/show_bug.cgi?id=46152

        Reviewed by Hajime Morita.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Added logic for handling setPrinting.
        (LayoutTestController::reset): Clearing flags for setPrinting.
        (LayoutTestController::setPrinting): Set flags for setPrinting.
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setIsPrinting): Added the setPrinting methods and flags.
        (LayoutTestController::isPrinting): Method to return the setPrinting status.
        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpFramesAsPrintedText): A method for creating a text dump in printed layout.
        (TestShell::dump): Modified to dump setPrinting-specific output.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintPagesWithBoundaries): Handling for pixel tests when setPrinting is
        active.
        * DumpRenderTree/chromium/WebViewHost.h: Prototype for paintPagesWithBoundaries.

2011-10-27  Sam Weinig  <sam@webkit.org>

        Add allowsPlugIns property to WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=70987

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:
        Add basic test for WKBrowsingContextGroup.allowsPlugIns. 

2011-10-27  Adam Roben  <aroben@apple.com>

        Test WKBundlePageGetBackingScaleFactor

        Test for <http://webkit.org/b/71025> <rdar://problem/10355037> REGRESSION (r97191): Clients
        can't reliably determine the scale factor of snapshots returned via
        WKBundlePageCreateSnapshot* API

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Record the passed-back scale factor.
        (TestWebKitAPI::setInjectedBundleClient): Hook up our didReceiveMessage callback.
        (TestWebKitAPI::createWindow): Conjure up a window.
        (TestWebKitAPI::TEST): Ask the injected bundle code to call the new
        WKBundlePageGetBackingScaleFactor API when the WKView is in windows with various scale
        factors and when using a custom scale factor, and check that we get those same scale factors
        back.

        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor_Bundle.mm: Added.
        (TestWebKitAPI::GetBackingScaleFactorTest::GetBackingScaleFactorTest): Just initialize our
        members.
        (TestWebKitAPI::GetBackingScaleFactorTest::didCreatePage): Store the page for later.
        (TestWebKitAPI::GetBackingScaleFactorTest::didReceiveMessage): Get the backing scale factor
        from the page using the new API and send it back.

2011-10-27  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] MiniBrowser crashes when started with 0 arguments

        Rubber-stamped by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        Fix typo error.

2011-10-27  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.7.
        https://bugs.webkit.org/show_bug.cgi?id=70992

        Reviewed by Kent Tamura.

        pywebsocket 0.7 fixed the bug on dual stack support on OS X.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-10-27  Elliot Poger  <epoger@google.com>

        make lion observe MAC lines in test_expectations.txt
        https://bugs.webkit.org/show_bug.cgi?id=70941

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-10-27  John Knottenbelt  <jknotten@chromium.org>

        [Chromium] Allow DRT to be built without notifications enabled.
        https://bugs.webkit.org/show_bug.cgi?id=70919

        Reviewed by Tony Gentilcore.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetTestController):

2011-10-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Improve command line arguments handling for MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=70616

        Reviewed by Kenneth Rohde Christiansen.

        - Use two dashes for word arguments.
        - Return with an error when an unsupported argument is given.
        - Allow the URL to be placed before option arguments.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (printHelp):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/utils.cpp:
        (takeOptionFlag):
        (takeOptionValue):
        * MiniBrowser/qt/utils.h:

2011-10-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] NRWT doesn't work on qt-mac platform
        https://bugs.webkit.org/show_bug.cgi?id=64445

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests: Switch qt-mac platform to NRWT.
        (useNewRunWebKitTests):
        * Scripts/webkitpy/layout_tests/port/qt.py: Fix library path on Mac.

2011-10-26  Sam Weinig  <sam@webkit.org>

        Add initial setting to WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=70942

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm: Added.
        Add basic test that setting the javaScriptEnabled setting takes. It is not
        possible to test its effect quite yet.

2011-10-26  Alejandro G. Castro  <alex@igalia.com>

        [GTK] [WK2] Add WebKit2 distcheck support
        https://bugs.webkit.org/show_bug.cgi?id=70933

        Reviewed by Martin Robinson.

        * WebKitTestRunner/GNUmakefile.am: Add missing files to the
        sources and EXTRA_DIST.

2011-10-26  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix failing assertion on startup of MiniBrowser -touch.

        Reviewed by Tor Arne Vestbø.

        We're using QScroller since r98460, which requires QWidget/QApplication. So
        use QApplication and QtWidgets for the time being.

        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-10-25  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Rewrite MiniBrowser in QML
        https://bugs.webkit.org/show_bug.cgi?id=70315

        Add the first QML based implementation of MiniBrowser.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        (BrowserWindow::load):
        (BrowserWindow::keyPressEvent):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        * MiniBrowser/qt/icons/next.png: Added.
        * MiniBrowser/qt/icons/previous.png: Added.
        * MiniBrowser/qt/icons/refresh.png: Added.
        * MiniBrowser/qt/icons/stop.png: Added.
        * MiniBrowser/qt/main.cpp:
        (main):
        * MiniBrowser/qt/qml/BrowserWindow.qml: Added.

2011-10-26  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Remove QtWidgets dependency in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=70529

        Remove obsolete code for a new QML based implementation
        of MiniBrowser.
        Change BrowserWindow to derive from QSGView instead of
        QMainWindow. QSGView is used as a top level window that
        provides the container for placing QML content.
        Make MiniBrowserApplication derive from QGuiApplication
        instead of QApplication.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserView.cpp: Removed.
        * MiniBrowser/qt/BrowserView.h: Removed.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::load):
        (BrowserWindow::screenshot):
        (BrowserWindow::loadURLListFromFile):
        (BrowserWindow::updateUserAgentList):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        * MiniBrowser/qt/main.cpp:

2011-10-25  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Remove QAction from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=70525

        In order to rewrite MiniBrowser in QML we need a suitable
        mechanism for triggering navigation actions.
        Due to the QtWidgets dependency of QAction the current
        solution is not suitable anymore. Therefore we introduce
        invokable methods and export properties in QWebNavigationController.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/BrowserView.cpp:
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-10-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Unregister viewport,changed signal in EWebLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=70478

        Reviewed by Eric Seidel.

        'viewport,changed' signal was registered by EWebLauncher in order to test viewport meta tag.
        However, it sets wrong layout to some web sites which have viewport meta tag. Because, host pc
        doesn't support proper DPI value though viewport is using DPI value to compute layout values.
        This signal is for mobile device.

        * EWebLauncher/main.c:
        (browserCreate):

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have no way to find out when the device scale factor changes
        https://bugs.webkit.org/show_bug.cgi?id=67226
        <rdar://problem/10048276>

        Reviewed by Sam Weinig.

        Keep a cached copy of the contents scale and update it when it changes.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ContentsScaleFactor.cpp:
        (ContentsScaleFactor::ContentsScaleFactor):
        (ContentsScaleFactor::cachedContentsScaleFactor):
        (ContentsScaleFactor::ScriptableObject::hasProperty):
        (ContentsScaleFactor::ScriptableObject::getProperty):
        (ContentsScaleFactor::NPP_New):
        (ContentsScaleFactor::NPP_SetValue):

2011-10-25  Sam Weinig  <sam@webkit.org>

        Add WKBrowsingContextLoadDelegateTest test for a failed load
        https://bugs.webkit.org/show_bug.cgi?id=70859

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        (TEST_F): Add TEST_F(WKBrowsingContextLoadDelegateTest, SimpleLoadFail).
 
        (-[SimpleLoadFailDelegate browsingContextControllerDidFailProvisionalLoad:withError:]):
        Test that we are getting the correct NSError code and domain.

2011-10-25  Erik Arvidsson  <arv@chromium.org>

        JS Test Harness: Make successfullyParsed optional
        https://bugs.webkit.org/show_bug.cgi?id=70784

        Reviewed by Ojan Vafai.

        * Scripts/make-new-script-test:
        (writeTestFile): Update the template for script tests.

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have to use JavaScript to find out the current device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=67225
        <rdar://problem/10048258>

        Reviewed by Darin Adler.

        Add a plug-in test for getting the contents scale factor.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ContentsScaleFactor.cpp: Added.
        (ContentsScaleFactor::ContentsScaleFactor):
        (ContentsScaleFactor::contentsScaleFactor):
        (ContentsScaleFactor::ScriptableObject::hasProperty):
        (ContentsScaleFactor::ScriptableObject::getProperty):
        (ContentsScaleFactor::ScriptableObject::pluginTest):
        (ContentsScaleFactor::NPP_GetValue):

2011-10-25  Sam Weinig  <sam@webkit.org>

        Flesh out WKBrowsingContextLoadDelegate a bit
        https://bugs.webkit.org/show_bug.cgi?id=70846

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC: Added.
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm: Added.
        (WKBrowsingContextLoadDelegateTest::WKBrowsingContextLoadDelegateTest):
        (WKBrowsingContextLoadDelegateTest::SetUp):
        (WKBrowsingContextLoadDelegateTest::TearDown):
        (-[SimpleLoadDelegate browsingContextControllerDidFinishLoad:]):
        (TEST_F):
        Add basic testing for WKBrowsingContextLoadDelegate.

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

        make-script-test-wrappers should not look outside fast/js
        https://bugs.webkit.org/show_bug.cgi?id=66357

        Reviewed by Maciej Stachowiak.

        * Scripts/make-script-test-wrappers: Don't look for template files everywhere, only support
        fast/js.

2011-10-25  Adam Barth  <abarth@webkit.org>

        Add a --make option to update-webkit to engage the Makefile-based build system
        https://bugs.webkit.org/show_bug.cgi?id=70847

        Reviewed by Dimitri Glazkov.

        I can never remember what crazy environment variables I'm supposed to
        set to tell GYP what to do.

        * Scripts/update-webkit:

2011-10-25  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Force layout when sending events.
        https://bugs.webkit.org/show_bug.cgi?id=70357

        Reviewed by Antonio Gomes.

        Some tests such as editing/input/page-up-down-scrolls.html rely on the
        scrollbars being properly set up during the onload events.
        Document::implicitClose(), however, dispatches the onload events before
        calling FrameView::layout(), so these tests usually fail.

        We now do the same as the GTK+ and Chromium ports and manually force the
        layout when dispatching events.

        * DumpRenderTree/efl/EventSender.cpp:
        (sendMouseEvent):
        (keyDownCallback):

2011-10-25  Daniel Bates  <dbates@rim.com>

        build-webkit --clean should only clean build directory for CMake-based ports
        https://bugs.webkit.org/show_bug.cgi?id=70834

        Reviewed by Antonio Gomes.

        Currently build-webkit --clean both cleans the build directory and builds WebKit for
        CMake-based ports. Instead, build-webkit --clean should only clean up the build directory
        as per its description in the usage message of build-webkit.

        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit):

2011-10-25  Anna Cavender  <annacc@chromium.org>

        Enable running of track layout tests for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=70803

        Reviewed by Adam Barth.
        
        Make DumpRenderTree/TestShell always run with track enabled
        (equivalent of --enable-video-track).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-10-25  Vamshikrishna Yellenki  <vamshi@motorola.com>

        [WK2]Main window never gets focus using TAB key in WebKit2 GTK+.
        https://bugs.webkit.org/show_bug.cgi?id=70603

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (focus):
        (unFocus):
        (browserWindowUIClientInit):

2011-10-25  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10337033> DOMRangeOfString:relativeTo:options has problems with -webkit-user-select: none

        Reviewed by Adam Roben.

        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        (TestWebKitAPI::TEST):

2011-10-25  Eric Seidel  <eric@webkit.org>

        WIN: editing tests fail under NRWT because editing delegate callbacks aren't stripped
        https://bugs.webkit.org/show_bug.cgi?id=64471

        Reviewed by Adam Roben.

        Speculative fix.

        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:

2011-10-24  Mikhail Naganov  <mnaganov@chromium.org>

        Fix bug summary when rolling Chromium DEPS to LKGR.
        https://bugs.webkit.org/show_bug.cgi?id=69917

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/roll.py:
        * Scripts/webkitpy/tool/commands/roll_unittest.py:

2011-10-24  Ivan Briano  <ivan@profusion.mobi>

        [EFL] Build fix. Add include path to find npapi.h
        https://bugs.webkit.org/show_bug.cgi?id=70730

        Unreviewed build fix.

        * DumpRenderTree/efl/CMakeLists.txt: Add include path for npapi.h

2011-10-24  Eric Seidel  <eric@webkit.org>

        Plugin tests are failing after switching WK2 to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=70760

        Reviewed by Simon Fraser.

        Perpetuate this horrible hack.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-24  Eric Seidel  <eric@webkit.org>

        NRWT doesn't support ORWT's --root option, but should
        https://bugs.webkit.org/show_bug.cgi?id=70416

        Reviewed by Dirk Pranke.

        Add support for ORWT's --root option which is used for
        running tests with a nightly build of WebKit.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:
         - webkit_build_path was never called by any code, removed.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-10-24  David Levin  <levin@chromium.org>

        check-webkit-style complains about WEBKIT_EXPORT in test/WebUnitTests.h
        https://bugs.webkit.org/show_bug.cgi?id=70747

        Reviewed by Tony Chang.

        * Scripts/webkitpy/style/checkers/cpp.py: Allow WEBKIT_EXPORT in tests dir.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Corresponding test.

2011-10-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Crash when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=70725

        Reviewed by Chang Shu.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove g_thread_init() calls
        https://bugs.webkit.org/show_bug.cgi?id=70717

        Reviewed by Xan Lopez.

        With newer glib it's not needed anymore and with previous versions
        it was already called by g_type_init().

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main):
        * GtkLauncher/main.c:
        (main):
        * MiniBrowser/gtk/main.c:
        (main):

2011-10-24  Alejandro G. Castro  <alex@igalia.com>

        [WK2] [GTK] WebKitTestRunner crashes with heap corruption
        https://bugs.webkit.org/show_bug.cgi?id=69403

        We did not added autotoolsconfig.h to the config.h file and we
        were adding Platform.h without the config.h in the
        WebKitTestRunnerPrefix.h. Added the autotoolsconfig.h include in
        the Prefix file.

        Reviewed by Martin Robinson.

        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2011-10-23  Tomasz Morawski  <t.morawski@samsung.com>

        [EFL] Remove unused code from EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=70590

        Reviewed by Andreas Kling.

        Removed unused function on_closeWindow from EWebLauncher

        * EWebLauncher/main.c:

2011-10-23  Luke Macpherson   <macpherson@chromium.org>

        Add watchlist for WebCore/css and put myself on it.
        https://bugs.webkit.org/show_bug.cgi?id=70701

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:
        Add watchlist for WebCore/css and put myself on it.

2011-10-23  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [GTK] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=69410

        Reviewed by Martin Robinson.

        Implement the KeyDown function on Gtk platform.

        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::dispatchEvent):
        (WTR::getModifiers):
        (WTR::getGDKKeySymForKeyRef):
        (WTR::EventSenderProxy::keyDown):

2011-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] run-launcher script fails after testing WK2 tests
        https://bugs.webkit.org/show_bug.cgi?id=70676

        Reviewed by Andreas Kling.

        Pass the '-2' flag instead of '--webkit-test-runner' when executing
        run-launcher script after testing with WebKitTestRunner.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] Missing env variables cause WKTR to crash
        https://bugs.webkit.org/show_bug.cgi?id=70674

        Reviewed by Martin Robinson.

        Set two environment variables that the Gtk's port of WebKitTestRunner
        depends on and crashes if they're not explicitly set by the user.
        Also modify the setting of the WEBKIT_INSPECTOR_PATH variable so it
        properly uses the _build_path method.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Set
        TEST_RUNNER_INJECTED_BUNDLE_FILENAME and TEST_RUNNER_TEST_PLUGIN_PATH
        environment variables.

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

        Bencher script doesn't measure GC times accurately
        https://bugs.webkit.org/show_bug.cgi?id=70588

        Reviewed by Geoff Garen.
        
        Added two new options which allow different ways of measuring GC times:
        
        --measure-gc, which omits calls to gc() between benchmark invocations.
        This option takes an optional argument, which is the name of the
        VM in which to enable this feature. This allows comparing a single VM
        against itself, with and without GC.
        
        --rerun <N>, which causes each sample measurement to include N invocations
        which do not have gc() calls between them. The default is N = 1, which
        results in the same behavior as before.
        
        You can use either --measure-gc or --rerun <N> for N > 1 (preferably
        N >= 3) to get more of a contribution from GC to the measured times.
        --rerun results in tighter confidence intervals than --measure-gc, since
        it amortizes GC effects in each sample, while with --measure-gc some
        samples will see GC and some won't leading to a higher standard devation
        and thus requiring more samples to reduce confidence intervals to
        managable levels.

        * Scripts/bencher:

2011-10-21  Sam Weinig  <sam@webkit.org>

        Remove ability to create a WKView without a WKContextRef and WKPageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=70653

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate openPanelDidEnd:returnCode:contextInfo:]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithContext:pageGroup:]):
        (-[BrowserWindowController windowWillClose:]):
        (createNewPage):
        (-[BrowserWindowController awakeFromNib]):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        Update testing code to pass a PageGroup as necessary.

2011-10-21  Leandro Pereira  <leandro@profusion.mobi>

        webkitpy: Teach NRWT about the EFL port
        https://bugs.webkit.org/show_bug.cgi?id=70637

        Allows using ``efl'' as a platform when executing NRWT.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/efl.py: Added.
        * Scripts/webkitpy/layout_tests/port/efl_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/factory.py: Adjust factory to make EflPort objects
        when using PortFactory.get(port_name='efl').

2011-10-21  Devdatta Deshpande  <pwjd73@motorola.com>

        [Gtk] mousemove event always has metaKey == true
        https://bugs.webkit.org/show_bug.cgi?id=35299

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdkModifierFromJSValue): GDK_META_MASK is used to represent metaKey for platform GTK mouse and
        keyboard events. So making it in sync with WebCore files.
        (mouseMoveToCallback): Sending modifier keys state for mouse move event.

2011-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        watchlist: Add a new entry for WebKit2 GTK+ public API
        https://bugs.webkit.org/show_bug.cgi?id=70601

        Reviewed by Philippe Normand.

        Subscribe myself to WebKit2 GTK+ API patches. Also add a message
        for patches that might include new API that points to the WebKit2
        GTK+ API guidelines.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Remove QtScript source code from WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=64088

        Reviewed by Tor Arne Vestbø.

        Removed dead code that isn't developed anymore.

        * Scripts/webkitpy/style/checker_unittest.py:

2011-10-20  Eric Seidel  <eric@webkit.org>

        Switch webkit2 bot to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=56729

        Reviewed by Adam Barth.

        Move the WK2 bot to using NRWT instead of ORWT, as announced on webkit-dev:
        https://lists.webkit.org/pipermail/webkit-dev/2011-October/018337.html

        * Scripts/run-webkit-tests:
        (runningOnBuildBot):
        (useNewRunWebKitTests):

2011-10-20  Eric Seidel  <eric@webkit.org>

        NRWT is asserting on DRT due to lack of newline when processing line from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=70585

        Reviewed by Adam Barth.

        This really should be an assert, as this inidicates a programming error in either DRT or NRWT.
        However since DRT was functioning fine before in Qt, we'll make this an error log for now
        and once we find the root cause flip this back to an assert.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-20  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, rolling out r98064.
        http://trac.webkit.org/changeset/98064
        https://bugs.webkit.org/show_bug.cgi?id=64788

        Broke Mac bots.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:

2011-10-20  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Connecting to localhost:8880 takes one second on Windows
        https://bugs.webkit.org/show_bug.cgi?id=64788

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        Bind to "localhost" instead of "127.0.0.1" to let pywebsocket listen on both
        IPv4 and IPv6 addresses. This should prevent the test reserved-opcodes.html
        from timing out on Windows, because this test tries to open a lot of
        connections to localhost and each attempt takes one second to fall back from
        IPv6 to IPv4 on Windows (I have no idea why Windows works like this, though).

2011-10-20  Ryosuke Niwa  <rniwa@webkit.org>

        nrwt: newly generated results are put in cross-platform directory
        https://bugs.webkit.org/show_bug.cgi?id=68931

        Reviewed by Dirk Pranke.

        The bug was caused by SingleTestRunner._add_missing_baselines's always calling _save_baseline_data
        with generate_new_baseline set to False. Fixed the bug by always passing True when .png file is missing
        (because png images are typically different on each platform), and passing True when .txt file is missing
        and the actual result's first line matches the regular expression "layer at \(\d+,\d+\) size \d+x\d+".

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Changed the expectation
        and added a test case.

2011-10-20  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Adding myself to watchlist.

        * Scripts/webkitpy/common/config/watchlist:
        Add "ChromiumDumpRenderTree" and "Forms" definitions, and cc them to me.

2011-10-20  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Add support for building with make
        https://bugs.webkit.org/show_bug.cgi?id=70455

        Reviewed by Adam Barth.

        Depends on http://codereview.chromium.org/8352029/
        `GYP_GENERATORS=make Tools/Scripts/update-webkit --chromium` will
        create a toplevel Makefile.chromium.

        If that file exists and is newer than Source/WebKit/chromium/WebKit.xcodeproj,
        `Tools/Scripts/build-webkit --chromium` will build with make instead of
        xcodebuild.

        Also let nrwt use a binary from out/ if it exists.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (isChromiumMacMake):
        (determineIsChromiumMacMake):
        (buildChromium):

2011-10-20  Eric Seidel  <eric@webkit.org>

        Possible REGRESSION(97879): NRWT fails when DumpRenderTree crashes
        https://bugs.webkit.org/show_bug.cgi?id=70524

        Reviewed by Adam Barth.

        This is a speculative fix, since I do not use a platform
        which outputs crashlogs over stderr.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-20  Eric Seidel  <eric@webkit.org>

        REGRESSION(97879): Pixel tests no longer work with NRWT on Mac
        https://bugs.webkit.org/show_bug.cgi?id=70492

        Reviewed by Adam Barth.

        The bug turned out to be that I was assuming the block.content
        would be empty before the binary content following Content-Length
        was read inside _read_block.  Turns out its not, due to extra newlines
        and "ExpectedHash" header.

        In the process of trying to figure out what was going wrong I ended up
        cleaning up our newline usage in DumpRenderTree a little.  Moved
        two error messages from stdout to stderr, and fixed a little code indent/whitespace.

        I also fixed ServerProcess to use "deadline" everywhere instead of timeout
        per Adam's request in the original bug.

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (main):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (restoreMainDisplayColorProfile):
        (setupMainDisplayColorProfile):
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-10-20  Tony Chang  <tony@chromium.org>

        [chromium] Remove <stdint.h> from ImageDiff and use
        unsigned int instead of uint32_t.

        Unreviewed, fixing the chromium win build.

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::pixelAt):
        (Image::setPixelAt):
        (maxOf3):
        (getRedComponent):
        (getGreenComponent):
        (getBlueComponent):
        (weightedPercentageDifferent):
        (createImageDiff):

2011-10-20  Hao Zheng  <zhenghao@chromium.org>

        [Chromium] Reduce dependencies of ImageDiff to compile it for Android.
        https://bugs.webkit.org/show_bug.cgi?id=69997

        Reviewed by Tony Chang.

        This change is required to make ImageDiff for Android, and can benefit
        other platforms, too. On Android, most targets are built as
        toolsets:target. while ImageDiff needs to be built as toolsets:host.
        Currently, building the standalone target of ImageDiff depends on about
        85 other targets (try  make ImageDiff'), which is inefficient. After the
        change, ImageDiff only depends on webkit_support_gfx, which in turn
        depends on libpng and zlib.

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (main):

2011-10-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed DumpRenderTree build fix.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::addChromeInputField): Add stub.
        (LayoutTestController::removeChromeInputField): Ditto.
        (LayoutTestController::focusWebView): Ditto.
        (LayoutTestController::setBackingScaleFactor): Ditto.

2011-10-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Plug ImageDiff/DumpRenderTree on CMake build system
        https://bugs.webkit.org/show_bug.cgi?id=70142

        Reviewed by Gustavo Noronha Silva.

        * CMakeListsEfl.txt: Include DRT CMakeLists.
        * DumpRenderTree/efl/CMakeLists.txt: Added.

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

        [style] Allow usage of NULL in gst_*
        https://bugs.webkit.org/show_bug.cgi?id=70498

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/cpp.py: Simplified the detection
        of gst_ calls. Now just ignore NULL in all of them.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Test for above change.

2011-10-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed. Build fix after r97043.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues): Use ewk_view_scale_set() instead of ewk_view_page_scale().
        * DumpRenderTree/efl/EventSender.cpp:
        (scalePageByCallback): Ditto.

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

        Unreviewed. Adding myself to watchlists.
        * Scripts/webkitpy/common/config/watchlist:

2011-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach new-run-webkit-tests about #CRASHED and #CRASHED - WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=63683

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-19  Jochen Eisinger  <jochen@chromium.org>

        Chromium doesn't support git branch builds, so don't add the branch to the product dir
        https://bugs.webkit.org/show_bug.cgi?id=70449

        Reviewed by Eric Seidel.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-10-19  Ojan Vafai  <ojan@chromium.org>

        Unreviewed. Adding myself to watchlists.
        * Scripts/webkitpy/common/config/watchlist:

2011-10-19  Tom Zakrajsek  <tomz@codeaurora.org>

        Add a suggest-nominations command to webkit-patch for computing potential committer/reviewer nominations
        https://bugs.webkit.org/show_bug.cgi?id=62166

        Reviewed by Eric Seidel.

        Included options to control committer/reviewer patch count requirements,
        an age-limit on patches, and verbose output for more in-depth analysis.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py: Added.
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py: Added.

2011-10-19  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests -2 was crashing due to both "java" and "java/" being listed in Skipped files.
        Make NRWT normalize directory names in Skipped files during parsing.

        Unreviewed.  Very simple (tested) change.

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-19  David Levin  <levin@chromium.org>

        watchlist: Should be more robust to bad regex.
        https://bugs.webkit.org/show_bug.cgi?id=69486

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist: Change the instructions due to
          watchlist being checked by check-webkit-style (bug 69487) and remove the .* from file
          patterns since they are no longer anchored on the right hand side.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern.py: Change *pattern to take a compiled regex directly.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern_unittest.py: Ditto.
        * Scripts/webkitpy/common/watchlist/changedlinepattern.py: Ditto.
        * Scripts/webkitpy/common/watchlist/changedlinepattern_unittest.py: Ditto.
        * Scripts/webkitpy/common/watchlist/filenamepattern.py: Ditto.
        * Scripts/webkitpy/common/watchlist/filenamepattern_unittest.py: Ditto and change a test now that
        filenames are no longer anchored on the right hand side.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Catch regex errors and log them as errors.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Add some tests to verify that bad regexes
        don't kill everything.

2011-10-19  David Levin  <levin@chromium.org>

        watchlist: Add a stylecheck to do validity checks for the watchlist config.
        https://bugs.webkit.org/show_bug.cgi?id=69487

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checker.py: Add the watchlist file type.
        * Scripts/webkitpy/style/checkers/watchlist.py: Added.
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py: Added.

2011-10-19  Eric Seidel  <eric@webkit.org>

        NRWT ServerProcess can't read lines from stderr and stdio separately
        https://bugs.webkit.org/show_bug.cgi?id=70435

        Reviewed by Adam Barth.

        This is the underlying bug behind our lack of WK2 support, and timeout detection on Windows.
        DRT expects RWT to read one line at a time from stderr and stdout independently.
        This allows DRT to communicate errors over stderr and have them responded to immediately
        regardless of what state the stdio stream may be in.  Previously NRWT's ServerProcess
        class only exposed a read_line function which would read a line from stdout
        and batch all output from stderr into an error buffer.  Callers would only be able
        to respond to commands over stderr if they happened to correspond with a stdout line boundary.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-10-19  Chang Shu  <cshu@webkit.org>

        [Qt] Support WK1-only Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=70254

        Reviewed by Csaba Osztrogonác.

        Added a new search path qt-wk1 for skipping WK1-only tests.

        * Scripts/webkitpy/layout_tests/port/qt.py: NRWT
        * Scripts/old-run-webkit-tests: ORWT

2011-10-19  Gabor Rapcsanyi  <rgabor@webkit.org>

        [GTK] Enable to use built-product-archive on GTK platform
        https://bugs.webkit.org/show_bug.cgi?id=70319

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/built-product-archive:

2011-10-18  David Levin  <levin@chromium.org>

        watchlist: Should try to run if it can and not throw on mistakes.
        https://bugs.webkit.org/show_bug.cgi?id=70358

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/system/outputcapture.py: Add the ability to capture log output.
        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Adapt to the logging of errors.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Change to log problems and fix problems when found.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Adapt to the logging of errors.
        * Scripts/webkitpy/common/watchlist/watchlistrule.py: Expose a way to remove instructions.
        * Scripts/webkitpy/common/watchlist/watchlistrule_unittest.py: Test the new function.

2011-10-18  Sam Weinig  <sam@webkit.org>

        Move uses of C-SPI out of WKView.h and into WKViewPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=70387

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/BrowserWindowController.m:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        Update to include WKViewPrivate.h where necessary.

2011-10-18  Joseph Pecoraro  <joepeck@webkit.org>

        Web Inspector: Some localizedStrings.js Updates
        https://bugs.webkit.org/show_bug.cgi?id=70365

        Reviewed by Darin Adler.

        * Scripts/check-inspector-strings:
        Updated to the new webkitpy way to determine checkout root.

        * Scripts/webkitdirs.pm:
        (copyInspectorFrontendFiles):
        Made it so build-webkit --inspector-frontend copies over
        the localizedStrings.js file as well as the frontend files.

2011-10-18  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Clear list of visited pages before each test.
        https://bugs.webkit.org/show_bug.cgi?id=70355

        Reviewed by Antonio Gomes.

        r97596 uncovered a bug in the implementation: the list of visited
        links was not cleared between tests, which caused tests such as
        fast/repaint/outline-repaint-glitch.html to be flaky (the link color
        changed depending on whether fast/repaint/border-repaint-glitch.html
        was visited before or not).

        Call ewk_history_clear to make sure the visited links list does not
        persist between tests.

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

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Split TestExpectationsEditor into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=70348

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor.py: Copied from Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py.
        * Scripts/webkitpy/layout_tests/controllers/test_expectations_editor_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Adjusted for change.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Ditto.

2011-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        [Chromium] buildbot runs nrwt with --chromium instead of --chromium-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=70313

        Reviewed by Adam Barth.

        Fixed the bug by passing --platform --chromium-cg-mac in RunWebKitTests. We can't always add
        this parameter because build-webkit and other scripts don't accept it.

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

2011-10-18  Adam Barth  <abarth@webkit.org>

        Subscribe myself to WebIDL changes
        https://bugs.webkit.org/show_bug.cgi?id=70341

        Reviewed by David Levin.

        I've also added some documentation and refactored my previous
        subscriptions to make it eaiser for others to subscribe as well.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Add myself to the newfangled watchlist plumbing.
        https://bugs.webkit.org/show_bug.cgi?id=70338

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist: Added sheepishly.

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix a unit test in TestFailures.
        https://bugs.webkit.org/show_bug.cgi?id=70337

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NewBugForm_unittests.js: Turns out,
            the value of a method property should always be lowercase.

2011-10-18  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(XPATH)
        https://bugs.webkit.org/show_bug.cgi?id=70217

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:

2011-10-18  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should not report flaking in expected failures as failures.
        https://bugs.webkit.org/show_bug.cgi?id=70279

        Reviewed by Adam Barth.

        On the bots, flakes that are already expected to fail aren't reported as failures (they keep the bot green).
        For example, if TEXT failure is expected, a TEXT TIMEOUT result will not cause the redness. We should do the
        same for garden-o-matic.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js: Spuriously changed to use Array iterators rather than jQuery APIs,
            rewrote the logic for determining expected or unexpected failures as a central analysis tool.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js: Added unit tests.

2011-10-18  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Support for client-based geolocation
        https://bugs.webkit.org/show_bug.cgi?id=64970

        Reviewed by Martin Robinson.

        Add support for testing client-based geolocation tests in DumpRenderTree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Reset GeolocationClientMock.
        (createWebView): Create web view after declaring DumpRenderTree mode.
        That way a mock client for geolocation is used instead of a GeoClue
        client if a web view is created when testing.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Implement functions for
        geolocation layout tests.
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * Scripts/build-webkit: Note that the Gtk port is using client-based
        geolocation, even though changing this flag has no effect on compilation.

2011-10-07  Andrey Kosyakov  <caseq@chromium.org>

        [Chromium] suppress console output from DevTools window
        https://bugs.webkit.org/show_bug.cgi?id=69632

        Reviewed by Pavel Feldman.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::showDevTools):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didAddMessageToConsole):
        (WebViewHost::reset):
        (WebViewHost::setLogConsoleOutput):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-10-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97735.
        http://trac.webkit.org/changeset/97735
        https://bugs.webkit.org/show_bug.cgi?id=70317

        some people apparently use build-jsc with the qt port without
        building webkit first (Requested by torarne on #webkit).

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildQMakeProject):
        (buildQMakeQtProject):

2011-10-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove dead code in build-webkit

        build-webkit will iterate over a list of subdirectories to build,
        but this feature is only used by the Apple ports. For QtWebKit we
        always pass an empty directory to buildQMakeProject, which makes
        the logic for dealing with sub-projects in buildQMakeProject just
        added noise.

        If we do want this feature at some point, we should redo it in
        the context of the upcoming build system changes for Qt.

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildQt):

2011-10-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Remove traces of Symbian support from the build scripts

        Reviewed by Simon Hausmann.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (usesPerConfigurationBuildDirectory):
        (buildQMakeProject):

2011-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r97672.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-17  Kent Tamura  <tkent@chromium.org>

        A follow-up of r97716.
        https://bugs.webkit.org/show_bug.cgi?id=68803

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Initialize m_dumpCreateView.

2011-10-17  Jochen Eisinger  <jochen@chromium.org>

        [chromium] add LayoutTestController.dumpCreateView() to monitor calls to WebViewClient::createView
        https://bugs.webkit.org/show_bug.cgi?id=68803

        Reviewed by Nate Chapin.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpCreateView):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpCreateView):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):

2011-10-17  Nate Chapin  <japhet@chromium.org>

        Add myself to watchlists, and add a watch
        for Source/WebCore/loader/.
        https://bugs.webkit.org/show_bug.cgi?id=70263

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Make non-recognized keys work in events as well.
        https://bugs.webkit.org/show_bug.cgi?id=69860

        Reviewed by Antonio Gomes.

        fast/forms/select-type-ahead-non-latin.html is the canonical case we fix
        here: it has a select box with a few non-latin options, and one of them
        is selected via the keyboard.

        In this specific case, we need to make EventHandler::keyEvent send a
        keyPressEvent to SelectElement, so that
        SelectElement::defaultEventHandler calls typeAheadFind(). This happens
        only when PlatformKeyEvent::text() is not empty, which was not the case
        so far.

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

2011-10-17  Alok Priyadarshi  <alokp@chromium.org>

        Add layout tests for WebPlugin compositor path
        https://bugs.webkit.org/show_bug.cgi?id=69027

        Reviewed by James Robinson.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestWebPlugin.cpp: Added.
        (premultiplyAlpha):
        (TestWebPlugin::TestWebPlugin):
        (TestWebPlugin::~TestWebPlugin):
        (TestWebPlugin::mimeType):
        (TestWebPlugin::initialize):
        (TestWebPlugin::destroy):
        (TestWebPlugin::updateGeometry):
        (TestWebPlugin::parsePrimitive):
        (TestWebPlugin::parseColor):
        (TestWebPlugin::parseOpacity):
        (TestWebPlugin::initScene):
        (TestWebPlugin::drawScene):
        (TestWebPlugin::destroyScene):
        (TestWebPlugin::initProgram):
        (TestWebPlugin::initPrimitive):
        (TestWebPlugin::drawPrimitive):
        (TestWebPlugin::loadShader):
        (TestWebPlugin::loadProgram):
        * DumpRenderTree/chromium/TestWebPlugin.h: Added.
        (TestWebPlugin::scriptableObject):
        (TestWebPlugin::paint):
        (TestWebPlugin::updateFocus):
        (TestWebPlugin::updateVisibility):
        (TestWebPlugin::acceptsInputEvents):
        (TestWebPlugin::handleInputEvent):
        (TestWebPlugin::didReceiveResponse):
        (TestWebPlugin::didReceiveData):
        (TestWebPlugin::didFinishLoading):
        (TestWebPlugin::didFailLoading):
        (TestWebPlugin::didFinishLoadingFrameRequest):
        (TestWebPlugin::didFailLoadingFrameRequest):
        (TestWebPlugin::Scene::Scene):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPlugin):

2011-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        [nrwt] Add new category for MISSING
        https://bugs.webkit.org/show_bug.cgi?id=69990

        Reviewed by Dirk Pranke.

        Treat missing results as a new category in summerize_results.

        Because Chromium port wants to turn bots red when there are tests with missing results,
        extracted the logic to compute the exit code as exit_code_from_summarized_results in
        base and chromium ports.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-17  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic operations fail because of CSP.
        https://bugs.webkit.org/show_bug.cgi?id=70249

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Added gardening server to the policy.

2011-10-17  Ada Chan  <adachan@apple.com>

        Add a test to call WKPageLoadAlternateHTMLString() with a non-directory URL.
        https://bugs.webkit.org/show_bug.cgi?id=70168

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST): Call WKPageLoadAlternateHTMLString() with a file URL and make sure it finishes loading.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add the new file.

2011-10-17  Darin Adler  <darin@apple.com>

        Add some more *.pyc ignores in directories with Python scripts.

        * QueueStatusServer: Added property svn:ignore.
        * Scripts/webkitpy/common/watchlist: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/controllers: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/views: Added property svn:ignore.

2011-10-17  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2][meta] Fix failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=70236

        Reviewed by Csaba Osztrogonác.

        In order to run WebKit2 API tests we need the WebProcess to be in
        the path so let's add the bin directory when running the API tests of Qt.

        * Scripts/run-qtwebkit-tests:

2011-10-17  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt][WK2] Build dependency problems
        https://bugs.webkit.org/show_bug.cgi?id=68456

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-10-17  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        [build] Introduce Qt/SH4 buildbot
        https://bugs.webkit.org/show_bug.cgi?id=70227

        Reviewed by Adam Roben.

        Add buildslave for Linux/Qt/SH4.

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

2011-10-16  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(DOM_STORAGE)
        https://bugs.webkit.org/show_bug.cgi?id=70189

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-10-15  Adam Barth  <abarth@webkit.org>

        Rename ENABLE(TILED_BACKING_STORE) to USE(TILED_BACKING_STORE)
        https://bugs.webkit.org/show_bug.cgi?id=70194

        Reviewed by Daniel Bates.

        * Scripts/build-webkit:

2011-10-15  Ojan Vafai  <ojan@chromium.org>

        run-webkit-tests should accept --child-processes
        https://bugs.webkit.org/show_bug.cgi?id=69713

        Reviewed by Adam Barth.

        Only set --child-processes=1 if --child-processes it not
        passed on the commandline.

        * Scripts/run-webkit-tests:

2011-10-15  Daniel Bates  <dbates@webkit.org>

        Extract common gdb code into its own function; Remove script gdb-safari
        https://bugs.webkit.org/show_bug.cgi?id=68499

        Reviewed by David Kilzer.

        Almost identical code is used in webkitdirs::{debugMiniBrowser, debugWebKitTestRunner,
        runSafari}() and in the script gdb-safari to launch gdb to debug an application.
        We should extract the common parts into a function that can be shared by all callers
        so as to remove duplicate code.

        As a side effect of removing duplicate code we can remove the script gdb-safari since
        its code has been incorporated into webkitdirs::debugSafari() which is called by the
        script debug-safari.

        * Scripts/debug-safari: Modified to call webkitdirs::debugSafari().
        * Scripts/gdb-safari: Removed.
        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging): Added; Extracted common debugging code from
        debugMiniBrowser(), debugWebKitTestRunner(), runSafari() and
        script gdb-safari to here.
        (debugSafari): Added.
        (runSafari): Extracted debugging code to debugSafari() and debugMacWebKitApp();
        Also, return the exit status of WebKit launcher (WebKit.exe) on Windows. Currently,
        runSafari() always returns 1 on Windows and the script run-safari exits using this
        value as its exit status. Hence, the script run-safari always exits with a nonzero
        exit status (i.e. abnormal termination) on Windows. Instead, we should return the
        exit status of the WebKit launcher application.
        (debugMiniBrowser): Modified to call debugMacWebKitApp().
        (debugWebKitTestRunner): Ditto.

2011-10-15  Robert Hogan  <robert@webkit.org>

        [webkit-patch] Put Source/Tools changes at the top of patches, LayoutTests at the bottom
        https://bugs.webkit.org/show_bug.cgi?id=70056

        Reviewed by Adam Barth.

        The preferred file-order for patches is LayoutTests at the end and
        ChangeLogs before everything else in a subdirectory. Specify this in a git 'orderfile' and use 
        it when creating patches for review and landing.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/orderfile: Added.

2011-10-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt] [Symbian] Remove support for the Symbian platform for the QtWebKit port
        https://bugs.webkit.org/show_bug.cgi?id=69920

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::screenshot):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        * Scripts/webkitpy/style/checker.py: Remove rules for the
        WebKit/qt/symbian/platformplugin directory.
        * Scripts/webkitpy/style/checker_unittest.py:
        * Tools.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::platformInitialize):
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::isExistingLibrary):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-10-15  Adam Barth  <abarth@webkit.org>

        Fix typo in webkitpy help
        https://bugs.webkit.org/show_bug.cgi?id=70169

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/commands/upload.py:

2011-10-15  Tony Chang  <tony@chromium.org>

        fix another typo in treemap.html
        https://bugs.webkit.org/show_bug.cgi?id=70149

        Reviewed by Ojan Vafai.

        Fixes a bug where #treemapfocus=LayoutTests%2Fhttp didn't focus the http tests.

        * TestResultServer/static-dashboards/treemap.html:

2011-10-14  Adam Barth  <abarth@webkit.org>

        Hide status bubbles from queues which are very far behind
        https://bugs.webkit.org/show_bug.cgi?id=70133

        Reviewed by Eric Seidel.

        The mac-ews is so far behind that we shouldn't show its status bubble.
        The status bubble just makes contributors sad.

        * QueueStatusServer/handlers/statusbubble.py:

2011-10-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Write unit test to ensure style-checker-filter option is passed properly in webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=70143

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download_unittest.py: Added a test for land-cowboy. Not so cowboy after all.
        * Scripts/webkitpy/tool/steps/checkstyle.py: Fixed a bug, discovered by the newly added test.

2011-10-14  David Levin  <levin@chromium.org>

        watchlist: Add a validation check for the email names in the list.
        https://bugs.webkit.org/show_bug.cgi?id=70154

        Reviewed by Adam Barth.

        If an email is listed which doesn't have a bugzilla log in, then any emails
        added to the bug along with that email will fail to happen, so try to prevent this
        from happening by validating that emails added to the watchlist are known to be
        contributors.

        * Scripts/webkitpy/common/config/committers.py: Add my other email aliases for bugzilla.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Add the check.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: A unit test for the check.

2011-10-14  David Levin  <levin@chromium.org>

        watchlist: If the style check fails, then the watchlist will not be run.
        https://bugs.webkit.org/show_bug.cgi?id=69484

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/queues.py: Run the watch list even
        if the style part fails and don't allow watch list failures turn the
        bot run red.
        * Scripts/webkitpy/tool/commands/queues_unittest.py: Appropriate unit tests.
        * Scripts/webkitpy/tool/mocktool.py: Add support to make an executive command throw.

2011-10-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Plumb style-checker filter up to command options and make land-cowboy use it.
        https://bugs.webkit.org/show_bug.cgi?id=70119

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checker.py: Added ChangeLogChecker categories to the big list.
        * Scripts/webkitpy/style/checkers/changelog.py: Declared categories, used in ChangeLogChecker.
        * Scripts/webkitpy/tool/commands/download.py: Made LandCowboy use filter.
        * Scripts/webkitpy/tool/commands/download_unittest.py: Tweaked the test.
        * Scripts/webkitpy/tool/commands/upload_unittest.py: Ditto.
        * Scripts/webkitpy/tool/steps/checkstyle.py: Made check_style_filter work.
        * Scripts/webkitpy/tool/steps/options.py: Added new option, check-style-filter.

2011-10-14  Sam Weinig  <sam@webkit.org>

        Remove the Leopard slaves.

        Reviewed by Adam Roben.

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

2011-10-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Inherit settings from Chromium's envsetup.sh, address a NDK todo
        https://bugs.webkit.org/show_bug.cgi?id=70028

        Reviewed by Adam Barth.

        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):
        (buildChromium):

2011-10-14  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed; add missing #includes.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/efl/EventSender.cpp:

2011-10-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Correctly get the absolute URL in LayoutTestController::queueLoad()
        https://bugs.webkit.org/show_bug.cgi?id=69770

        Reviewed by Antonio Gomes.

        We were just appending the given URL to the absolute URI of the main
        frame, which resulted in "file:///foo/bar/baz.htmltheother/url.html"
        instead of "file:///foo/bar/theother/url.html".

        This should make fast/dom/navigation-type-navigate.html behave
        better (it still fails, but later).

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::queueLoad):

2011-10-13  Arko Saha  <arko@motorola.com>

        Microdata: Basic implementation of document.getItems() method.
        https://bugs.webkit.org/show_bug.cgi?id=68610

        Reviewed by Ryosuke Niwa.

        Added ENABLE(MICRODATA) feature flag. Implement document.getItems() DOM API.
        Spec : http://www.whatwg.org/specs/web-apps/current-work/complete/microdata.html

        * Scripts/build-webkit:

2011-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        new-run-webkit-tests does not support qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        Roll-back second part of r97252. :)

        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-10-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Do not use OwnFastMallocPtr to manage char*'s.
        https://bugs.webkit.org/show_bug.cgi?id=70106

        Reviewed by Antonio Gomes.

        OwnFastMallocPtr was being used as a smart pointer that automatically called
        free() on the strings returned by the EFL or by ewk.

        However, when WTF is built in release mode, it uses its own memory management
        code instead of using the system malloc(), free() and friends. This means bad
        things will happen when one uses WTF's free() on memory allocated with system
        malloc() by the EFL or ewk.

        The easiest way to solve this is to call free() ourselves.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (getFinalTestURL):

2011-10-14  Raphael Kubo da Costa  <kubo@profusion.mobi>

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

        Reviewed by Kenneth Rohde Christiansen.

        Make the calls in DumpRenderTree use DumpRenderTreeSupportEfl.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::initialize): Turn on mock scrollbars.
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onWindowObjectCleared):
        (DumpRenderTreeChrome::onDocumentLoadFinished):
        * DumpRenderTree/efl/GCControllerEfl.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        (LayoutTestController::workerThreadCount):
        (LayoutTestController::findString):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2011-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable NRWT for Qt 4.8 version too, because it is supported after r97461.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        new-run-webkit-tests does not support qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        Roll-back r97252 with unit test fix.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-13  Ojan Vafai  <ojan@chromium.org>

        Make filter-build-webkit exit 1 if the build fails.
        https://bugs.webkit.org/show_bug.cgi?id=70080

        Reviewed by Eric Seidel.

        This only works if you redirect stderr to stdout, but it at least makes it possible.
        This is useful if you want to run a followup command (e.g. run-webkit-tests) but
        only if the build succeeds.

        * Scripts/filter-build-webkit:

2011-10-13  Dimitri Glazkov  <dglazkov@chromium.org>

        land-cowboy should at least check style.
        https://bugs.webkit.org/show_bug.cgi?id=70073

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/download.py: Added CheckStyle step to LandCowboy command.

2011-10-13  Tony Chang  <tony@chromium.org>

        fix regex in layout test times dashboard
        https://bugs.webkit.org/show_bug.cgi?id=70059

        This fixes the treemapfocus query param.

        Reviewed by Ojan Vafai.

        * TestResultServer/static-dashboards/treemap.html:

2011-10-13  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70050
        DRT and WRT should have HiDPI testing capabilities

        Reviewed by Darin Adler.

        New layoutTestController function setBackingScaleFactor takes a double for a scale 
        factor and a callback function to call once the backing scale factor has 
        successfully been set for the view.
        * DumpRenderTree/LayoutTestController.cpp:
        (setBackingScaleFactorCallback):
        (LayoutTestController::staticFunctions):

        On Mac, setBackingScaleFactor calls WebView _setCustomBackingScaleFactor. Other 
        platforms do nothing.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setBackingScaleFactor):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setBackingScaleFactor):

        Reset the backing scale factor by calling _setCutsomBackingScaleFactor with a 
        value of 0, which resets to the system default.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

        When generating the pixel dump, create a Bitmap of the appropriate size based on 
        the backing scale factor. If it is a HiDPI view, paint into the context using 
        displayRectIgnoringOpacity.
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

        And now the same stuff for WK2. Again, new layoutTestController function 
        setBackingScaleFactor takes a double for a scale factor and a callback function. 
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setBackingScaleFactor):
        (WTR::LayoutTestController::callSetBackingScaleFactorCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

        The InjectedBundle sends a message to the UI process to set the backing scale 
        factor. It also processes a message the UI process will send back once it 
        completes this task, and at that time, the InjectedBundle calls the callback.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::postSetBackingScaleFactor):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        Again, reset the backing scale factor by calling WKPageSetCustomBackingScaleFactor 
        with a value of 0, which resets to the system default.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

        Upon receiving the SetBackingScaleFactor message, call 
        WKPageSetCustomBackingScaleFactor to the given scale factor, and post a message 
        back to InjectedBundle to say it has been done.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        
        Don't use window snapshotting for the HiDPI tests. We don't have a way to fake a 
        window's scale factor so we have to avoid that.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-10-13  John Knottenbelt  <jknotten@chromium.org>

        [Chromium] Allow building without speech input enabled.
        https://bugs.webkit.org/show_bug.cgi?id=69867

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addMockSpeechInputResult):

2011-10-13  Kent Tamura  <tkent@chromium.org>

        [Chromium] A DRT fix for r97348.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        Ignore overridePreference() for "WebKitWebAudioEnabled", and don't
        print an error message.

2011-10-12  Lucas Forschler  <lforschler@apple.com>

        Update kill-old-processes logic.
        https://bugs.webkit.org/show_bug.cgi?id=63651

        Reviewed by Ryosuke Niwa.

        Remove unused mac platform specific folder.
        Update master.config to use new kill-old-processes.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/kill-old-processes:
        * BuildSlaveSupport/mac: Removed.

2011-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        [NRWT] New tests without expected files are reported as flakey tests
        https://bugs.webkit.org/show_bug.cgi?id=67268

        Reviewed by Dirk Pranke.

        The bug was caused by summarize_results's regarding all tests that have an entry in result_summary
        and no entry in retry_summary as flaky. Since we don't retry missing tests, there will be no entries
        for missing results in retry_summary.

        Fixed the bug by treating missing results separately.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-10-12  Adam Barth  <abarth@webkit.org>

        Remove ENABLE(XHTMLMP) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=69729

        Reviewed by David Levin.

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Kill old run-webkit-tests processes in kill-process on Mac
        https://bugs.webkit.org/show_bug.cgi?id=69976

        Reviewed by Dirk Pranke.

        Add a system call to remove all python processes running run-webkit-tests.

        * BuildSlaveSupport/kill-old-processes:
        * BuildSlaveSupport/mac: Removed.

2011-10-12  Simon Fraser  <simon.fraser@apple.com>

        Many WK2 snapshots are blank
        https://bugs.webkit.org/show_bug.cgi?id=69953

        Reviewed by Beth Dakin.
        
        Two fixes:
        1. negating a size_t in CGContextTranslateCTM() fails, because
        size_t is unsigned. Fix by casing to CGFloat before negation.
        
        2. Turn on window autodisplay, so that compositing tests snapshot correctly.
        Autodisplay is necessary to kick off Core Animation rendering.

        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2011-10-12  Adam Barth  <abarth@webkit.org>

        commit-queue doesn't have a friendly error message when the reviewer line is messed up
        https://bugs.webkit.org/show_bug.cgi?id=69979

        Reviewed by Eric Seidel.

        Rather than combining the ChangeLog validation with a more complicated
        command, this patch has the commit-queue run it as a separate command,
        which will give us more control over the error message.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2011-10-12  Eric Seidel  <eric@webkit.org>

        Layout tests asserting in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=69898

        Reviewed by Simon Fraser.

        old-run-webkit-tests just didn't know to set LOCAL_RESOURCE_ROOT, oops.

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

2011-10-12  Adam Barth  <abarth@webkit.org>

        The commit-queue doesn't tell me which tests my patch broke
        https://bugs.webkit.org/show_bug.cgi?id=69975

        Reviewed by Eric Seidel.

        We now print the list of newly failing tests, like we do for the EWS.

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

2011-10-10  Alice Boxhall  <aboxhall@chromium.org>

        Added myself as a committer.

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

2011-10-12  Adam Barth  <abarth@webkit.org>

        _run_tests is a confusing variable name in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=69971

        Reviewed by Eric Seidel.

        Eric and I thought this was a function.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:

2011-10-12  Tony Chang  <tony@chromium.org>

        Fix test-webkitpy after r97307 and r97293.

        * Scripts/webkitpy/layout_tests/port/chromium.py: options.time_out_ms
          is None during tests so add back the check.
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py: The
          output directory is now build/Debug.

2011-10-12  Tony Chang  <tony@chromium.org>

        [chromium] remove old build dirs on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=69961

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py: Output is now
          always in build and never in chrome or webkit.

2011-10-12  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's "Expect Failure" button does not work correctly, so we should remove it until the plumbing is fixed to avoid landmines.
        https://bugs.webkit.org/show_bug.cgi?id=69954

        Also renamed the action and associated event name to address an FIXME.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Renamed event name.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js: Renamed the action.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js: Removed action temporarily.

2011-10-12  Tony Chang  <tony@chromium.org>

        stop spamming 'stopping test driver timed out, killing it' when running rwt
        https://bugs.webkit.org/show_bug.cgi?id=69938

        Reviewed by Adam Barth.

        In http://trac.webkit.org/changeset/95875 , we made the timeout for
        stopping the driver based on time_out_ms, but we based it on the wrong
        default times.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-10-12  Simon Fraser  <simon.fraser@apple.com>

        3D transforms are flattened in WebKit2 snapshots
        https://bugs.webkit.org/show_bug.cgi?id=68276

        Reviewed by Adam Roben.
        
        Fix WKImage leak noticed by Adam.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2011-10-12  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should color-code test failure types.
        https://bugs.webkit.org/show_bug.cgi?id=69945

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js: Added an extra span for styling.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Added color-coding.

2011-10-12  Adam Barth  <abarth@webkit.org>

        webkitpy tests are failing on Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=69929

        Reviewed by Simon Fraser.

        Admit that Lion exists.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-10-12  Simon Fraser  <simon.fraser@apple.com>

        Improve output of run-api-tests to make time-outs more obvious
        https://bugs.webkit.org/show_bug.cgi?id=69788

        Reviewed by Adam Roben.
        
        List the tests that failed and timed out at the bottom of the output,
        if run with --verbose.

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

2011-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97252.
        http://trac.webkit.org/changeset/97252
        https://bugs.webkit.org/show_bug.cgi?id=69944

        Broke test-webkpy (Requested by abarth on #webkit).

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-12  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        new-run-webkit-tests does not support qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:

2011-10-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Make adding another unit test easier
        https://bugs.webkit.org/show_bug.cgi?id=69409

        Reviewed by Gustavo Noronha Silva.

        * Scripts/run-gtk-tests: Update run-gtk-tests to be able to execute
        new WebKit2 tests.

2011-10-11  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b6.
        https://bugs.webkit.org/show_bug.cgi?id=69824

        Reviewed by Kent Tamura.

        WebKit supports WebSocket with version 8 based protocol for now.
        We should update its protocol to version 13 based one like hybi-17.
        pywebsocket 0.6b6 supports both of version 8 and 13.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-10-11  Simon Fraser  <simon.fraser@apple.com>

        WebKitTestRunner needs to link with WebKit for NSURL category methods
        https://bugs.webkit.org/show_bug.cgi?id=69892

        Reviewed by Sam Weinig.
        
        WebDragClient::declareAndWriteDragImage() was throwing an Obj-C exception on 10.6 because
        the +_web_originalDataAsString selector on NSURL was not recognized. Link with
        WebKit.framework to fix this.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-10-11  Adam Barth  <abarth@webkit.org>

        sheriffbot takes too long to acknowledge rollout commands
        https://bugs.webkit.org/show_bug.cgi?id=69871

        Reviewed by Eric Seidel.

        We used to update the working copy before acknowledging the command
        because we wanted to ping all the relevant IRC nicks.  That's caused a
        bunch of frustration because folks don't know whether the bot has heard
        their commands.

        This patch makes the bot reply immediately before updating the working
        copy.  All the relevenat folks are still pinged when the bot finishes
        preparing the rollout.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-10-11  Adam Barth  <abarth@webkit.org>

        test-webkitpy fails on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69873

        Reviewed by Eric Seidel.

        This patch fixes one of the two failures.  I'll need to track down the
        other failure another time.

        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-10-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should warn me when run-webkit-tests errors out (e.g., due to python screw-ups)
        https://bugs.webkit.org/show_bug.cgi?id=65230

        Reviewed by Dimitri Glazkov.

        This patch causes us to treat crashed or hung run-webkit-tests runs
        similarly to how we treat compile failures.  In some sense, they're
        similar because they prevent us from getting test coverage.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:

2011-10-11  Adam Barth  <abarth@webkit.org>

        Failing builder display in garden-o-matic should have the same visual style as the failure grid
        https://bugs.webkit.org/show_bug.cgi?id=69876

        Reviewed by Dimitri Glazkov.

        This patch generalizes the view we use for failing builders in the
        FailureGrid so that we can use it for the list of builders that aren't
        compiling.

        One downside of this patch is that it makes it harder to tell when
        debug builders are failing (as opposed to release builders) because
        that information isn't presented in this view.  A future patch will
        improve this aspect.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.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.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-10-11  Filip Pizlo  <fpizlo@apple.com>

        Some API tests are timing out in Release
        https://bugs.webkit.org/show_bug.cgi?id=69787

        Reviewed by Mark Rowe.
        
        NDEBUG must be set in release builds. Otherwise the world breaks. Also added some
        magic to ensure that GTest builds in release mode in clang with NDEBUG set.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/config.h:

2011-10-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic links to flakiness dashboard should open in a new tab
        https://bugs.webkit.org/show_bug.cgi?id=69864

        Reviewed by Dimitri Glazkov.

        This bug was obvious in the first five minutes of using this new
        feature.  :)

        * 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:

2011-10-11  Adam Barth  <abarth@webkit.org>

        Tweak the Content-Security-Policy for garden-o-matic.  It turns out
        that * doesn't really mean "all".  I've emailed the W3C working group
        about changing the spec.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2011-10-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should link to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=69862

        Reviewed by Dimitri Glazkov.

        The flakiness dashboard has lots of great information about the failure
        history of each test.  This patch adds a link from garden-o-matic to
        the flakiness dashboard so the gardener can look at this information.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.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:

2011-10-11  David Levin  <levin@chromium.org>

        watchlist: assertRaisesRegexp implementation should be compatible with python 2.7.
        https://bugs.webkit.org/show_bug.cgi?id=69789

        Reviewed by Eric Seidel.

        Made the signature of _assertRaisesRegexp match that of Python 2.7.

        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Adjusted to be compatible with Python 2.7.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Ditto.
        * Scripts/webkitpy/common/webkitunittest.py: Ditto.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Ditto.

2011-10-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Do not abort() when an unknown key is pressed.
        https://bugs.webkit.org/show_bug.cgi?id=69856

        Reviewed by Antonio Gomes.

        A lot of tests crash due to the previous behaviour. Just using the
        received name of the pressed key works most of the time, and when it
        does not the failing tests should tell us.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (keyDownCallback):

2011-10-11  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] [WK2] NRWT failed to launch MiniBrowser after test run
        https://bugs.webkit.org/show_bug.cgi?id=68016

        Reviewed by Chang Shu.

        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-10-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Return the right window count in LayoutTestController.
        https://bugs.webkit.org/show_bug.cgi?id=69764

        Reviewed by Antonio Gomes.

        Follow-up to r96943: now that we have DumpRenderTreeChrome and
        DumpRenderTreeView in the tree, we can correctly count the number of
        open windows in DRT.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::windowCount):

2011-10-11  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r96770-r96777): fast/dom/Window/window-properties.html, fast/dom/prototype-inheritance-2.html, fast/js/global-constructors.html failing on SnowLeopard Intel Release (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=69800

        Reviewed by Csaba Osztrogonác.

        Enable WEB_AUDIO at runtime.

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

2011-10-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Make sure IconDatabase is closed before trying to open it again.
        https://bugs.webkit.org/show_bug.cgi?id=69769

        Reviewed by Antonio Gomes.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setIconDatabaseEnabled):

2011-10-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove all references to QTDIR_build and standalone_package

        Qt is now modularized, which means we no longer import WebKit into
        the Qt source tree. Instead we use git submodules, and building
        QtWebKit as "part of Qt" is really building QtWebKit as from trunk.

        To decrease the number of buildsystem configurations we also remove
        the standalone_package code-path used when we were providing tarballs
        with the derived sources pre-generated.

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:

2011-10-11  Dominic Mazzoni  <dmazzoni@google.com>

        Update Chromium accessibility support in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=69676

        Reviewed by Chris Fleizach.

        Adds several missing properties and methods to enable more
        tests to pass, and in particular adds support for notification
        callbacks.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::reset):
        (AccessibilityController::getFocusedElement):
        (AccessibilityController::shouldLogAccessibilityEvents):
        (AccessibilityController::notificationReceived):
        (AccessibilityController::logAccessibilityEventsCallback):
        * DumpRenderTree/chromium/AccessibilityController.h:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (getHelpText):
        (getStringValue):
        (getOrientation):
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::isEqual):
        (AccessibilityUIElement::notificationReceived):
        (AccessibilityUIElement::roleGetterCallback):
        (AccessibilityUIElement::titleGetterCallback):
        (AccessibilityUIElement::descriptionGetterCallback):
        (AccessibilityUIElement::helpTextGetterCallback):
        (AccessibilityUIElement::stringValueGetterCallback):
        (AccessibilityUIElement::xGetterCallback):
        (AccessibilityUIElement::yGetterCallback):
        (AccessibilityUIElement::widthGetterCallback):
        (AccessibilityUIElement::heightGetterCallback):
        (AccessibilityUIElement::intValueGetterCallback):
        (AccessibilityUIElement::minValueGetterCallback):
        (AccessibilityUIElement::maxValueGetterCallback):
        (AccessibilityUIElement::childrenCountGetterCallback):
        (AccessibilityUIElement::insertionPointLineNumberGetterCallback):
        (AccessibilityUIElement::selectedTextRangeGetterCallback):
        (AccessibilityUIElement::isEnabledGetterCallback):
        (AccessibilityUIElement::isRequiredGetterCallback):
        (AccessibilityUIElement::isFocusedGetterCallback):
        (AccessibilityUIElement::isFocusableGetterCallback):
        (AccessibilityUIElement::isSelectedGetterCallback):
        (AccessibilityUIElement::isSelectableGetterCallback):
        (AccessibilityUIElement::isMultiSelectableGetterCallback):
        (AccessibilityUIElement::isExpandedGetterCallback):
        (AccessibilityUIElement::isCheckedGetterCallback):
        (AccessibilityUIElement::isVisibleGetterCallback):
        (AccessibilityUIElement::isOffScreenGetterCallback):
        (AccessibilityUIElement::isCollapsedGetterCallback):
        (AccessibilityUIElement::hasPopupGetterCallback):
        (AccessibilityUIElement::isValidGetterCallback):
        (AccessibilityUIElement::orientationGetterCallback):
        (AccessibilityUIElement::showMenuCallback):
        (AccessibilityUIElement::pressCallback):
        (AccessibilityUIElement::isEqualCallback):
        (AccessibilityUIElement::addNotificationListenerCallback):
        (AccessibilityUIElement::removeNotificationListenerCallback):
        (AccessibilityUIElement::takeFocusCallback):
        (AccessibilityUIElement::fallbackCallback):
        (RootAccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElementList::getOrCreate):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppVariant.cpp:
        (CppVariant::invokeDefault):
        * DumpRenderTree/chromium/CppVariant.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):

2011-10-10  Adam Klein  <adamk@chromium.org>

        Support Distributed-CompileC as an action name in filter-build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=69783

        Reviewed by Ojan Vafai.

        * Scripts/filter-build-webkit:

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

        3D transforms are flattened in WebKit2 snapshots
        https://bugs.webkit.org/show_bug.cgi?id=68276

        Reviewed by Anders Carlsson.
        
        Use a snapshot of the window, rather than an image from the web process
        for pixel testing in WebKitTestRunner. This correctly captures compositing
        layers, so works for 3D transform tests.

        * WebKitTestRunner/PlatformWebView.h: Add a windowSnapshotImage() method.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage): Add a param to optionally flip the image when drawing.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Call windowSnapshotImage(), and if it returns an image,
        use that instead of the image we get from the web process.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Stub out the new method.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.

2011-10-10  David Levin  <levin@chromium.org>

        Quick fix for watchlist unit test failures when using Python 2.7+
        Reviewed by Adam Barth.

        Filed bug https://bugs.webkit.org/show_bug.cgi?id=69789 about a
        better fix.

        * Scripts/webkitpy/common/webkitunittest.py: Always use our
        version of assertRaisesRegexp.

2011-10-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97082.
        http://trac.webkit.org/changeset/97082
        https://bugs.webkit.org/show_bug.cgi?id=69784

        broke Windows build (Requested by smfr on #webkit).

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Renamed from Tools/WebKitTestRunner/cg/TestInvocationCG.mm.
        (WTR::createCGContextFromImage):
        (WTR::computeMD5HashStringForContext):
        (WTR::dumpBitmap):
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

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

        3D transforms are flattened in WebKit2 snapshots
        https://bugs.webkit.org/show_bug.cgi?id=68276

        Reviewed by Anders Carlsson.
        
        The WKImage passed from the WebProcess when pixel dumping is created by painting compositing layers
        flattened, which flattens 3D transforms. Instead, use CGWindowListCreateImage() to get a snapshot of
        the window when doing pixel tests.
        
        Also allow the window to auto-display, so that Core Animation layers are rendered, and animate.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: TestInvocationCG became a .mm file
        * WebKitTestRunner/cg/TestInvocationCG.mm: Renamed from Tools/WebKitTestRunner/cg/TestInvocationCG.cpp.
        (WTR::createBitmapCGContext): Utility function to create a bitmap context.
        (WTR::computeMD5HashStringForContext):
        (WTR::dumpBitmap):
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Use CGWindowListCreateImage() to
        grap a snapshot of the window, rather than relying on the WKImage which was passed from the web process.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Remove the line that turned off autoDisplay for the NSWindow.
        We need the window to autodisplay for Core Animation to render layers and start animations.

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

        WebKitTestRunner needs layoutTestController.setWindowIsKey
        https://bugs.webkit.org/show_bug.cgi?id=42688

        Reviewed by Anders Carlsson.

        Implement layoutTestController.setWindowIsKey() in WebKitTestRunner.
        This sets a flag that the platform layer uses to indicate that
        the window is the key window, which fixes focus ring drawing
        in pixel results.
        
        Also focus the web view when we get a 'didCommitLoad' for the main
        frame, as DumpRenderTree does.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetWindowIsKey):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::cacheLayoutTestControllerCallback): Replace some magic numbers with an enum.
        (WTR::LayoutTestController::addChromeInputField):
        (WTR::LayoutTestController::removeChromeInputField):
        (WTR::LayoutTestController::focusWebView):
        (WTR::LayoutTestController::setWindowIsKey):
        (WTR::LayoutTestController::callAddChromeInputFieldCallback):
        (WTR::LayoutTestController::callRemoveChromeInputFieldCallback):
        (WTR::LayoutTestController::callFocusWebViewCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/PlatformWebView.h: Add an NSWindow subclass
        so that we can override -isKeyWindow. Use a boolean member variable
        to track window key status.
        (WTR::PlatformWebView::setWindowIsKey):
        (WTR::PlatformWebView::windowIsKey):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runModal): Change the window key status when showing a modal alert, as DRT does.
        (WTR::closeOtherPage): Use the same cast as other functions.
        (WTR::focus): Implement to call setWindowIsKey(true)
        (WTR::unfocus): Implement to call setWindowIsKey(false)
        (WTR::TestController::createOtherPage): Add page callbacks for focus and unfocus.
        (WTR::TestController::initialize):
        (WTR::TestController::didCommitLoadForFrame): Hook up callback to focus the web view, as DRT does.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow isKeyWindow]):
        (WTR::PlatformWebView::PlatformWebView): Make a WebKitTestRunnerWindow.
        (WTR::PlatformWebView::~PlatformWebView): Clean up the back pointer on the NSWindow subclass, in case it outlives us.
        (WTR::PlatformWebView::focus): Set the view as the first responder, and the window as the key window, as DRT does.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2011-10-10  Raphael Kubo da Costa  <kubo@profusion.mobi>

        check-webkit-style: Add readability exception for Ewk_* data types.
        https://bugs.webkit.org/show_bug.cgi?id=69763

        Reviewed by David Levin.

        Many EFL-related files (such as EditorClientEfl.h or
        DumpRenderTreeSupportEfl.h) need to have declarations such as "typedef
        struct _Ewk_Foo Ewk_Foo", which currently produce false positives in
        check-webkit-style.

        Add an exception for them, just like there are exceptions for
        Evas_*, Ecore_* and others.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-10-10  Dominic Mazzoni  <dmazzoni@google.com>

        [Chromium] Get rid of WebAccessibilityCache.
        https://bugs.webkit.org/show_bug.cgi?id=68224

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::bindToJavascript):

2011-10-09  Adam Barth  <abarth@webkit.org>

        Remove "near miss" XSS vulnerabilities in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=69708

        Reviewed by David Levin.

        Collin Jackson did a security audit of garden-o-matic.  He hasn't found
        any actual vulnerabilities yet, but he did identify a couple "near
        misses" where a slight change in garden-o-matic could lead to a
        vulnerability.  This patch removes those potential issues.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2011-10-07  Adam Barth  <abarth@webkit.org>

        Add a Content-Security-Policy to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=69668

        Reviewed by David Levin.

        This will help mitigate cross-site script and will also help us dogfood CSP.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2011-10-07  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Add DumpRenderTreeChrome.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=66380

        Reviewed by Antonio Gomes.

        This encapsulates EWebKit into an object that manages multiple windows
        and provides a cleaner interface to EFL's DumpRenderTree.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp: Added.
        (DumpRenderTreeChrome::create):
        (DumpRenderTreeChrome::DumpRenderTreeChrome):
        (DumpRenderTreeChrome::~DumpRenderTreeChrome):
        (DumpRenderTreeChrome::createNewWindow):
        (DumpRenderTreeChrome::createView):
        (DumpRenderTreeChrome::removeWindow):
        (DumpRenderTreeChrome::initialize):
        (DumpRenderTreeChrome::extraViews):
        (DumpRenderTreeChrome::mainFrame):
        (DumpRenderTreeChrome::mainView):
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        (DumpRenderTreeChrome::onWindowObjectCleared):
        (DumpRenderTreeChrome::onLoadStarted):
        (DumpRenderTreeChrome::processWork):
        (DumpRenderTreeChrome::onLoadFinished):
        (DumpRenderTreeChrome::onStatusbarTextSet):
        (DumpRenderTreeChrome::onTitleChanged):
        (DumpRenderTreeChrome::onDocumentLoadFinished):
        * DumpRenderTree/efl/DumpRenderTreeChrome.h: Added.
        * DumpRenderTree/efl/EventSender.cpp:
        (sendClick): Use browser->mainFrame() instead of mainFrame.
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.
        (mouseMoveToCallback): Ditto.
        (mouseScrollByCallback): Ditto.
        (keyDownCallback): Ditto.
        (scalePageByCallback): Ditto.
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::counterValueForElementById): Use
        browser->mainFrame() instead of mainFrame.
        (LayoutTestController::pageNumberForElementById): Ditto.
        (LayoutTestController::numberOfPages): Ditto.
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId): Ditto.
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId): Ditto.
        (LayoutTestController::sampleSVGAnimationForElementAtTime): Ditto.
        (LayoutTestController::numberOfActiveAnimations): Ditto.
        (LayoutTestController::suspendAnimations): Ditto.
        (LayoutTestController::resumeAnimations): Ditto.
        (LayoutTestController::setWebViewEditable): Ditto.
        (LayoutTestController::webHistoryItemCount): Use browser->mainView()
        instead of browser.
        (LayoutTestController::queueLoad): Ditto.
        (LayoutTestController::setAcceptsEditing): Ditto.
        (LayoutTestController::setUserStyleSheetEnabled): Ditto.
        (LayoutTestController::setPrivateBrowsingEnabled): Ditto.
        (LayoutTestController::setFrameFlatteningEnabled): Ditto.
        (LayoutTestController::setSpatialNavigationEnabled): Ditto.
        (LayoutTestController::setPluginsEnabled): Ditto.
        (LayoutTestController::findString): Ditto.
        (LayoutTestController::setDeveloperExtrasEnabled): Ditto.
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView): Use browser->mainFrame() instead of
        mainFrame.
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (LoadItem::invoke): Ditto.
        (LoadHTMLStringItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.
        (ReloadItem::invoke): Use browser->mainView() instead of browser.

2011-10-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Touch mocking is broken with Qt 5 post refactor merge
        https://bugs.webkit.org/show_bug.cgi?id=69617

        Reviewed by Andreas Kling.

        Injecting fake touch events using qt_translateRawTouchEvent does not work anymore, as it sends
        the touch events to widgets only. The QML view however is a QWindow. Therefore the fake touch
        events have to be dispatched through QWindowSystemInterface::handleTouchEvent. As a result the
        events appear to be spontaenous, which required adjusting the are-we-on-a-real-touch-device
        logic.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-10-06  Adam Barth  <abarth@webkit.org>

        Port PixelZoomer to work in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=69577

        Reviewed by David Levin.

        This implementation of PixelZoomer is basically a fork of the
        implementation used by results.html.  These two apps have different
        requirements on where this code lives.  results.html wants to be
        self-contained whereas garden-o-matic wants to live in the public_html
        folder of the buildbot.  We could do something fancy here to share the
        code, but that's not likely to be of much benefit.

        I had to change a few things about pixelzoomer to accounter for the
        differences in DOM between results.html and garden-o-matic, but
        surprisingly little.  I also moved all the code into an anonymous
        function, which is the style we're suing for module separation in
        garden-o-matic.  Finally, some jQuery-ims snuck in because I didn't
        want to drag along too many extra functions from results.html.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/pixelzoomer.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/pixelzoomer.css: Added.
        (.pixel-zoom-container):
        (.pixel-zoom-container > *):
        (.pixel-zoom-container .scaled-image-container):
        (.scaled-image-container > img):

2011-10-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Change data type of parameter in ewk_view_viewport_attributes_get().
        https://bugs.webkit.org/show_bug.cgi?id=69505

        Reviewed by Andreas Kling.

        * EWebLauncher/main.c: Use *int* variables for width and height of viewport meta tag.
        (on_viewport_changed):

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed test correction.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Add 'wincairo' option to the set of
        configuration flags used by run-javascript-core tests, so that it
        does not attempt to run Apple's release version.

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed test correction.

        * BuildSlaveSupport/test-result-archive: Add 'wincairo' to the set
         of known build slave types so that test-result-archive won't fail
         when running tests.

2011-10-06  Martin Robinson  <mrobinson@igalia.com>

        The GTK+ WebKit2 headers produce a lot of style warnings
        https://bugs.webkit.org/show_bug.cgi?id=69481

        Reviewed by David Levin.

        Prevent emitting so many style warnings for GTK+ API. We skip header
        files in the WebKit2 GTK+ API directory and also avoid warnings about
        identifier names that begin with "webkit_" in files that contain the
        string "gtk".

        * Scripts/webkitpy/style/checker.py: Do not check header files in
        Source/WebKit2/UIProcess/API/gtk that do not end in Private.h. This required
        adding the ability to specify a regular expression in the skip list. Remove
        a few files from the skipped list that no longer exist.
        * Scripts/webkitpy/style/checker_unittest.py: Added a test for this behavior.
        * Scripts/webkitpy/style/checkers/cpp.py: If a path contains "gtk" don't warn
        about identifiers that begin with "webkit_".
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added a test for this behavior.

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Correct config.json for WinCairo Test builds.
        https://bugs.webkit.org/show_bug.cgi?id=69272

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove
         old 'WinCairo Debug (Build)' label and replace with correct
         'WinCairo Release' label.

2011-10-06  David Levin  <levin@chromium.org>

        Add a style checker watchlist definition and add myself to it.
        https://bugs.webkit.org/show_bug.cgi?id=69564

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Create icon database path in LayoutTestController::setIconDatabaseEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=69450

        Reviewed by Ryosuke Niwa.

        This should avoid stderr messages when running
        webarchive/test-link-rel-icon.html.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::setIconDatabaseEnabled):

2011-10-06  Alejandro G. Castro  <alex@igalia.com>

        [WK2] [GTK] Add Skipped file for Webkit2 test runner
        https://bugs.webkit.org/show_bug.cgi?id=69517

        Use the shared WK2 skipped file also in GTK port.

        Reviewed by Martin Robinson.

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

2011-10-06  Elliot Poger  <epoger@google.com>

        allow new-run-webkit-tests to run on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69429

        Add fallback lists for chromium-mac-lion, and add chromium-mac-snowleopard
        directory to fallback lists (even though that directory doesn't exist yet)

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-10-03  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Remove SQLite-LevelDB migration code
        https://bugs.webkit.org/show_bug.cgi?id=69264

        Reviewed by Tony Chang.

        Remove setOverrideIndexedDBBackingStore. It was used in the layout
        test for migration.

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

2011-10-05  James Robinson  <jamesr@chromium.org>

        [chromium] Add a command line option to DumpRenderTree and run_webkit_tests.py to enable threaded compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=69498

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setThreadedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-10-05  Erik Arvidsson  <arv@chromium.org>

        [QT] Fix DRT after r96779

        unreviewed.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2011-10-05  Erik Arvidsson  <arv@chromium.org>

        window.location.href and others needlessly decodes URI-encoded characters
        https://bugs.webkit.org/show_bug.cgi?id=30225

        Reviewed by Darin Adler.

        * DumpRenderTree/chromium/TestShell.cpp:
        (normalizeLayoutTestURLInternal): Remove extra encode.

2011-10-05  Darin Adler  <darin@apple.com>

        Fix build.

        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        (TestWebKitAPI::TEST): Remove underscore prefix from call to
        WKContextRegisterURLSchemeAsEmptyDocument.

2011-10-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Switch to building Release target, and activate tests.
        https://bugs.webkit.org/show_bug.cgi?id=69272

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Change from debug to release target. Switch from "Build" to
        "BuildAndTest"

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

        In WebKitTestRunner, text has font smoothing in pixel snapshots
        https://bugs.webkit.org/show_bug.cgi?id=69396

        Reviewed by Darin Adler.
        
        Call the new WKContext method that disables font smoothing in
        WebKitTestRunner, so that pixel snapshots don't have font smoothing
        enabled. Remove leading underscore from a WKContext function call.

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

2011-10-05  David Levin  <levin@chromium.org>

        Improve the watchlist for threading entries.
        https://bugs.webkit.org/show_bug.cgi?id=69463

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-05  Adam Roben  <aroben@apple.com>

        Add tests for using RetainPtrs inside HashMap and HashSet

        Fixes <http://webkit.org/b/69414> <rdar://problem/10236833> Using RetainPtr as the key type
        in HashMap/HashSet fails to compile

        Reviewed by John Sullivan.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp: Added.
        (TestWebKitAPI::TEST): Show that RetainPtr can be used inside HashSet and as both the key
        and value type of HashMap.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Added new file.

2011-10-05  Adam Barth  <abarth@webkit.org>

        Mark as Expected in garden-o-matic is confusing
        https://bugs.webkit.org/show_bug.cgi?id=69452

        Reviewed by David Levin.

        krit didn't understand the difference between this button and the
        Rebaseline button because both of them seem to indicate that the new
        behavior is expected.  This patch renames "Mark as Expected" to "Expect
        Failure" to make it clear that we're just expecting the test to fail
        rather than accepting the new results as passing.  We might need to
        iterate on these names a bit more if folks continue to find them
        confusing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:

2011-10-05  Adam Barth  <abarth@webkit.org>

        Add watchlist entries for abarth
        https://bugs.webkit.org/show_bug.cgi?id=69461

        Reviewed by David Levin.

        I might have gone a bit overboard.  We'll see if this is too much spam
        for me.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Teach old-run-webkit-tests about wincairo.
        https://bugs.webkit.org/show_bug.cgi?id=69280

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests: Handle wincairo case.
        (buildPlatformResultHierarchy):
        (readSkippedFiles): Ditto
        * Scripts/webkitdirs.pm: Deal with wincairo build case.
        (determineConfiguration):

2011-10-05  Chang Shu  <cshu@webkit.org>

        [WK2] Support setMarkedText/hasMarkedText/unmarkText/insertText for WTR TextInputController
        https://bugs.webkit.org/show_bug.cgi?id=68924

        Added TextInputController files and JS interfaces for the above functions.

        Reviewed by Darin Adler.

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::textInputController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp: Added.
        (WTR::TextInputController::create):
        (WTR::TextInputController::TextInputController):
        (WTR::TextInputController::~TextInputController):
        (WTR::TextInputController::wrapperClass):
        (WTR::TextInputController::makeWindowObject):
        (WTR::TextInputController::setMarkedText):
        (WTR::TextInputController::hasMarkedText):
        (WTR::TextInputController::unmarkText):
        (WTR::TextInputController::insertText):
        * WebKitTestRunner/InjectedBundle/TextInputController.h: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2011-10-04  Oliver Hunt  <oliver@apple.com>

        Add rudimentary filtering to write barriers
        https://bugs.webkit.org/show_bug.cgi?id=69392

        Reviewed by Filip Pizlo.

        When we're recording gc phase times Heap.o picks up
        some exit time destructors, so we'll just ignore Heap.o
        in this check.

        * Scripts/check-for-exit-time-destructors:

2011-10-05  Chang Shu  <cshu@webkit.org>

        [WK2] WebKitTestRunner needs LayoutTestController.dumpConfigurationForViewport
        https://bugs.webkit.org/show_bug.cgi?id=69365

        Reviewed by Darin Adler.

        Added js API in WTR LayoutTestController.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::dumpConfigurationForViewport):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-10-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] ImageDiff: Do not clear the image before it is processed and compared
        https://bugs.webkit.org/show_bug.cgi?id=69378

        Reviewed by Antonio Gomes.

        Commit 61836 to Evas added a few cleanup calls to some
        evas_object_image functions which effectively made ImageDiff consider
        all images to be equal.

        It turns out that now evas_object_image_colorspace_set clears any
        data set, so the call to evas_object_image_data_set was not having any
        effect.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (readImageFromStdin): Call evas_object_image_data_set after
        evas_object_image_colorspace_set.

2011-10-05  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Fix Evas_Object_Image reference counts and file descriptor leakage in ImageDiff.
        https://bugs.webkit.org/show_bug.cgi?id=68449

        Reviewed by Antonio Gomes.

        evas_render() must be called to close up temporary files and unmap unused
        resources. evas_object_image_data_set() must be called after an
        evas_object_image_data_get() to balance an internal reference count.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (differenceImageFromDifferenceBuffer):
        (calculateDifference):
        (printImage):
        (printImageDifferences):

2011-10-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Unreviewed build fix.

        Don't use WebCore directly in WTR.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):

2011-10-05  David Levin  <levin@chromium.org>

        watchlist: Add more rules for chromium public api and sort the file.
        https://bugs.webkit.org/show_bug.cgi?id=69323

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-05  David Levin  <levin@chromium.org>

        watchlist: Don't add the same message to a bug more than once.
        https://bugs.webkit.org/show_bug.cgi?id=69303

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/net/bugzilla/bug.py: Added a way to determine
        if a message is in the comments already.
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: A test for the above.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py:
        Pick a bug supplied by the mock. Change the test due to different output
        from the mock watch list tool.
        * Scripts/webkitpy/tool/mocktool.py: Change the mock watch list to return
        another email so it will be filtered out, fix bugs to have the cc and comment fields,
        and fix fetch_bug to handle bug_id's which are text (because that took me way too long
        to debug).
        * Scripts/webkitpy/tool/steps/applywatchlist.py: Change to filter out comments
        and/or cc's that are already in the bug.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Pick a bug supplied by the mock,
        and remove a comment that is filtered out.

2011-10-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Unreviewed build fix after r96643.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):

2011-10-04  Kent Tamura  <tkent@chromium.org>

        Introduce feature flags for incomplete input types
        https://bugs.webkit.org/show_bug.cgi?id=68971

        Reviewed by Hajime Morita.

        * Scripts/build-webkit:
        Add --input-type-{date,datetime,datetimelocal,month,time,week} flags.
        They are disabled by default.

2011-10-04  Adam Barth  <abarth@webkit.org>

        garden-o-matic doesn't launch it's UI on Lion
        https://bugs.webkit.org/show_bug.cgi?id=69349

        Reviewed by Darin Adler.

        It turns out that Lion is a bit more picky about file URLs.  This patch
        switches us from using a path to using an actual file URL, silencing
        the warning and making the tool actually launch on Lion.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-10-04  Daniel Bates  <dbates@rim.com>

        Fix Perl undefined variable warning when using run-safari after
        <http://trac.webkit.org/changeset/96448> (https://bugs.webkit.org/show_bug.cgi?id=68662)

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (runMacWebKitApp): Check that the optional function argument $useOpenCommand
        is defined before using it in a comparison operation.

2011-10-04  Scott Graham  <scottmg@chromium.org>

        Add GAMEPAD feature flag
        https://bugs.webkit.org/show_bug.cgi?id=66859

        Reviewed by Darin Fisher.

        * Scripts/build-webkit:

2011-10-04  Jon Lee  <jonlee@apple.com>

        REGRESSION (WK2): (Shift-)option-tabbing skips over elements when transitioning from chrome to webview
        https://bugs.webkit.org/show_bug.cgi?id=68412
        <rdar://problem/9988252>

        Reviewed by Darin Adler.

        In order to create a test for the bug, I had to update DRT and WKTR to create some
        widget that allows first responder status to move away from the main web view.

        Three methods were added to layoutTestController: addChromeInputField,
        removeChromeInputField, and focusWebView. addChromeInputField adds a text field
        that is a sibling to the web view, and sets up the key event loop between the two.
        removeChromeInputField removes that field. focusWebView moves first responder
        status to the web view.

        The test makes the call via layoutTestController and passes a callback that it
        assumes will be executed once the task is completed. In DRT the callback is called
        synchronously. In WKTR this is handled with message passing between the two
        processes.

        * DumpRenderTree/LayoutTestController.cpp:
        (addChromeInputFieldCallback):
        (removeChromeInputFieldCallback):
        (focusWebViewCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): When resetting for the next test,
        make sure to remove the chrome input field.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::addChromeInputField):
        (LayoutTestController::removeChromeInputField):
        (LayoutTestController::focusWebView):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::postAddChromeInputField):
        (WTR::InjectedBundle::postRemoveChromeInputField):
        (WTR::InjectedBundle::postFocusWebView):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::callbackMap): Create a hash map that keeps track of the callbacks provided
        through JS.
        (WTR::cacheLayoutTestControllerCallback):
        (WTR::callLayoutTestControllerCallback):
        (WTR::LayoutTestController::addChromeInputField):
        (WTR::LayoutTestController::removeChromeInputField):
        (WTR::LayoutTestController::focusWebView):
        (WTR::LayoutTestController::callAddChromeInputFieldCallback):
        (WTR::LayoutTestController::callRemoveChromeInputFieldCallback):
        (WTR::LayoutTestController::callFocusWebViewCallback):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):

        * DumpRenderTree/mac/LayoutTestControllerMac.mm: These functions have nothing to do
        with the patch-- just cleaning up style.
        (LayoutTestController::addDisallowedURL):
        (originsArrayToJS):
        (LayoutTestController::queueLoad):
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::setIconDatabaseEnabled):
        (LayoutTestController::setEditingBehavior):

2011-10-04  Simon Fraser  <simon.fraser@apple.com>

        Move font-fixup code in WebKitTestRunner to a better place
        https://bugs.webkit.org/show_bug.cgi?id=69356

        Reviewed by Sam Weinig.
        
        Move code that swizzles NSFontManager methods to ActivateFonts.mm, which
        already contains font-related code.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):
        (WTR::drt_NSFontManager_availableFontFamilies):
        (WTR::drt_NSFontManager_availableFonts):
        (WTR::swizzleNSFontManagerMethods):
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2011-10-04  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Add DumpRenderTree.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62034

        Reviewed by Antonio Gomes.

        This is the main implementation file for EFL's DumpRenderTree.

        * DumpRenderTree/efl/DumpRenderTree.cpp: Added.
        (dumpFramesAsText):
        (dumpFrameScrollPosition):
        (shouldLogFrameLoadDelegates):
        (shouldDumpAsText):
        (sendPixelResultsEOF):
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (onEcoreEvasResize):
        (onCloseWindow):
        (useLongRunningServerMode):
        (parseCommandLineOptions):
        (getFinalTestURL):
        (getExpectedPixelHash):
        (createLayoutTestController):
        (runTest):
        (runTestingServerLoop):
        (adjustOutputTypeByMimeType):
        (dumpFrameContentsAsText):
        (shouldDumpFrameScrollPosition):
        (shouldDumpPixelsAndCompareWithExpected):
        (shouldDumpBackForwardList):
        (initEfl):
        (shutdownEfl):
        (displayWebView):
        (dump):
        (initEcoreEvas):
        (main):

2011-10-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic should remove builders from the failure grid once they start to pass
        https://bugs.webkit.org/show_bug.cgi?id=69309

        Unreviewed.  dglazkov is on vacation.  I need to interest someone else
        in reviewing these patches.

        This patch follows the update/purge model from UpdateTracker.  This
        patch is less awesome than it could be because it causes the UI to
        flash slightly.  In a future patch, we'll want to use these
        update/purge notifications to update the UI without flashing.  However,
        that's not such a big deal because this UI is hidden in the default
        view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.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.js:

2011-10-03  David Levin  <levin@chromium.org>

        webkitpy: Expose cc_emails and comments from bug.py
        https://bugs.webkit.org/show_bug.cgi?id=69308

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/net/bugzilla/bug.py: Expose cc_emails and comments .
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Add parsing support for comments.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Fix the unit test due
        to comments being exposed.

2011-10-03  James Robinson  <jamesr@chromium.org>

        Add myself to the watchlist for platform/graphics/chromium
        https://bugs.webkit.org/show_bug.cgi?id=69297

        Reviewed by David Levin.

        * Scripts/webkitpy/common/config/watchlist:

2011-10-03  Anders Carlsson  <andersca@apple.com>

        Remove custom scrollbar painting hooks
        https://bugs.webkit.org/show_bug.cgi?id=69163

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):
        No need to enable custom scrollbar painting.

2011-10-03  David Levin  <levin@chromium.org>

        watchlist: Make watchlist run on a bot.
        https://bugs.webkit.org/show_bug.cgi?id=68974

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/queues.py: Add the watchlist to the style bot.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        Change to log what is run so that we can see the style command
        and the watchlist command being run.

2011-10-03  David Levin  <levin@chromium.org>

        watchlist: Allow specified a bug to attach the watchlist info to.
        https://bugs.webkit.org/show_bug.cgi?id=69288

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py: Add support for bugid.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py:
        Add tests and fix an existing test because the unit tests do not go through the
        normal command line processing (so the -g argument remained when we determined bug ids).
        * Scripts/webkitpy/tool/commands/commandtest.py: Change the derivation to
        get the assert raises regex method.
        * Scripts/webkitpy/tool/commands/download.py: Fix the command help to be more unixy.

2011-10-03  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] DRT: Add JSStringUtils.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=66397

        Reviewed by Ryosuke Niwa.
        
        Adds helper functions to compare the equality of C-style strings and
        JSStringRef objects.

        * DumpRenderTree/efl/JSStringUtils.cpp: Added.
        (equals):
        * DumpRenderTree/efl/JSStringUtils.h: Added.

2011-10-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic should work in Safari 5.1
        https://bugs.webkit.org/show_bug.cgi?id=69290

        Reviewed by Sam Weinig.

        My old implementation of bind was too clever by half.  This one seems
        to work better, at least according to this test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:

2011-09-29  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Unreviewed: change my e-mail in commiters.py

        (I'm leaving the company and my @openbossa.org will be no more)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-10-01  Brent Fulgham  <bfulgham@webkit.org>

        Correct post-build step for WinCairo test runs.
        https://bugs.webkit.org/show_bug.cgi?id=69191 

        Reviewed by Brian Weinstein.

        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd: Add additional
        shell case to handle the CFLite build.

2011-10-01  Filip Pizlo  <fpizlo@apple.com>

        Added myself to reviewers, because I'm now a reviewer.

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

2011-10-01  Filip Pizlo  <fpizlo@apple.com>

        Bencher script makes it difficult to do automated performance testing
        https://bugs.webkit.org/show_bug.cgi?id=69207

        Reviewed by Sam Weinig.
        
        This adds two new features:
        
        The ability to disable automatic VM detection, which is flaky if any
        profiling features are enabled in jsc.
        
        The ability to compute, and report, a scaled result for all benchmark
        suites. It is the geometric mean of three numbers: SunSpider's
        arithmetic mean, V8's geometric mean, and Kraken's arithmetic mean.
        It is also possible to turn off all other output from bencher and just
        get this number with the --brief option.

        * Scripts/bencher:

2011-10-01  Sam Weinig  <sam@webkit.org>

        WTR is not successfully changing the NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=69204

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        Use -setVolatileDomain:forName:NSArgumentDomain instead of registerDefaults to
        get our overrides picked up.

2011-09-30  Daniel Bates  <dbates@rim.com>

        Cleanup: Extract code to launch a Mac WebKit application into a common function
        https://bugs.webkit.org/show_bug.cgi?id=68662

        Reviewed by Adam Roben.

        Extracts common code to launch a WebKit application on Mac OS X into a function
        so that we can remove duplicate code.

        * Scripts/run-webkit-app: Modified to use webkitdirs::runMacWebKitApp().
        * Scripts/webkitdirs.pm: Sorted @EXPORT list and added constant USE_OPEN_COMMAND.
        (runMacWebKitApp): Added.
        (runSafari): Modified to use webkitdirs::runMacWebKitApp().
        (runMiniBrowser): Ditto.
        (runWebKitTestRunner): Ditto.
        (runTestWebKitAPI): Ditto.

2011-09-29  David Levin  <levin@chromium.org>

        watchlist: Add webkit-patch command to run watchlist.
        https://bugs.webkit.org/show_bug.cgi?id=68973

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/host.py: Exposed the watch_list.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Changed to return
        the cc and messages as sorted lists. To allow for deterministic ordering.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Ditto.
        * Scripts/webkitpy/tool/commands/__init__.py: Add ApplyWatchListLocal so
        that it will be exposed as a command by webkit-patch.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py: Added.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/download.py: Added ApplyWatchList which mimics CheckStyle.
        * Scripts/webkitpy/tool/commands/download_unittest.py: Added an appropriate test.
        * Scripts/webkitpy/tool/mocktool.py: Mock out the watch list.
        * Scripts/webkitpy/tool/steps/__init__.py: Added ApplyWatchList.
        * Scripts/webkitpy/tool/steps/applywatchlist.py: Added.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Added.

2011-09-30  David Levin  <levin@chromium.org>

        watchlist: Add a way to detect a net increase or decrease of a pattern (in a file).
        https://bugs.webkit.org/show_bug.cgi?id=69031

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/config/watchlist: Added usage of the new pattern,
        a comment to explain something important about the email addresses, and
        a comment to let emacs know to treat the file as a python file.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern.py: Added.
        Detects increases or decreases in a pattern.
        * Scripts/webkitpy/common/watchlist/amountchangedpattern_unittest.py: Added.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        Added unit tests for watchlist which has "more" or "less".
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        Added support for "more" or "less".

2011-09-30  Sam Weinig  <sam@webkit.org>

        Add support for eventSender.mouseScrollBy in WTR
        https://bugs.webkit.org/show_bug.cgi?id=69189

        Add implementation of eventSender.mouseScrollBy for the mac.

        Reviewed by Simon Fraser.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::mouseScrollBy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):

2011-09-30  Simon Fraser  <simon.fraser@apple.com>

        fast/forms/text-control-intrinsic-widths.html fails on Mac if Word/Office fonts are installed
        https://bugs.webkit.org/show_bug.cgi?id=35273

        Reviewed by Dan Bernstein.
        
        There are two types of font issue that can cause layout test failure.
        First, the user may have non-standard fonts installed that affect the layout
        of some tests. For example, some tests use the MS Gothic font if installed.
        
        Secondly, the user may have duplicate fonts installed in ~/Library/Fonts,
        which override the system fonts (e.g. a copy of Arial from MS Office). For
        some tests, this can affect font metrics or fallback behavior.
        
        This change addresses the first problem only. It limits the set of fonts
        available through NSFontManager, by swizzling some methods to return
        a list of fonts or font families which only include fonts from a hardcoded
        whitelist.
        
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (drt_NSFontManager_availableFontFamilies):
        (drt_NSFontManager_availableFonts):
        (swizzleNSFontManagerMethods):
        (activateTestingFonts):
        (adjustFonts):
        (createWebViewAndOffscreenWindow):
        (prepareConsistentTestingEnvironment):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::allowedFontFamilySet):
        (WTR::drt_NSFontManager_availableFontFamilies):
        (WTR::drt_NSFontManager_availableFonts):
        (WTR::swizzleNSFontManagerMethods):
        (WTR::InjectedBundle::platformInitialize):

2011-09-30  David Levin  <levin@chromium.org>

        Need to skip webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest on Windows..
        https://bugs.webkit.org/show_bug.cgi?id=69039

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        Actually skip only one specific test that is failing on Windows.

2011-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prevent qDebug() output from DRT and WTR unless --verbose

        For DRT we didn't install the message handler early enough to
        catch output while constructing the QApplication. For WTR we
        didn't even install a message handler.

        Since the UI process will forward any output from the web process
        we set an environment variable QT_WEBKIT_SUPPRESS_WEB_PROCESS_OUTPUT
        in WTR before the web process is started. This is picked up by the
        web process which installs its own message handler.

        The environment variable can be overriden on the command line if you
        want to see output from the web process, or you can pass --verbose to
        WTR to see output from both processes.

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

        Reviewed by Andreas Kling.

        * DumpRenderTree/qt/main.cpp:
        * WebKitTestRunner/qt/main.cpp:

2011-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make sure WTR sizes the window and item correctly

        Revision 96345 changed the logic for how the view and
        window was created, but missed a vital part, setting
        the size.

        We now use a QSGView for the window, that has a simple
        item as its root object that is always resized to fit
        within the window. The webview is then parented to the
        root object and set to anchors.fill: parent. That way
        any window geometry changes will propagate to the web
        view.

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

        Reviewed by Andreas Kling.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-09-30  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Only save the current viewport in PixelDumpSupportEfl.
        https://bugs.webkit.org/show_bug.cgi?id=68450

        Reviewed by Antonio Gomes.

        The previous implementation saved the whole page contents in the final
        PNG, however the baselines and expectations in the tree only want the
        current viewport (with a scrollbar, if needed), so we now only save the
        currently visible contents.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView): Use
        ewk_frame_visible_content_geometry_get instead of
        ewk_frame_contents_size_get.

2011-09-30  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Support and keep track of extra windows (views).
        https://bugs.webkit.org/show_bug.cgi?id=68454

        Reviewed by Antonio Gomes.

        So far, window.open and related JavaScript code would not work, as
        DRTView did not implementation
        Ewk_View_Smart_Class::window_{open,close}. The default implementation
        in ewk just returns the current window/view, which broke any
        layouttest which relied on window.open.

        We now properly create and remove these new views. Unfortunately, the
        current way ewk works (and due to the fact that we cannot pass class
        methods as function pointers to the EFL functions), DRTView needs to
        know that DRTChrome exists and call `browser' directly in some points.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onWindowCreate):
        (onWindowCloseDelayed):
        (onWindowClose):
        (drtViewTiledAdd):

2011-09-30  Qi Zhang  <qi.2.zhang@nokia.com>

        WebKitTestRunner needs layoutTestController.setAppCacheMaximumSize
        https://bugs.webkit.org/show_bug.cgi?id=42698

        Reviewed by Andreas Kling.

        Implemented layoutTestController.setAppCacheMaximumSize and layoutTestController.clearApplicationCache,
        and call clearApplicationCache when layoutTest start up.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::clearAllApplicationCaches):
        (WTR::LayoutTestController::setAppCacheMaximumSize):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-09-30  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Change WebKitTestRunner to use QMouseEvents instead of QGraphicsSceneMouseEvents
        https://bugs.webkit.org/show_bug.cgi?id=69145

        This is a follow up to https://bugs.webkit.org/show_bug.cgi?id=69105
        Due to refactorings in Qt5, QMouseEvent now supports floating point coordinates
        and is perfectly suitable for SceneGraph as well. GraphicsScene events
        will not be available in QtGui anymore in future. Therefore we also have to change
        QtWebKit to use QMouseEvents instead of QGraphicsSceneMouseEvents.

        Reviewed by Chang Shu.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::createMouseEvent):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

2011-09-30  James Robinson  <jamesr@chromium.org>

        [chromium] Add WebKit API for sending input events to the compositor thread
        https://bugs.webkit.org/show_bug.cgi?id=69117

        Reviewed by Darin Fisher.

        Adds support for creating and setting a compositor thread in DRT.

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

2011-09-29  David Levin  <levin@chromium.org>

        watchlist: Add cross-checks for WatchList once it is filled.
        https://bugs.webkit.org/show_bug.cgi?id=68975

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/watchlist/watchlist.py: Made the data members public
        instead of having trivial getter and setters.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Fix the unit tests to
        pass the validation checks.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Add validation checks
        and fix a few style nits.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Add tests for the
        validation checks.
        * Scripts/webkitpy/common/watchlist/watchlistrule.py: Make definitions_to_match public.

2011-09-29  Xianzhu Wang  <wangxianzhu@chromium.org>

        run-api-tests fails on chromium-win bot
        https://bugs.webkit.org/show_bug.cgi?id=69121

        On Windows running a perl script needs the interpreter.

        Reviewed by Adam Barth.

        * Scripts/run-api-tests:
        (buildTestTool):

2011-09-29  Adam Barth  <abarth@webkit.org>

        Attempt to make this tool work on Windows.

        * Scripts/run-api-tests:
        (buildTestTool):

2011-09-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Try to fix the minial build

        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/webpage.cpp:

2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi

        QWidget and friends now live in the QtWidgets library. We update
        includes in implementation files and private headers to us the
        non-module-prefixed path, and leave the lookup for the include
        path. For public headers we have to ifdef the includes as the
        user might now have the modules we need in his QT config.

        Finally, QSGCanvas is no longer a QWidget but a QWindow, so we
        have to update our code and use windowHandle() for setting the
        parent relationships.

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

        Reviewed by Andreas Kling.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * MiniBrowser/qt/BrowserView.cpp:
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/main.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/main.cpp:
        * QtTestBrowser/mainwindow.cpp:
        * QtTestBrowser/mainwindow.h:
        * QtTestBrowser/webinspector.h:
        * QtTestBrowser/webpage.cpp:
        * QtTestBrowser/webview.cpp:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-09-29  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Initial implementation of WebInspector for WebKit2 GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=68235

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed): Set the developer extra flags to true to enable inspect element.

2011-09-29  Adam Barth  <abarth@webkit.org>

        Unbreak the "update expectatations" button by using the existing
        machinery to create the failureInfo objects.

        Unbreak the "close" button on the progress dialog by using |this|
        instead of the old name of the object.

        Teach the controllers unit test not to talk to the actual network.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2011-09-29  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Use LevelDB also for in-memory databases
        https://bugs.webkit.org/show_bug.cgi?id=68903

        Reviewed by Steve Block.

        Remove the temporary dir that was necessary before LevelDB supported
        in-memory databases.

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

2011-09-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        Run TestWebKitAPI on Chromium buildbots
        https://bugs.webkit.org/show_bug.cgi?id=68678

        Reviewed by Tony Chang.

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

2011-09-28  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic results should anticipate 0 unexpected failures.
        https://bugs.webkit.org/show_bug.cgi?id=69036

        Also fixes controllers: UnexpectedFailures test.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js: Tweaked.

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

        Modify new-run-webkit-tests to return the percentage difference in image diffs where possible.

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

        Reviewed by Eric Seidel.

        Nearly all of the work in this was done by Simon Fraser; I'm
        just repackaging it and cleaning it up a bit. This change
        modifies port.diff_image() to return a tuple of (pass/fail,
        %age), adds the value to the FailureImageHashMismatch, and
        writes the value into the full_results.json files to be
        displayed in the results page.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-09-25  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Adding myself to committers.py.

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

2011-09-28  Adam Barth  <abarth@webkit.org>

        garden-o-matic shouldn't depend on test-results.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=69019

        Reviewed by Dimitri Glazkov.

        This patch moves garden-o-matic from getting full_results.json from
        test-results.appspot.com to getting that information directly from the
        buildbot.  This patch improve the load time and accuracy of
        garden-o-matic because test-results.appspot.com is slow and is dropping
        a significant number of writes (see
        https://bugs.webkit.org/show_bug.cgi?id=68748).

        * 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:

2011-09-28  David Levin  <levin@chromium.org>

        watchlist: Add a way to load the watchlist from config.
        https://bugs.webkit.org/show_bug.cgi?id=68991

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/config/watchlist: Added.
        * Scripts/webkitpy/common/watchlist/watchlistloader.py: Added.
        Support for loading the watch list.
        * Scripts/webkitpy/common/watchlist/watchlistloader_unittest.py: Added.
        Tests for the loading.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        Adjusted to use the common base class.
        * Scripts/webkitpy/common/webkitunittest.py: Added.
        Made a common base class for functionality used in more than one.

2011-09-28  David Levin  <levin@chromium.org>

        Attempt fix for Leopard python unit test run.

        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:

2011-09-27  Dimitri Glazkov  <dglazkov@chromium.org>

        REGRESSION(r95573): Crash when loading SVG documents in a flattened frame or any SVG document in Chromium/Mac.
        https://bugs.webkit.org/show_bug.cgi?id=68938

        Made Chromium/Mac DRT better match how Chromium/Mac queries WebKit.

        Reviewed by David Hyatt.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didUpdateLayout): Added width/height queries.
        * DumpRenderTree/chromium/WebViewHost.h: Updated defs.

2011-09-28  Mihai Parparita  <mihaip@chromium.org>

        Get rebaseline server running again
        https://bugs.webkit.org/show_bug.cgi?id=69020

        Reviewed by Adam Barth.

        Make rebaseline server run again after r90337 (missing format_date_time
        import, results_json wasn't outputting anything).

        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-09-28  David Grogan  <dgrogan@chromium.org>

        Move dgrogan from contributor to committer
        https://bugs.webkit.org/show_bug.cgi?id=69021

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

2011-09-28  Mihai Parparita  <mihaip@chromium.org>

        Add Mac Skia GPU bots to builders.py
        https://bugs.webkit.org/show_bug.cgi?id=69016

        Reviewed by Eric Seidel.

        This allows wwebkit-patch rebaseline-expectations to work with Mac Skia
        GPU tests.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-09-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Second try at fixing the GTK+ build.

        * GNUmakefile.am:

2011-09-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        Let TestWebKitAPI and webkit_unit_tests work for chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=68680

        Reviewed by Tony Chang.

        * Scripts/run-chromium-webkit-unit-tests:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-09-28  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [Gtk] Implement textInputController.doCommand
        https://bugs.webkit.org/show_bug.cgi?id=66496

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/TextInputController.cpp:
        (doCommandCallback): Callback function for textInputController.doCommand

2011-09-28  David Levin  <levin@chromium.org>

        watchlist: Suggest corrections for typos and improve error message consistency.
        https://bugs.webkit.org/show_bug.cgi?id=68976

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Add suggestions
        for typos and improve consistency of the error messages.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Add tests
        and improve the regex that were already present.

2011-09-28  David Levin  <levin@chromium.org>

        watchlist: Add support for matching added or deleted lines.
        https://bugs.webkit.org/show_bug.cgi?id=68972

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/changedlinepattern.py: Added.
        * Scripts/webkitpy/common/watchlist/changedlinepattern_unittest.py: Added.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Comment fix up and fix input
        to the pattern match to only have the diff lines instead of the DiffFile.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        Add tests for the new patterns and combinations of the patterns.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        Sort imports. Add changeline support.

2011-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitError to GTK+ WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=68508

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add path to webkitgtk derived sources to the
        include path.

2011-09-28  Philippe Normand  <pnormand@igalia.com>

        [GTK] missing WebKit2 support in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=68992

        Rubber-stamped by Andreas Kling.

        * Scripts/run-gtk-tests: Get the WebKit2 tests to run from the
        webkit2 directory.

2011-09-27  Philippe Normand  <pnormand@igalia.com>

        [GTK] build-webkit --no-webkit2 still builds WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68892

        Reviewed by Martin Robinson.

        Take the --no-webkit2 option in account when building WebKitGTK+.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):
        (buildGtkProject):

2011-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Make Chromium Win Release (Tests) a core builder
        https://bugs.webkit.org/show_bug.cgi?id=68906

        Reviewed by Adam Barth.

        Add Chromium Win Release (Tests) to the list of core builders.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic should load faster and inform the user what is happening
        https://bugs.webkit.org/show_bug.cgi?id=68954

        Reviewed by Dimitri Glazkov.

        This test disables the expected failures tab.  The web inspector showed
        that loading the data for this tab was slowing down the loading time
        for the whole app.  We need to find a way to load that data lazily.

        This patch also improves the update message to better describe the
        progress the app is making analyzing data from the buildbot.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic should show the first result when examining results
        https://bugs.webkit.org/show_bug.cgi?id=68960

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Add support for cc and message rules.
        https://bugs.webkit.org/show_bug.cgi?id=68950

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlist.py: Added support to get
        the cc's and messages for a patch.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Tests for the above.
        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Parsing support
        for the rules.
        * Scripts/webkitpy/common/watchlist/watchlistrule.py: Copied from Tools/Scripts/webkitpy/common/watchlist/watchlist.py.
        A generic encapsulation of either a message list or a cc list.
        * Scripts/webkitpy/common/watchlist/watchlistrule_unittest.py: Copied from Tools/Scripts/webkitpy/common/watchlist/watchlist.py.

2011-09-27  Tom Zakrajsek  <tomz@codeaurora.org>

        webkit-patch doesn't like UTF-8 characters in reviewers names
        https://bugs.webkit.org/show_bug.cgi?id=63452

        Reviewed by Eric Seidel.

        * Scripts/webkit-patch:

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic examine buttons shows both expected and unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=68918

        Reviewed by Dimitri Glazkov.

        This was a copy/paste error when I refactored this classes to share
        more code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:

2011-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add Kaustubh Atrawalkar to the list of contributors.

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

2011-09-27  Mihai Parparita  <mihaip@chromium.org>

        [Chromium] Fixed layout mode tests break subsequent tests
        https://bugs.webkit.org/show_bug.cgi?id=68923
        
        Reviewed by Adam Barth.        

        Reset fixed layout mode between tests, so that tests that run after
        platform/chromium/fast/repaint/fixed-layout-360x240.html still have the
        regular 800x600 non-fixed layout.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Add the filename pattern for definitions.
        https://bugs.webkit.org/show_bug.cgi?id=68917

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/filenamepattern.py: Added.
        * Scripts/webkitpy/common/watchlist/filenamepattern_unittest.py: Added.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Added the filename pattern
        for definitions.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py: Added tests.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Typo fix.

2011-09-27  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view should sort test and builder names
        https://bugs.webkit.org/show_bug.cgi?id=68488

        Reviewed by Andy Estes.

        Previously, the test and builder names were displayed in an arbitrary
        order that changed from time to time.  That confused one user study
        participant.  This patch sorts the lists so that they occur in a
        predictable order.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-09-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96108, r96111, r96113, and r96116.
        http://trac.webkit.org/changeset/96108
        http://trac.webkit.org/changeset/96111
        http://trac.webkit.org/changeset/96113
        http://trac.webkit.org/changeset/96116
        https://bugs.webkit.org/show_bug.cgi?id=68913

        Wait for working Qt5 (Requested by ossy on #webkit).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::urlChanged):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/main.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/main.cpp:
        * QtTestBrowser/mainwindow.cpp:
        * QtTestBrowser/mainwindow.h:
        * QtTestBrowser/webinspector.h:
        * QtTestBrowser/webpage.cpp:
        * QtTestBrowser/webview.cpp:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::wkView):
        (WTR::WebView::pageRef):
        (WTR::WebView::~WebView):
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::sendEvent):
        (WTR::PlatformWebView::postEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename WebKit2 GTK+ API main header as webkit2.h
        https://bugs.webkit.org/show_bug.cgi?id=65178

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        * GtkLauncher/main.c: Include <webkit2/webkit2.h>.

2011-09-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Buildfix after r96108.

        Rubber-stamped by Andreas Kling.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Change watchlistparser.py to be class based.
        https://bugs.webkit.org/show_bug.cgi?id=68869

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:

2011-09-27  David Levin  <levin@chromium.org>

        watchlist: Break out the diff boilerplate to allow for re-use.
        https://bugs.webkit.org/show_bug.cgi?id=68871

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py:
        Break out the diff into a new file.
        * Scripts/webkitpy/common/checkout/diff_test_data.py: Added.

2011-09-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: UI performance: introduce heap size tracking stats.
        https://bugs.webkit.org/show_bug.cgi?id=68901

        It is interesting how much the heap memory is used by Inspector in order of running the test.

        Reviewed by Yury Semikhatsky.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::showDevTools):
        (TestShell::closeDevTools):

2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi

        QWidget and friends now live in the QtWidgets library. We update
        includes in implementation files and private headers to us the
        non-module-prefixed path, and leave the lookup for the include
        path. For public headers we have to ifdef the includes as the
        user might now have the modules we need in his QT config.

        Finally, QSGCanvas is no longer a QWidget but a QWindow, so we
        have to update our code and use windowHandle() for setting the
        parent relationships.

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

        Reviewed by Andreas Kling.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * MiniBrowser/qt/BrowserView.cpp:
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        * MiniBrowser/qt/main.cpp:
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/main.cpp:
        * QtTestBrowser/mainwindow.cpp:
        * QtTestBrowser/mainwindow.h:
        * QtTestBrowser/webinspector.h:
        * QtTestBrowser/webpage.cpp:
        * QtTestBrowser/webview.cpp:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:

2011-09-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt][WK2] Add support for hover API in Qt WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68369

        Reviewed by Andreas Kling.

        Change the statusbar to show the link URL when hovering links in
        MiniBrowser using QDesktopWebView.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::onLinkHovered):
        * MiniBrowser/qt/BrowserWindow.h:

2011-09-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's commit data on summary page should not crowd itself or twitch when hovered over.
        https://bugs.webkit.org/show_bug.cgi?id=68864

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js: Updated mocks to work.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Changed the structure of commit data to keep commit revision apart from the rest of details.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Adjusted unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Made things look shiny.

2011-09-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] One more unreviewed buildfix after r96005.

        * WebKitTestRunner/qt/TestInvocationQt.cpp: Missing include added.

2011-09-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r96005.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should be pretty in Open Sans.
        https://bugs.webkit.org/show_bug.cgi?id=68845

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Tweaked to bring back teh fonts.

2011-09-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should not say "Just now" when it doesn't actually know when an event happened.
        https://bugs.webkit.org/show_bug.cgi?id=68841

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Changed ui.RelativeTime to not initialize with current time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Adjusted unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js: Ditto.

2011-09-26  David Levin  <levin@chromium.org>

        watchlist: Add parsing for definition section.
        https://bugs.webkit.org/show_bug.cgi?id=68850

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlist.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:

2011-09-26  Simon Fraser  <simon.fraser@apple.com>

        Fix WebKitTestRunner builds for Cairo, Windows and Qt.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/win/TestInvocationWin.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-26  Simon Fraser  <simon.fraser@apple.com>

        Repaint tests don't work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68453

        Reviewed by Sam Weinig.
        
        Convert DumpRenderTree to use use the repaint rects
        exposed via WebKit API when generating the repaint test
        overlay.
        
        Fix WebKitTestRunner to work with repaint tests, again
        using the repaint rects exposed from WK2.
        
        In both cases, layoutTestController.display() now just
        forces a display of the web view, and turns on repaint
        rect tracking on the main FrameView.
        
        Later, when pixel results are requested, the alpha overlay
        that shows the repaint rects is generated using the list
        of rects supplied by WebCore.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (resetWebViewToConsistentStateBeforeTesting):
        (displayWebView):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (paintRepaintRectOverlay):
        (createBitmapContextFromWebView):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::setRepaintRects):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):
        (WTR::InjectedBundlePage::dump):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::display):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::paintRepaintRectOverlay):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-26  Nayan Kumar K  <nayankk@motorola.com>

        Get hover'ed element URL from HitTest.

        mouseDidMoveOverElement now gets the hover'ed element link using
        WKHitTestResult API's.
        https://bugs.webkit.org/show_bug.cgi?id=68426 

        Reviewed by Anders Carlsson.

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

2011-09-26  David Levin  <levin@chromium.org>

        Add skeleton parsing for a WatchList.
        https://bugs.webkit.org/show_bug.cgi?id=68823

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/watchlist/watchlistparser.py: Added.
        Parses the top level watch list sections -- none are defined yet -- and
        throws an exception if an invalid one is listed.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py: Added.
        Verify the exception for an invalid section in a watch list.
        * Scripts/webkitpy/common/watchlist/watchlist.py: Added.

2011-09-26  Adam Roben  <aroben@apple.com>

        Clean up code imported from WebKitAPITest

        Fixes <http://webkit.org/b/68799> WebViewDestruction tests and related code don't match
        TestWebKitAPI conventions

        Reviewed by David Levin.

        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Changed tests to use gtest macros
        and to share functionality via test fixtures. Prefixed Win32 API calls with ::. Updated
        namespace name.

        (TestWebKitAPI::WebViewDestruction::SetUp):
        (TestWebKitAPI::WebViewDestruction::webViewCount):
        (TestWebKitAPI::WebViewDestructionWithHostWindow::SetUp):
        (TestWebKitAPI::WebViewDestruction::runMessagePump):
        (TestWebKitAPI::WebViewDestruction::TearDown):
        (TestWebKitAPI::WebViewDestructionWithHostWindow::TearDown):
        Moved functionality from free functions into these new test fixtures.

        * TestWebKitAPI/win/HostWindow.cpp:
        * TestWebKitAPI/win/HostWindow.h:
        Prefixed Win32 API calls with ::. Updated namespace name.

2011-09-23  Adam Roben  <aroben@apple.com>

        Merge WebKitAPITest into TestWebKitAPI

        This also means that our formerly-WebKitAPITest tests will be run on the bots!

        I made the minimal changes necessary to get the tests to run in TestWebKitAPI. I'll make
        them more idiomatic in a separate pass.

        Fixes <http://webkit.org/b/66560> WebKitAPITest and TestWebKitAPI have duplicate
        functionality (and names!)

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Renamed from Tools/WebKitAPITest/tests/WebViewDestruction.cpp.
        * TestWebKitAPI/win/HostWindow.cpp: Renamed from Tools/WebKitAPITest/HostWindow.cpp.
        * TestWebKitAPI/win/HostWindow.h: Renamed from Tools/WebKitAPITest/HostWindow.h.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added new files.

        * TestWebKitAPI/win/main.cpp:
        (main): Added a call to ::OleInitialize to make WebKit1 work. This came from WebKitAPITest.

        * WebKitAPITest: Removed this directory and its contents.

2011-09-23  Adam Roben  <aroben@apple.com>

        Remove two failing WebKitAPITest tests

        The failures are covered by <http://webkit.org/b/33162> and <http://webkit.org/b/32868>.

        Reviewed by Anders Carlsson.

        * WebKitAPITest/tests/WebViewDestruction.cpp: Removed the NoCloseOrDestroyViewWindow and
        MainFrameAfterClose tests.

2011-09-25  Adam Barth  <abarth@webkit.org>

        Finish removing PLATFORM(BREWMP) by removing associated code
        https://bugs.webkit.org/show_bug.cgi?id=68779

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/config/build.py:
        * waf/build/settings.py:

2011-09-21  Ai Makabi  <makabi@google.com>

        Provides a simple LRU cache class in Python.

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

        Reviewed by Tony Chang.

        * Scripts/webkitpy/common/lru_cache.py:
        * Scripts/webkitpy/common/lru_cache_unittest.py:

2011-09-25  Adam Barth  <abarth@webkit.org>

        Remove PLATFORM(HAIKU) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=68774

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/config/build.py:
        * waf/build/settings.py:

2011-09-24  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(OFFLINE_WEB_APPLICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=68767

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:

2011-09-24  Adam Barth  <abarth@webkit.org>

        Remove ENABLE(WCSS) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=68759

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        (hasFeature):
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-24  Alejandro G. Castro  <alex@igalia.com>

        Fixed GTK compilation after r95878, the operator== was defined
        twice when USE_WEBPROCESS_EVENT_SIMULATION is defined.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:

2011-09-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [DRT] Include the right config file for EFL's DRT.
        https://bugs.webkit.org/show_bug.cgi?id=67042

        Reviewed by Martin Robinson.

        Ports which use CMake as their buildsystem (such as the EFL one) also
        have config.h files, but they are named differently, so include the
        right one depending on the buildsystem being used.

        * DumpRenderTree/config.h:

2011-09-23  Adam Klein  <adamk@chromium.org>

        Add ENABLE_MUTATION_OBSERVERS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=68732

        Reviewed by Ojan Vafai.

        This flag will guard an implementation of the "Mutation Observers" proposed in
        http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html

        * Scripts/build-webkit:

2011-09-23  Chang Shu  <cshu@webkit.org>

        [WK2] [Qt] Implement MouseDown/MouseUp/MouseMoveTo functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=68556

        Implement the MouseDown/MouseUp/MouseMoveTo functions on Qt platform.

        Reviewed by Darin Adler.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::leapForward):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::getMouseButton):
        (WTR::getModifiers):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::createGraphicsSceneMouseEvent):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::sendOrQueueEvent):
        (WTR::EventSenderProxy::replaySavedEvents):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::postEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-23  Lei Zhang  <thestig@chromium.org>

        [chromium] Make the layout test script's kill timeout proportional to --time-out-ms
        https://bugs.webkit.org/show_bug.cgi?id=68026

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-09-23  Elliot Poger  <epoger@google.com>

        update layout_tests to account for new default of use_skia=1
        https://bugs.webkit.org/show_bug.cgi?id=68698

        Rolls Source/WebKit/chromium/DEPS to pick up new default use_skia=1
        from http://src.chromium.org/viewvc/chrome?view=rev&revision=102532
        (Chromium-on-Mac now uses the Skia graphics library instead of
        Core Graphics).

        Also updates layout_test code to work with that change.

        Reviewed by Mihai Parparita.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:

2011-09-23  Mark Rowe  <mrowe@apple.com>

        Fix the build.
        
        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Define operator<<(std::ostream&, const WTF::String&) inside
        the WTF namespace.

2011-09-22  Dirk Pranke  <dpranke@chromium.org>

        enable NRWT for run-webkit-tests on Lion
        https://bugs.webkit.org/show_bug.cgi?id=68673

        Reviewed by Eric Seidel.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-09-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add unit test for existing StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67080

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.gypi:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Added.
        (operator<<):
        (TestWebKitAPI::expectBuilderContent):
        (TestWebKitAPI::expectEmpty):
        (TestWebKitAPI::TEST):

2011-09-22  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Use ewk_view to navigate in history instead of ewk_history.
        https://bugs.webkit.org/show_bug.cgi?id=68455

        Reviewed by Antonio Gomes.

        BackForwardItem::invoke() was using ewk_history functions to navigate
        in history; however, this will only call WebCore::BackForwardListImpl
        and not move between pages at all. We now call ewk_view_navigate and
        its siblings to make sure the navigation actually happens.

        This should make tests like fast/dom/navigation-type-back-forward.html
        stop timing out.

        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (BackForwardItem::invoke):

2011-09-22  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_FILTERS
        https://bugs.webkit.org/show_bug.cgi?id=68652

        Reviewed by Simon Fraser.

        * Scripts/build-webkit:

2011-09-22  Anders Carlsson  <andersca@apple.com>

        EventSenderProxy::mouseUp should call -[WKView mouseUp:] instead of -[WKView mouseDown:]
        https://bugs.webkit.org/show_bug.cgi?id=68660

        Reviewed by Adam Barth.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseUp):

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove FindSafari

        It isn't used or built anymore.

        Fixes <http://webkit.org/b/68628>

        Reviewed by Darin Adler.

        * FindSafari: Removed this directory and its contents.

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove FindSafari from all our .sln files

        It isn't used anymore, so there's no point in building it.

        Part of <http://webkit.org/b/68628> Remove FindSafari

        Reviewed by Steve Falkenburg.

        * DumpRenderTree/DumpRenderTree.sln:
        * WebKitTestRunner/WebKitTestRunner.sln:

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove all uses of FindSafari

        It isn't really needed anymore.

        Fixes <http://webkit.org/b/68626>.

        Reviewed by Darin Adler.

        * Scripts/old-run-webkit-tests: Moved read/writeRegistryString from here to webkitdirs.pm.

        * Scripts/run-webkit-nightly.cmd: Removed. This used to be used to launch nightly builds of
        WebKit, but now we use WebKit.exe for that.

        * Scripts/webkitdirs.pm:
        (installedSafariPath): Changed to use readRegistryString instead of invoking FindSafari to
        do the same thing.

        (readRegistryString):
        (writeRegistryString):
        Moved here from old-run-webkit-tests.

2011-09-22  Adam Roben  <aroben@apple.com>

        Use the "direct object" form of system() to run WebKit.exe

        This prevents the shell from parsing (and possibly splitting, if it contains spaces) the
        path to WebKit.exe.

        Fixes <http://webkit.org/b/68623> run-safari doesn't work if there are spaces in the path to
        %WEBKITOUTPUTDIR%

        Reviewed by Steve Falkenburg.

        * Scripts/webkitdirs.pm:
        (runSafari):

2011-09-22  Adam Roben  <aroben@apple.com>

        Quote the WEBKITLIBRARIESDIR path before passing it to the shell/cygpath

        Fixes <http://webkit.org/b/68621> build-webkit goes totally haywire on Windows if there are
        spaces in the path to the WebKit source tree

        Reviewed by John Sullivan.

        * Scripts/webkitdirs.pm:
        (setupCygwinEnv):

2011-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Use same DPI for application font as rest of app in DRT and WTR

        QApplication will initialize the default application font based
        on the application DPI at construction time, but we then override
        the application DPI using QX11Info (hard-coding it to 96 for
        consistency). This hard-coding is not reflected in the application
        font, so we explicitly have update the font ourselves.

        The 6 test results that are updated were originally produced with
        a DPI of 75, as this is the default fallback DPI when a QFont is
        constructed before QApplication. This was wrong, and the results
        are updated to match a DPI of 96.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/main.cpp:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2011-09-21  Anna Cavender  <annacc@chromium.org>

        Update committers.py with a new contributor contact        
        https://bugs.webkit.org/show_bug.cgi?id=68565

        Reviewed by Eric Carlson.

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

2011-09-21  Chang Shu  <cshu@webkit.org>

        [WK2] [Mac] Implement a more-complete MouseDown/MouseUp/MouseMoveTo functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=68108

        This patch implements the event sender mouse events through WebKit2 UIProcess which is
        closer to the real simulation than a WebProcess-only approach. The patch only supports Mac
        platform as the first step so the existing code is still kept for other platforms.

        Reviewed by Darin Adler.

        * WebKitTestRunner/EventSenderProxy.h:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::currentEventTime):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::EventSendingController):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::keyDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::eventTypeForMouseButtonAndAction):
        (WTR::operator==):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::keyDown):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

2011-09-21  Dan Bernstein  <mitz@apple.com>

        Tools part of: Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes
        https://bugs.webkit.org/show_bug.cgi?id=68451

        Reviewed by Darin Adler.

        * Scripts/check-for-inappropriate-objc-class-names: Added. Checks for
        Objective-C classes with names not having one of a list of prefixes
        passed on the command line.

2011-09-21  Xianzhu Wang  <wangxianzhu@chromium.org>

        Ensure TestWebKitAPI works on mac, win, chromium-mac and chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=68206

        Reviewed by Tony Chang.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir): add support for chromium-mac
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:

2011-09-21  Adam Barth  <abarth@webkit.org>

        garden-o-matic command should explain that it is starting a local server
        https://bugs.webkit.org/show_bug.cgi?id=68486

        Reviewed by Dimitri Glazkov.

        In the user study, both participants didn't understand why the
        garden-o-matic command appeared to hang.  This patch adds an
        explaination of what's going on.  It also adds a confirmation prompt
        before launching the browser to give the user a chance to read the
        text.  If that's too much of a speed bump, we can iterate.

        * Scripts/webkitpy/tool/commands/gardenomatic.py:

2011-09-21  Chang Shu  <cshu@webkit.org>

        [Qt] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=56485

        Implement the KeyDown function on Qt platform.

        Reviewed by Andreas Kling.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Added.
        (WTR::getModifiers):
        (WTR::EventSenderProxy::keyDown):
        (buildModifierFlags):
        (EventSenderProxy::keyDown):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::sendEvent):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-09-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic unit test fail because Safari 5.1 doesn't enumerate dictionaries in the same order as V8
        https://bugs.webkit.org/show_bug.cgi?id=68496

        Reviewed by Dimitri Glazkov.

        This patch adds a bunch of sorting to make sure things happen in a
        predictable order in both JavaScriptCore and V8.  We've talked before
        about whether these two JavaScript engines should enumerate
        dictionaries in the same order, but the consensus has been that they
        shouldn't.  Personally, I disagree with that consensus, but such is life.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2011-09-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic doesn't work in Safari 5.1 because Safari 5.1 lacks Function.prototype.bind
        https://bugs.webkit.org/show_bug.cgi?id=68495

        Reviewed by Dimitri Glazkov.

        This patch adds an implementation of Function.prototype.bind if the browser lacks one.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:

2011-09-20  Eric Seidel  <eric@webkit.org>

        [NRWT] REGRESSION: Local loader tests are failing on machines that lost /tmp/LayoutTests symlink
        https://bugs.webkit.org/show_bug.cgi?id=65781

        Reviewed by Ryosuke Niwa.

        Instead of making NRWT create the symlink, I made DumpRenderTree smart enough
        to resolve the passed in url relative to the absolute url for the test.
        For http tests, since the test url is an http url, we can't resolve relative
        to the test path, and thus use a new LOCAL_RESOURCE_ROOT environment variable
        for resolving.

        I believe this is a better approach than the on used in the Qt and Chromium DRT's
        (which resolves the path relative to the built location of the DRT executable)
        and we should move this new code into a shared location in a follow-up patch.

        It turns out that there was a second use for pathToLocalResource, used by one
        test (http/tests/plugins/post-url-file.html) used for getting a path to /tmp.
        To support this test I made the new pathToLocalResource smart enough to map
        /tmp to DUMPRENDERTREE_TEMP (which is already defined for all ports).

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):
        * Scripts/webkitpy/layout_tests/port/webkit.py: Set LOCAL_RESOURCE_ROOT for use by DRT.

2011-09-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Need to specify a django version, instead of using default
        https://bugs.webkit.org/show_bug.cgi?id=68398

        Reviewed by Eric Seidel.

        * QueueStatusServer/__init__.py:
        * QueueStatusServer/main.py:

2011-09-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Update committers.py with a few more contributor contacts
        https://bugs.webkit.org/show_bug.cgi?id=68487

        Reviewed by Eric Seidel.

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

2011-09-20  Leandro Pereira  <leandro@profusion.mobi>

        Fix webkitpy unit tests after 95547 and 95549
        https://bugs.webkit.org/show_bug.cgi?id=68483

        Reviewed by Adam Barth.
        
        Fix tests for ChangeLog.touched_files() and ChangeLog.parse_entries_from_file().

        * Scripts/webkitpy/common/checkout/changelog_unittest.py: While testing
        parse_entries_from_file(), use StringIO and entry.reviewer_text().
        While testing parse_latest_entry_from_file(), expect the correct
        touched_files() list.

2011-09-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic makes it hard to compare images when scroll bars appear
        https://bugs.webkit.org/show_bug.cgi?id=68482

        Reviewed by Eric Seidel.

        Because we autoscale image width, the images rescale if we overflow
        vertically and get a scrollbar.  That makes it hard to compare two sets
        of images.  This patch reserves space for the scrollbar so we won't
        have the layout change.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css:

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

        Unreviewed, rolling out r95565.
        http://trac.webkit.org/changeset/95565
        https://bugs.webkit.org/show_bug.cgi?id=68470

        Broke builds (Requested by andersca on #webkit).

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

2011-09-20  Nayan Kumar K  <nayankk@motorola.com>

        Get hover'ed element URL from HitTest.
        
        mouseDidMoveOverElement now gets the hover'ed element link using
        WKHitTestResult API's.
        https://bugs.webkit.org/show_bug.cgi?id=68426

        Reviewed by Anders Carlsson.

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

2011-09-20  Leandro Pereira  <leandro@profusion.mobi>

        Changelog class should have a method to return all entries
        https://bugs.webkit.org/show_bug.cgi?id=68399
        
        Implement ChangeLog.parse_entries_from_file(). This method returns a generator
        of ChangeLogEntry objects, ordered from the latest to the oldest entry in the file.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/changelog.py: Copy parse_latest_entry_from_file()
        and adapt it to become a generator.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Add test case.

2011-09-20  Jarred Nicholls  <jarred@sencha.com>

        [Qt] Permit qrc resources to load in QWebSettings::setUserStyleSheetUrl()
        https://bugs.webkit.org/show_bug.cgi?id=51159

        Permit any URL with a local scheme to set a user style sheet. Allow qrc
        resource URLs as arguments to QWebSettings::setUserStyleSheetUrl().
        
        Add DRT/WKTR qrc resource to test loading user style sheets from a qrc URL.

        Reviewed by Kenneth Rohde Christiansen.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTree.qrc: Added.
        * DumpRenderTree/qt/resources/user.css: Added.
        (body):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.qrc: Added.
        * WebKitTestRunner/qt/resources/user.css: Added.
        (body):

2011-09-20  Leandro Pereira  <leandro@profusion.mobi>

        ChangeLogEntry class should contain a list of touched files
        https://bugs.webkit.org/show_bug.cgi?id=68115

        Reviewed by Eric Seidel.
        
        Add method to return the list of files touched in a ChangeLog entry.

        * Scripts/webkitpy/common/checkout/changelog.py: Add
        touched_files_regexp and touched_files() method.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Implement
        unit tests for touched_files() method.

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

        Unreviewed, rolling out r95526 and r95541.
        http://trac.webkit.org/changeset/95526
        http://trac.webkit.org/changeset/95541
        https://bugs.webkit.org/show_bug.cgi?id=68443

        It broke 6 tests (Requested by ossy_ on #webkit).

        * DumpRenderTree/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2011-09-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Fix patch and bug numbering in the mocktool simulation code
        https://bugs.webkit.org/show_bug.cgi?id=68374

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:

2011-09-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't override default QApplication font for DRT and WTR

        Revision 95526 moved the relevant code below the QApplication
        constructor, to fix a potential crash, and that made the code
        take effect, breaking 6 tests.

        We should rely on the QWebSettings to set default fonts, and
        this QApplication::setFont() is a relic from when we didn't
        have that option, so we remove the code.

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/main.cpp:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2011-09-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        WebKitTestRunner: Provide usage if run without arguments

        If WTR is run without either one or more filenames, or
        a '-' to indicate server mode, we don't need to start
        up the test machinery. Doing so might actually crash,
        as we'll exit the application immedeatly after anyways.

        Reviewed by Simon Hausmann.

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

2011-09-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Don't use QFont before initializing QApplication

        Could potentially result in crash.

        Reviewed by Simon Hausmann.

        * DumpRenderTree/qt/main.cpp:
        (main):

2011-09-19  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(EVENTSOURCE)
        https://bugs.webkit.org/show_bug.cgi?id=68414

        Reviewed by Eric Seidel.

        * Scripts/build-webkit:

2011-09-19  David Levin  <levin@chromium.org>

        Sheriffbot rollout should be more intuitive.
        https://bugs.webkit.org/show_bug.cgi?id=68415

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py: Add support for revert and comma separated args.
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Add parsing tests for comma separated args
          and a few others cases.
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Verify that revert works.

2011-09-19  David Levin  <levin@chromium.org>

        check-webkit-style generates bogus warning for StructuredExceptionHandlerSupressor.h
        https://bugs.webkit.org/show_bug.cgi?id=68391

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py: Skip __asm lines when doing style checks on a line.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added a test for this.

2011-09-19  Alexis Menard  <alexis.menard@openbossa.org>

        Style checker should not check public Qt WK2 API for parameter_name.
        https://bugs.webkit.org/show_bug.cgi?id=68359

        Reviewed by Andreas Kling.

        The public Qt WK2 APIs have different rules than WebKit for parameters of methods in h files.
        Add an exception in the style checker to disable the check. Also added the test for it.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-09-19  Leandro Pereira  <leandro@profusion.mobi>

        GTK DRT leaks memory while comparing history items
        https://bugs.webkit.org/show_bug.cgi?id=68086

        Reviewed by Martin Robinson.
        
        webkit_web_history_item_get_target() returns a g_strdup()'d string,
        so memory must be freed before compareHistoryItems() returns.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (compareHistoryItems): Use GOwnPtr to manage memory automatically.

2011-09-19  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-09-19  Jessie Berlin  <jberlin@apple.com>

        Sites that use history pushState or replaceState are recorded in history in Private Browsing
        mode.
        https://bugs.webkit.org/show_bug.cgi?id=68208

        Reviewed by Brady Eidson.

        Add a test that the WKContextDidNavigateWithNavigationDataCallback (which is invoked by
        updateGlobalHistory) is not called in Private Browsing when the page does history.pushState.

        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp: Added.
        (TestWebKitAPI::didNavigateWithNavigationData):
        This is a context history client callback, so it should not be called when in Private
        Browsing. Add a call to FAIL().
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        This is a page load client callback that happens after the didNavigateWithNavigationData
        callback. End the test.
        (TestWebKitAPI::TEST):
        Enable Private Browsing and load a page that uses history.pushState.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add PrivateBrowsingPushStateNoHistoryCallback.cpp and push-state.html.
        * TestWebKitAPI/Tests/WebKit2/push-state.html: Added.
        Ditto.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Ditto.
        * TestWebKitAPI/win/copy-resources.cmd:
        Ditto.

2011-09-16  Elliot Poger  <epoger@google.com>

        add non-CG Webkit-Mac builds to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=68265

        Reviewed by Adam Barth.

        As Chromium-on-Mac approaches the switchover from Core Graphics to
        Skia, we need to add the Skia version to the flakiness dashboard.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-09-16  Jochen Eisinger  <jochen@chromium.org>

        Rename FrameLoaderClient::allowImages to FrameLoaderClient::allowImage and include the image URL as parameter
        https://bugs.webkit.org/show_bug.cgi?id=68071

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowImage):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-09-16  Tom Zakrajsek  <tomz@codeaurora.org>

        update-webkit-chromium should retry the gclient call if it fails once
        https://bugs.webkit.org/show_bug.cgi?id=68252

        Reviewed by Adam Barth.

        * Scripts/update-webkit-chromium:

2011-09-16  Rob Buis  <rbuis@rim.com>

        Add Eli's rim address and change the nick.

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

2011-09-16  Anders Carlsson  <andersca@apple.com>

        Add back the WKHitTestResultRef parameter to mouseDidMoveOverElement in an ABI preserving way
        https://bugs.webkit.org/show_bug.cgi?id=68269

        Reviewed by Geoffrey Garen.

        Update client function signatures.

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

2011-09-16  Anders Carlsson  <andersca@apple.com>

        Temporarily remove the WKHitTestResultRef parameter to avoid breaking the WK2 ABI/API
        https://bugs.webkit.org/show_bug.cgi?id=68266

        Reviewed by John Sullivan.

        * MiniBrowser/mac/BrowserWindowController.m:
        (mouseDidMoveOverElement):

2011-09-16  Vincent Scheib  <scheib@chromium.org>

        Add Vincent Scheib to the committers list.

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

2011-09-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95285.
        http://trac.webkit.org/changeset/95285
        https://bugs.webkit.org/show_bug.cgi?id=68247

        It broke a webkitpy test (Requested by ossy on #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-16  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Disable WebKit2 by default in configure.ac, but enable it with build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=68178

        Reviewed by Xan Lopez.

        Add a work-around to enable WebKit2 when using build-webkit.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): 

2011-09-15  James Robinson  <jamesr@chromium.org>

        Add Antoine Labour and Shawn Singh to the contributors-but-not-committers list.

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

2011-09-15  Tom Zakrajsek  <tomz@codeaurora.org>

        UpdateChangeLogsWithReviewer should be able to determine reviewer of latest reviewed patch in a bug
        https://bugs.webkit.org/show_bug.cgi?id=68003

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:

2011-09-15  Tom Zakrajsek  <tomz@codeaurora.org>

        Python version check is confusing in test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=68004

        Reviewed by Adam Barth.

        * Scripts/test-webkitpy:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch should be able to find users and add them to bugzilla groups
        https://bugs.webkit.org/show_bug.cgi?id=63351

        These are both very basic commands.  But it's now possible to find
        all users matching a regexp, as well as add all users matching a regexp
        to a set of groups.

        bugzilla.py already knew how to find users (for validate-committer-lists)
        but now it has the ability to modify the user records.

        I split some of the logic out into a new EditUsersParser class
        to try and reduce the amount of code in Bugzilla/BugzillaQueries.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/adduserstogroups.py: Added.
        * Scripts/webkitpy/tool/commands/findusers.py: Added.

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68182

        Reviewed by Adam Barth.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Make contributor email look-up case-insensitive.

        validate-committer-list was incorrectly reporting that "chang.shu@nokia.com"
        was missing from committers.py due to case sensitivity.

        This also includes a test expectations update to committers_unittest.py
        after my previous change.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Updated this based on webkit-patch suggest-nominations and validate-committer-list output.

        Add a bunch of email aliases to committers.py for regular contributors
        who are committing using other email addresses than they have listed in the file.

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

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_ANIMATION as all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68022

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-15  Anders Carlsson  <andersca@apple.com>

        Fix Mac build by including config.h where needed.

        * TestWebKitAPI/Tests/TestWebKitAPI/mac/InstanceMethodSwizzler.mm:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp:
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm:
        * TestWebKitAPI/mac/InstanceMethodSwizzler.mm:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * TestWebKitAPI/mac/main.mm:

2011-09-15  Xianzhu Wang  <wangxianzhu@chromium.org>

        Let TestWebKitAPI work for chromium
        https://bugs.webkit.org/show_bug.cgi?id=67756

        Reviewed by Sam Weinig.

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        (isSupportedPlatform):
        (runTest):
        (populateTests):
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/InjectedBundleController.cpp:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        * TestWebKitAPI/JavaScriptTest.cpp:
        * TestWebKitAPI/PlatformUtilities.cpp:
        * TestWebKitAPI/TestWebKitAPI.gypi: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPIPrefix.h: Removed.
        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp:
        * TestWebKitAPI/TestsController.cpp:
        * TestWebKitAPI/config.h: Copied from TestWebKitAPI/TestWebKitAPIPrefix.h.
        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/main.cpp:

2011-09-15  Jochen Eisinger  <jochen@chromium.org>

        [chromium] extract normalization of LayoutTests URLs to a method of TestShell
        https://bugs.webkit.org/show_bug.cgi?id=68145

        This will allow for other classes in DumpRenderTree to reuse this functionality

        Reviewed by David Levin.

        * DumpRenderTree/chromium/TestShell.cpp:
        (normalizeLayoutTestURLInternal):
        (dumpHistoryItem):
        (TestShell::normalizeLayoutTestURL):
        * DumpRenderTree/chromium/TestShell.h:

2011-09-14  Ada Chan  <adachan@apple.com>

        Add test for WKBundleFrameCopyWebArchive().
        https://bugs.webkit.org/show_bug.cgi?id=67857

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Do some basic sanity checks to make sure
        the returned data is a valid webarchive.
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST): Load simple.html in a WebView.  Wait for it to finish loading, and then ask the
        injected bundle for the webarchive and check the returned webarchive.
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp: Added.
        (TestWebKitAPI::WebArchiveTest::WebArchiveTest):
        (TestWebKitAPI::WebArchiveTest::didReceiveMessage): Handle the "GetWebArchive" message and return
        the web archive.

        Add files to project.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Also let Visual Studio reorder a file.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        committers.py should support multiple IRC nicknames
        https://bugs.webkit.org/show_bug.cgi?id=68110

        Reviewed by Eric Seidel.

        Add multiple IRC nickname support to committers.py

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:

2011-09-14  Jon Lee  <jonlee@apple.com>

        Implement globalFlag for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=68033
        <rdar://problem/10119204>

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Porting globalFlag from DRT
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): initialize m_globalFlag to false
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: add m_globalFlag
        (WTR::LayoutTestController::globalFlag): simple getter
        (WTR::LayoutTestController::setGlobalFlag): simple setter

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_USE as <use> is required by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68019

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Jan Erik Hanssen (added in my r95078) from the list for now
        since I can't confirm acceptable his committership.

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

2011-09-14  Jochen Eisinger  <jochen@chromium.org>

        [chromium] Remove obsolete WebViewClient methods from DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=68066

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        committers.py is missing some contributors
        https://bugs.webkit.org/show_bug.cgi?id=68059

        Reviewed by Adam Barth.

        Add David Barr, Jan Erik Hanssen, and Kim Grönholm.

        Also add nicks of Alejandro G. Castro, Collin Jackson, and Matt Lilek.

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

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Fix webkit python test after r95061.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add myself as a contributor. No review needed.

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

2011-09-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic has unfriendly error messages when the local server is not available
        https://bugs.webkit.org/show_bug.cgi?id=68042

        Reviewed by Dimitri Glazkov.

        This patch moves us from using alert to showing the error inline in the
        progress dialog.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:

2011-09-13  Adam Barth  <abarth@webkit.org>

        FailureGrid in garden-o-matic should link to the builder's waterfall page
        https://bugs.webkit.org/show_bug.cgi?id=68036

        Reviewed by Dimitri Glazkov.

        One of the users in the user study thought the configurations names in
        the failure grid would link to the underlying bots.  That makes sense,
        so this patch adds the behavior.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-09-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to mark failures as expected
        https://bugs.webkit.org/show_bug.cgi?id=68027

        Reviewed by Dimitri Glazkov.

        All the back-end infrastructure exists for this operation.  This patch
        just adds some UI to the front-end and wires that UI up to the back
        end.  This exact UI will likely need some more polish, but this should
        be a reasonable first cut.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-09-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic should tell you about the progress of your rebaseline
        https://bugs.webkit.org/show_bug.cgi?id=67967

        Reviewed by Dimitri Glazkov.

        This patch adds ui.MessageBox, which is a light wrapper around jQuery
        UI's dialog widget.  We then use ui.MessageBox to show status messages
        about in-progress rebaselines.  As each baseline is downloaded, the
        MessageBox updates.  This UI replaces our temporary "alert"-based UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-09-13  Leandro Pereira  <leandro@profusion.mobi>

        GTK DumpRenderTree uses inefficient idioms to iterate over G[S]Lists
        https://bugs.webkit.org/show_bug.cgi?id=68024

        Reviewed by Gustavo Noronha Silva.
        
        Using g_list_count() and g_list_nth_data() together on a loop is
        inneficient since they're both O(n). Iterate over lists in a saner
        way.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpHistoryItem): Reduce the scope for the 'kids' variable, and
        iterate on it using g_list_next(). Free the list after done with it.
        (dumpBackForwardListForWebView): Instead of appending (which is
        expensive in GLists) history items and then iterating from the tail
        of the itemsToPrint list, prepend items and walk forwards as usual.
        (dumpBackForwardListForAllWebViews): Walk the list in a saner way,
        remove the (unneeded) viewList variable.

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Add Eric's IRC nick.

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

2011-09-13  Anders Carlsson  <andersca@apple.com>

        Disable C++ exceptions when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=68031
        <rdar://problem/9556880>

        Reviewed by Mark Rowe.

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

2011-09-13  Ojan Vafai  <ojan@chromium.org>

        [chromium] fix flakiness dashboard for chromium interactive tests
        https://bugs.webkit.org/show_bug.cgi?id=68029

        Reviewed by Tony Chang.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Add Alice and Aryeh to the list of contributors.

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

2011-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        sheriffbot whois should also tell us email addresses
        https://bugs.webkit.org/show_bug.cgi?id=67975

        Reviewed by Eric Seidel and David Levin.

        Taught sheriffbot how to tell us contributor's email addresses.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68018

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * waf/build/settings.py:

2011-09-13  Chang Shu  <cshu@webkit.org>

        [WK2] [Mac] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=57515

        The code change in WebKitTestRunner first sends keydown event from InjectedBundle to
        TestController synchronously. The latter then sends simulated event to WebKit2 module,
        which is synchronous, too.

        Reviewed by Darin Adler.

        * WebKitTestRunner/EventSenderProxy.h: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::keyDown):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::platformWindow):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/EventSenderProxy.mm: Added.
        (WTR::buildModifierFlags):
        (WTR::EventSenderProxy::keyDown):

2011-09-12  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] DRT: Add DumpRenderTreeEfl.h
        https://bugs.webkit.org/show_bug.cgi?id=63993

        Reviewed by Eric Seidel.
        
        This header contains some global variables used by EFL's
        DumpRenderTree implementation.

        * DumpRenderTree/DumpRenderTree.h: Include DumpRenderTreeEfl.h when
        appropriate.
        * DumpRenderTree/efl/DumpRenderTreeEfl.h: Added.

2011-09-12  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Send the right key names for PageUp and PageDown.
        https://bugs.webkit.org/show_bug.cgi?id=67044

        Reviewed by Kenneth Rohde Christiansen.

        PlatformKeyboardEventEfl uses "Prior" and "Next" to refer to PageUp and
        PageDown (which is close to the defines in WindowsKeyboardCodes.h).
        However, EventSender was sending "Page_Up" and "Page_Down", so tests
        such as editing/input/page-up-down-scrolls.html were timing out due to
        the right key down events not being sent.

        * DumpRenderTree/efl/EventSender.cpp:
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):

2011-09-12  Eric Seidel  <eric@webkit.org>

        sheriffbot whois is case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=67972

        Reviewed by Adam Barth.

        I also fixed a typo in the "More than 5 contributors" message
        from my previous commit.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-12  Eric Seidel  <eric@webkit.org>

        sheriffbot whois should be smarter
        https://bugs.webkit.org/show_bug.cgi?id=67971

        Reviewed by Adam Barth.

        This makes sheriffbot whois basically grep the committers list
        making it much easier to find a contributor by name.

        Unfortunately the current unittests depend on the real committers.py
        file, so as we add more eric's to the project, this unittest result will
        change.  I think that's OK for now.  We'll fix it when it breaks.

        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94976.
        http://trac.webkit.org/changeset/94976
        https://bugs.webkit.org/show_bug.cgi?id=67953

        Broke a bunch of security/load& tests (Requested by rniwa on
        #webkit).

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):

2011-09-12  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Remove the "the tree is burning!" warning previously shown
        when landing patches.  It was a dream.  But it's just noise now.

        Some bots will require a restart to notice the removal of the option
        so I've left the --ignore-builders option in for now.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py: Removed.
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:

2011-09-12  Eric Seidel  <eric@webkit.org>

        [NRWT] REGRESSION: Local loader tests are failing on machines that lost /tmp/LayoutTests symlink
        https://bugs.webkit.org/show_bug.cgi?id=65781

        Reviewed by Ryosuke Niwa.

        Instead of making NRWT create the symlink, I just made DumpRenderTree smart enough
        to resolve the passed in url relative to the absolute url for the test.

        I believe this is a better approach than the on used in the Qt and Chromium DRT's
        (which resolves the path relative to the built location of the DRT executable)
        and we should move this new code into a shared location in a follow-up patch.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pathToLocalResource):

2011-09-12  Eric Seidel  <eric@webkit.org>

        Reshuffle some code in WebKitDriver._read_block in preparation for reading stderr/stdout separately
        https://bugs.webkit.org/show_bug.cgi?id=67530

        Reviewed by Adam Barth.

        I believe I've fixed the bug in the original patch which prompted the rollout.
        The previous patch was using the wrong deadline for the initial read,
        subtracting time.time() twice from the deadline value.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] WebKitTestRunner does not produce crash logs
        https://bugs.webkit.org/show_bug.cgi?id=67714

        Reviewed by Chang Shu.

        Added a simple way of generating backtrace on crash
        to the web process. The implementation is similar what
        we have in DRT. It depends on GNU libc functionality
        so it is only enabled where we are running in such an environment.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::printBacktrace):
        (WTR::crashHandler):
        (WTR::InjectedBundle::platformInitialize):

2011-09-11  Filip Pizlo  <fpizlo@apple.com>

        Added my IRC nick to the committers file.

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

2011-09-01  Filip Pizlo  <fpizlo@apple.com>

        The executable allocator makes it difficult to free individual
        chunks of executable memory
        https://bugs.webkit.org/show_bug.cgi?id=66363

        Reviewed by Oliver Hunt.
        
        Introduced a best-fit, balanced-tree based allocator. The allocator
        required a balanced tree that does not allocate memory and that
        permits the removal of individual nodes directly (as opposed to by
        key); neither AVLTree nor WebCore's PODRedBlackTree supported this.
        Changed all references to executable code to use a reference counted
        handle.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp: Added.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp: Added.
        (TestWebKitAPI::Pair::findExact):
        (TestWebKitAPI::Pair::remove):
        (TestWebKitAPI::Pair::findLeastGreaterThanOrEqual):
        (TestWebKitAPI::Pair::assertFoundAndRemove):
        (TestWebKitAPI::Pair::assertEqual):
        (TestWebKitAPI::Pair::assertSameValuesForKey):
        (TestWebKitAPI::Pair::testDriver):
        (TestWebKitAPI::TEST_F):

2011-09-10  Andy Estes  <aestes@apple.com>

        Move myself from committers_unable_to_review to reviewers_list.

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

2011-09-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. MSW build fixes.

        * DumpRenderTree/config.h:
        * waf/build/wxpresets.py:

2011-09-10  Andreas Kling  <kling@webkit.org>

        Crash beneath WKURLIsEqual() when reloading in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=59328

        Reviewed by Kenneth Rohde Christiansen.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController updateProvisionalURLForFrame:]): Add missing null check.

2011-09-10  Adam Barth  <abarth@webkit.org>

        Build fix for Android.  DumpRenderTree is a client of the WebKit API
        and does not have access to notImplemented().

        * DumpRenderTree/chromium/TestShellAndroid.cpp:
        (openStartupDialog):

2011-09-09  Alexey Proskuryakov  <ap@apple.com>

        Add a script to create a monolithic script-test
        https://bugs.webkit.org/show_bug.cgi?id=67747

        Reviewed by Darin Adler.

        * Scripts/make-new-script-test: Added.

2011-09-09  Luiz Agostini  <luiz@webkit.org>

        Adding myself to the reviewers list.

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

2011-09-09  Ryosuke Niwa  <rniwa@webkit.org>

        Buildbot may use RunWebKitTest's evaluateCommand on bots that run nrwt
        https://bugs.webkit.org/show_bug.cgi?id=67855

        Reviewed by Dirk Pranke.

        The bug was caused by the fact some ports use RunWebKitTests instead of NewRunWebKitTests to run tests,
        and using RunWebKitTests.evaluateCommand after calling _parseNewRunWebKitTestsOutput.

        Fixed the bug by merging evaluateCommand of RunWebKitTests and NewRunWebKitTests.

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

2011-09-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=67853

        Reviewed by Darin Adler.

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

2011-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt] Remove common.pri
        https://bugs.webkit.org/show_bug.cgi?id=67814

        Reviewed by Andreas Kling.

        * Tools.pro:

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

        [NRWT] the nrwt check httpd with --no-http option
        https://bugs.webkit.org/show_bug.cgi?id=67835

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-09-09  Hao Zheng  <zhenghao@chromium.org>

        [chromium] Implement DRT support for Android.
        https://bugs.webkit.org/show_bug.cgi?id=67590

        Reviewed by Tony Chang.

        Add 2 mechanism to make DRT interaction more robust on Android:
        - Send 'QUIT' to DRT to make it stop.
        - Wait until receiving '#READY' from DRT, so that DRT won't miss any
        input commands before it starts.
        And LayoutTestController.cpp needs to include <cctype> for 'tolower'
        and <clocale> for 'LC_ALL' to compile on Android.

        Also change to use sigaction instead of signal for TestShellGtk.cpp,
        as signal() man page recommends using sigaction().

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/TestShellAndroid.cpp: Added.
        (AlarmHandler):
        (TestShell::waitTestFinished):
        (platformInit):
        (openStartupDialog):
        (checkLayoutTestSystemDependencies):
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (AlarmHandler):
        (TestShell::waitTestFinished):

2011-09-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add Source/JavaScriptCore/dfg directory to the build.

        * waf/build/settings.py:

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

        Unreviewed, rolling out r94851.
        http://trac.webkit.org/changeset/94851
        https://bugs.webkit.org/show_bug.cgi?id=67847

        It broke a webkitpy test (Requested by ossy on #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

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

        [NRWT] the nrwt check httpd with --no-http option
        https://bugs.webkit.org/show_bug.cgi?id=67835

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-09-08  Brian Weinstein  <bweinstein@apple.com>

        WebKit2: Assertion when calling didPerform*Redirect on null source/destination URL string
        https://bugs.webkit.org/show_bug.cgi?id=67794
        <rdar://problem/9892024>
        
        Add a test that we don't send a didPerformServerRedirect when a load is cancelled from willSendRequest.

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Set flags on whether we've loaded the main frame, iframe, or both.
        (TestWebKitAPI::didPerformServerRedirect): Set a flag for whether we've performed a server redirect.
        (TestWebKitAPI::TEST): Set up a WKPageLoaderClient and WKContextHistoryClient, and load simple-iframe.html.
            Once both frames have loaded (main frame and blocked iframe), make sure that we have never called
            didPerformServerRedirect.

        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp: Added.
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::LoadCanceledNoServerRedirectCallbackTest): Initialize
            our InjectedBundleTest.
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::willSendRequestForFrame): If we are dealing with a request
            from the main frame (the main resource in simple-iframe.html), allow it. If not (dealing with the iframe), block
            the request.
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::didCreatePage): Set up the WKBundlePageResourceLoadClient.

        * TestWebKitAPI/Tests/WebKit2/simple-iframe.html: Added.
        
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Ditto.
        * TestWebKitAPI/win/copy-resources.cmd: Ditto.

2011-09-08  David Levin  <levin@chromium.org>

        check-webkit-style: Ref|Own Ptr& should be allowed as a parameter.
        https://bugs.webkit.org/show_bug.cgi?id=67797

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/style/checkers/cpp.py: Allow Ref/Own Ptr when it ends with &.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added test cases for this.

2011-09-08  Fady Samuel  <fsamuel@chromium.org>

        Fixed Layout Mode should be adjustable from layoutTestController for testing on Chromium platforms
        https://bugs.webkit.org/show_bug.cgi?id=67723

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::enableFixedLayoutMode):
        (LayoutTestController::setFixedLayoutSize):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-09-07  Matthew Delaney  <mdelaney@apple.com>

        Add standalone script that filters the output of build-webkit to be more human-readable
        https://bugs.webkit.org/show_bug.cgi?id=44081

        Reviewed by Daniel Bates.

        * Scripts/filter-build-webkit: Added. Just need to feed it the output of
        a build script (e.g. build-webkit) and it spits out a prettier version.
        * Scripts/VCSUtils.pm: Refactored "possiblyColored" out of run-api-tests into VCSUtils.
        * Scripts/run-api-tests: Now includes VCSUtils to use "possiblyColored"

2011-09-07  Noel Gordon  <noel.gordon@gmail.com>

        Add myself to committers.py                 
        https://bugs.webkit.org/show_bug.cgi?id=67696

        Reviewed by Kent Tamura.

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

2011-09-07  Adam Barth  <abarth@webkit.org>

        rebaseline button in garden-o-matic details view should work
        https://bugs.webkit.org/show_bug.cgi?id=67738

        Reviewed by Dimitri Glazkov.

        This patch wires up the rebaseline button in garden-o-matic results
        details view.  The button is current per-test, so there isn't a way to
        rebaseline individual bots.  This is a place to start.  If we decide we
        want per-bot rebaselining, we'll need to think of some better UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-09-07  Eric Seidel  <eric@webkit.org>

        Teach the PortFactory object how to pass along executive/user/filesystem to port objects (which fixes the failing rebaseline_test on bots)
        https://bugs.webkit.org/show_bug.cgi?id=67737

        Reviewed by Adam Barth.

        I got a little over-eager when deprecating host.port_factory in the previous commit.
        Turns out that Host.port_factory was already the "modern" port/factory.py
        it was just the Module object.  I un-deprecated the variable, and changed it from
        being the module to being an actual PortFactory, passing it a host object.
        I also taught PortFactory how to set user/executive/filesystem in the kwargs
        when instantiating a new Port object.
        This magically fixed the test_rebaseline test, since its now no longer talking
        to the real filesystem.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-09-07  Eric Seidel  <eric@webkit.org>

        Add a new PortFactory class for creating new-style ports and deprecate the old PortFactory
        https://bugs.webkit.org/show_bug.cgi?id=67734

        Reviewed by Adam Barth.

        Right now every place that creates a Port object has to be very careful
        to pass in a MockSCM/MockUser/MockFilesystem when appropriate.
        The correct fix is for port/factory.py (which creates most port objects)
        to know how to pass these in automatically.  However, currently all port/factory.py
        functions are free functions instead of being on an object.  This patch
        adds a new PortFactory object and deprecates the PortFactory for the old-style Port objects.

        In a follow-up patch I will add PortFactory to the Host object and teach PortFactory how to
        pass along the proper scm/user/filesystem to the Port object.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94441.
        http://trac.webkit.org/changeset/94441
        https://bugs.webkit.org/show_bug.cgi?id=67731

        "MacEWSes are backed up due to new machines not able to reach
        git.webkit.org.  Disabling tests for now" (Requested by
        eseidel2 on #webkit).

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-09-07  Elliot Poger  <epoger@google.com>

        filter test_expectations properly for chromium-mac vs chromium-cg-mac
        https://bugs.webkit.org/show_bug.cgi?id=67324

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:

2011-09-07  Eric Boren  <borenet@gmail.com>

        [Chromium] Modify WebTouchEvent structure to match WebCore::TouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=66800

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2011-09-07  Jarred Nicholls  <jarred@sencha.com>

        [Qt][DRT] Normalize file:///tmp/LayoutTests in LayoutTestController::pathToLocalResource()
        https://bugs.webkit.org/show_bug.cgi?id=67254

        Reviewed by Csaba Osztrogonác.

        Translate file:///tmp/LayoutTests/* urls into the repository LayoutTests directory, which is
        derived from the running location of DumpRenderTree binary.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::pathToLocalResource):
        (LayoutTestController::setUserStyleSheetLocation): pass the url through pathToLocalResource

2011-09-07  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r94288) build-webkit doesn't work on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=67706

        * Scripts/webkitdirs.pm: Disable automatic clean build on Symbian, because it doesn't support shadow build.
        (buildQMakeProject):

2011-09-07  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r94288) build-webkit doesn't work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=67646

        Roll back r94655 with a small fix.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94635.
        http://trac.webkit.org/changeset/94635
        https://bugs.webkit.org/show_bug.cgi?id=67704

        Linux Touch build is failing to compile this change.
        (Requested by loislo on #webkit).

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94655.
        http://trac.webkit.org/changeset/94655
        https://bugs.webkit.org/show_bug.cgi?id=67703

        It broke Leopard debug bot (Requested by ossy on #webkit).

        * Scripts/webkitdirs.pm:

2011-09-07  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        REGRESSION(r94288) build-webkit doesn't work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=67646

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:

2011-09-06  Eric Boren  <borenet@gmail.com>

        [Chromium] Modify WebTouchEvent structure to match WebCore::TouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=66800

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2011-09-06  Adam Barth  <abarth@webkit.org>

        garden-o-matic details view should having working rebaseline and next/previous buttons
        https://bugs.webkit.org/show_bug.cgi?id=67659

        Reviewed by Dimitri Glazkov.

        This patch wires up basic back/forward buttons that let you traverse
        through the results we're examining in the details view.  This ended up
        being more code than I expected, but I wanted to keep all the state
        information in the DOM itself.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-09-01  Dirk Pranke  <dpranke@chromium.org>

        fix MockFileSystem.glob(), refactor filesystem tests
        https://bugs.webkit.org/show_bug.cgi?id=67462

        Reviewed by Eric Seidel.

        In debugging why my proposed change for MockFileSystem.glob()
        in bug 66228 didn't work, I stumbled across two real bugs
        that cancelled each other out for the unit tests. I fixed those
        (glob shouldn't recurse into subdirs, and we weren't populating
        self.dirs from self.files properly).

        I have also created a "mixin" class for tests that can be shared
        between the real filesystem and the mock filesystem - MockFileSystem
        is being used enough it needs its own tests.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py: Added.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-09-06  Anders Carlsson  <andersca@apple.com>

        Move NPAPI headers in bridge to plugins
        https://bugs.webkit.org/show_bug.cgi?id=67661

        Update forwarding headers.

        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npapi.h:
        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h:

2011-09-06  Tony Chang  <tony@chromium.org>

        [chromium] Check in 'build' for compiled binaries first
        https://bugs.webkit.org/show_bug.cgi?id=67549

        Reviewed by Dirk Pranke.

        I'm working on moving the windows build output to a common location
        rather than relative to the sln file.  Because of that, we need to
        check those build locations first for DumpRenderTree.exe.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-09-06  Adam Barth  <abarth@webkit.org>

        Use a hierarchial structure for the garden-o-matic results view
        https://bugs.webkit.org/show_bug.cgi?id=67620

        Reviewed by Dimitri Glazkov.

        This patch re-organizes the results view to use a hierachial structure
        for selection.  At the top-level are sections for each test.  Expanding
        the test section shows a tab selector for builders.

        This structure prepares us for wiring up various actions to this view.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        ():
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:
        (.results-view>.toolbar):
        (.results-view>.toolbar ul.actions):
        (.results-view>.toolbar ul.actions li):
        (.results-grid table):
        (.results-grid table td, .results-view table th):
        (.results-grid table th):
        (.results-grid .text-result):
        (.results-grid .image-result):

2011-09-06  Adam Barth  <abarth@webkit.org>

        garden-o-matic's base.probe generates spam in the JavaScript console
        https://bugs.webkit.org/show_bug.cgi?id=67622

        Reviewed by Dimitri Glazkov.

        Now that we have CORS set up on the buildbot, we can use XMLHttpRequest
        instead of HTMLScriptElement to test whether results exist.  This
        reduces the console.log spam and saves bandwidth because we can use a
        HEAD request instead of a GET request.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:

2011-09-05  Adam Barth  <abarth@webkit.org>

        Add a tab to garden-o-matic for viewing expected failures
        https://bugs.webkit.org/show_bug.cgi?id=67619

        Reviewed by Dimitri Glazkov.

        This patch adds a basic tab to garden-o-matic that shows all the tests
        failing on the bots, including the expected failures.  This patch
        mostly involves refactoring existing classes to allow new subclasses.

        This view is useful for when gardeners mark tests as expected to fail
        and then rebaseline them later.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.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/summary-mock.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.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:

2011-09-05  Adam Barth  <abarth@webkit.org>

        Fix global variable leak in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=67617

        Reviewed by Dimitri Glazkov.

        Caught by running the unit tests with noglobals turned on.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-09-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Add pixel test support
        https://bugs.webkit.org/show_bug.cgi?id=66283

        Reviewed by Andreas Kling.

        Implemented pixel result generation by reusing the logic
        that we have in DumpRenderTree.
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::dumpImage):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-09-04  Robin Dunn  <robin@alldunn.com>

        [wx] Enable wxWebKit to run using the wxGC Cairo backend on platforms other than GTK.
        https://bugs.webkit.org/show_bug.cgi?id=67577

        Reviewed by Kevin Ollivier.

        * waf/build/settings.py:

2011-09-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add wtf/dtoa directory to build.

        * waf/build/settings.py:

2011-09-03  Dan Bernstein  <mitz@apple.com>

        32-bit build fix.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::toSTD):

2011-09-03  Dan Bernstein  <mitz@apple.com>

        Move testStringByEvaluatingJavaScriptFromString() from DumpRenderTree to TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=67559

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Moved testStringByEvaluatingJavaScriptFromString() from here and removed
        the call to it.
        * TestWebKitAPI/PlatformUtilities.h: Declared Util::toSTD(NSString *)
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added StringByEvaluatingJavaScriptFromString.mm.
        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm: Added.
        (TestWebKitAPI::TEST): Added. Moved testStringByEvaluatingJavaScriptFromString() to here.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::toSTD): Added.

2011-09-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view should have a better results selector
        https://bugs.webkit.org/show_bug.cgi?id=67542

        Reviewed by Dimitri Glazkov.

        This patch adds a basic grid-based results selector to the results
        view.  Currently, this grid just shows how the tests fail on the
        various bots.  A future patch will let you select which failure to view
        and to mark the failures for rebaselining.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
          - Add some more basic functions for manipulating dictionaries.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:

2011-09-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view should show Actual and Expected results for text failures
        https://bugs.webkit.org/show_bug.cgi?id=67536

        Reviewed by Eric Seidel.

        In the past, we didn't show actual and expected text results (we just
        showed the diff) because we didn't have the awesome six-by-two results
        grid.  Now that we do, we can move show these results.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
          - Fixed some typos that were preventing these unit tests from running.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
        (.):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
          - Report -actual.txt and -expected.txt as possible results URLs.

2011-09-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic shows "ghost" failures that are already fixed
        https://bugs.webkit.org/show_bug.cgi?id=67535

        Reviewed by Eric Seidel.

        About 10% of writes fail to stick on test-results.appspot.com.  This
        patch causes us to fetch the full_results.json blob directly from
        build.chromium.org rather than relying upon AppEngine.

        Unforuntately, we still need to get historical information from
        AppEngine.  That will take several patches to fix becuase I need to
        change the bots to write the full_results.json file to the
        build-specific directory in addition to the zip file.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:

2011-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94458.
        http://trac.webkit.org/changeset/94458
        https://bugs.webkit.org/show_bug.cgi?id=67558

        Caused appcache test to fail on various bots (Requested by
        rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94453.
        http://trac.webkit.org/changeset/94453
        https://bugs.webkit.org/show_bug.cgi?id=67557

        Caused appcache test to fail on various bots (Requested by
        rniwa on #webkit).

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-09-02  Michael Saboff  <msaboff@apple.com>

        Add JSC:RegExp functional tests
        https://bugs.webkit.org/show_bug.cgi?id=67339

        New perl script to build JavaScriptCore and run the RegExp tests.

        Reviewed by Gavin Barraclough.

        * Scripts/run-regexp-tests: Added.

2011-09-02  Michael Saboff  <msaboff@apple.com>

        Add JSC:RegExp functional tests
        https://bugs.webkit.org/show_bug.cgi?id=67339

        New perl script to build JavaScriptCore and run the RegExp tests.

        Reviewed by Gavin Barraclough.

        * Scripts/run-regexp-tests: Added.

2011-09-02  Eric Seidel  <eric@webkit.org>

        Reshuffle some code in WebKitDriver._read_block in preparation for reading stderr/stdout separately
        https://bugs.webkit.org/show_bug.cgi?id=67530

        Unreviewed.  Fixing typo from previous commit.

        Turns out there was *no* unittesting of WebKitDriver.  Added a basic test of _read_block
        which exercises the code I previously made a typo in.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-09-02  Eric Seidel  <eric@webkit.org>

        Reshuffle some code in WebKitDriver._read_block in preparation for reading stderr/stdout separately
        https://bugs.webkit.org/show_bug.cgi?id=67530

        Reviewed by Adam Barth.

        No functional change, just reshuffling code.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-09-02  Darin Adler  <darin@apple.com>

        Added Subversion ignore for .pyc generated files.

        * Scripts/webkitpy/layout_tests/models: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/servers: Added property svn:ignore.
        * Scripts/webkitpy/tool/servers: Added property svn:ignore.

2011-09-02  Adam Barth  <abarth@webkit.org>

        Enable testing on mac-ews
        https://bugs.webkit.org/show_bug.cgi?id=67505

        Reviewed by Eric Seidel.

        This patch enables testing on the Mac EWS, which should help
        contributors not turn the Mac bots red.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-09-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67451
        Add a test for going back to a cached page after changing the device scale factor

        Reviewed by Adam Roben.

        New test DeviceScaleFactorOnBack.mm inherits from WebKitAgnosticTest.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm: Added.
        (TestWebKitAPI::DeviceScaleFactorOnBack::url):
        (TestWebKitAPI::DeviceScaleFactorOnBack::didLoadURL):
        (TestWebKitAPI::DeviceScaleFactorOnBack::createWindow):
        (TestWebKitAPI::DeviceScaleFactorOnBack::initializeView):
        (TestWebKitAPI::DeviceScaleFactorOnBack::runTest):
        (TestWebKitAPI::TEST_F):

        Added new function to WebKitAgnosticTest to goBack. Separated 
        waitForLoadToFinish() into its own function (instead of being a part of 
        loadAndWaitUntilFinished()) so that it can be called from goBack as 
        well. Also added initializeView() so we can set the cache model.
        * TestWebKitAPI/mac/WebKitAgnosticTest.h:
        (TestWebKitAPI::WebKitAgnosticTest::initializeView):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::WebKitAgnosticTest):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        (TestWebKitAPI::WebKitAgnosticTest::loadURL):
        (TestWebKitAPI::WebKitAgnosticTest::goBack):
        (TestWebKitAPI::WebKitAgnosticTest::waitForLoadToFinish):

2011-09-02  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PrivateBrowsing.cpp:
        (PrivateBrowsing::ScriptableObject::pluginTest):

2011-09-02  Anders Carlsson  <andersca@apple.com>

        Move private browsing test to a PluginTest subclass
        https://bugs.webkit.org/show_bug.cgi?id=67498

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginGetProperty):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_SetValue):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/PrivateBrowsing.cpp: Added.
        (PrivateBrowsing::PrivateBrowsing):
        (PrivateBrowsing::privateBrowsingEnabled):
        (PrivateBrowsing::cachedPrivateBrowsingEnabled):
        (PrivateBrowsing::ScriptableObject::hasProperty):
        (PrivateBrowsing::ScriptableObject::getProperty):
        (PrivateBrowsing::ScriptableObject::pluginTest):
        (PrivateBrowsing::NPP_New):
        (PrivateBrowsing::NPP_GetValue):
        (PrivateBrowsing::NPP_SetValue):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_SetValue):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-09-02  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Build dependency problems
        https://bugs.webkit.org/show_bug.cgi?id=38054

        Trivial fix after r94288.

        Rubber-stamped by Andras Becsi.

        * Scripts/webkitdirs.pm: We should read the whole defaults.txt, not only the first two lines.
        (buildQMakeProject):

2011-09-02  Andras Becsi  <andras.becsi@nokia.com>

        Remove my old e-mail address and add my new one.

        Rubber-stamped by Tor Arne Vestbø.

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

2011-09-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] run-gtk-tests leaves a zombie Xvfb process
        https://bugs.webkit.org/show_bug.cgi?id=67389

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests: Properly close STDIN and STDERR on the
        child process instead of doing shell redirection.

2011-09-01  Mark Rowe  <mrowe@apple.com>

        Fix the build by adding some more missing return types.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):

2011-09-01  Eric Seidel  <eric@webkit.org>

        REGRESSION (NRWT): Leaks Viewer can't load leaks from test runs that used NRWT
        https://bugs.webkit.org/show_bug.cgi?id=66228

        Reviewed by Dirk Pranke.

        ORWT used $(PROCESS)$(NUMBER)-leaks.txt for leaks filenames.
        The LeaksViewer tool globs for all *-leaks.txt files.
        This patch makes NRWT output $(PROCESS)-$(PID)-leaks.txt which should match.

        In order to test this I had to fix a limitation in our MockFileSystem.glob
        method.  However, doing so uncovered a typo and bug in the integration tests.
        I've disabled the offending integration tests.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector.py:
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py:

2011-09-01  Dominic Mazzoni  <dmazzoni@google.com>

        Adds a LayoutTestController method to make it possible to test
        starting speech input via an API call.
        https://bugs.webkit.org/show_bug.cgi?id=60170

        Reviewed by Dimitri Glazkov.

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::startSpeechInput):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::startSpeechInput):

2011-09-01  Tim Horton  <hortont424@gmail.com>

        Fix TestWebKitAPI build on clang-2.0

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Remove unused "extension" parameter from rebaseline gardeningserver handler
        https://bugs.webkit.org/show_bug.cgi?id=67384

        Reviewed by James Robinson.

        This parameter hasn't done anything in a while.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-09-01  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Fix a typo in unittests.  Unfortunately fixing it
        caused several assertions.  Just disabling the test
        instead, since it was providing no value before due to the typo.

        * Scripts/webkitpy/layout_tests/port/test.py:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Add a "rebaseline" button to the garden-o-matic summary page
        https://bugs.webkit.org/show_bug.cgi?id=67382

        Reviewed by Dimitri Glazkov.

        As much as we might wish folks to not rebaseline entire test groups at
        once, the truth is that doing so is a common operation.  Adding a
        button for this operation is likely to make folks happy.

        This patch also cleans up a bunch of plumbing surrounding failureInfo
        objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.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/ui/notifications.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-09-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic should let the gardener assign blame for a group of test failures
        https://bugs.webkit.org/show_bug.cgi?id=67379

        Reviewed by Dimitri Glazkov.

        If a group of test failures has a large revision range, the gardener
        might wish to blame a specific revision for the failure.  Currently,
        this only effect of assigning blame in this way is to hide the other
        suspect commits.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Hide garden-o-matic failure table until hover
        https://bugs.webkit.org/show_bug.cgi?id=67376

        Reviewed by Dimitri Glazkov.

        This patch removes the failure table for build failures (because it
        does not make sense) and hides the failure table for test groups until
        the user hovers over the test failure block, reducing visual noise.

        * 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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Switch garden-o-matic from commitData.title to commitData.summary
        https://bugs.webkit.org/show_bug.cgi?id=67375

        Reviewed by Dimitri Glazkov.

        commitData.title is a string provided by Trac, which isn't great in all
        cases.  commitData.summary is my attempt to find the most important
        one-line summary of the commit.  This patch switches garden-o-matic
        over to summary.

        Also, this patch tweaks a bunch of CSS to tighten up the summary page
        and reduce visual noise.

        * 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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Group failing tests in garden-o-matic if there are more than three in a folder
        https://bugs.webkit.org/show_bug.cgi?id=67373

        Reviewed by Dimitri Glazkov.

        Sometimes a failure will cause many tests in a given directory to fail.
        When that happens, it's better to list the directory as a single item
        (with a count) rather than spamming all the test names.

        (This patch also updates a bunch of unit test expected results after my last commit.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.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.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2011-09-01  Adam Barth  <abarth@webkit.org>

        Lower the visual noise from the failing builders display
        https://bugs.webkit.org/show_bug.cgi?id=67369

        Reviewed by Dimitri Glazkov.

        This patch ensures that the "Building" row in the failing builders
        display is always last and dims it by 50% to reduce visual noise.  This
        lets the gardener focus on the actual failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/failures.css: Added.

2011-09-01  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Build dependency problems
        https://bugs.webkit.org/show_bug.cgi?id=38054

        Make clean build after the defines are changed.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProject):

2011-08-31  Adam Barth  <abarth@webkit.org>

        Move DumpRenderTree to WebKitPlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=67331

        Reviewed by Darin Fisher.

        This patch update DumpRenderTree to account for the WebKitClient =>
        WebKitPlatformSupport rename.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/Task.cpp:
        (postTask):

2011-08-31  Eric Seidel  <eric@webkit.org>

        Add queues.webkit.org/active-bots page to make it easy to see which bots are down
        https://bugs.webkit.org/show_bug.cgi?id=67314

        Reviewed by Adam Barth.

        Very simple page.  Just lists all the bots, what queue they belong to and what we last heard from them.
        If we haven't heard from a bot in the last 500 messages (last day or so), then it won't show up here.
        This makes it very easy for me to see which of my cr-jail bots might be down at any one time.

        I also moved a bunch of code into dashboard.css which belonged there.

        * QueueStatusServer/handlers/activebots.py: Added.
        * QueueStatusServer/main.py:
        * QueueStatusServer/stylesheets/dashboard.css:
        (.queue_bubble):
        (.queue_name):
        (.last_heard_from):
        (.status_text):
        (.alive):
        (.behind):
        (.dead):
        * QueueStatusServer/templates/activebots.html: Added.
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/recentstatus.html:

2011-08-31  Oliver Hunt  <oliver@apple.com>

        Move CheckedArithmeticOperations.cpp to the intended location

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp: Renamed from Tools/TestWebKitAPI/Tests/CheckedArithmeticOperations.cpp.

2011-08-31  Elliot Poger  <epoger@google.com>

        add unittest to validate the complete set of Chromium configurations
        https://bugs.webkit.org/show_bug.cgi?id=67211

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-08-31  Nico Weber  <thakis@chromium.org>

        Make ScrollAnimator(Chromium)?Mac check scrollAnimatorEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=67297

        Reviewed by Tony Chang.

        Explicitly disable smooth scrolling in chromium's DRT.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2011-08-31  Oliver Hunt  <oliver@apple.com>

        Add Checked<> tests to windows build

        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-08-30  Oliver Hunt  <oliver@apple.com>

        Add support for checked arithmetic
        https://bugs.webkit.org/show_bug.cgi?id=67095

        Reviewed by Sam Weinig.

        Add test cases for Checked<>

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/CheckedArithmeticOperations.cpp: Added.

2011-08-31  Adam Barth  <abarth@webkit.org>

        Move summary.html to garden-o-matic.html.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Removed.

2011-08-31  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] DRT linux should pass nativeKeyCode to plugins
        https://bugs.webkit.org/show_bug.cgi?id=66679

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):  Call a Chromium Linux GTK helper routine that returns the
        (simulated) nativeKeyCode for the given input keyboard code.

2011-08-31  Adam Barth  <abarth@webkit.org>

        Tighen up UI for garden-o-matic tab strip
        https://bugs.webkit.org/show_bug.cgi?id=67266

        Reviewed by Dimitri Glazkov.

        This patch add CSS to move the tab strip to the edges of the page and
        to remove some gratuitous border-radius.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-31  Adam Barth  <abarth@webkit.org>

        garden-o-matic results view shouldn't be horrifically ugly
        https://bugs.webkit.org/show_bug.cgi?id=67264

        Reviewed by Dimitri Glazkov.

        Minor tweak to the results view CSS to make it fit in better with the new tabbed UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css:

2011-08-31  Adam Barth  <abarth@webkit.org>

        garden-o-matic needs a tabstrip
        https://bugs.webkit.org/show_bug.cgi?id=67263

        Reviewed by Dimitri Glazkov.

        This patch adds a basic tabstrip to garden-o-matic.  The results
        details view now opens in the "Results" tab, and the user can flip back
        and forth between the Summary and the Results tab quickly.  There's
        also a stub for a "Commits" tab, which is disabled.

        This patch isn't the most beautiful in the world, but it gets the ball
        rolling on a multi-modal UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-31  Ai Makabi  <makabi@google.com>

        Extract reference links from reftest test file.
        https://bugs.webkit.org/show_bug.cgi?id=66838

        Reviewed by Shinichiro Hamaji.

        * Scripts/webkitpy/layout_tests/reftests/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py: Added.
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py: Added.

2011-08-03  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] missing log import in common/net/resultsjsonparser.py
        https://bugs.webkit.org/show_bug.cgi?id=65606

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/common/net/resultsjsonparser.py: Import the logging module.

2011-08-30  Philippe Normand  <pnormand@igalia.com>

        [stylechecker] complains about NULL usage in some gst_structure_ calls
        https://bugs.webkit.org/show_bug.cgi?id=67194

        Reviewed by Martin Robinson.

        Don't warn about NULL in some gst_structure_ calls. 0 can't be
        used for these, a proper sentinel is required.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-08-30  Adam Barth  <abarth@webkit.org>

        Remove old-style UI from garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=67257

        Reviewed by Dimitri Glazkov.

        This code is nowhere near as awesome as the new hotness.  Let's remove
        it so it doesn't weigh us down.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/main.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/unexpected-passes.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html: Removed.

2011-08-30  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b5.
        https://bugs.webkit.org/show_bug.cgi?id=66924

        Reviewed by Kent Tamura.

        pywebsocket 0.6b2 supported minimum features of Hybi-08 specification.
        Now, pywebsocket 0.6b5 supports full features of Hybi-10 specification.
        0.6b3 or later supports a closing handshake handler and it is useful to
        verify client's closing handshake implementation.
        0.6b4 supports AbortedByUserException. It is useful to eliminate
        unnecessary server warning messages on intended abnormal closures.
        0.6b5 supports Python 2.5.1 or Mac 10.5.

        * Scripts/webkitpy/thirdparty/__init__.py:
        Update download URL and directory path.

2011-08-30  Dan Bernstein  <mitz@apple.com>

        Test for <rdar://problem/9281695> Add text search API for getting the DOM range of a text match
        https://bugs.webkit.org/show_bug.cgi?id=67230

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.html: Added.
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm: Added.
        (-[DOMRangeOfStringFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2011-08-30  Aaron Colwell  <acolwell@chromium.org>

        Add MediaSource API to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=64731

        Reviewed by Eric Carlson.

        * Scripts/build-webkit:

2011-08-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Emit last progress notification before calling dispatchDidFinishLoad
        https://bugs.webkit.org/show_bug.cgi?id=28851

        Reviewed by Adam Barth.

        Implement dumpProgressFinishedCallback() in the layoutTestController for Qt,
        Chromium and GTK ports. The first two were simple changes.

        Some refactoring was needed in GTK port to assure that the dumps are emitted
        correctly and the processing after the page load finished is in the right place.

        To detect the load finished, we use the callback for the "load-status" notifier
        signal of the top loading frame. And we use the deprecated "load-finished" signal
        for dumping (if enabled) the progress finished expected output.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpProgressFinishedCallbackCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpProgressFinishedCallback):
        (LayoutTestController::setDumpProgressFinishedCallback):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpProgressFinishedCallback):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpProgressFinishedCallback):
        (LayoutTestController::setShouldDumpProgressFinishedCallback):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didStopLoading):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadFinished):
        (topLoadingFrameLoadFinished):
        (webFrameLoadStatusNotified):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpProgressFinishedCallback):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-08-30  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore does not have a good mechanism for performance
        regression testing
        https://bugs.webkit.org/show_bug.cgi?id=67177

        Reviewed by Darin Adler.
        
        Added a new script, which allows for testing one, two, or more VMs
        at once on SunSpider, V8, and Kraken benchmarks.  Benchmark/VM runs
        are interleaved at random to minimize systematics.  The results
        that bencher prints includes all possible relevant information about
        how bencher was invoked.  Bencher can be easily used to measure
        performance changes down to fractions of a percent.
        
        Bencher also includes experimental support for running benchmarks in
        a DumpRenderTree release build.  This works in SunSpider and V8, but
        not yet in Kraken.  Running benchmarks in DumpRenderTree more
        closely mimics the performance when running in browser.

        * Scripts/bencher: Added.

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (setDefaultsToConsistentValuesForTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAlwaysAcceptCookies):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        Use new SPIs to manipulate sessions.

2011-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94055 and r94057.
        http://trac.webkit.org/changeset/94055
        http://trac.webkit.org/changeset/94057
        https://bugs.webkit.org/show_bug.cgi?id=67191

        Many failures on Mac 10.5 (Requested by toyoshim on #webkit).

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-08-30  Adam Barth  <abarth@webkit.org>

        Chromium Android should not be a core builder
        https://bugs.webkit.org/show_bug.cgi?id=67184

        Reviewed by Ryosuke Niwa.

        This bot hasn't been consistently green yet because it has never actually run!

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-08-30  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b4.
        https://bugs.webkit.org/show_bug.cgi?id=66924

        Reviewed by Kent Tamura.

        pywebsocket 0.6b2 supported minimum features of Hybi-08 specification.
        Now, pywebsocket 0.6b4 supports full features of Hybi-10 specification.
        0.6b3 or later supports a closing handshake handler and it is useful to
        verify client's closing handshake implementation.
        0.6b4 supports AbortedByUserException. It is useful to eliminate
        unnecessary server warning messages on intended abnormal closures.

        * Scripts/webkitpy/thirdparty/__init__.py:
        Update download URL and directory path.

2011-08-29  Tom Zakrajsek  <tomz@codeaurora.org>

        sheriffbot "usage" help statements are wrong
        https://bugs.webkit.org/show_bug.cgi?id=67170

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-08-29  Adam Barth  <abarth@webkit.org>

        Add support for chomium-mac (non-CoreGraphics) baselines
        https://bugs.webkit.org/show_bug.cgi?id=67163

        Reviewed by Eric Seidel.

        This patch teaches the non-CG chromium-mac bots to look at non-CG
        baselines.  However, the patch still leaves CG as the default set of
        baselines.

        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-08-29  Shawn Singh  <shawnsingh@chromium.org>

        Small fix in chromium port of new-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=67078

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93987, r93992, r93995, r93998, and
        r93999.
        http://trac.webkit.org/changeset/93987
        http://trac.webkit.org/changeset/93992
        http://trac.webkit.org/changeset/93995
        http://trac.webkit.org/changeset/93998
        http://trac.webkit.org/changeset/93999
        https://bugs.webkit.org/show_bug.cgi?id=67147

        Many failing tests (Requested by ap on #webkit).

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

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

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        Tell WebCore to use a temporary session, starting with a clean cookie store.

2011-08-23  Chris Marrin  <cmarrin@apple.com>

        [mac] requestAnimationFrame support for mac port
        https://bugs.webkit.org/show_bug.cgi?id=59146

        Reviewed by Simon Fraser.

        Add support for request-animation-callback flag

        * Scripts/build-webkit:

2011-08-27  Peter Beverloo  <peter@chromium.org>

        Add a build bot for Chromium with OS(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=66687

        Reviewed by Adam Barth.

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

2011-08-27  Peter Beverloo  <peter@chromium.org>

        Update the master build bot configuration script to properly
        deal with the --chromium-android switch.
        https://bugs.webkit.org/show_bug.cgi?id=66687

        The --chromium-android switch is needed when running
        update-webkit-chromium and build-webkit, as it'll tell the
        scripts to pull in the right dependencies and cross-compile
        WebKit using the Android NDK.

        Reviewed by Adam Barth.

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

2011-08-27  Peter Beverloo  <peter@chromium.org>

        Teach the update and build scripts how to handle dependencies
        and cross-compiling rules for the Chromium port on OS(ANDROID).
        https://bugs.webkit.org/show_bug.cgi?id=66687

        Reviewed by Adam Barth.

        * Scripts/build-webkit:
        * Scripts/update-webkit:
        * Scripts/update-webkit-chromium:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (isChromium):
        (isChromiumAndroid):
        (determineIsChromiumAndroid):
        (buildChromium):

2011-08-26  Adam Barth  <abarth@webkit.org>

        garden-o-matic should let me know that I need to run the local server
        https://bugs.webkit.org/show_bug.cgi?id=66985

        Reviewed by Dimitri Glazkov.

        The patch triggers an alert dialog whenever the user tries to use a
        feature that requires the local server.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js:

2011-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary view should have pretty commit data information.
        https://bugs.webkit.org/show_bug.cgi?id=67069

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added support for styling commit data.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Changed tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Defined global anchor color.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Styled commit data.

2011-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Tweak the use of Open Sans in garden-o-matic summary view to make it look decent on Windows and Linux.
        https://bugs.webkit.org/show_bug.cgi?id=67066

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Tweaked.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Ditto.

2011-08-26  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [DRT] Include cairo.h in PixelDumpSupportCairo.h for EFL too.
        https://bugs.webkit.org/show_bug.cgi?id=67041

        Reviewed by Martin Robinson.

        This is a follow-up to r89053: EFL's PixelDumpSupportEfl.cpp includes
        PixelDumpSupportCairo.h, but the latter was #including cairo.h only
        when the GTK+ port was being built.

        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:

2011-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Clean up and line up layout in garden-o-matic summary view.
        https://bugs.webkit.org/show_bug.cgi?id=67057

        1) Renamed ui.notifications.TestFailures to ui.notifications.TestsFailing to match BuildersFailing;
        2) Rearranged DOM structure a bit to accommodate recent changes;
        3) Added minimal CSS to line things up.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Renamed TestFailures to TestsFailing.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js: Added mocks for BuildersFailing.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js: Renamed TestFailures to TestsFailing.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Changed DOM structure.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Tweaked common appearance.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Added minimal layout/style.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Added Google Web Fonts hook.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Ditto.

2011-08-26  Alice Liu  <alice.liu@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66823
        Add the request info to the WebPageProxy::CreateNewPage message

        Reviewed by Anders Carlsson.

        Update function declarations with additional parameter:
        * MiniBrowser/gtk/BrowserWindow.c:
        (createNewPage):
        * MiniBrowser/mac/BrowserWindowController.m:
        (createNewPage):
        * MiniBrowser/win/BrowserView.cpp:
        (createNewPage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestController.h:

2011-08-26  Noel Gordon  <noel.gordon@gmail.com>

        Make show-pretty-diff work on linux
        https://bugs.webkit.org/show_bug.cgi?id=67017

        Reviewed by Adam Barth.

        * Scripts/show-pretty-diff:

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reorganize garden-o-matic CSS files to match JS-built views.
        https://bugs.webkit.org/show_bug.cgi?id=66998

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/common.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/results.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Changed to use new CSS files.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Ditto.

2011-08-25  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to roll out patches
        https://bugs.webkit.org/show_bug.cgi?id=66982

        Reviewed by Dimitri Glazkov.

        This patch just wires the rollout event through the controller to the
        local server, which is already set up to perform rollouts.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js:

2011-08-25  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Assert in computeViewportAttributes when MiniBrowser started with -touch
        https://bugs.webkit.org/show_bug.cgi?id=66951

        Reviewed by Andreas Kling.

        Function computeViewportAttributes() gets called when height is still 0 because MiniBrowser sets
        width and height one by one and setWidth cause geometryChange event in QTouchWebView. 

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::resizeEvent):

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary view should provide information on builders still in flight.
        https://bugs.webkit.org/show_bug.cgi?id=66992

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Added grabbing the list of in-flight builders.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js: Added buildersInFlightForRevision.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js: Added tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Split off updating builder results to own method.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added tests.

2011-08-25  Adam Barth  <abarth@webkit.org>

        webkit-patch rebaseline-expectations don't work when run outside the root
        https://bugs.webkit.org/show_bug.cgi?id=66966

        Reviewed by Eric Seidel.

        Turns out tool.path() used to be relative, which caused problems when
        running webkit-patch outside the root directory.  This patch makes it
        absolute.  I checked all callers, and they all appear to want this
        behavior.

        It was unclear to me how to test this change because we only really
        have a testing strategy for webkitpy, not for the main script.

        * Scripts/webkit-patch:

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary needs a mock view that could be used for working on styling
        https://bugs.webkit.org/show_bug.cgi?id=66971

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary-mock.html: Added.

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Return the correct value for NPNVsupportsCarbonBool
        https://bugs.webkit.org/show_bug.cgi?id=66964

        Add a test.

        Reviewed by Adam Roben.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/SupportsCarbonEventModel.cpp: Added.
        (SupportsCarbonEventModel::SupportsCarbonEventModel):
        (SupportsCarbonEventModel::testConvert):
        (SupportsCarbonEventModel::runTest):
        (SupportsCarbonEventModel::NPP_New):

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic summary view should not be broken.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css:
        (table.comparison): Added more specificity.

2011-08-25  Adam Barth  <abarth@webkit.org>

        This command has been broken for a while.  This patch updates the
        callsite to the new API.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-25  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic needs a way to report where and how tests are failing in the summary view.
        https://bugs.webkit.org/show_bug.cgi?id=66955

        Introduce FailureGrid, your one-stop failure-indicating destination. 

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html: Added new scripts.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Updated to use FailureGrid.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Added new scripts.

2011-08-25  Igor Oliveira  <igor.oliveira@openbossa.org>

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

        Reviewed by Andreas Kling.

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

2011-08-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93767.
        http://trac.webkit.org/changeset/93767
        https://bugs.webkit.org/show_bug.cgi?id=66931

        Broke Qt bot. (Requested by yutak on #webkit).

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-08-25  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] update pywebsocket to 0.6b3 which supports closing handshake test
        https://bugs.webkit.org/show_bug.cgi?id=66924

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-08-24  Adam Barth  <abarth@webkit.org>

        The user can't close the details view in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=66911

        Reviewed by Dimitri Glazkov.

        In addition to adding a close button, this patch changes the test
        selector to use a <select> element and refactors the test selector to
        share code with the builder selector.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:

2011-08-24  James Robinson  <jamesr@chromium.org>

        [chromium] Stacktrace not in test output when a test crashes
        https://bugs.webkit.org/show_bug.cgi?id=66806

        Reviewed by Dirk Pranke.

        Appends the .error and .text output when a test crashes since on chromium the .text contains the actual stack
        trace.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-24  Adam Barth  <abarth@webkit.org>

        Remove empty directory.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui: Removed.

2011-08-24  Adam Barth  <abarth@webkit.org>

        Finish writing up details-view in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=66891

        Reviewed by Dimitri Glazkov.

        This patch mostly just copies a bunch of CSS from main.css to
        summary.css.  Presumably we'll delete main.css soon.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-24  James Robinson  <jamesr@chromium.org>

        Some compositing LayoutTests flakily crashing on Mac 10.6
        https://bugs.webkit.org/show_bug.cgi?id=66740

        Reviewed by Adam Barth.

        Null-check obj->pluginTest before dereferencing it. This can be null in chromium if the plugin load fails, for
        example if the test attempts to load a PDF plugin the load will fail since we don't have such a thing in the
        chromium configuration.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_Destroy):

2011-08-24  Anton D'Auria  <adauria@apple.com>

        No review necessary.

        Adding myself to list of committers.

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

2011-08-24  Avi Drissman  <avi@google.com>

        Crash when restoring NSGraphicsContext when running the Chromium GPU layout tests on Mac
        https://bugs.webkit.org/show_bug.cgi?id=66875

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):

2011-08-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Make notifications appear in time order again.
        https://bugs.webkit.org/show_bug.cgi?id=66815

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added setting index of the notification.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated the test.

2011-08-23  James Robinson  <jamesr@chromium.org>

        [chromium] Need a way to test lost compositor context recovery
        https://bugs.webkit.org/show_bug.cgi?id=66820

        Reviewed by Kenneth Russell.

        Exposes a LayoutTestController interface in chromium to simulate a
        lost compositor context.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::loseCompositorContext):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-08-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Change garden-o-matic frontend builder array to be a configuration map.
        https://bugs.webkit.org/show_bug.cgi?id=66816

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js: Made kBuilders a map, with value being a configuration object.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Adjusted callsites to expect a map.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/main.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Ditto.

2011-08-23  Cary Clark  <caryclark@google.com>

        Turn WebCanvas into CGContext before drawing scrollbar (DRT using Skia on Mac)
        https://bugs.webkit.org/show_bug.cgi?id=66803

        This fixes the WebKit Canaries, in particular avoids a crash on tests
        like css1/basic/comments.html.

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
        The NSGraphicsContext call graphicsContextWithGraphicsPort takes a void*
        parameter, so it took a WebCanvas* (mapped to SkCanvas* in Skia-land)
        and treated it as if it were a CGContextRef.

2011-08-23  Patrick Gansterer  <paroga@webkit.org>

        Fix mergeChangeLogs test on native windows
        https://bugs.webkit.org/show_bug.cgi?id=66797

        Reviewed by Adam Roben.

        Windows has no /tmp/ directory and the "TMPDIR" environment variable isn't set in the default setup.
        Add the "TEMP" environment variable as additional source for the temporary directory used in writeTempFile.

        * Scripts/webkitperl/VCSUtils_unittest/mergeChangeLogs.pl:
        (writeTempFile):

2011-08-23  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic relative time is wrong and updates too frequently.
        https://bugs.webkit.org/show_bug.cgi?id=66802

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js: Changed to account for rounding correctly.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js: Updated tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Upped the interval to 1 minute.

2011-08-23  Patrick Gansterer  <paroga@webkit.org>

        Add missing quotes around filenames in mergeChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=66794

        Reviewed by Adam Roben.

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs):

2011-08-23  Patrick Gansterer  <paroga@webkit.org>

        webkit-perl tests fail on win32 Perl due to lack of list form of pipe open implementation
        https://bugs.webkit.org/show_bug.cgi?id=49080

        Reviewed by Adam Roben.

        Use the string form of pipe open instead (like we do at all other places).

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs):

2011-08-23  Adam Barth  <abarth@webkit.org>

        garden-o-matic summary should be able to examine failures
        https://bugs.webkit.org/show_bug.cgi?id=66748

        Reviewed by Dimitri Glazkov.

        This patch refactors a bunch of code from summary.js to independent
        controllers in controllers.js.  This patch also contains the first
        iteration of binding the "examine" event to a the behavior showing the
        details view for the tests.  There's more work to do here to make this
        work properly (and elegantly), but this patch is a start.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-23  Adam Barth  <abarth@webkit.org>

        webkitpy/common/config/build.py shouldn't mention non-existant Android directory
        https://bugs.webkit.org/show_bug.cgi?id=66737

        Reviewed by Steve Block.

        This directory doesn't exist anymore now that the Android port shares
        more code with Chromium.

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

2011-08-22  Eric Seidel  <eric@webkit.org>

        Hack start-queue.sh in an attempt to resurrect the cr-jail-1 cr-mac-ews bot.
        I won't have ssh access to the bot again for a couple days, so
        attempting to fix by changing this script.  If this doesn't
        work we'll just live with the it hung for now.

        Unreviewed.

        * EWSTools/start-queue.sh:

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        webkit-patch rebaseline-expectations command should not rearrange the entire test_expectations.txt file.
        https://bugs.webkit.org/show_bug.cgi?id=66727

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Made it possible to run TestExpectationSerializer without a TestConfigurationConverter,
            in which case the serializer treats all expectations as unparsed.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added unit tests.

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Update unit test expectations after r93530.

        * Scripts/webkitpy/layout_tests/port/factory_unittest.py: Updated.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Ditto.

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        [Chromium] Expand CPU/GPU/Skia/CG into a matrix in graphics_type.
        https://bugs.webkit.org/show_bug.cgi?id=66705

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/chromium.py: Added plumbing for CG graphics types.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Adjusted unit test.

2011-08-22  James Robinson  <jamesr@chromium.org>

        [chromium] Update builder names for chromium gpu bots due to CG switchover
        https://bugs.webkit.org/show_bug.cgi?id=66693

        Reviewed by Dirk Pranke.

        Update the port and builder names for the chromium mac gpu bots to
        account for the CG transition.

        * Scripts/webkitpy/layout_tests/port/builders.py:

2011-08-22  Dirk Pranke  <dpranke@chromium.org>

        fix the GPU bot names on the layout test dashboard
        https://bugs.webkit.org/show_bug.cgi?id=66697

        Reviewed by Dimitri Glazkov.

        * TestResultServer/static-dashboards/builders.js:

2011-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's relative time display should be updated regularly.
        https://bugs.webkit.org/show_bug.cgi?id=66682

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Moved Time to ui.Time, added code for regular updates.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Changed to use ui.Time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js: Added tests.

2011-08-22  Xianzhu Wang  <wangxianzhu@chromium.org>

        Pass --makeargs of build-webkit to chromium linux builder
        https://bugs.webkit.org/show_bug.cgi?id=66361

        Reviewed by Tony Chang.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (buildChromiumMakefile):
        (buildChromium):

2011-08-22  Peter Beverloo  <peter@chromium.org>

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

        Reviewed by Tony Gentilcore.

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

2011-08-22  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] ImageDiff does not consider --tolerance
        https://bugs.webkit.org/show_bug.cgi?id=66299

        Reviewed by Csaba Osztrogonác.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2011-08-22  Csaba Osztrogonác  <ossy@webkit.org>

        Update contributor list.

        Reviewed by Zoltan Herczeg.

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

2011-08-22  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        [ORWT] Fix --reset-results --add-platform-exceptions combo
        https://bugs.webkit.org/show_bug.cgi?id=65464

        Reviewed by Csaba Osztrogonác.

        * Scripts/old-run-webkit-tests:

2011-08-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic summary.html should have UI for examining failures
        https://bugs.webkit.org/show_bug.cgi?id=66625

        Reviewed by Dimitri Glazkov.

        This patch introduces the notion of UI actions and converts our
        existing manual <button> manipulation with this new abstraction.  The
        patch also adds an Examine button to failure notifications.  In a
        future patch, I'll add a controller that wires this button up to
        something useful.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js: Added.
        * 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:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:

2011-08-20  Adam Barth  <abarth@webkit.org>

        garden-o-matic summary page should indiciate compile failures
        https://bugs.webkit.org/show_bug.cgi?id=66624

        Reviewed by Dimitri Glazkov.

        This patch creates a notification-based UI for build failures.  The new
        UI displays the same information that used to be displayed in the
        infobar.  There's lots of room for improvement in surfacing more
        information, but this is a start.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.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:

2011-08-19  James Robinson  <jamesr@chromium.org>

        [chromium] Default to experimental-fully-parallel mode for chromium gpu port
        https://bugs.webkit.org/show_bug.cgi?id=66606

        Reviewed by Dirk Pranke.

        The chromium GPU configuration does not (currently) contain any tests
        incompatible with --experimental-fully-parallel, and this flag is a
        significan speedup because of the directory canvas/philip/tests which
        contains 802 tests in the same directory. Setting this option by
        default on this configuration is a 2x speed in release, 44s to 22s,
        and a 3x speedup in debug, 223s to 77s, on linux on a 16 core machine.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-08-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93426.
        http://trac.webkit.org/changeset/93426
        https://bugs.webkit.org/show_bug.cgi?id=66607

        Broke the Mac build by not building gtest.framework anymore
        (Requested by andersca on #webkit).

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:

2011-08-19  James Robinson  <jamesr@chromium.org>

        [chromium] Chromium GPU layout tests should use the normal process number selection, not force 1 worker
        https://bugs.webkit.org/show_bug.cgi?id=66603

        Reviewed by Dirk Pranke.

        The various ChromiumGpu ports should use the same child worker
        selection logic as other ports so they can run with full
        parallelization on multicore systems.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2011-08-19  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Remove dependency of WebThemeControlDRTWin on skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=66570

        Reviewed by Mihai Parparita.

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::draw):
        (WebThemeControlDRTWin::drawTextField):
        (WebThemeControlDRTWin::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:

2011-08-18  Dmitry Lomov  <dslomov@google.com>

        TestWebKitAPI breaks on Windows due to fast malloc incompatibility.
        https://bugs.webkit.org/show_bug.cgi?id=66521

        This patch ensures that gtest uses new and delete operators that are defined in JavaScriptCore.

        Reviewed by David Levin.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp: Removed redefinition of JS_EXPORTDATA.

2011-08-19  Adam Roben  <aroben@apple.com>

        Add project file changes I left out in r93417

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-08-19  Adam Roben  <aroben@apple.com>

        Add a helper class for swizzling ObjC instance methods to TestWebKitAPI

        Fixes <http://webkit.org/b/66565> TestWebKitAPI needs a way to override instance methods of
        NSScreen

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/TestWebKitAPI/mac/InstanceMethodSwizzler.mm: Added.
        (-[SimpleObject setValue:]): Original implementation.

        (TestWebKitAPI::setValue2):
        (TestWebKitAPI::setValue3):
        Swizzled implementations.

        (TestWebKitAPI::TEST): Test that we can swizzle and re-swizzle and un-swizzle an ObjC
        instance method.

        * TestWebKitAPI/mac/InstanceMethodSwizzler.h: Added.
        * TestWebKitAPI/mac/InstanceMethodSwizzler.mm: Added.
        (TestWebKitAPI::InstanceMethodSwizzler::InstanceMethodSwizzler): Swizzle the method.
        (TestWebKitAPI::InstanceMethodSwizzler::~InstanceMethodSwizzler): Unswizzle the method.

2011-08-19  Tom Zakrajsek  <tomz@codeaurora.org>

        Fix _path_to_apache() error reporting
        https://bugs.webkit.org/show_bug.cgi?id=66486

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-08-19  Adam Roben  <aroben@apple.com>

        Windows build fix after r93404

        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp: Added missing #include.

2011-08-19  Tony Gentilcore  <tonyg@chromium.org>

        Add leandrogracia to the committers list
        https://bugs.webkit.org/show_bug.cgi?id=66552

        Also fix line endings in file.

        No reviewed required.

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

2011-08-19  Amruth Raj  <amruthraj@motorola.com>

        Fix compilation issue in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=66554

        Reviewed by Martin Robinson.

        * WebKitTestRunner/PixelDumpSupport.cpp:

2011-08-19  Adam Roben  <aroben@apple.com>

        Pull some of DynamicDeviceScaleFactor's code up into a shareable base class

        This will make it easier to write other WebKit-agnostic tests

        Fixes <http://webkit.org/b/66558> Would like to be able to reuse DynamicDeviceScaleFactor's
        code in other WebKit-agnostic tests

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm: Fixed copyright. Moved a bunch of
        code to WebKitAgnosticTest.h/mm. Changed to inherit from WebKitAgnosticTest.
        (TestWebKitAPI::DynamicDeviceScaleFactor::url): Simple getter.
        (TestWebKitAPI::DynamicDeviceScaleFactor::didLoadURL): Calls through to runTest.
        (TestWebKitAPI::DynamicDeviceScaleFactor::runTest): Removed loading code which
        WebKitAgnosticTest handles for us.
        (TestWebKitAPI::TEST_F): Removed view-creation code which WebKitAgnosticTest handles for us.

        * TestWebKitAPI/mac/WebKitAgnosticTest.h: Added. Code came from DynamicDeviceScaleFactor.
        (TestWebKitAPI::WebKitAgnosticTest::loadAndWaitUntilDone): Code came from
        DynamicDeviceScaleFactor::runTest.

        * TestWebKitAPI/mac/WebKitAgnosticTest.mm: Copied from Tools/TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm.
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test): Code came from
        DynamicDeviceScaleFactor.WebKit.
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test): Code came from
        DynamicDeviceScaleFactor.WebKit2.

2011-08-19  Adam Roben  <aroben@apple.com>

        Clean up #includes in TestWebKitAPI

        Fixes <http://webkit.org/b/66556> TestWebKitAPI's prefix header isn't very helpful

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPIPrefix.h: Added wtf/Platform.h. Added gtest/gtest.h for C++
        files and WebKit/WebKit.h for ObjC files.

        * TestWebKitAPI/InjectedBundleController.cpp:
        * TestWebKitAPI/JavaScriptTest.h:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp:
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        * TestWebKitAPI/TestsController.cpp:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        Removed now-unnecessary #includes. Moved #includes of Test.h in with the rest of the
        #includes since it is no longer a special header.

2011-08-18  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests hung while acquiring http lock on snow leopard bots
        https://bugs.webkit.org/show_bug.cgi?id=64886

        Temporarily disable the http locking to work around the issue.
        I'm not actually sure if this is going to work or improve things
        much.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-08-18  Tony Chang  <tony@chromium.org>

        add embedded png checksums to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=66494

        Looks like WebKitTestRunner has never supported embedded checksums.  This copies
        some code from DRT and adds it to the WebKitTestRunner.

        Reviewed by Darin Adler.

        * WebKitTestRunner/CyclicRedundancyCheck.cpp: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/CyclicRedundancyCheck.h: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/GNUmakefile.am: Add new files
        * WebKitTestRunner/PixelDumpSupport.cpp: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/PixelDumpSupport.h: Copied from Tools/DumpRenderTree
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Add new files
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::dumpBitmap): Refactor to use PixelDumpSupport.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::dumpBitmap): Refactor to use PixelDumpSupport.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Add new files

2011-08-18  Shawn Singh  <shawnsingh@chromium.org>

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

        Fixed a cygwin path problem in the chromium port of diff_image;
        Also made the return values of the diff_image function more consistent.

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-17  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Fix compilation problems with deprecations in gtk+
        https://bugs.webkit.org/show_bug.cgi?id=66073

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main): G_CONST_RETURN was deprecated
        * GtkLauncher/main.c:
        (createWindow): Added gtk_box_new conditional compilation for
        gtk+-3.
        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Replaced gtk_vbox_new with gtk_box_new, we
        are just supporting gtk+-3 for WebKit2.

2011-08-18  Anders Carlsson  <andersca@apple.com>

        Fix libc++ C++0x build
        https://bugs.webkit.org/show_bug.cgi?id=66479

        Reviewed by Adam Roben.

        Add missing includes.

        * DumpRenderTree/LayoutTestController.cpp:
        * DumpRenderTree/mac/CheckedMalloc.cpp:

2011-08-18  Adam Roben  <aroben@apple.com>

        Test that WebKit updates style when a WebView is moved between differently-scaled windows

        Test for <http://webkit.org/b/66412> <rdar://problem/9971958> WebKit doesn't react when a
        WebView is moved between windows with different backing scale factors

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::runJSTest): Moved a little bit of code from here...
        (TestWebKitAPI::compareJSResult): ...to here. Also made the error message more similar to
        gtest's built-in error messages.

        * TestWebKitAPI/JavaScriptTest.h: Added overloads of runJSTest that take a WebView * and
        WKView * for convenience on Mac. Added compareJSResult helper function for implementing
        those overloads.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.

        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm: Added.
        (-[FrameLoadDelegate initWithDidFinishLoadBoolean:]): Simple initializer.
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]): Record that the load finished.
        (TestWebKitAPI::didFinishLoadForFrame): Record that the load finished.
        (TestWebKitAPI::setPageLoaderClient): Set up the client.
        (TestWebKitAPI::DynamicDeviceScaleFactor::DynamicDeviceScaleFactor): Simple constructor.
        (TestWebKitAPI::DynamicDeviceScaleFactor::createWindow): Creates a
        SyntheticBackingScaleFactorWindow and returns it.
        (TestWebKitAPI::DynamicDeviceScaleFactor::runTest): Loads devicePixelRatio.html and checks
        that WebKit uses the correct scale factor when the WebView is not in a window, is put in a
        window, is moved to a differently-scaled window, and is taken out of the window.
        (TestWebKitAPI::DynamicDeviceScaleFactor::loadURL): Helper function with overloads for
        WebKit1 and WebKit2.
        (TestWebKitAPI::TEST_F): Runs the test, with overloads for WebKit1 and WebKit2.

        * TestWebKitAPI/Tests/mac/devicePixelRatio.html: Added.

        * TestWebKitAPI/mac/JavaScriptTestMac.mm: Added.
        (TestWebKitAPI::runJSTest): Fairly simple overloads for WebView * and WKView *.

        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.h: Added.
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m: Added.
        (-[SyntheticBackingScaleFactorWindow initWithContentRect:styleMask:backing:defer:]): Simple
        initializer.
        (-[SyntheticBackingScaleFactorWindow setBackingScaleFactor:]): Simple setter.

        (-[SyntheticBackingScaleFactorWindow backingScaleFactor]):
        (-[SyntheticBackingScaleFactorWindow userSpaceScaleFactor]):
        Overrides of NSWindow methods that WebKit uses to determine the device scale factor.

2011-08-18  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=66425
        check-webkit-style should detect incorrectly formatted file change descriptions.
        Description, if present, should be separated from colon with a space.

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/changelog.py: Fix.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Unit tests.

2011-08-18  Adam Barth  <abarth@webkit.org>

        webkit-patch pretty-diff should be shown in main help
        https://bugs.webkit.org/show_bug.cgi?id=66404

        Reviewed by Dimitri Glazkov.

        As requested by dglazkov.

        * Scripts/webkitpy/tool/commands/prettydiff.py:

2011-08-17  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=66400
        Fix TestWebKitAPI build on Mac OS.

        Reviewed by David Levin.

        * TestWebKitAPI/Configurations/Base.xcconfig: Added ICU headers to the HEADER_SEARCH_PATH.

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic spring cleaning: move scripts, styles, and images in the respective directories.
        https://bugs.webkit.org/show_bug.cgi?id=66427

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NRWTResultsParser.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ORWTResultsParser.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/bugzilla_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers/rebaseline.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-green.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-red.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-green.png: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-green.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-red.png: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-red.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/rebaseline.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Bugzilla.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Buildbot.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Buildbot_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Builder.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Builder_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FailingTestsBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FailingTestsBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyLayoutTestDetector.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyLayoutTestDetector_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyTestBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/FlakyTestBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/LayoutTestHistoryAnalyzer.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/LayoutTestResultsLoader.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NRWTResultsParser.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NRWTResultsParser.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NewBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/NewBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ORWTResultsParser.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ORWTResultsParser.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/PersistentCache.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/TestRelatedBugForm.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/TestRelatedBugForm_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Trac.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Utilities.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Utilities_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ViewController.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/WebKitBugzilla.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/WebKitBuildbot.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/bugzilla_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/bugzilla_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/main.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js.
        ():
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/trac_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui_unittests.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/unexpected-passes.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/TestFailures.css: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/main.css: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js: Removed.

2011-08-17  Jochen Eisinger  <jochen@chromium.org>

        Make SVNTest.test_svn_apply use the same timezone logic as VCSUtils.pm
        https://bugs.webkit.org/show_bug.cgi?id=65877

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove base.keys and replace it with Object.keys.
        https://bugs.webkit.org/show_bug.cgi?id=66422

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Removed base.keys.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Removed unit tests for it.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Replaced with Object.keys

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic Summary view should have items in descending chronological order.
        https://bugs.webkit.org/show_bug.cgi?id=66403

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Renamed "push" to "add" for clarity, cleaned up some stuff.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Rewrote add to insert DOM elements in order.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added unit tests.

2011-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix a few errors in garden-o-matic frontend unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=66421

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Changed my excellent test to view time as variable continuum.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js: Tweaked the test to accommodate new builder names.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Hurriedly covered up my prior sins.

2011-08-17  Adam Barth  <abarth@webkit.org>

        Update Tools to account for (CG) being added to Chromium builder names
        https://bugs.webkit.org/show_bug.cgi?id=66410

        Reviewed by Adam Barth.

        Some of these names will change back once we turn on Skia bots.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Wire up relative time to garden-o-matic summary view.
        https://bugs.webkit.org/show_bug.cgi?id=66343

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js: Add time to the commitData object. 
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Adjusted unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Wired up relative date.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Updated unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js: Adjusted unit tests.

2011-08-17  Adam Roben  <aroben@apple.com>

        Make run-api-tests run tests in alphabetical order

        Fixes <http://webkit.org/b/66401> run-api-tests runs tests in a semi-random order

        Reviewed by David Kilzer.

        * Scripts/run-api-tests:
        (runAllTests):
        (runAllTestsInSuite):
        Sort the lists of tests and suites before iterating over them.

2011-08-17  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to rebaseline expected failures
        https://bugs.webkit.org/show_bug.cgi?id=66204

        Reviewed by Dimitri Glazkov.

        This patch introduces a new view for displaying expect, actual, and
        differences between results.  The new view also has a fledgling
        controller that handles some basic operations.  The new view is
        exercised by rebaseline.html, which lets you rebaselines expected
        failures, but the new view is not fully integrated into
        garden-o-matic.html

        More patches will be required to make this stuff fully working, but
        this patch was already somewhat spiraling out of control.  Hopefully
        this patch will serve as a good starting point for further development.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/controllers/rebaseline.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/rebaseline.html: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results_unittests.js: Added.

2011-08-16  Chang Shu  <cshu@webkit.org>

        Support reset in WebCore::Internals
        https://bugs.webkit.org/show_bug.cgi?id=66307

        Reviewed by Dimitri Glazkov.

        Added call to resetInternalsObject in DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):

2011-08-17  Alexis Menard  <alexis.menard@openbossa.org>

        Add a new build slave for the Qt port on Mac OS SnowLeopard.
        https://bugs.webkit.org/show_bug.cgi?id=66392

        Modify the config file to include the new build slave.

        Reviewed by Adam Roben.

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

2011-08-17  Sam White  <samuel.white@rochester.edu>

        AccessibilityObject levels are inconsistent
        https://bugs.webkit.org/show_bug.cgi?id=66180
        
        Added the ability to get numeric attribute values using numberAttributeValue. This
        function complements the existing stringAttributeValue and boolAttributeValue functions.
        The addition of numberAttributeValue was necessary because the stringAttributeValue
        function does a type check and will only return strings. This limitation made it
        impossible to get values for attributes that returned an NSNumber.

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (numberAttributeValueCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::numberAttributeValue):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::numberAttributeValue):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::numberAttributeValue):

2011-08-17  Adam Roben  <aroben@apple.com>

        Tell Trac logs always to display all specified revisions in a single page

        Trac imposes a default limit of 100 revisions per log page. We need to tell it to allow more
        revisions than that.

        Fixes <http://webkit.org/b/66373> Links to Trac from TestFailures page don't always show all
        relevant revisions

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (trac.logURL): Add a limit parameter to the log URL that allows all revisions to be seen in
        a single page.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js:
        Updated tests for the above.

2011-08-17  Adam Roben  <aroben@apple.com>

        Fix TestFailures's link to file a bug about TestFailures itself

        Fixes <http://webkit.org/b/66387> REGRESSION (r92135): TestFailures page's link to file a
        bug about itself is broken

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForAuxiliaryUIElements): Added a path separator to separate
        the host from the path.

2011-08-17  Adam Roben  <aroben@apple.com>

        Teach TestFailures to ignore unbelievably short test runs

        Fixes <http://webkit.org/b/66385> TestFailures page thinks all tests passed in
        http://build.webkit.org/builders/Windows%207%20Release%20(Tests)/builds/14956

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): If it looks like all tests passed, but
        run-webkit-tests took less than 10 seconds to run, assume that some weird error occurred
        that caused it not to run any tests at all (as happened for a while due to
        <http://webkit.org/b/64988>). Bumped the cache version to evict old, buggy cached data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Test for the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version to evict old, buggy cached data.

2011-08-16  Adam Barth  <abarth@webkit.org>

        Add a CG qualifier similar to the GPU qualifier
        https://bugs.webkit.org/show_bug.cgi?id=66359

        Reviewed by Eric Seidel.

        Once we have a Skia configuration on Chromium Mac, we'll use this CG
        qualifier to note that expectations apply only to the CG configuration.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-08-16  Eric Seidel  <eric@webkit.org>

        REGRESSION(92717): WinPort needs to parse version information from port_name
        https://bugs.webkit.org/show_bug.cgi?id=66325

        Unreviewed.  Fixing an exception/typo seen on the bots (and testing to make sure it works).

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Change webkit-patch analyze-baselines to print in a more unix-friendly way
        https://bugs.webkit.org/show_bug.cgi?id=66349

        Reviewed by James Robinson.

        As requested by jamesr.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-16  Eric Seidel  <eric@webkit.org>

        REGRESSION(92717): WinPort needs to parse version information from port_name
        https://bugs.webkit.org/show_bug.cgi?id=66325

        Reviewed by Adam Barth.

        WinPort didn't have any port_name parsing logic.
        Seemed it was best to just share the logic from MacPort.
        Sharing the logic from MacPort seemed easiest with a shared superclass.
        Once I created ApplePort (the superclass) there was a bunch of logic to share.
        I found LeakDetector was just in the way when switching back and forth
        between win.py and mac.py so I moved it into its own file.

        The only logic change here is that WinPort should now be
        able to parse port_name values like MacPort (and other ports)
        can.  The fact that ports do this in their constructors is
        wrong and a source of many bugs.  But at least now WinPort
        matches the status-quo.

        * Scripts/webkitpy/layout_tests/port/apple.py: Added.
        * Scripts/webkitpy/layout_tests/port/leakdetector.py: Added.
        * Scripts/webkitpy/layout_tests/port/leakdetector_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Add webkit-patch analyze-baselines, as requested by jamesr.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Fold bulk-optimize-baselines into optimize-baselines
        https://bugs.webkit.org/show_bug.cgi?id=66345

        Reviewed by James Robinson.

        bulk-optimize-baselines is now a superset of optimize-baselines, so
        they can be combined.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-16  Adam Barth  <abarth@webkit.org>

        Move chromium-mac to chromium-cg-mac to prepare for Skia switchover
        https://bugs.webkit.org/show_bug.cgi?id=66334

        Reviewed by Tony Chang.

        This patch moves us closer to switching the Chromium port from
        CoreGraphics to Skia.  This patch teaches our tools that the current
        Chromium Mac configuration is actually chromium-cg-mac, which makes
        room for a future chromium-mac configuration that uses Skia.

        Shortly after this patch lands, I'll do a server-side move of the
        chromium-mac and chromium-mac-leopard directories to chromium-cg-mac
        and chromium-cg-mac-leopard.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic frontend needs a friendly relative time description method.
        https://bugs.webkit.org/show_bug.cgi?id=66324

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added base.relativizeTime method.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Wired up Time widget to use it.

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Summary view should not add multiple entries for the same test failure.
        https://bugs.webkit.org/show_bug.cgi?id=66318

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Added a simplistic updating button.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added ways to check for
            equality of ui.notifications.FailingTest, and whether ui.notifications.TestFailures already contains a given failure analysis.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added tests.

2011-08-16  Adam Roben  <aroben@apple.com>

        Teach TestFailures that tests that have failed or passed many times in a row are not flaky

        The basic strategy here is that once a test has failed or passed many times in a row we
        never again consider it as a possibly flaky test. It's a simple strategy but seems to result
        in many fewer false positives than our current behavior.

        Fixes <http://webkit.org/b/66327> TestFailures page considers far too many tests to be
        flaky, including tests that failed for a while but then were fixed

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector): Initialize new _buildCount property, which is used to track the
        number of non-too-many-failure builds we've seen.
        (FlakyLayoutTestDetector.prototype.incorporateTestResults): Don't track tests which haven't
        failed in the _maximumFailOrPassCount most recent builds. For other not-yet-considered-flaky
        tests, keep track of how many times they have passed or failed in a row. If they pass or
        fail more than _maximumFailOrPassCount times, consider them to be non-flaky. (Once a test is
        considered flaky it doesn't matter how many times it passes or fails.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js:
        Added tests for the above.

2011-08-16  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic needs a summary view with actions for each problem.
        https://bugs.webkit.org/show_bug.cgi?id=66144

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html: Added notifications tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/summary.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html: Added.

2011-08-16  Dean Jackson  <dino@apple.com>

        Adding Ted "hober" O'Connor as a non-committing contributor.

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

2011-08-16  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to interpret unfinished test runs

        Fixes <http://webkit.org/b/66309> TestFailures thinks all tests passed in
        http://build.webkit.org/builders/Lion%20Intel%20Debug%20(Tests)/builds/136

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Look for "isFinished" in the layout-test step
        rather than "isStarted" so that we don't count builds for which the test run never finished.
        Bumped the cache version to evict old, buggy cached data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a test for the above, and made a somewhat synthetic test more realistic by including
        more of the actual JSON data from build.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version to evict old, buggy
        cached data.

2011-08-16  Adam Roben  <aroben@apple.com>

        Make Apple's Windows port fall back to Lion results instead of SnowLeopard

        Apple's Windows port now uses Lion-era versions of CoreFoundation, ICU, etc., so in theory
        should match Lion's behavior.

        Fixes <http://webkit.org/b/66302> Apple's Windows port matches Lion for some test results,
        but doesn't use Lion results

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (expectedDirectoryForTest):
        * Scripts/webkitpy/layout_tests/port/win.py:
        (WinPort.baseline_search_path):
        * Scripts/webkitpy/layout_tests/port/win_unittest.py:
        (WinPortTest.test_baseline_search_path):
        Replaced mac-snowleopard with mac-lion.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added an entry for the LayoutTests/platform/mac-lion
        directory, which all Apple Mac platforms and Apple Win platforms could potentially use
        results from. Removed Apple Win from being affected by mac-snowleopard changes, since it
        will no longer look there for results.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest.test_should_build): Tests for the above changes.

2011-08-16  Dean Jackson  <dino@apple.com>

        Move me from contributor to reviewer.

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

2011-08-15  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic frontend needs model.commitDataForRevisionRange function.
        https://bugs.webkit.org/show_bug.cgi?id=66252

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Added commitDataForRevisionRange method.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Added tests.

2011-08-15  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic frontend needs a generic way to track updates.
        https://bugs.webkit.org/show_bug.cgi?id=66245

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added UpdateTracker.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added tests.

2011-08-15  Adam Roben  <aroben@apple.com>

        Teach TestWebKitAPI/gtest how to print JavaScript failures nicely

        Failures now give output of the form: foo should be bar but is baz

        Fixes <http://webkit.org/b/66240> It's hard to tell what the actual result of a failed JS
        test is in TestWebKitAPI's output

        Reviewed by David Levin.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::JavaScriptCallbackContext::JavaScriptCallbackContext): Removed now-unused
        members.
        (TestWebKitAPI::javaScriptCallback): Changed to just store the result string in the context
        object, rather than doing any testing of it here.
        (TestWebKitAPI::runJSTest): Made this function a gtest predicate-formatter. This allows us
        to use a pretty error message when the test fails.

        * TestWebKitAPI/JavaScriptTest.h: Changed runJSTest to a predicate-formatter, and added nice
        gtest-style macros that wrap it.

        * TestWebKitAPI/Test.h: Removed now-unused TEST_ASSERT_RETURN.

        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::TEST): Changed to use the new macros.

        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::createSessionStateContainingFormData): Ditto. Note that this function no
        longer returns 0 when the JS test fails. That shouldn't have any effect on whether or not
        the test passes, though. Returning early seems to have been an unnecessary optimization.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST): Changed to use the new macros.

2011-08-15  Eric Seidel  <eric@webkit.org>

        Move the Leaks bot back to ORWT until I can fix LeaksViewer regressions filed by Adam Roben in bug 66227 and 66228.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (usingLeaks):
        (useNewRunWebKitTests):

2011-08-14  Adam Barth  <abarth@webkit.org>

        Switch results detail view over to new-style object-oriented UI widgets
        https://bugs.webkit.org/show_bug.cgi?id=66200

        Reviewed by Dimitri Glazkov.

        This patch replaces my goofy template-based UI for the results
        comparison screen with new object-oriented UI widgets.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-08-13  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic's analyzeUnexpectedFailures needs a completion callback.
        https://bugs.webkit.org/show_bug.cgi?id=66166

        Also changed base.RequestTracker to:
        a) fire callback immediately if requestsInFlight is 0;
        b) not barf if callback is not supplied.

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js: Started using completion callback.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js: Added completion callback.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Changed RequestTracker.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittest.js: Added unit tests.

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Be more forward-looking in the choice of compiler.

        Rubber-stamped by Jon Honeycutt.

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

2011-08-12  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        DRT: Add support for gesture events.
        https://bugs.webkit.org/show_bug.cgi?id=66105

        Reviewed by Darin Fisher.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::gestureScrollBegin):
        (EventSender::gestureScrollEnd):
        (EventSender::gestureTap):
        (EventSender::gestureEvent):
        * DumpRenderTree/chromium/EventSender.h:

2011-08-12  Andy Estes  <aestes@apple.com>

        allowRoundingHacksCallback uses the wrong argument for 'thisObject'.
        https://bugs.webkit.org/show_bug.cgi?id=66158

        Reviewed by Dan Bernstein.

        * DumpRenderTree/LayoutTestController.cpp:
        (allowRoundingHacksCallback): The third argument is the 'this'
        JSObjectRef, not the second.

2011-08-12  Andy Estes  <aestes@apple.com>

        Cancel in onbeforeunload dialog sometime causes a button to stop working.
        https://bugs.webkit.org/show_bug.cgi?id=26211

        Reviewed by Alexey Proskuryakov.

        Implement a new LayoutTestController method that a test can call to set
        the return value of DumpRenderTree's beforeunload UI delegate.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Initialize
        m_shouldStayOnPageAfterHandlingBeforeUnload.
        (setShouldStayOnPageAfterHandlingBeforeUnloadCallback): Call
        LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload().
        (LayoutTestController::staticFunctions): Register
        'setShouldStayOnPageAfterHandlingBeforeUnload' as a static function.
        * DumpRenderTree/LayoutTestController.h: 
        (LayoutTestController::shouldStayOnPageAfterHandlingBeforeUnload):
        (LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Initialize
        m_shouldStayOnPageAfterHandlingBeforeUnload and bind
        'setShouldStayOnPageAfterHandlingBeforeUnload' to its c++ setter.
        (LayoutTestController::reset): Reset
        m_shouldStayOnPageAfterHandlingBeforeUnload to false.
        (LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload):
        Set m_shouldStayOnPageAfterHandlingBeforeUnload to the value passed in
        from JavaScript.
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldStayOnPageAfterHandlingBeforeUnload):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::runModalBeforeUnloadDialog): Add the correct logging and
        return the inverse of
        LayoutTestController::shouldStayOnPageAfterHandlingBeforeUnload().
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:]): Ditto.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage): Ditto.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Define setShouldStayOnPageAfterHandlingBeforeUnload().
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postNewBeforeUnloadReturnValue): Post a message
        to the Test Controller telling it what value it should return in its
        onbeforeunload UI delegate.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setShouldStayOnPageAfterHandlingBeforeUnload):
        Call InjectedBundle::postNewBeforeUnloadReturnValue().
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize
        m_beforeUnloadReturnValue to true.
        (WTR::runBeforeUnloadConfirmPanel): Add the correct logging and return
        the value of TestController::beforeUnloadReturnValue().
        (WTR::TestController::resetStateToConsistentValues): Reset
        m_beforeUnloadReturnValue to true.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::beforeUnloadReturnValue):
        (WTR::TestController::setBeforeUnloadReturnValue):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Handle the
        message posted from the injected bundle by retrieving the message body
        as a WKBoolean and calling TestController::setBeforeUnloadReturnValue().

2011-08-12  Sam Weinig  <sam@webkit.org>

        Move compiler specific macros to their own header
        https://bugs.webkit.org/show_bug.cgi?id=66119

        Reviewed by Anders Carlsson.

        * DumpRenderTree/ForwardingHeaders/wtf/Compiler.h: Added.

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Add a way to extend DOM objects in garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=66096

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added base.extends.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added tests.

2011-08-11  MORITA Hajime  <morrita@google.com>

        [Chromium][DRT] editing/spelling/spelling-backspace-between-lines.html fails
        https://bugs.webkit.org/show_bug.cgi?id=45438

        Reviewed by Kent Tamura.

        MockSpellCheck was assuming the input of spellCheckWord() is a word.
        But it can be a series of word. This change made spellCheckWord()
        understand simple word boundary which appears in tests.
        
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord):

2011-08-11  Mark Rowe  <mrowe@apple.com>

        Rework some Makefile logic to remove a double-negative.

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2011-08-11  Anders Carlsson  <andersca@apple.com>

        Add a FIXME.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):

2011-08-11  Anders Carlsson  <andersca@apple.com>

        Initialize threading before running any tests
        https://bugs.webkit.org/show_bug.cgi?id=66112

        Reviewed by Adam Barth.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):

2011-08-11  Adam Barth  <abarth@webkit.org>

        Add unexpected-passes.html to TestFailures for marking tests as passing
        https://bugs.webkit.org/show_bug.cgi?id=66102

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
            - Move some code into the library so it can be shared.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:
            - Add round-trip unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js: Added.
            - I'm not entirely sure this feature should remain a separate HTML
              file, but it seemed better than cluttering up the main HTML file
              with too much extra stuff.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
            - The gardening server couldn't handle adding PASS expectations.  Now it can.

2011-08-11  Eric Seidel  <eric@webkit.org>

        NRWT has wrong fallback order for Mac now that Lion exists
        https://bugs.webkit.org/show_bug.cgi?id=66093

        Reviewed by Adam Barth.

        ORWT used a different system for fallback orders than NRWT did.
        I moved win.py to match ORWT fallback orders in bug 64486.
        This bug moves mac.py to match ORWT fallback order
        and adds 'lion' as a supported OS version.

        Because ChromiumMac shares OS version detection code with AppleMac
        this also added support for 'lion' to chromium mac.  Hopefully that's a good thing.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-08-11  Adam Barth  <abarth@webkit.org>

        Update test results now that we use absolute URLs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js:

2011-08-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to determine when tests unexpectedly pass
        https://bugs.webkit.org/show_bug.cgi?id=66092

        Reviewed by Dimitri Glazkov.

        This patch just contains the library methods for extracting this
        information.  I'll add some UI in a subsequent patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        New expectation entries should be placed next to existing ones.
        https://bugs.webkit.org/show_bug.cgi?id=66066

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added the notion of insertion point,
            which is computed as the last found reference to the same test.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added and adjusted unit tests.

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r92847.
        http://trac.webkit.org/changeset/92847
        https://bugs.webkit.org/show_bug.cgi?id=65986

        Broke check-webkit-style

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-08-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r92847.
        http://trac.webkit.org/changeset/92847
        https://bugs.webkit.org/show_bug.cgi?id=65986

        Broke check-webkit-style

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-08-11  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] autotests shouldn't require config.h in the style check
        https://bugs.webkit.org/show_bug.cgi?id=65986

        Remove the include rules from the style-check for Qt tests.
        Since for the most part it's just a matter of using the
        API provided by QtWebKit, enforcing the WebCore set of rules
        only seems to make sense in the case of MIMESniffing.

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-08-11  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        [WK2] Implement waitForPolicyDelegate
        https://bugs.webkit.org/show_bug.cgi?id=42330

        Reviewed by Csaba Osztrogonác.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::navigationTypeToString):
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        (WTR::LayoutTestController::setCustomPolicyDelegate):
        (WTR::LayoutTestController::waitForPolicyDelegate):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::isPolicyDelegateEnabled):
        (WTR::LayoutTestController::isPolicyDelegatePermissive):

2011-08-11  Adam Barth  <abarth@webkit.org>

        rebaseline-expectations should use the release bots, not the debug
        bots.  The debug bots don't all run all the tests.  Also, delay
        updating test_expectations a long as possible to avoid clearing out
        lines that we'll need for other ports.

        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        r92792 inadvertently removed PlatformSpecificScheduler for all Snow Leopard bots.
        Revert it partially so that the remaining Snow Leopard bots can fulfill their duty.

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

2011-08-10  Eric Seidel  <eric@webkit.org>

        new-run-webkit-test's WinPort has no fallback logic
        https://bugs.webkit.org/show_bug.cgi?id=64486

        Unreviewed.

        Turns out that we've long had a subtle bug whereby if you didn't
        already have DumpRenderTree built, we might end up running unsupported tests
        because the DumpRenderTree --print-supported-features check would silently fail.

        When I moved the call from using popen to using Executive.run_command, this silent
        failure became noisy.  (Breaking some bots.)

        This re-orders our steps so that we always build DRT before collecting expectations,
        as well as adds a warning message when DumpRenderTree can't be found.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-08-10  Eric Seidel  <eric@webkit.org>

        new-run-webkit-test's WinPort has no fallback logic
        https://bugs.webkit.org/show_bug.cgi?id=64486

        Unreviewed.  Fix test-webkitpy under Python 2.5.

        * Scripts/webkitpy/layout_tests/port/win.py:

2011-08-10  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] MiniBrowser is firing twice the QDesktopWebView::mousePressEvent method
        https://bugs.webkit.org/show_bug.cgi?id=65875

        Reviewed by Kenneth Rohde Christiansen.

        For some reason, QWidget send fake mouse event on some platform, under certains conditions.

        This causes mouse events to be sent twice in some cases. We work around the problem
        by defining the first touch point to be a primary touch point (case which hit some
        weird condition in QWidget, skipping the generation of fake mouse events).

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):

2011-08-10  David Hyatt  <hyatt@apple.com>

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

        Remove the regions and exclusions bots and also the flags in build-webkit, since I'm just turning
        the code on by default.

        Reviewed by Adam Roben.

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

2011-08-10  Oliver Hunt  <oliver@apple.com>

        JSEvaluteScript does not return the correct object when given JSONP data
        https://bugs.webkit.org/show_bug.cgi?id=66003

        Reviewed by Gavin Barraclough.

        Add a test case.

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

2011-08-10  Eric Seidel  <eric@webkit.org>

        WIN: NRWT runs compositing tests on configurations that don't support compositing
        https://bugs.webkit.org/show_bug.cgi?id=64472

        Reviewed by Adam Barth.

        I think the code was just wrong.  It was never splitting the string
        into list pieces before.
        I've now tested the supported_features code and theoretically it
        should now work with Windows DRT.

        I also made the list-lookup functions always return lists, to make
        it possible to clean up the list-transform code in the future
        (I opted not to do that cleanup in this patch, but at least now
        both types of feature lookup functions match return types.)

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-08-10  Eric Seidel  <eric@webkit.org>

        Clean up ChromiumDriver a little
        https://bugs.webkit.org/show_bug.cgi?id=65995

        Unreviewed.

        Fix NRWT for chromium.  Silly python.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-10  Eric Seidel  <eric@webkit.org>

        Clean up ChromiumDriver a little
        https://bugs.webkit.org/show_bug.cgi?id=65995

        Reviewed by Adam Barth.

        - We no longer support threading, so remove threading specific code.
        - Add FIXMEs about using ServerProcess instead.
        - Condense option-mapping if-cascade into a for loop.
        - Unindent long if blocks by using early return.
        - Unwrap lines which are needlessly wrapped.

        There should be no functional changes here, just code cleanup/dead-code removal.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Unmuddle construction options for TestConfiguration.
        https://bugs.webkit.org/show_bug.cgi?id=65988

        The TestConfiguration instance is now constructed only using actual values.
        Port-based construction is split into a "from_port" class method.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added TestConfiguration.from_port
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Adjusted code to accommodate the change.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/base.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Ditto.

2011-08-10  Eric Seidel  <eric@webkit.org>

        Leaks bot shows python logging prefixes as part of summary display
        https://bugs.webkit.org/show_bug.cgi?id=65931

        Reviewed by Adam Barth.

        The big part of this change is adding a unittesting system for
        master.cfg, so mere-mortals can make changes to build.webkit.org
        with greatly-reduced risk of breaking the world.

        Turns out that in typing up my trival logging fix I made 2 typos,
        so hopefully the hour spent getting master.cfg to load was worth it. :)

        I also tried to make mastercfg_unittest run as part of test-webkitpy
        but right now test-webkitpy requires that unittest files be located in
        a module-name-compatible directory.  'build.webkit.org-config' is not
        a valid module name.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
         - Fixed _parseNewRunWebKitTestsOutput to strip NRWT's python formatter prefix
           by using a new _strip_python_logging_prefix function.
         - Also fixed this function to file to work with a more modern
           simplejson version (which returns unicode objects instead of str objects)
           and filed a related bug with buildbot.net due to their handling of unicode builder names.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Added.
         - BuildBotConfigLoader is a huge pile of code just to get master.cfg to load.
         - The actual tiny unittest of the new _parseNewRunWebKitTestsOutput logic.
        * Scripts/webkitpy/thirdparty/__init__.py:
         - Add autoinstallation of buildbot (and jinja2) for use by mastercfg_unittest.py

2011-08-09  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should extrapolate failures given a set of known results
        https://bugs.webkit.org/show_bug.cgi?id=65882

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Spuriously covered my old sins.
        * Scripts/webkitpy/layout_tests/port/builders.py: Augmented builders dictionary to contain build coverage specifiers,
            adjusted all call sites.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Added BuildCoverageExtrapolator, a thing that
            makes wider net for specific failures.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added unit tests.

2011-08-10  Adam Barth  <abarth@webkit.org>

        The URL we were computing for retrieving baselines was missing a slash
        character because our mocks had an extra slash character.  I've
        corrected both the code and the mock.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-08-09  Adam Barth  <abarth@webkit.org>

        Move the quote mark to the right place.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:

2011-08-09  Adam Barth  <abarth@webkit.org>

        garden-o-matic should use huerstics to narrow regression range
        https://bugs.webkit.org/show_bug.cgi?id=65948

        Reviewed by Dimitri Glazkov.

        When analyzing a regression range, if one of the commit messages
        mentions the test in question, we now hueristically assume that
        revision caused the failure.  (I'm shamelessly stealing this idea from
        TestFailures.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-07-13  Eric Seidel  <eric@webkit.org>

        new-run-webkit-test's WinPort has no fallback logic
        https://bugs.webkit.org/show_bug.cgi?id=64486

        Reviewed by Adam Roben.

        I've tried to write a patch for bug 64439 twice now, and both times
        I've ended up re-writing half the port system.  So I'm breaking
        things up into smaller pieces, this being the first.

        WinPort still does not have any port_name parsing, so when instantiated
        with the name "win-xp" (i.e. by the rebaseline server) it will just behave as the 'win' port.
        I'll fix this in a second pass when I standardize port_name parsing for all webkit ports.

        Otherwise this should "just work" for windows.  I've not been able to test the
        version detection on my mac, but the unit tests show the code behaving as designed.

        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/win_unittest.py: Added.

2011-08-09  Adam Barth  <abarth@webkit.org>

        Teach build.webkit.org's garden-o-matic how to talk to the local server
        https://bugs.webkit.org/show_bug.cgi?id=65940

        Reviewed by Dimitri Glazkov.

        After this patch, the version of garden-o-matic on build.webkit.org is
        fully functional.  It can interact with the local server via CORS.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-08-09  Adam Barth  <abarth@webkit.org>

        Enable CORS for garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65936

        Reviewed by Dimitri Glazkov.

        This patch will allow the hosted instance of garden-o-matic to
        communicate with the local server.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-08-09  Adam Barth  <abarth@webkit.org>

        Upgrade jquery in TestFailures
        https://bugs.webkit.org/show_bug.cgi?id=65935

        Reviewed by Dimitri Glazkov.

        Upgrade to a newer version of jQuery with better support for CORS and CSP.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-08-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r92683.
        http://trac.webkit.org/changeset/92683
        https://bugs.webkit.org/show_bug.cgi?id=65921

         "Breaks Qt --minimal build. Revert pending update of the Qt
        minimal configuration" (Requested by simathur on #webkit).

        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::openUrlInDefaultBrowser):

2011-08-09  Siddharth Mathur  <siddharth.mathur@nokia.com>

        [Qt] Simplify code by removing QT_NO_DESKTOPSERVICES and QT_NO_NETWORKDISKCACHE
        https://bugs.webkit.org/show_bug.cgi?id=65880

        Reviewed by Andreas Kling.

        QDesktopServices and QNetworkDiskCache have been around for a while now. Kill flags which 
        check for their feature flags. Assume that any reasonable Qt build provides them. 
        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::openUrlInDefaultBrowser):

2011-08-09  Adam Barth  <abarth@webkit.org>

        BaselineOptimizer created the wrong baseline for fast/js/regexp-overflow.html
        https://bugs.webkit.org/show_bug.cgi?id=65891

        Reviewed by Eric Seidel.

        The problem was that platform/chromium contained a bogus expectation
        file that needed to be removed, but by the time we got around to
        removing it, we'd already moved the correct baseline into its place.
        After this patch, we copy the gold results into memory before
        reshuffling things on disk (and we delete bad things before adding good
        things).

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:

2011-08-08  Adam Barth  <abarth@webkit.org>

        Chromium Windows bots can't figure out what SVN revision they're running
        https://bugs.webkit.org/show_bug.cgi?id=65893

        Reviewed by Eric Seidel.

        The comment in _engage_awesome_windows_hacks explains why we're making
        this change.  It's ugly and rediculous, but this approach seems better
        than using shell=True when calling popen.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-08-08  Adam Barth  <abarth@webkit.org>

        Remove deduplicate-tests
        https://bugs.webkit.org/show_bug.cgi?id=65886

        Reviewed by Tony Chang.

        This script is redundant with "webkit-patch bulk-optimize-baselines",
        which can find many more duplicates than deduplicate-tests because
        bulk-optimize-baselines can move results around whereas
        deduplicate-tests can only remove results.

        * Scripts/deduplicate-tests: Removed.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests.py: Removed.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests_unittest.py: Removed.

2011-08-08  Adam Barth  <abarth@webkit.org>

        scm.delete should delete empty parent directories as well
        https://bugs.webkit.org/show_bug.cgi?id=65878

        Reviewed by Eric Seidel.

        This behavior makes SVN match GIT (which has no concept of empty
        directories).  This bug comes up a lot when optimizing baselines, which
        often create empty directories when we're able to optimize everything
        out of a given folder.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-08-08  Lucas Forschler  <lforschler@apple.com>

        Add triggers for Lion WK2 test bots.

        Reviewed by Stephanie Lewis.

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

2011-08-08  Adam Barth  <abarth@webkit.org>

        bulk-optimize-baselines should take directories on the command line
        https://bugs.webkit.org/show_bug.cgi?id=65879

        Reviewed by Dimitri Glazkov.

        Passing lists of tests via stdin is a pain.  It's easier if the command
        takes a list of tests on the command line, like run-webkit-tests.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-08  Adam Barth  <abarth@webkit.org>

        Deprecate rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=65873

        Reviewed by Dimitri Glazkov.

        This script never worked correctly and now is redundant with more
        modern infrastructure for rebaselining tests.  This patch deprecates
        the script in order to flush out any issues with the new tools.  Once
        folks are happy with the new tools, we'll delete this script.

        * Scripts/rebaseline-chromium-webkit-tests:

2011-08-08  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should only touch expectations that need updating.
        https://bugs.webkit.org/show_bug.cgi?id=65876

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added reconstitute_only_these to TestExpectationSerializer.list_to_string,
            so that a caller could influence which lines to serialize from values.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Started using reconstitute_only_these.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added tests.

2011-08-08  Dimitri Glazkov  <dglazkov@chromium.org>

        TestExpectationsEditor should return a list of updated expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65872

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added a list to store lines that are being updated.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed tests to account for updated lines.

2011-08-08  Jochen Eisinger  <jochen@chromium.org>

        Fix SCM webkitpy unit test failures
        https://bugs.webkit.org/show_bug.cgi?id=65823

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-08-08  Eric Seidel  <eric@webkit.org>

        Move the --leaks bot back over to NRWT now that I'm back
        from vacation and able to debug it.

        Unreviewed.

        * Scripts/run-webkit-tests:
        (usingWebKit2):
        (useNewRunWebKitTests):

2011-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Wire up updating expectations in garden-o-matic.
        https://bugs.webkit.org/show_bug.cgi?id=65794

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/port/factory.py: Moved _port_for_builder from rebaseline.py to here, rename to get_from_builder_name.
        * Scripts/webkitpy/tool/commands/rebaseline.py: Adapted callsites to new location.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Added GardeningExpectationsUpdater, which knows how to update expectations.
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added loads of tests.

2011-08-08  Jochen Eisinger  <jochen@chromium.org>

        webkit-patch doesn't get along with renamed files
        https://bugs.webkit.org/show_bug.cgi?id=48075

        Possibly a bit heavy handed - I removed all instances of -C and
        changed every instance of -M with '--no-renames' in git.py. This
        forces git to not try to tell us about renames at all, which is
        ultimately the behaviour we want. The old file is shown deleted,
        then the new file is shown added, followed by any changes that
        occurred. Also gets rid of the problem where deleting one file
        and adding another file which has similar content would
        unexpectedly show up as a rename, and fall out of a diff.

        Based on a patch by Wyatt Carss.

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-08-07  Sam White  <samuel.white@rochester.edu>

        Add the ability to search the AccessibilityObject cache
        https://bugs.webkit.org/show_bug.cgi?id=64994
        
        Added testing support for AccessibilityObject cache searching. Currently,
        only the mac platform is full supported and has had API exposed. Other
        platforms have only have this new functionality stubbed. Full implementation
        is a job suited only for an accessibility expert of each respective platform.

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::uiElementForSearchPredicate):

2011-08-06  Adam Barth  <abarth@webkit.org>

        Remove dead code in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=65818

        Reviewed by Dimitri Glazkov.

        This code was added to support the rebaseline2 command six months ago,
        but the rebaseline2 command was never finished and no one else has used
        this code since it was landed.  This patch removes the dead code.  If
        we revive rebaseline2, then we can revert this patch and recover the
        code.  Until then, this code is just dead weight.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/testoutput.py: Removed.
        * Scripts/webkitpy/common/net/testoutput_unittest.py: Removed.
        * Scripts/webkitpy/common/net/testoutputset.py: Removed.
        * Scripts/webkitpy/common/net/testoutputset_unittest.py: Removed.
        * Scripts/webkitpy/common/system/directoryfileset.py: Removed.
        * Scripts/webkitpy/common/system/directoryfileset_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-08-06  Adam Barth  <abarth@webkit.org>

        webkit-patch optimize-baselines can't handle promotions to base results directory
        https://bugs.webkit.org/show_bug.cgi?id=65819

        Reviewed by Dimitri Glazkov.

        This bug came up when testing the optimizer on some editing baselines.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:

2011-08-06  Adam Barth  <abarth@webkit.org>

        Add a small command to optimize baselines in bulk.

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix unit test breakage by plumbing convert_404_to_None in MockWeb.

        * Scripts/webkitpy/tool/mocktool.py: Added missing parameter to MockWeb.get_binary

2011-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Garden-o-matic updateexpectations needs a unit test.
        https://bugs.webkit.org/show_bug.cgi?id=65780

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added unit test.

2011-08-05  Anders Carlsson  <andersca@apple.com>

        Future proof an Objective-C test
        https://bugs.webkit.org/show_bug.cgi?id=65788

        Reviewed by Dan Bernstein.

        Add isObjectInstanceOf to ObjCController.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController isObject:instanceOf:]):

2011-08-05  Adam Barth  <abarth@webkit.org>

        trac.js needs unittests
        https://bugs.webkit.org/show_bug.cgi?id=65673

        Reviewed by Dimitri Glazkov.

        This tests also have somewhat large fixtures.  I've trimmed the example
        XML down a bunch while still hitting interesting cases in the parsing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/trac_unittests.js: Added.

2011-08-05  Adam Barth  <abarth@webkit.org>

        Rebuild rebaseline-chromium-webkit-tests on top of modern infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=65759

        Reviewed by Dimitri Glazkov.

        rebaseline-chromium-webkit-tests doesn't really fit into webkitpy's
        architecture, is poorly tested, and has a bunch of quirks.  This patch
        rebuilds the core functionality of rebaseline-chromium-webkit-tests on
        top of more modern infrastructure.  In the process, we get more code
        re-use and better testing.

        Once we're satisfied with this new implementation, we can delete the
        old implementation.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/net/web.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2011-08-05  Anders Carlsson  <andersca@apple.com>

        Remove PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=65729

        Reviewed by Darin Adler.

        Remove call to set the allowed plug-in run time.

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

2011-08-05  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Unreviewed build fix for Qt-Minimal buildbot

        Use ~/.QtTestBrowser for the cookiejar when QDesktopServices
        is disabled.

        Rubber-stamped by Holger Freyther.

        * QtTestBrowser/cookiejar.cpp:
        (TestBrowserCookieJar::TestBrowserCookieJar):

2011-08-05  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        [Qt] QtTestBrowser: Add support for saving cookies on disk
        https://bugs.webkit.org/show_bug.cgi?id=65328

        Simple cookiejar that saves cookies on disk.

        Added menu options to clear cookies (Edit->Clear cookies) and
        disable disk cookies (Settings->[ ]Save Cookies on Disk).

        Option -no-disk-cookies is also available.

        Reviewed by Andreas Kling.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/cookiejar.cpp: Added.
        * QtTestBrowser/cookiejar.h: Added.
        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/main.cpp:

2011-08-04  Adam Barth  <abarth@webkit.org>

        model.js needs some unit testing
        https://bugs.webkit.org/show_bug.cgi?id=65730

        Reviewed by Dimitri Glazkov.

        These tests do not cover all the functions exported by the model
        module.  We'll need to add the remaining ones in the future.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Another speculative fix for the "svn revision on Windows" problem.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-08-04  Mark Rowe  <mrowe@apple.com>

        Future-proof Xcode configuration settings.

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

2011-08-04  Adam Barth  <abarth@webkit.org>

        Fancier debug logging.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-08-04  David Levin  <levin@chromium.org>

        [chromium] Fix assertion failure in ThreadIdentifierData::identifier in TestShell.
        https://bugs.webkit.org/show_bug.cgi?id=65685

        Reviewed by Dmitry Titov.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::WebViewHost): Intialize WTF threading before
        anything in WTF is used. Usually this is done by WebViewImpl::WebViewImpl
        but in some cases code may use WTF without creating WebViewImpl and
        WTF code functionality may call WTF::currentThread, which requires
        this initialization now.

2011-08-04  Adam Barth  <abarth@webkit.org>

        An educated guess at causing the Windows bots on build.webkit.org to
        find the SVN revision number.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-08-04  Adam Barth  <abarth@webkit.org>

        More logging to help debug the "no SVN rev on Chromium Windows bots"
        bug.  My current theory is that we're trying to detect the SCM system
        in the wrong directory.

        * Scripts/webkitpy/layout_tests/port/base.py:

2011-08-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Speed up webkit-patch optimize-expectations significantly by not collecting test files.
        https://bugs.webkit.org/show_bug.cgi?id=65697

        I neglected to realize that collecting test names is not necessary for this operation.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/expectations.py: Changed to pass an empty list of test files.

2011-08-04  Adam Barth  <abarth@webkit.org>

        checkout_unittest.js should have better coverage of checkout.js
        https://bugs.webkit.org/show_bug.cgi?id=65671

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
            - Remove unused functions.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js:
            - Test remaining public functions in the checkout module.

2011-08-04  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=65706
        Run run-unit-tests on release mode test bots.
        Reenabling after 61812 is fixed.

        Reviewed by Adam Roben.

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

2011-08-04  Adam Barth  <abarth@webkit.org>

        builders.js needs unit tests
        https://bugs.webkit.org/show_bug.cgi?id=65670

        Reviewed by Dimitri Glazkov.

        This test requires somewhat large test fixtures, but using real
        examples seemed better than trimming them down too much.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
            - Note: trac_unittests.js doesn't exist (yet!).

2011-08-04  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Make navigation actions properly usable in QML.
        https://bugs.webkit.org/show_bug.cgi?id=65624

        Fix compilation after the introduction of QWebNavigationController.

        Reviewed by Benjamin Poulain.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::navigationAction):

2011-08-04  Adam Barth  <abarth@webkit.org>

        Another subtle bug due to lack of testing in main.js.  :(

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Fix types.  Sadly, main.js has no test coverage.  (I need to think
        about how to test this part of the code.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-08-04  Adam Barth  <abarth@webkit.org>

        bugzilla.js is missing unit tests
        https://bugs.webkit.org/show_bug.cgi?id=65656

        Reviewed by Adam Roben.

        Testing makes perfect.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/bugzilla_unittests.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js:
        (NetworkSimulator.prototype.runTest.get if):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-08-04  Adam Barth  <abarth@webkit.org>

        Add missing license blocks to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65654

        Reviewed by Dimitri Glazkov.

        This patch is entirely boilerplate.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-08-04  Adam Barth  <abarth@webkit.org>

        garden-o-matic needs a way to mock out the network
        https://bugs.webkit.org/show_bug.cgi?id=65653

        Reviewed by Dimitri Glazkov.

        This patch introduces the net module, which is a useful mock point for
        abstracting away the network.  Future patches will use this
        infrastructure to test some currently untested code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/net_unittests.js: Added.
        (NetworkSimulator):
        (NetworkSimulator.prototype.scheduleCallback):
        (NetworkSimulator.prototype.runTest):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-08-03  Adam Barth  <abarth@webkit.org>

        Use failureInfo more pervasively in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65650

        Reviewed by Dimitri Glazkov.

        These three variable appears in concert together many places.  This
        patch unifies the remaining uses into being failureInfo objects, which
        saves some marshalling.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-08-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to update expecations from the details pane
        https://bugs.webkit.org/show_bug.cgi?id=65648

        Reviewed by Dimitri Glazkov.

        The new button queues up the updates, which get executed all at once.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-08-03  Adam Barth  <abarth@webkit.org>

        Add UI to garden-o-matic for updating expectations
        https://bugs.webkit.org/show_bug.cgi?id=65644

        Reviewed by Dimitri Glazkov.

        The patch plumbs the UI back to the gardening server, but the gardening
        server endpoint is just a stub at this point.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-08-03  Adam Barth  <abarth@webkit.org>

        garden-o-matic details view should queue rebaselines for later execution
        https://bugs.webkit.org/show_bug.cgi?id=65636

        Reviewed by Dimitri Glazkov.

        This patch doesn't contain any confirmation UI, but we'll probably want
        that at some point.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-08-03  Kentaro Hara  <haraken@google.com>

        Implement EventSender.scalePageBy()
        https://bugs.webkit.org/show_bug.cgi?id=58013

        Reviewed by Darin Fisher.

        Implemented EventSender.scalePageBy(f, x, y), which scales a page by a factor of f
        and then sets a scroll position to (x, y). Enabled the tests that had been waiting
        for the implementation of EventSender.scalePageBy(f, x, y).

        Tests: compositing/scaling/tiled-layer-recursion.html
               fast/repaint/scale-page-shrink.html
               fast/dom/Element/scale-page-client-rects.html
               fast/dom/Range/scale-page-client-rects.html
               fast/events/scroll-in-scaled-page-with-overflow-hidden.html
               fast/dom/Element/scale-page-bounding-client-rect.html
               fast/dom/Range/scale-page-bounding-client-rect.html

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender): Added bindings for scalePageBy().
        (EventSender::scalePageBy): A wrapper method for scalePage() in WebView.
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): Resets the scale factor to 1.

2011-08-03  David Levin  <levin@chromium.org>

        Rename WEBKIT_API to WEBKIT_EXPORT in check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=65652

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-08-03  Filip Pizlo  <fpizlo@apple.com>

        Adding Filip Pizlo to committer list.

        Unreviewed.

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

2011-08-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Add "optimize-expectations" command to webkit-patch.
        https://bugs.webkit.org/show_bug.cgi?id=65633

        For now, only operates on Chromium test_expectations.txt and does not report errors/warnings.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/__init__.py: Added command.
        * Scripts/webkitpy/tool/commands/expectations.py: Added.

2011-08-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Allow multiple bug identifiers in test expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65642

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Tweaked to allow multiple bug ids.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests.

2011-08-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Teach BuilderToPort to distinguish between Release and Debug builders.
        https://bugs.webkit.org/show_bug.cgi?id=65628

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/commands/rebaseline.py: Added a smart options object and passed it to port factory.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Added tests.

2011-08-03  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix running qmltests for WK2 in the bot
        https://bugs.webkit.org/show_bug.cgi?id=65621

        Reviewed by Csaba Osztrogonác.

        The path for QML_IMPORT_PATH was assuming we were running the WK1 tests,
        but now there's the case for WK2 UIProcess tests as well.

        * Scripts/run-qtwebkit-tests: add both possible paths to the QML_IMPORT_PATH.

2011-08-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Add a way to edit test expectations.
        https://bugs.webkit.org/show_bug.cgi?id=64922

        Implements a TestExpectationsEditor, which provides a standard way to
        update and remove test expectations.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed TestExpectationSerializer to skip lines that match no test configurations,
            added TestExpectationLine.is_flaky, added BugManager, a simple interface to be fleshed out later, and a TestExpectationsEditor, the big
            enchilada.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Loads of tests to capture desired behavior.

2011-08-03  Andreas Kling  <kling@webkit.org>

        [Qt] MiniBrowser: Unbreak load progress indication.
        https://bugs.webkit.org/show_bug.cgi?id=65614

        Reviewed by Kenneth Rohde Christiansen.

        loadProgress() was renamed to loadProgressChanged().

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::onLoadProgressChanged):
        * MiniBrowser/qt/BrowserWindow.h:

2011-08-03  Martin Robinson  <mrobinson@igalia.com>

        Build fix for WebKit2GTK+.

        * WebKitTestRunner/GNUmakefile.am: Include libInternals as one of
        of the library dependencies of the injected bundle.

2011-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Install web and plugin processes in libexecdir instead of bindir
        https://bugs.webkit.org/show_bug.cgi?id=65600

        Reviewed by Martin Robinson.

        Set WEBKIT_EXEC_PATH environment variable to use web and plugin
        process from current directory instead of the intalled ones.

        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/main.c:
        (main):
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/gtk/main.cpp:
        (main):

2011-08-02  Anders Carlsson  <andersca@apple.com>

        Add mac-lion platform to old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=65577

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:
        (isLion):

2011-08-02  Alexandru Chiculita  <achicu@adobe.com>

        Buildbot: The Properties object has no "hasProperty" method in buildbot 8.3
        https://bugs.webkit.org/show_bug.cgi?id=65554

        Using "has_key" instead of "hasProperty" in order to support buildbot 8.3.

        Reviewed by Adam Roben.

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

2011-08-02  Jochen Eisinger  <jochen@chromium.org>

        Implement WebPermissionClient::allowPlugins for layout tests
        https://bugs.webkit.org/show_bug.cgi?id=33991

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setPluginsAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowPlugins):
        (WebPermissions::setPluginsAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-08-02  Adam Barth  <abarth@webkit.org>

        TestFailures unit tests leak a global variable
        https://bugs.webkit.org/show_bug.cgi?id=65500

        Reviewed by Adam Roben.

        qunit detects the leak if you check the "noglobals" box on run-unittests.html.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:

2011-08-02  Alexandru Chiculita  <achicu@adobe.com>

        CSS Regions build bot should archive and upload output files
        https://bugs.webkit.org/show_bug.cgi?id=65200

        Until now the buildbots would only upload the result archive if the 'trigger' parameters was specified. The
        upload was needed, because the testbots needed to download and use the archive. For CSS Regions we don't have
        a testbot yet, but we want to save the archive on the server for manual testing. Added new parameter
        in config.json, called "upload" that when set to "true" will force the upload to the buildmaster server.

        The "features" argument is now taken into account when determining the name of the archive on the server. That
        was needed in order to avoid the CSS Regions Mac buildbot overwrite the SnowLeopard Mac build.

        Reviewed by Adam Roben.

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

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

        Fix _win32_check_running_pid on 64bit windows python
        https://bugs.webkit.org/show_bug.cgi?id=64950

        Reviewed by Adam Roben.

        Use the correct types for the PROCESSENTRY32 struct.
        th32DefaultHeapID is declared as ULONG_PTR and not as DWORD.
        Using 32bit for pointers instead of 64bit results in an ERROR_BAD_LENGTH
        failure, when calling the Process32First function.
        This is covered by the executive unittest.

        * Scripts/webkitpy/common/system/executive.py:

2011-08-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic should call optimize-baselines when rebaselining tests
        https://bugs.webkit.org/show_bug.cgi?id=65499

        Reviewed by Dimitri Glazkov.

        I took the opportunity to modernize this code to use some of our more
        powerful primitives from base.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-08-01  Stephanie Lewis  <slewis@apple.com>

        Finish reconfiguration started by Lucas Forschler
        Reconfigured slaves:
        Removed Leopard Intel Release (Build)
        Removed Leopard Intel Release (Tests)
        Remove apple-pixel-1
        Added Lion slaves from disabled Leopard slaves

        Added builders:
        Lion Intel Release (Build)
        Lion Intel Debug (Build)
        Lion Intel Release (Tests)
        Lion Intel Release WK2 (Tests)
        Lion Intel Debug (Tests)
        Lion Intel Debug WK2 (Tests)

        Added triggers:
        lion-intel-debug-tests
        lion-intel-debug-test-wk2
        lion-intel-release-tests
        lion-intel-release-tests-wk2
        
        Removed trigger:
        leopard-intel-release-tests

        Added PlatformSpecificScheduler:
        mac-lion

        Added "mac-lion" to build.py and build_unitttest.py

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:

 
2011-08-01  Adam Barth  <abarth@webkit.org>

        webkit-patch needs to be able to "optimize" the storage of baselines on disk
        https://bugs.webkit.org/show_bug.cgi?id=65418

        Reviewed by Dimitri Glazkov.

        If we're not careful when rebaselining tests, we can end up with lots
        of duplicate expected results files in the tree.  This patch adds a
        webkit-patch command that optimizes the storage of expected results on
        disk.

        This command is similar to deduplicate-tests, except that it can move
        test results around rather than just remove duplicate results.

        Unfortunately, this problem is very tricky because the baseline search
        structure is a hypergraph.  This patch include a huerstic optimizer
        that appears to work on a bunch of examples I've tried.  We'll likely
        need to refine it as gain experience.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-08-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Teach TestExpectationSerializer about parsed expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65444

        This is a bit largish in size, but the essentials are:
        * TestExpectationSerializer, given a parsed TestExpectationLine, can now spit out a pretty string.
        * We now store original content of the expectation line on TestExpectationLine.
        * Lots of tests.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Fixed an issue where we didn't
            populate macros correctly, also fixed an issue where we incorrectly returned an empty list
            for all configurations.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added tests for those.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Removed vestiges of code long gone,
            refactored TestExpectationsSerializer to recognize and correctly serialize parsed TestExpectationLine instances,
            changed to store and use TestExpectationLine.original_string.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests.

2011-08-01  Adam Barth  <abarth@webkit.org>

        Remove unused functionality from gardeningserver
        https://bugs.webkit.org/show_bug.cgi?id=65479

        Reviewed by Dimitri Glazkov.

        We now handle these operations directly from the front-end.  That means
        they work even without the gardening server running!

        Also, add some missing files to the list of static files.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-08-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce SpecifierSorter, a thing that knows how specifiers should be ordered.
        https://bugs.webkit.org/show_bug.cgi?id=65413

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added SpecifierSorter and converted
            existing code to use it.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests and cleaned up a bit.

2011-08-01  Adam Barth  <abarth@webkit.org>

        Refactor bugzilla.js for use by garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65450

        Reviewed by Dimitri Glazkov.

        This patch refactors bugzilla.js to use the AsynchronousCache and
        updates the style to use a module instead of an object.  This patch
        then fixes all the existing code that uses this class to use the new
        API style.

        This main benefit of this patch is we remove the tricky manual caching
        and this code is now available to use in garden-o-matic (since the
        dependency on Utilities.js is now gone).

        I ran all the unit tests and poked around in TestFailures a bit to see
        that everything seemed to be working properly.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js:
        (FailingTestsBugForm):
        (FailingTestsBugForm.prototype._createBugTitle):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js:
        (FlakyTestBugForm):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:
        (NewBugForm):
        (NewBugForm.prototype.domElement):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js:
        (TestRelatedBugForm):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder.start):
        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._domForAuxiliaryUIElements):
        (ViewController.prototype._domForNewAndExistingBugs.bugzilla.quickSearch):
        (ViewController.prototype._domForPossiblyFlakyTests.flakyList.appendChildren):
        (ViewController.prototype._domForPossiblyFlakyTests):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:

2011-08-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic shouldn't require local server to determine if compile failed
        https://bugs.webkit.org/show_bug.cgi?id=65446

        Reviewed by Dimitri Glazkov.

        This patch adds some basic bindings for the buildbot JSON API.  I
        wanted to use Buildbot.js an Builder.js from the original TestFailures,
        but they make a number of WebKit-specific assumptions.  We'll
        eventually need to reconcile these pieces of code.

        I should really add tests for this code, but that will require me to
        build a better mock network.  I'll be happy to do that in a follow-up
        patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/builders.js: Added.
            - It's very unclear to me whether didFail is correct.  Supposedly
              the first entry here is the exit code of the step, which is 0 on
              success.  I suspect we'll need to improve this function over time.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:

2011-08-01  Adam Barth  <abarth@webkit.org>

        garden-o-matic should show all failures, even ones that it can't find a regression range for
        https://bugs.webkit.org/show_bug.cgi?id=65447

        Reviewed by Dimitri Glazkov.

        Previously, we just wouldn't display test failures that we couldn't
        identify a regression range for (or whose regression range had fallen
        off the page).  This patch just displays them at the end of the list,
        which is slightly (but not much) better.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-08-01  Jeff Miller  <jeffm@apple.com>

        Windows build fix after r92096.

        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Use #include, not #import, and don't include Foundation.h.
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Add InjectedBundleControllerWin.cpp.

2011-07-31  Anders Carlsson  <andersca@apple.com>

        DownloadDecideDestinationCrash WebKit2 API tests crashes
        https://bugs.webkit.org/show_bug.cgi?id=65442

        Reviewed by Sam Weinig.

        Copy the 18-characters.html file to the destination directory so we won't
        crash trying to make an URL for it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-07-31  Anders Carlsson  <andersca@apple.com>

        Fix SpacebarScrolling WebKit2 API test
        https://bugs.webkit.org/show_bug.cgi?id=65431

        Reviewed by Sam Weinig.

        Add a way to do platform-specific bundle initialization, and use it to disable smooth
        scrolling. Also make it possible for a test to load the injected bundle without actually running
        a test from it.

        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm: Added.
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Added.
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-07-31  Dimitri Glazkov  <dglazkov@chromium.org>

        Use set comparison to find duplicate or overlapping specifiers in test expectations.
        https://bugs.webkit.org/show_bug.cgi?id=65430

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed to use set comparisons, because length
            of a set is wrong.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Added some unit tests to actually catch
            regressions.

2011-07-31  Xan Lopez  <xlopez@igalia.com>

        Group dependencies CFLAGS together.

        * GNUmakefile.am: ditto.

2011-07-31  Daniel Bates  <dbates@webkit.org>

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

        * GNUmakefile.am: Add $(CAIRO_CFLAGS) to libWebCoreInternals_la_CPPFLAGS.

2011-07-30  Patrick Gansterer  <paroga@webkit.org>

        Fix ports_unittest.py on native windows
        https://bugs.webkit.org/show_bug.cgi?id=64959

        Reviewed by Adam Barth.

        Replace WebKitPort.script_path with WebKitPort.script_shell_command.
        The latter includes the interpreter executable required on native windows.

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

2011-07-30  Adam Barth  <abarth@webkit.org>

        Properly escape regular expressions.  (Maybe these shouldn't be regular
        expressions?)

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-30  Adam Barth  <abarth@webkit.org>

        Add support for Win7 to garden-o-matic.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic regression ranges expand after fast bots start passing
        https://bugs.webkit.org/show_bug.cgi?id=65406

        Reviewed by Dimitri Glazkov.

        Once the gardener has fixed a problem, the fast bots pick up the fix,
        which means we end up using the slow bots to compute the regression
        range.  Unfortunately, the slow bots give us large regression ranges,
        leading to this strange effect where the regression range quality
        degrades as fixes roll in.

        This patch causes us to remember the previous regression ranges we've
        seen and to use that information in the future, as long as it's
        consistent with the new information we receive.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic should have a Refresh button to update its display
        https://bugs.webkit.org/show_bug.cgi?id=65403

        Reviewed by Dimitri Glazkov.

        The refresh button should be faster and less disruptive than the browser's reload button.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic should look for the "patch by" line in revisions ostensibly authored by the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=65231

        Reviewed by Dimitri Glazkov.

        The human readable name is easier to understand, especially when the patch is landed by the commit-queue.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        garden-o-matic should strikeout revisions that have been rolled out
        https://bugs.webkit.org/show_bug.cgi?id=65227

        Reviewed by Dimitri Glazkov.

        This helps gardeners keep track of which problems have been solved.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:

2011-07-30  Adam Barth  <abarth@webkit.org>

        Add missing files to the server.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        Actually import the logging module!

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        More debug logging.  Maybe we're running the git version of this
        function somehow?  (That would explain why it doesn't work!)

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        Add some temporary debug logging messages to try to understand why the
        windows bots can't figure out their current SVN revision.

        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-07-29  Adam Barth  <abarth@webkit.org>

        Chromium try servers should use downstream test_expectations
        https://bugs.webkit.org/show_bug.cgi?id=65390

        Reviewed by Dirk Pranke.

        Otherwise the try servers will report bogus failures.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-07-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix an error in macro collapsing, refactor code to be pretty.
        https://bugs.webkit.org/show_bug.cgi?id=65387

        My set math was wrong.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Moved collapsing into a classmethod, fixed the math to be correct.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests.

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

        Style bot complains about EFL-specific forward declaration naming.
        https://bugs.webkit.org/show_bug.cgi?id=64680

        Exclude EFL-specific forward declarations from indentifiers with underscores checks.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-07-27  Adam Roben  <aroben@apple.com>

        Use wacky !svn/bc URLs consistently in Leaks Viewer

        This ensures that any resources loaded via relative URLs will still get pulled from the same
        revision of Subversion.

        Fixes <http://webkit.org/b/65267> Focus/exclude button glyphs don't load on Leaks Viewer

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Use the
        !svn/bc-style URL for inspector.css, too, just like we do for all other resources we pull
        from Subversion.

2011-07-27  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Drop WorkQueueItemEfl.h in favour of the general WorkQueueItem.h
        https://bugs.webkit.org/show_bug.cgi?id=65269

        Reviewed by Kent Tamura.

        WorkQueueItemEfl.h was being included by efl's
        LayoutTestControllerEfl.cpp, however the top-level
        LayoutTestController still included WorkQueueItem.h, causing a lot of
        type mismatches when running the WorkQueueItem code.

        We can stick to the original WorkQueueItem header by making a few
        changes to EFL's LayoutTestController.

        This should make tests such as
        fast/loader/non-deferred-substitute-load.html stop crashing.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp:
        (LayoutTestController::queueLoad):
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp:
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ScriptItem::invoke):
        * DumpRenderTree/efl/WorkQueueItemEfl.h: Removed.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Re-add unit tests I accidentally zapped in r91878.

        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Re-added unit tests.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Replace SpecificityCalculator with TestConfiguration-driven logic.
        https://bugs.webkit.org/show_bug.cgi?id=65206

        Use our newly-acquired ability to expand modifiers into a set of
        matching TestConfiguration instances to calculate specificity and
        determine whether expectation applies to a given test configuration.

        Also, store bug modifier on TestExpectationsLine.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Replaced the logic of calculating specificity with
            test configuration matching, removed a bunch of code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Removed a bunch of tests that aren't useful anymore.


2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Allow ports to specify their own test expectation specifier macros.
        https://bugs.webkit.org/show_bug.cgi?id=65291

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed SpecificityCalculator to use port macros.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/base.py: Added configuration_specifier_macros to retrieve the macros.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Overrode it to return Chromium's macros.
        * Scripts/webkitpy/layout_tests/port/test.py: Added test macros.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Allow TestConfigurationConverter report conversion errors.
        https://bugs.webkit.org/show_bug.cgi?id=65287

        Also, fix a few miscellaneous testing issues.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added a way to report unknown modifier errors.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added a test for reporting errors.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: Fixed an error where an invalid TestConfiguration instance
            was created. 'default' is not a valid build type.
        * Scripts/webkitpy/layout_tests/port/test.py: Ditto. '' is not a valid version.

2011-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Teach all ports about their test configurations.
        https://bugs.webkit.org/show_bug.cgi?id=65278

        Each Port object should return a valid set of all TestConfiguration instances,
        available for this port.

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Removed TestConfiguration.all_test_configurations,
            since it is different for each port.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Removed related test.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed SpecificityCalculator to take a list of
            all test configurations as a param.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Adjusted arguments accordingly.
        * Scripts/webkitpy/layout_tests/port/base.py: Forced all ports to override generation of all test configurations.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Implemented _generate_all_test_configurations for the port.
        * Scripts/webkitpy/layout_tests/port/gtk.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/mac.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/qt.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py: Added an extra test to ensure we're generating a good set.
        * Scripts/webkitpy/layout_tests/port/test.py: Implemented a fixed-in-time all_test_configurations for testing.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added a mock all_test_configurations implementation.
        * Scripts/webkitpy/layout_tests/port/win_unittest.py: Added a unit test for the port.

2011-07-27  Benjamin Poulain  <benjamin@webkit.org>

        [WK2][Qt] Move from QGraphicsView to Qt Scene Graph
        https://bugs.webkit.org/show_bug.cgi?id=62969

        Reviewed by Andreas Kling.

        Co-authored with Simon Hausmann  <simon.hausmann@nokia.com>

        With the scene graph, the interface to have a window on screen is
        QSGCanvas. QGraphicsView is not used, and openGL is an enforced
        dependency.

        Both the BrowserView and the WebKitTest runner are changed from
        QGraphicsView to QSGCanvas.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        (BrowserView::resizeEvent):
        (BrowserView::view):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::urlChanged):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-07-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91792.
        http://trac.webkit.org/changeset/91792
        https://bugs.webkit.org/show_bug.cgi?id=65242

        It broke NRWT on Qt and GTK (Requested by Ossy_night on
        #webkit).

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-07-26  Adam Barth  <abarth@webkit.org>

        Switch to an older idiom that works on Python 2.5.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py:

2011-07-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add an exception to coding style check for EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=65162

        Add an exception of whitespace/declaration for EFL port. Because,
        '*' operator is next to variable in EFL coding style.

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/style/checker.py:

2011-07-26  Keith Kyzivat  <keith.kyzivat@nokia.com>

        [Qt] Add option to turn on disk caching in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=65007

        Reviewed by Noam Rosenthal.

        Add menu item and command line option to turn on disk caching in
        QtTestBrowser. Simple QNetworkDiskCache added to the page's
        QNetworkAccssManager.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-07-26  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Add support for download='filename' attribute in anchors.
        https://bugs.webkit.org/show_bug.cgi?id=64580

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::loadURLExternally):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-07-26  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Anders Carlsson.

        Update DumpRenderTree and API tests for the pictograph font family preference.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2011-07-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Replace SpecificityCalculator with TestConfiguration-driven logic.
        https://bugs.webkit.org/show_bug.cgi?id=65206

        Use our newly-acquired ability to expand modifiers into a set of
        matching TestConfiguration instances to calculate specificity and
        determine whether expectation applies to a given test configuration.

        Also, store bug modifier on TestExpectationsLine.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added a way to report unknown modifier errors.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added a test for reporting errors.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Replaced the logic of calculating specificity with
            test configuration matching, removed a bunch of code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Removed a bunch of tests that aren't useful anymore.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: Fixed an error where an invalid TestConfiguration instance
            was created. 'default' is not a valid build type.
        * Scripts/webkitpy/layout_tests/port/test.py: Ditto. '' is not a valid version.

2011-07-26  Adam Barth  <abarth@webkit.org>

        Increase the information density in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=65141

        Reviewed by Dimitri Glazkov.

        This patch changes lets us show each revision on a single line,
        allowing use to show an entire day's worth of commits at once.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:

2011-07-26  Dimitri Glazkov  <dglazkov@chromium.org>

        TestConfigurationConverter should not barf on invalid specifiers.
        https://bugs.webkit.org/show_bug.cgi?id=65194

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Refactored TestConfigurationConverter.to_config_set a bit,
            made it return empty set whenever an invalid specifier is encountered.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added corresponding tests.

2011-07-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce a way to convert between specifier lists and TestConfiguration sets.
        https://bugs.webkit.org/show_bug.cgi?id=65094

        Add TestConfigurationConverter, a facility to convert:
        1) a set of specifiers into a set of TestConfiguration instances;
        2) a set of TestConfiguration instances into a list of sets of specifiers.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added TestConfigurationConverter.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added tests for it.

2011-07-26  Alexandru Chiculita  <achicu@adobe.com>

        CSS Regions build bot should build with "--css-regions" and "--css-exclusion" flags
        https://bugs.webkit.org/show_bug.cgi?id=65171

        Added "features" parameter in config.json for "builder" objects. The parameter is optional and must be an array. All the items
        of the array will be passed to the build-webkit script. The items will automatically be prefixed with "--".

        Reviewed by Adam Roben.

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

2011-07-26  Chris Rogers  <crogers@google.com>

        Avoid outputting #EOF twice for web audio tests in chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=65201

        Reviewed by Dirk Pranke.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2011-07-26  Adam Barth  <abarth@webkit.org>

        Windows bots on build.chromium.org can't figure out the head_svn_revision
        https://bugs.webkit.org/show_bug.cgi?id=65156

        Reviewed by Tony Chang.

        This patch is a bit of a guess as to the issue based on the
        investigation in https://bugs.webkit.org/show_bug.cgi?id=65148.  I'm
        not sure whether it will fix the issue, but it seems worth a try.

        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKitGtk build with GTK+ 3.x after r91707.

        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp:
        (getPreferredSizeMethod):

2011-07-26  MORITA Hajime  <morrita@google.com>

        [Chromium][DRT] MockSpellCheck.cpp should be clang clean
        https://bugs.webkit.org/show_bug.cgi?id=65166

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord): -Wsign-compare warning.

2011-07-25  Patrick Gansterer  <paroga@webkit.org>

        Ignore line endings in ChangeLogTests
        https://bugs.webkit.org/show_bug.cgi?id=64956

        Reviewed by Adam Barth.

        Split the lines of the ChangeLog text before comparing them.
        This fixes 3 tests on windows, since only the content importent.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:

2011-07-25  Adam Barth  <abarth@webkit.org>

        Add some debug logging to NRWT to diagnose why the windows bots can't determine their SVN revision
        https://bugs.webkit.org/show_bug.cgi?id=65148

        Reviewed by Tony Chang.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        Tweak whitespace wrapping to improve readability.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        Minor tweak to wrap label elements as atomic units.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        always show flakiness details on the builder page
        https://bugs.webkit.org/show_bug.cgi?id=65139

        Reviewed by Tony Chang.

        In order to simplify the UI, we hide the flakiness details by default,
        but there's no actual use-case for this page without the flakiness details.
        So get rid of that option and always show the flakiness details.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        simplify the UI of the header above the test list table
        https://bugs.webkit.org/show_bug.cgi?id=65136

        Reviewed by Adam Barth.

        Use checkboxes instead of links since this is really about which tests to include.
        Ends up using less text and put the checkboxes to the right of the header instead of below it.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-25  Chris Rogers  <crogers@google.com>

        Update new-run-webkit-tests to accomodate binary audio data
        https://bugs.webkit.org/show_bug.cgi?id=65135

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-07-25  Chris Rogers  <crogers@google.com>

        Update Chromium DRT to output binary (instead of base64-encoded) data for web audio testing
        https://bugs.webkit.org/show_bug.cgi?id=65039

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAudioData):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::audioData):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleAudioHeader):
        (TestShellPrinter::handleAudioHeader):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):

2011-06-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Use WebCore scrollbars for the DRT instead of GtkScrolledWindow
        https://bugs.webkit.org/show_bug.cgi?id=62252

        Add a new subclass of WebKitWebView that overrides the size request to
        return 1 pixel by 1 pixel. This ensure that it operates properly when
        not packed into a GtkScrolledWindow. Also construct the WebKitWebView
        with self-scrolling set to true.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorInspectWebView): Use the new SelfScrollingWebKitWebview class here.
        (createWebView): Ditto.
        (main): Pack the widget into a GtkBox instead of a GtkScrolledWindow.
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp: Added.
        (self_scrolling_webkit_web_view_class_init):
        (self_scrolling_webkit_web_view_init):
        (self_scrolling_webkit_web_view_new):
        (sizeRequestMethod):
        (getPreferredSizeMethod):
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.h: Added.
        * GNUmakefile.am: Added SelfScrollingWebKitWebView files to the source list.

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        by default hide tests that have passes for all recorded runs
        https://bugs.webkit.org/show_bug.cgi?id=65127

        Reviewed by Adam Barth.

        This is part of simplifying the default views of the dashboard to
        make it show less information for the common use cases.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        stop generating expectations.json now that it's unused
        https://bugs.webkit.org/show_bug.cgi?id=65130

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * TestResultServer/handlers/menu.py:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-25  Ojan Vafai  <ojan@chromium.org>

        don't show builders in the flakiness dashboard that have stopped running a given test suite
        https://bugs.webkit.org/show_bug.cgi?id=65126

        Reviewed by Mihai Parparita.

        * TestResultServer/static-dashboards/dashboard_base.js:

2011-07-25  Adam Barth  <abarth@webkit.org>

        Overhaul garden-o-matic frontend to integrate revision history and failures
        https://bugs.webkit.org/show_bug.cgi?id=65089

        Reviewed by Dimitri Glazkov.

        This is a major overhaul of the garden-o-matic frontend.  The new UI
        integrates the revision history information with failures.  Failures
        appear in context adjacent to the revisions that caused them (which are
        highlighted).  Each buildbot receives a collumn to the left, which
        indicates which revisions that bot has tested and whether that bot
        showed the indicated failures.

        Failures are selectable with checkboxes, and can then either be
        examined or rebaselined.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-07-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        [buildbot] Add Qt Linux MIPSEL Configuration
        https://bugs.webkit.org/show_bug.cgi?id=65116

        Reviewed by Adam Roben.

        Introduce a Qt Linux MIPS EL build slave. The configuration
        is a build only configuration.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add MIPS buildbot.

2011-07-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt][WK2] Add multi-point touch mocking to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=64374

        Reviewed by Benjamin Poulain.

        Each mouse button generate a touch point. The touch point stay
        virtually on screen if the mouse release happened while the Ctrl
        modifier was pressed.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-07-25  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Use NRWT for Qt-WK2
        https://bugs.webkit.org/show_bug.cgi?id=65097

        Reviewed by Andreas Kling.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91635.
        http://trac.webkit.org/changeset/91635
        https://bugs.webkit.org/show_bug.cgi?id=65083

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

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-07-24  Adam Barth  <abarth@webkit.org>

        Rename garden-o-matic "alert" to "infobar" and increase the width to 100%.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:

2011-07-23  Dimitri Glazkov  <dglazkov@chromium.org>

        TestConfiguration should be hashable and comparable for equality.
        https://bugs.webkit.org/show_bug.cgi?id=65070

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added __hash__ and __eq__ methods.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests.

2011-07-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Extract TestConfiguration from base and write a few unit tests to capture current behavior.
        https://bugs.webkit.org/show_bug.cgi?id=65066

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added.
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py: Moved code to test_configuration.py

2011-07-23  Alok Priyadarshi  <alokp@chromium.org>

        Switching off acceleration for small canvas broke gpu tests
        https://bugs.webkit.org/show_bug.cgi?id=65053

        Reviewed by Stephen White.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-07-23  Keith Kyzivat  <keith.kyzivat@nokia.com>

        [Qt] Add option to turn on disk caching in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=65007

        Reviewed by Noam Rosenthal.

        Add menu item and command line option to turn on disk caching in
        QtTestBrowser. Simple QNetworkDiskCache added to the page's
        QNetworkAccssManager.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::setDiskCache):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Don't match 'DEBUG' when trying to filter BUG modifiers.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Fix issue loading gtests since there's no g_expectations.
        Also, make filing a bug file a webkit.org bug, not a crbug since
        the link is only shown for layout tests.
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        pull test expectations into the dashboard from wvn.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=65054

        Reviewed by Adam Barth.

        Now that svn.webkit.org supports cors headers, we can just grab the txt
        file from there instead of generating a JSON file that we upload
        to appengine. We'll stop generating the JSON file in a followup patch.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-22  Adam Barth  <abarth@webkit.org>

        Fix typo so the tool works on a case-sensitive file system.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:

2011-07-22  Adam Barth  <abarth@webkit.org>

        garden-o-matic should know what patches are landing
        https://bugs.webkit.org/show_bug.cgi?id=64978

        Reviewed by Dimitri Glazkov.

        This patch adds a display of the recently committed patches to
        garden-o-matic.  The UI needs iteration, but this patch establishes the
        plumbing.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
            - Teach trac how to extract more information from the commit log.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
            - Add a data attribute for storing the revision.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
            - Add a container for the recent commit history.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
            - CSS for displaying non-ugly commit history.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
            - Wire up trac to the UI container.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
            - A basic, compact display for a list of commits.

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Fix bug when switching from layout-tests to another test-type if
        ToT webkit.org is the selected group.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        Add back in line accidentally deleted in http://trac.webkit.org/changeset/91612.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-22  Ojan Vafai  <ojan@chromium.org>

        simplify the flakiness dashboard to only show modifiers/expectations for the current builder
        https://bugs.webkit.org/show_bug.cgi?id=65049

        Reviewed by Tony Chang.

        This communicates less information, but probably makes the dashboard more usable.
        Also make it show that bug lines that don't point to bug numbers still
        show up in the bugs column (e.g. BUG_TONY) and stop showing the extra/missing
        columns in any view. The data is still used, but only in the view that updates
        the test_expectations.txt file.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        hook in the rest of the bots to the dashboard now they run NRWT
        https://bugs.webkit.org/show_bug.cgi?id=64985

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/builders.js:

2011-07-22  Alexey Proskuryakov  <ap@apple.com>

        Adding Tim Horton to contributor list for Bugzilla auto-completion. He is CC'ed quite frequently.

        Unreviewed.

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

2011-07-22  Michal Pakula vel Rutka  <m.pakula@samsung.com>

        [EFL] ewk_frame_hit_test_new enchancement
        https://bugs.webkit.org/show_bug.cgi?id=64260

        Apply changes done in ewk_frame_hit_test_new in EWebLauncher:
        Replacing Ewk_Hit_Test_Result_Context structure 'flags'
        in hit test output to by enum 'context'.

        Reviewed by Antonio Gomes.

        * EWebLauncher/main.c:
        (on_key_down):

2011-07-21  Adam Roben  <aroben@apple.com>

        Fix typo in TestFailures

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        simplify gtest display now that we strip modifiers from the JSON
        https://bugs.webkit.org/show_bug.cgi?id=64990

        Reviewed by Adam Barth.

        Now that names are normalized, we can remove all the code that
        handles gtest name changes (e.g. for adding modifiers like DISABLED_).
        Instead, if you try to list a test with a modifier in it, we need
        to strip the modifier so we get the normalized value.

        We also get rid of the concept of extra/missing expectations for gtests.
        In a patch soon, we'll stop showing extra/missing expectations from the UI
        entirely and only leave it for the special updating test_expectations.txt
        view of the dashboard, which doesn't apply to gtests.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Refactor Trac.js for use in garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=64998

        Reviewed by Adam Roben.

        This patch refactors Trac.js to match the architecture and style of
        garden-o-matic.  I've also factored AsynchronousCache out of Trac (and
        moved it to base) because it was redundant with some other code we
        already had.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js:
        (FailingTestsBugForm):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder.start):
        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._domForRegressionRange.trac.getCommitDataForRevisionRange):
        (ViewController.prototype._domForRegressionRange):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        Fix issue throwing a 500 to the bots. We were modifying
        the dictionary during an iteration over it's keys and would get
        RuntimeError: dictionary changed size during iteration

        * TestResultServer/model/jsonresults.py:

2011-07-21  Adam Barth  <abarth@webkit.org>

        ORWT fails to consume some NRWT arguments
        https://bugs.webkit.org/show_bug.cgi?id=64988

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Merge TestFailures and garden-o-matic unit tests harness
        https://bugs.webkit.org/show_bug.cgi?id=64984

        Reviewed by Adam Roben.

        One unit testing framework is better than two.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-more-unittests.html: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Adam Roben.

        Move garden-o-matic files into the same directory as TestFailures to
        make it easier to integrate the codebases.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/checkout_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/config.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/config.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-green.png: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-green.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/favicon-red.png: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-red.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/partytime.gif: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/partytime.gif.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/results_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-more-unittests.html: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js: Copied from Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js.
        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/servers/data/gardeningserver: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-green.png: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-red.png: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/partytime.gif: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js: Removed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js: Removed.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        fix links on the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64832

        Reviewed by Tony Chang.

        Make them actual anchor tags and linkify the test name instead of
        adding an extra link. Also simplify the update view since we now
        show the linkified test name.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:

2011-07-21  Adam Barth  <abarth@webkit.org>

        webkit.org builders should upload results to test-results AppEngine instance
        https://bugs.webkit.org/show_bug.cgi?id=64979

        Reviewed by Adam Roben.

        The master just needs to pass some flags to NRWT.  This patch also lets
        ORWT consume the flags (ignoring them) so we can pass the flags
        unconditionally.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/old-run-webkit-tests:

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        normalize gtest names in the result json
        https://bugs.webkit.org/show_bug.cgi?id=64971

        Reviewed by Eric Seidel.

        This will make the resulting JSON smaller and make the
        flakiness dashboard much more sane (e.g. we won't need to
        show you the FLAKY_ version and the normal version).

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-07-21  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Reenable ORWT for the --leaks bot.
        Something is still wrong with the leaks summarizing
        but I'm about to head out on vacation for 2 weeks,
        so it's best to just revert back to ORWT until I'm back.

        * Scripts/run-webkit-tests:
        (usingLeaks):
        (useNewRunWebKitTests):

2011-07-21  Ojan Vafai  <ojan@chromium.org>

        cleanup jsonresults.py style in preparation for making some changes
        https://bugs.webkit.org/show_bug.cgi?id=64968

        Reviewed by Adam Barth.

        No code changes. Unittest still passes. Mostly just removing
        useless comments and 80 character wrapping.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-07-21  Adam Barth  <abarth@webkit.org>

        Add missing column header.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-21  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just fixing (and unittesting) a previous typo.

        Fix typo in print_leaks_summary regexp which was causing
        leaks summarizing to fail on the --leaks bot.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-07-21  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to rebaseline many tests at once
        https://bugs.webkit.org/show_bug.cgi?id=64963

        Reviewed by Dimitri Glazkov.

        This patch contains some UI for rebaselining tests in bulk.  I don't
        expect this UI to be the final UI, but the underlying infrastructure
        will be useful.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-21  Adam Barth  <abarth@webkit.org>

        garden-o-matic has trouble when the same test fails in different ways on diffrent bots
        https://bugs.webkit.org/show_bug.cgi?id=64830

        Unreviewed.  (Missing the patch is blocking me from fixing the tree.)

        This patch is just some minor bug fixes.  One of the bugs results from
        the sadness of having two representations (a list and a space-separated
        string) for the set of failure types.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-20  Ryosuke Niwa  <rniwa@webkit.org>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Adam Barth.

        The bug was caused by multiple expressions matching on the single output.
        Fixed it by exiting the loop as soon as one expression matches.

        Because the regular expression for 'failures' is most general,
        moved it to the end of the list to avoid it catching other cases.

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

2011-07-20  Chang Shu  <cshu@webkit.org>

        Adding myself to the reviewers list; No review needed.

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

2011-07-20  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests --leaks does not restart DumpRenderTree often enough
        https://bugs.webkit.org/show_bug.cgi?id=64912

        Reviewed by Adam Barth.

        The bug was that set_default_option only works if the option's value
        is "None".  So I fixed --batch-size to default to None instead of 0
        (which kinda makes sense).

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Make kill-old-processes kill httpd on mac
        https://bugs.webkit.org/show_bug.cgi?id=64898

        Reviewed by Adam Barth.

        * BuildSlaveSupport/kill-old-processes:
         - The line endings seem to have flipped again,
           Thus making this diff gigantic.  The only line
           changed is the "httpd" line.  I suspect we'll need
           to set the line ending style from an svn checkout.

2011-07-20  Ojan Vafai  <ojan@chromium.org>

        show a list of average test times in the treemap
        https://bugs.webkit.org/show_bug.cgi?id=64899

        Reviewed by Adam Roben.

        For now, you click a link and it replaces the treemap
        with a reverse sorted list of directories based on
        average test runtime within that directory.

        To cut some of the noise, we don't show directories
        that only have one test in them or where the average
        runtime is less than 100ms.

        * TestResultServer/static-dashboards/treemap.html:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Teach build.webkit.org how to identify leaks in NRWT output
        https://bugs.webkit.org/show_bug.cgi?id=64891

        Reviewed by Adam Barth.

        This was the last remaining piece blocking turning on
        NRWT for the leaks bot, so I did that in this change too.
        If for some reason we see trouble on the bots, I'll
        revert that part of this change.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-webkit-tests:

2011-07-20  Ojan Vafai  <ojan@chromium.org>

        make the treemap display more human friendly
        https://bugs.webkit.org/show_bug.cgi?id=64896

        Reviewed by Tony Chang.

        * TestResultServer/static-dashboards/treemap.html:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Move HttpLock to using a FileSystem object
        https://bugs.webkit.org/show_bug.cgi?id=64885

        Reviewed by Adam Barth.

        I made a typo in my previous change, taking the value
        of read_text_file(pid_file) and setting it to lock_pid_file
        instead of current_pid.  Fixed now. :)

        In order to test my new change I had to overhaul the unittests
        for this class to create a separate set of tests which work off
        of Mock objects instead of the real filesystem.

        Since Executive doesn't yet wrap os.getpid() I added a FIXME
        in several places where we're currently calling os.getpid().  I
        felt adding Executive.getpid was outside of the scope of this change
        but once it exists some of this code will be much simpler to mock.

        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-07-20  Adam Roben  <aroben@apple.com>

        Fix typo in TestFailures's Bugzilla constants

        This was preventing the "Version" field from being pre-filled when filing new bugs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js:

2011-07-20  Eric Seidel  <eric@webkit.org>

        Move HttpLock to using a FileSystem object
        https://bugs.webkit.org/show_bug.cgi?id=64885

        Reviewed by Adam Barth.

        There is no functional change here.  Just moving off
        of direct os.foo calls to their filesystem equivalent.

        This makes it possible to now unittest HttpLock using a
        MockFileSystem instead of needing to talk to the filesystem directly.

        This also will have changed any port test cases which were using a
        mock file system to now have an HttpLock based on a mock filesystem
        instead.  I saw no change in the unittests so it's possible
        we're not testing that configuration (or more likely that it "just works").

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:

2011-07-20  Adam Barth  <abarth@webkit.org>

        NRWT results uses too much space per run
        https://bugs.webkit.org/show_bug.cgi?id=64845

        Reviewed by Ojan Vafai.

        Removing these files saves about 750K per build.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-07-20  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] [NRWT] Xvfb produces a lot of stderr output
        https://bugs.webkit.org/show_bug.cgi?id=64669

        Reviewed by Philippe Normand.

        Redirect the stderr output of the driver's Xvfb process
        to /dev/null to suppress unneeded output.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-07-19  Eric Seidel  <eric@webkit.org>

        parse-malloc-history always exits 1, causing NRWT to fail
        https://bugs.webkit.org/show_bug.cgi?id=64835

        Reviewed by Adam Barth.

        ORWT just never checked the return code. :)

        * Scripts/parse-malloc-history:
        (main):
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-07-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, don't add the debug prefix as 2.9 no longer uses one.

        * waf/build/wxpresets.py:

2011-07-19  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests should only enable MallocStackLogging for DRT
        https://bugs.webkit.org/show_bug.cgi?id=64792

        Reviewed by Adam Barth.

        The previous code would enable it for all servers launched
        by the port, which included Apache, the python websocket server
        as well as ImageDiff.  Now only DumpRenderTree will have
        MallocStackLogging enabled or the GuardMalloc library injected.

        I also cleaned up the websocket_server code to use filesystem
        while I was in it.

        I also made DRT restart every 1000 tests when running with
        --leaks enabled.  I believe this made the --leaks run slightly
        faster, but it still takes over an hour on my machine. :(

        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        remove the concept of platform fallbacks
        https://bugs.webkit.org/show_bug.cgi?id=64829

        Reviewed by Adam Barth.
        
        In the process, wrote tests for this code and fixed a pretty major
        bug (now covered by the test).

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        cleanup some of the PLATFORM logic in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64821

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        cleanup some of the PLATFORM logic in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64821

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Store line number on TestExpectationLine.
        https://bugs.webkit.org/show_bug.cgi?id=64800

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Refactored to store line number on TestExpectationLine instances.

2011-07-19  Ojan Vafai  <ojan@chromium.org>

        fix flakiness dashboard for XP bots with XP in the name instead of WIN
        https://bugs.webkit.org/show_bug.cgi?id=64826

        Reviewed by Mihai Parparita.

        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:

2011-07-19  Cary Clark  <caryclark@google.com>

        add myself to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=64816

        No review needed.

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

2011-07-19  Daniel Bates  <dbates@webkit.org>

        Rename variable isEmptyTextPatch in svn-{apply, unapply}
        https://bugs.webkit.org/show_bug.cgi?id=64648

        Reviewed by Adam Roben.

        Rename the variable isEmptyTextPatch to hasTextChunks, which is
        more descriptive and makes its usage read well in control statements.

        * Scripts/svn-apply:
        (patch):
        * Scripts/svn-unapply:
        (patch):

2011-07-19  Adam Roben  <aroben@apple.com>

        Make TestFailures show existing bugs and a new bug link for flaky tests

        Fixes <http://webkit.org/b/63728> TestFailures page should make it easy to file bugs about
        flaky tests
        and
        <http://webkit.org/b/63830> TestFailures page doesn't show related bugs for possibly-flaky
        tests, but should

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm.js:
        Added. This is what's used to file new bugs about flaky tests.
        (FlakyTestBugForm): Calls up to the base class, stores the arguments, and sets our
        title, description, and URL.

        (FlakyTestBugForm.prototype._createBugDescription):
        (FlakyTestBugForm.prototype._createBugTitle):
        These do what they say.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyTestBugForm_unittests.js:
        Added. Tests of the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (#failure-history > li):
        (#possibly-flaky-tests > li):
        (#failure-history > li, #possibly-flaky-tests > li):
        (#possibly-flaky-tests > li > :first-child):
        (.flakiness-examples-list):
        Styling to account for the new elements.

        (.expandable):
        (.expanded > .expandable):
        Generalized the .flakiness-example-list code to a generic .expandable class. Removed the
        transition properties because we can't transition to/from 'auto' (but really would like
        to!).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Moved code to create the FailingTestsBugForm
        here from _domForNewAndExistingBugs. Updated for changes to _domForPossiblyFlakyTests.
        (ViewController.prototype._domForNewAndExistingBugs): Changed to take a NewBugForm as an
        argument instead of creating one ourselves.
        (ViewController.prototype._domForPossiblyFlakyTests): Changed to take all analyzed builds as
        an argument instead of just the number of analyzed builds. Put the examples list inside a
        container <div>, which is also used to hold the new/existing bugs UI. Removed code to deal
        with animating the height of the examples list; we don't do this anymore because it's hard
        to make it work correctly with the asynchronous loading of existing bugs. When we populate
        the examples list, also set up the new/existing bug UI.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        FlakyTestBugForm.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Pull in FlakyTestBugForm and its tests.

2011-07-19  Ryosuke Niwa  <rniwa@webkit.org>

        Buildbot marks a nrwt bot red when tests are missing results
        https://bugs.webkit.org/show_bug.cgi?id=64812

        Reviewed by Tony Chang.

        Added "missing results" label for tests that are missing results.

        buildbot Now reports shows a label "X missing results" on a run when X tests were missing
        expected results on that run.

        Also rephrased "X failed" and "X were flaky" to "X failures" and "X flakes".

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

2011-07-19  Adam Roben  <aroben@apple.com>

        Extract some of FailingTestsBugForm's code into a base class

        Prep work for fixing <http://webkit.org/b/63728> TestFailures page should make it easy to
        file bugs about flaky tests

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js:
        Moved BugzillaConstants to new WebKitBugzilla file. Moved a bunch of other code from here to
        TestRelatedBugForm.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js:
        Moved some tests to TestRelatedBugForm_unittests.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm.js: Added.
        (TestRelatedBugForm):
        (TestRelatedBugForm.prototype.domElement):
        (TestRelatedBugForm.prototype._computeOperatingSystem):
        (TestRelatedBugForm.prototype._computePlatform):
        Code came from FailingTestsBugForm.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestRelatedBugForm_unittests.js:
        Added. Tests came from FailingTestsBugForm_unittests.js

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBugzilla.js:
        Added. Code came from FailingTestsBugForm.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        TestRelatedBugForm.js and WebKitBugzilla.js. Moved Bugzilla.js out of the list of files that
        need to be pulled in early for parsing reasons.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Pull in TestRelatedBugForm and tests and WebKitBugzilla.

2011-07-19  Sam Weinig  <sam@webkit.org>

        Remove obsolete Mac NRWT test bots
        https://bugs.webkit.org/show_bug.cgi?id=64806

        Reviewed by Adam Roben.

        Remove "Leopard Intel Release (NRWT)" and "SnowLeopard Intel Release (NRWT)"
        which have been disconnected for some time and have been obsoleted by
        the main testers using NRWT.

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

2011-07-19  Sam Weinig  <sam@webkit.org>

        webkit-patch rebaseline crashes on use
        https://bugs.webkit.org/show_bug.cgi?id=64775

        Reviewed by Adam Roben.

        Fix incorrectly spelled attribute name.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        The attribute is test_name, not filename.

        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        Add test for tests_matching_failure_types.

2011-07-18  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests should support --leaks
        https://bugs.webkit.org/show_bug.cgi?id=63832

        Reviewed by Dirk Pranke.

        This may not be sufficient to actually transition over the leaks bot,
        but this is a huge step in the right direction.

        I had to make parse-malloc-history understand being passed more than
        one file (to avoid the silly cat | nonsense in old-run-webkit-tests).

        I removed some dead code relating to previous iterations of our crash detection.

        I created a new class "LeakDetector" to encapsulate all this logic.
        Eventually we should consider pulling that class out of mac.py and
        sharing with other ports.  However given that ORWT has had
        --leaks support on Mac for almost 7 years and no other port has added
        it, leaves me to believe we're in no rush to move LeakDetector.

        I've tested --leaks locally.  I suspect there are more bugs to shake out
        but it seems to work well enough to start.

        I also added support for --guard-malloc, but have not tested it much.  It
        should be viewed as experimental at this time.

        I also fixed various os.path uses to self._filesystem as I was reading
        through the various files to understand how best to fix this bug.

        * Scripts/old-run-webkit-tests:
        (parseLeaksandPrintUniqueLeaks):
        * Scripts/parse-malloc-history:
        (main):
        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-19  Adam Barth  <abarth@webkit.org>

        garden-o-matic should have a "Triage Failures" button for iterating over failures
        https://bugs.webkit.org/show_bug.cgi?id=64769

        Reviewed by Eric Seidel.

        This patch adds some global static state and refactors things a bit so
        that we can iterate over all the failures in the details pane.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
            - Add a generic callback iterator to iterate through a series of
              callbacks. We use this to iterate through the failures we want to
              display the details of.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add a toolbar for the results summary and change the buttons to
              be real buttons.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
            - Make the detail pane 75% of the window.
            - Make the buttons pretty.
            - Allow the failure type badges to apply to the details pane as well.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Restructure how we bring up the details pane so we can iterate
              through a bunch of failures.
            - Remove the transition between results details because it's
              annoying when you want to click through a bunch of failures.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
            - Add some more structure to the title bar for the results details
              so it's clearer which results we're currently displaying.

2011-07-19  Adam Barth  <abarth@webkit.org>

        garden-o-matic should live update as conditions change on the buildbot
        https://bugs.webkit.org/show_bug.cgi?id=64646

        Reviewed by Eric Seidel.

        This patch causes the garden-o-matic display to update every 10 minutes
        to show the latest failures.  This patch required a moderately large
        refactoring of main.js to make the display incremental instead of
        all-at-once.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-18  Tab Atkins  <jackalmage@gmail.com>

        Tab Atkins is not in committers.py (as a non-committer)
        https://bugs.webkit.org/show_bug.cgi?id=64770

        Reviewed by Eric Seidel.

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

2011-07-18  Ojan Vafai  <ojan@chromium.org>

        Load ToT chromium bots by default in the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=64756

        Reviewed by Adam Barth.

        For now, these are the most useful bots to look at. Eventually,
        we may want to load the build.webkit.org bots by default once
        most of the bots there upload results.

        * TestResultServer/static-dashboards/dashboard_base.js:

2011-07-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Focus and selection events are not fired when a <select>'s selection
        changes
        https://bugs.webkit.org/show_bug.cgi?id=64504
        <rdar://problem/9319881>

        Reviewed by Alice Liu.

        * DumpRenderTree/AccessibilityController.h:
        Added m_notificationsEventHook for addNotificationListener().
        m_allEventsHook will now be used for setLogAccessibilityEvents().

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize m_notificationsEventHook.
        (AccessibilityController::~AccessibilityController):
        Turn off logging of all accessibility events. If
        m_notificationsEventHook is non-null, unhook it.
        (logEventProc):
        Add handling of EVENT_OBJECT_SELECTION.
        (AccessibilityController::setLogAccessibilityEvents):
        If the state of logging is not changing, return early. If we're turning
        off logging, unhook m_allEventsHook, and zero it out. Otherwise, add a
        hook for all events.
        (AccessibilityController::addNotificationListener):
        Use m_notificationsEventHook rather than m_allEventsHook.

2011-07-18  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-attachment does not work when not called from the root of the checkout
        https://bugs.webkit.org/show_bug.cgi?id=64751

        Unreviewed.  Just updating unit test results after bug 64751.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-07-18  Adam Barth  <abarth@webkit.org>

        simplejson has trouble on chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=64757

        Reviewed by Eric Seidel.

        Use the native JSON, if available.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-07-18  Ojan Vafai  <ojan@chromium.org>

        update the flakiness dashboard to understand the new platforms/formats in test_expectations
        https://bugs.webkit.org/show_bug.cgi?id=64743

        Reviewed by Adam Barth.

        The test expectations format changed a long time ago and the flakiness dashboard
        was never updated to match.

        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:

2011-07-18  Eric Seidel  <eric@webkit.org>

        webkit-patch apply-attachment does not work when not called from the root of the checkout
        https://bugs.webkit.org/show_bug.cgi?id=64751

        Reviewed by Adam Barth.

        Last week I removed a os.chdir in EnsureWorkingDirectoryClean, which
        is a step that we run for most commands (as one of the earliest steps).
        EnsureWorkingDirectoryClean was incorrectly calling os.chdir to change
        the CWD to the checkout root.  This magically made a bunch of otherwise
        wrong code work.

        When I realized that apply-attachment no longer worked as expected today,
        I went and fixed the bug, then realizing that we were not testing
        what the cwd was when running various commands.  I fixed our MockExecutive
        to always log what the cwd is and fixed a whole bunch of places
        where we needed to be setting the cwd.

        Hopefully this will solve our cwd problems once and for-all, and webkit-patch
        will again correctly work when called from any directory (including outside
        of a webkit checkout).

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/update.py:

2011-07-18  Adam Barth  <abarth@webkit.org>

        Increase information garden-o-matic information density by switching to a table
        https://bugs.webkit.org/show_bug.cgi?id=64642

        Reviewed by Dimitri Glazkov.

        The old layout couldn't handle the large number of failures we had
        today.  This patch switches garden-o-matic to a table-based layout,
        which can handle many more failures gracefully.  (I expect we'll need
        more UI iterations.)

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-18  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to determine when compile breaks
        https://bugs.webkit.org/show_bug.cgi?id=64190

        Reviewed by Dimitri Glazkov.

        This patch adds a red-ish box to the top of the page whenever there is
        a compile error on the bots.  The box automatically opens and closes as
        appropriate and links to the waterfall display.  In the future, we
        might want to compute a regression range.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
            - Add the build-only bots to the config.  We use these to check
              whether the build failed, which is faster than waiting for the
              tester bots to cycle.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add DOM for the alert bar.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
            - CSS to support the alert bar.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Wiring up events to poll the buildbot to see whether compile has
              failed.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Infrastructure for fetching and parsing the buildbot status JSON
              blob.  This code could be better factored for testability.  :(
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
            - UI for displaying compile errors.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91132 and r91135.
        http://trac.webkit.org/changeset/91132
        http://trac.webkit.org/changeset/91135
        https://bugs.webkit.org/show_bug.cgi?id=64681

        Broke GTK and Chromium debug bots (Requested by rniwa on
        #webkit).

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (logEventProc):
        (AccessibilityController::setLogAccessibilityEvents):
        (AccessibilityController::addNotificationListener):

2011-07-17  Philippe Normand  <pnormand@igalia.com>

        test-webkitpy failing with Python 2.5
        https://bugs.webkit.org/show_bug.cgi?id=64594

        Reviewed by Eric Seidel.

        Updated simplejson to version 2.1.6 that fixes an issue when
        dumping slashes. Also use cgi.parse_qs instead of the urlparse
        version to be compatible with Python2.5. Verified the fix with
        test-webkitpy on python 2.5 and python 2.6.

        * Scripts/webkitpy/thirdparty/simplejson/README.txt:
        * Scripts/webkitpy/thirdparty/simplejson/__init__.py:
        * Scripts/webkitpy/thirdparty/simplejson/_speedups.c:
        (json_PyOS_string_to_double):
        (_convertPyInt_AsSsize_t):
        (_convertPyInt_FromSsize_t):
        (ascii_escape_char):
        (ascii_escape_unicode):
        (ascii_escape_str):
        (raise_errmsg):
        (join_list_unicode):
        (join_list_string):
        (_build_rval_index_tuple):
        (scanstring_str):
        (scanstring_unicode):
        (py_scanstring):
        (py_encode_basestring_ascii):
        (scanner_dealloc):
        (scanner_traverse):
        (scanner_clear):
        (_parse_object_str):
        (_parse_object_unicode):
        (_parse_array_str):
        (_parse_array_unicode):
        (_parse_constant):
        (_match_number_str):
        (_match_number_unicode):
        (scan_once_str):
        (scan_once_unicode):
        (scanner_call):
        (scanner_new):
        (scanner_init):
        (encoder_new):
        (encoder_init):
        (encoder_call):
        (_encoded_const):
        (encoder_encode_float):
        (encoder_encode_string):
        (_steal_list_append):
        (encoder_listencode_obj):
        (encoder_listencode_dict):
        (encoder_listencode_list):
        (encoder_dealloc):
        (encoder_traverse):
        (encoder_clear):
        (init_speedups):
        * Scripts/webkitpy/thirdparty/simplejson/decoder.py:
        * Scripts/webkitpy/thirdparty/simplejson/encoder.py:
        * Scripts/webkitpy/thirdparty/simplejson/ordered_dict.py: Added.
        * Scripts/webkitpy/thirdparty/simplejson/scanner.py:
        * Scripts/webkitpy/thirdparty/simplejson/tool.py: Added.
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Rename ModifierMatcher to SpecificityCalculator.
        https://bugs.webkit.org/show_bug.cgi?id=64660

        It's a little longer than before, but it is much clearer.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Renamed and adjusted
            all callsites, also rewrote the comments.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Adjusted callsites
            and renamed tests.

2011-07-15  Adam Barth  <abarth@webkit.org>

        gardening server should proxy buildbot status for garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=64588

        Reviewed by Eric Seidel.

        This information will be used to detect build breaks.  I took this
        opportunity to make ChromiumBuildBot non-static.

        * Scripts/webkitpy/common/host.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:

2011-07-15  Julien Chaffraix  <jchaffraix@webkit.org>

        [NRWT] Add support for --no-http
        https://bugs.webkit.org/show_bug.cgi?id=64564

        Reviewed by Dirk Pranke.

        Added support for --no-http, which disables both HTTP and websockets tests.
        It also matches the old-run-webkit-tests behavior if --force is used.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        Fixed HTTP_SUBDIR and WEBSOCKET_SUBDIR as tests do not start with a leading separator.
        We check if --no-http is set and add the HTTP / websockets tests to the skipped list prior to looking
        at the expectation file. Fixed the  _test_requires_lock function to use the same code path to determine
        what is worth have an HTTP lock as --no-http to avoid badness.

        * Scripts/webkitpy/layout_tests/port/test.py: Added 2 new tests to our mock filesystem to validate that
        we do skip properly HTTP / websocket tests inside platform/.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        Added tests that we properly skip all the tests.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        Added checks for the command line arguments.

2011-07-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Focus and selection events are not fired when a <select>'s selection
        changes
        https://bugs.webkit.org/show_bug.cgi?id=64504
        <rdar://problem/9319881>

        Reviewed by Alice Liu.

        * DumpRenderTree/AccessibilityController.h:
        Added m_notificationsEventHook for addNotificationListener().
        m_allEventsHook will now be used for setLogAccessibilityEvents().

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize m_notificationsEventHook.
        (AccessibilityController::~AccessibilityController):
        Turn off logging of all accessibility events. If
        m_notificationsEventHook is non-null, unhook it.
        (logEventProc):
        Add handling of EVENT_OBJECT_SELECTION.
        (AccessibilityController::setLogAccessibilityEvents):
        If the state of logging is not changing, return early. If we're turning
        off logging, unhook m_allEventsHook, and zero it out. Otherwise, add a
        hook for all events.
        (AccessibilityController::addNotificationListener):
        Use m_notificationsEventHook rather than m_allEventsHook.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Refactor TestExpectationModel to use TestExpectationLine as data item.
        https://bugs.webkit.org/show_bug.cgi?id=64635

        This is a bit largish in scope. Does the following things:

        1) Adds "path" member to TestExpectationLine to hold normalized path to test, computed at parsing,
           and changes code that used Port.normalize_test_name to rely on TestExpectationLine.path. As a result, TestExpectationModel no longer
           needs to have any port knowledge.

        2) Adds "create_passing_expectation" class method to TestExpectationLine to generate a pristine passing expectation out of a test name,
           and changes TestExpectations._process_tests_without_expectations to use it, thus eliminating the need for a special API entry point.
           Now all expectations are added to the model in the same way!

        3) Changes TestExpectationModel's main test index to store a tuple consisting of line number and TestExpectationLine instance.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Refactored code.

2011-07-15  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to detect interrupted build steps

        Fixes <http://webkit.org/b/64619> TestFailures page thinks all tests passed in
        http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20(WebKit2%20Tests)/builds/13401

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): If the build step has a result code of 4, the
        build step was interrupted. Treat it as an error (by returning a failureCount of -1).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a test for the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version to evict old, buggy
        cache data that was afflicted by the above bug.

2011-07-15  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests crashes on Apple's Windows port when trying to launch Apache
        https://bugs.webkit.org/show_bug.cgi?id=64533

        Reviewed by Adam Roben.

        Blind removal of Chromium-specific code (now that Chromium does not use this file).

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:

2011-07-15  Adam Roben  <aroben@apple.com>

        Make TestFailures's list of possibly-flaky tests not so tall

        Fixes <http://webkit.org/b/64618> TestFailures page's list of flaky tests takes up way too
        much room

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        Removed a no-longer-used .flakiness-example-separator selector.

        (#failure-history > li):
        (#possibly-flaky-tests > li):
        (#failure-history > li, #possibly-flaky-tests > li):
        Use a lot less padding for the possibly-flaky tests.

2011-07-15  Tony Chang  <tony@chromium.org>

        [chromium] land linux selection color layout test
        https://bugs.webkit.org/show_bug.cgi?id=64631

        Reviewed by Ojan Vafai.

        I had removed this code in r76620 because I thought it wasn't used.
        Turns out there was a layout test in the chromium tree that never
        got migrated that used it.  Re-add the code and land the layout
        test (I will remove it from the chromium tree soon).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::forceRedSelectionColors):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Revert http://trac.webkit.org/changeset/91091, since Python 2.5
        does not support enumerate() start argument.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Reverted.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Clean up test_expectations.py after refactorings.
        https://bugs.webkit.org/show_bug.cgi?id=64620

        * Renamed all variables holding TestExpectationLine to expectation_line to avoid confusion with
          its sub-part, the actual expectation.
        * Renamed all references to options to modifier to eliminate dual terminology.
        * Made a bunch of parser constants and changed all callsites to use them.
        * Various other minor clean-ups.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Cleaned up stuff.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed callsites after cleanup.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Ditto.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Move expectation parsing code to TestExpectationParser.
        https://bugs.webkit.org/show_bug.cgi?id=64605

        This is a somewhat mechanical move, with two interesting bits:
        
        1) TestExpectationParser.parse methods renamed to tokenize, to better
        reflect what they do

        2) TestExpectationLine now carries all of its info, from tokens to parsed data,
        and even the list of tests that it matches (a line may refer to more than one test).

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Moved parsing-related TestExpectaions methods
            to TestExpectationParser, added more members to TestExpectationLine to carry parsed info, renamed existing parse methods
            to "tokenize", changed callsites to use new code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed unit tests to reflect renames.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Switch to use Python enumerate function to enumerate line numbers.
        https://bugs.webkit.org/show_bug.cgi?id=64602

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Changed to use enumerate.

2011-07-15  Martin Robinson  <mrobinson@igalia.com>

        Build fixes for WebKit2. Ensure that all generated sources are
        on nodist primaries, that they are on forward declared variables
        so that BUILT_SOURCES is calculated properly and that zlib is 
        included during linking (for WOFF support).

        * WebKitTestRunner/GNUmakefile.am:

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Store error and warning information on TestExpectationLine.
        https://bugs.webkit.org/show_bug.cgi?id=64565

        Keeping errors and warnings on the TestExpectationLine instance allows us to decouple storing errors
        from various parsing and validation mechanisms and have more flexibility in reporting and understanding the origin of the errors.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added TestExpectationLine.warnings list to keep track of non-fatal errors,
            converted the code to add errors and warnings to corresponding TestExpectationLine instances, removed the code that used to store
            this info on TestExpectations. In the process, had to refactor ModifierMatcher a bit to take in a TestExpdectationLine instance.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed ModifierMatcher callsite.

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Plumb the use of TestExpectationLine deeper, clean up.
        https://bugs.webkit.org/show_bug.cgi?id=64559

        Instead of carrying various bits of TestExpectationLine, plumb it down to its consumers,
        also cleaning up names and remove an unused TestExpectations._get_options_list member.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:

2011-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove the notion of TestExpectationLine.valid, start storing parsing errors in expectations themselves.
        https://bugs.webkit.org/show_bug.cgi?id=64554

        This moves us toward the world where errors are collected on the expectations, which allows us to
        easily enumerate them, keep association with the point of origin, and freely pass TestExpectationLine instances around.

        Also eliminate the validator idea, since validation is a context-dependent concept and has to be decoupled from initial
        parsing.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Removed TestExpectation.valid, validator,
            changed TestExpectationParser to collect errors in TestExpectationLine, refactored surrounding code.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Changed tests to accommodate changes.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Ditto.

2011-07-15  Adam Roben  <aroben@apple.com>

        Rename TestFailureBugForm to FailingTestsBugForm

        The new name will match better with a forthcoming FlakyTestBugForm class.

        Fixes <http://webkit.org/b/64598> TestFailures page's TestFailureBugForm class has a bad
        name

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm.js: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FailingTestsBugForm_unittests.js: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm_unittests.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Updated for renames.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Ditto, and
        reordered <script>s to put files which others depend on for parsing first.

2011-07-15  Adam Barth  <abarth@webkit.org>

        NRWT stores the Chromium revision number in full_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64586

        I have no earthly idea how to test this change.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-07-14  Ojan Vafai  <ojan@chromium.org>

        fix remaining style issues in the static-dashboards directory
        https://bugs.webkit.org/show_bug.cgi?id=64561

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2011-07-14  Yuta Kitamura  <yutak@chromium.org>

        WebSocket: Introduce pywebsocket-0.6b2
        https://bugs.webkit.org/show_bug.cgi?id=64534

        Reviewed by Kent Tamura.

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-07-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce TestExpectationsModel, split out of TestExpectations.
        https://bugs.webkit.org/show_bug.cgi?id=64531

        This is a simple split-and-make-work refactoring, a first step among many.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Moved all model-related members
            out of TestExpectations and into TestExpectationsModel.

2011-07-14  Eric Seidel  <eric@webkit.org>

        Move webkitpy off of loose mocks
        https://bugs.webkit.org/show_bug.cgi?id=64508

        Unreviewed.  Fixing a test which fails under test-webkitpy --all (but not in a normal run).

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-14  Adam Barth  <abarth@webkit.org>

        garden-o-matic should have a "rebaseline" button
        https://bugs.webkit.org/show_bug.cgi?id=64446

        Reviewed by Ojan Vafai.

        This patch adds a basic Rebaseline button that copies the baselines
        displayed in the results pane into the appropriate directory in your
        working copy.

        There are two main limitations:

        1) There is no UI for actually committing the baselines.

        2) The baselines are not optimized for redundancy (meaning you can have
           identical baselines in both chromium-mac and chromium-win).

        * Scripts/webkitpy/tool/commands/rebaseline.py:
            - Turns out we need to create the directory for the baseline if it doesn't exist yet.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js:
            - Add an programatic API to call the server.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add the rebaseline button itself.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
            - Change the CSS so that the Rebaseline and Close buttons can
              appear in the normal order in the DOM.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Bind the event and translate the parameters.
            - Hide/show the rebaseline button, as appropriate.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Add some helpful utility functions for manipulating failure types.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:

2011-07-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: webkit-patch roll-chromium-deps is broken
        https://bugs.webkit.org/show_bug.cgi?id=64568

        Reviewed by Dirk Pranke

        Use _filesystem.join.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittests.py:

2011-07-14  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Adding myself to the reviewers list; No review needed.

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

2011-07-14  Adam Roben  <aroben@apple.com>

        Don't use Element.prototype.classList in TestFailures

        Safari 5 doesn't support it.

        Fixes <http://webkit.org/b/64550> Can't expand flaky tests on TestFailures page in Safari 5

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (Element.prototype.hasStyleClass):
        (Element.prototype.addStyleClass):
        (Element.prototype.removeStyleClass):
        (Element.prototype.toggleStyleClass):
        Added these helper functions which simulate classList functionality.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities_unittests.js:
        Added. Tests for the above.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForPossiblyFlakyTests): Changed to use
        toggleStyleClass/hasStyleClass instead of classList.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Added Utilities_unittests.js, and reordered the tested files to be in
        roughly dependency order (i.e., the lowest-level files are imported
        and tested first).

2011-07-14  Eric Seidel  <eric@webkit.org>

        NRWT doesn't store the svn revision in full_results.json on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=64492

        Unreviewed.  Just fixing my test-webkitpy regression.

        Fix the unit tests.  Unfortunately scm does not use a filesystem
        object so we can't control the result of detect_scm_system.
        When detect_scm_system would fail, we would log, which would
        cause all passing_run integration tests to fail.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-14  Eric Seidel  <eric@webkit.org>

        NRWT doesn't store the svn revision in full_results.json on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=64492

        Reviewed by Ojan Vafai.

        This should fix the bug.  Unfortunately this code is currently
        impossible to test since it's impossible to mock detect_scm_system at the
        moment.  I started re-writing scm.detection.py to be mockable, but decided that
        was best left for another day.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-07-14  Ojan Vafai  <ojan@chromium.org>

        fix coding style of dashboard_base.js
        https://bugs.webkit.org/show_bug.cgi?id=64545

        Reviewed by Adam Roben.

        The code changes to the files other than dashboard_base.js
        are just fallout from renaming globals in dashboard_base.js.

        * TestResultServer/static-dashboards/aggregate_results.html:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js:
        * TestResultServer/static-dashboards/timeline_explorer.html:
        * TestResultServer/static-dashboards/treemap.html:

2011-07-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r90953.

        * WebKitTestRunner/GNUmakefile.am:

2011-07-14  Adam Barth  <abarth@webkit.org>

        garden-o-matic results pane should be more discoverable
        https://bugs.webkit.org/show_bug.cgi?id=64513

        Reviewed by Eric Seidel.

        This patch causes us to trigger the results pane on mouse clicks
        instead of mousein.  Also, handle the case of no results details more
        elegantly.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Change the binding to "click".
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Handle the "no results URLs" case explicitly instead of never
              calling the callback.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
            - Show a message when there are no result details to show.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-14  Adam Barth  <abarth@webkit.org>

        garden-o-matic should badge TIMEOUT failures
        https://bugs.webkit.org/show_bug.cgi?id=64435

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        (.regression .what a[draggable].TIMEOUT::before):
            - Add TIMEOUT.

2011-07-14  Adam Barth  <abarth@webkit.org>

        Fix Python exception blocking the commit-queue.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-07-13  Eric Seidel  <eric@webkit.org>

        Move webkitpy off of loose mocks
        https://bugs.webkit.org/show_bug.cgi?id=64508

        Reviewed by Adam Barth.

        Using Mock has caused us more pain than help.
        It's possible that there was a cleaner way to use it
        (maybe Mock(class) instead of inheriting from it?).
        But for now, I've removed all uses of Mock from mocktool.py.

        I also moved run_command into the only 3 files which call it
        instead of leaving the deprecated method in executive.py.

        I changed various direct calls to os.* to use filesystem instead.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py:
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:

2011-07-13  Eric Seidel  <eric@webkit.org>

        NRWT doesn't store the svn revision in full_results.json on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=64492

        Reviewed by Adam Barth.

        Add a warning message in the revision='' case to help us diagnose
        what's going wrong on the bot.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:

2011-07-13  Dirk Pranke  <dpranke@chromium.org>

        new-run-webkit-tests: print baseline search path as part of config output
        https://bugs.webkit.org/show_bug.cgi?id=64499

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-07-13  Adam Barth  <abarth@webkit.org>

        gardening server should have an API for parsing changelogs
        https://bugs.webkit.org/show_bug.cgi?id=64495

        Reviewed by Eric Seidel.

        This patch exposes much of the same information from CommitInfo in a
        dictionary form, which is easier to send over-the-wire as JSON to the
        frontend.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-13  Eric Seidel  <eric@webkit.org>

        REGRESSION: GitTestWithMock.test_create_patch fails
        https://bugs.webkit.org/show_bug.cgi?id=62945

        Reviewed by Daniel Bates.

        I was not able to reproduce the exact failure seen in the bug,
        however this test was failing on my machine for other reasons.

        I went through and did an audit of our run_command usage, it's
        entirely in scm classes after this change.  (Not surprising given
        that scm.py was the second file ever created in webkit.py.)

        The real bug I'm fixing here is that we were setting executive.should_log
        when the value had changed to executive._should_log.  Now we set the right one
        and the test works again.

        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-07-13  Ilya Sherman  <isherman@chromium.org>

        Fix WTF header guard style check
        https://bugs.webkit.org/show_bug.cgi?id=64488

        Reviewed by David Levin.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Verify that we don't *always* suggest "WTF_" as a prefix

2011-07-13  Ojan Vafai  <ojan@chromium.org>

        bring flakiness_dashboard.html closer to webkit style
        https://bugs.webkit.org/show_bug.cgi?id=64477

        Reviewed by Adam Barth.

        * TestResultServer/static-dashboards/dashboard_base.js:
        Fix bad variable name that would hit only when running the tests.
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        No code/logic changes. All moving/removing brackets, indents and moving things
        to one line.

2011-07-13  Xan Lopez  <xlopez@igalia.com>

        [GTK] Fix distcheck

        Reviewed by Martin Robinson.

        * WebKitTestRunner/GNUmakefile.am: mark built sources as nodist.

2011-07-13  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed fix. Add a "\n" to a printf that somehow got lost.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpApplicationCacheQuota):

2011-07-13  Joseph Pecoraro  <joepeck@webkit.org>

        ApplicationCache Quota Output is Flakey
        https://bugs.webkit.org/show_bug.cgi?id=64410

        Reviewed by Alexey Proskuryakov.

        Unify the delegate logging for reaching application cache
        quotas. Truncate the space needed to the nearest 10000
        for less flakey test output. This also better supports
        printing NSUInteger on non-64 bit systems by casting to
        an unsigned long.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:totalSpaceNeeded:]):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpApplicationCacheQuota):

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove unused TestExpectations._overrides.
        https://bugs.webkit.org/show_bug.cgi?id=64470

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Removed unused member.

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Introduce TestExpectationSerializer.list_to_string.
        https://bugs.webkit.org/show_bug.cgi?id=64462

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Added list_to_string and change the relevant callsite to use it.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Added tests for it.

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Consolidate expectations parsing code.
        https://bugs.webkit.org/show_bug.cgi?id=64460

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Folded TestExpectationParser._split_expectation_string into TestExpectationParser.parse.

2011-07-12  Brent Fulgham  <bfulgham@webkit.org>

        Standardize WinCairo conditionalized code under PLATFORM macro.
        https://bugs.webkit.org/show_bug.cgi?id=64377

        Reviewed by Maciej Stachowiak.

        Update compile-time conditions that had previously used #ifdef
        of WIN_CAIRO to consistently use PLATFORM(WIN_CAIRO).

        * DumpRenderTree/config.h: Switch to PLATFORM(WIN_CAIRO)
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Remove redundant
          define of WIN_CAIRO=1.
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops: Add
          WinCairo.vsprops to set (to match Release build).

2011-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Eliminate TestExpectationsFile.
        https://bugs.webkit.org/show_bug.cgi?id=64458

        Turns out, we can just use a Python list.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Folded TestExpectationsFile.append into TestExpectationParser.parse_list,
            removed TestExpectationsFile.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Moved tests to better reflect new names, removed iterator test,
            since there's no more custom iterator machinery.

2011-07-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, added my other email addresses.

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

2011-07-13  Adam Barth  <abarth@webkit.org>

        Folks should only be listed once.

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

2011-07-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, adding myself as Reviewer.

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

2011-07-13  Adam Barth  <abarth@webkit.org>

        Fix flickering bug introduced by my previous patch.  I forgot to change
        the name of the class everywhere.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:

2011-07-12  Philippe Normand  <pnormand@igalia.com>

        [GTK] media/media-blocked-by-willsendrequest.html fails
        https://bugs.webkit.org/show_bug.cgi?id=63699

        Reviewed by Martin Robinson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): Abort the request if explicitely asked
        by the LayoutTestController's willSendRequestReturnsNull() function.

2011-07-13  Adam Barth  <abarth@webkit.org>

        Remove "Dismiss" button from garden-o-matic butterbar
        https://bugs.webkit.org/show_bug.cgi?id=64443

        Reviewed by Dimitri Glazkov.

        We don't have any persistent butter bar messages yet, so the dismiss
        button is premature (and fairly heavy, visually).

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:

2011-07-13  Adam Barth  <abarth@webkit.org>

        Refine garden-o-matic status pane
        https://bugs.webkit.org/show_bug.cgi?id=64442

        Reviewed by Dimitri Glazkov.

        This patch makes two improvements to the status pane:

        1) We only query the server for failure types that we're expecting.
           This dramatically reduces the number of HTTP requests, making
           loading the status pane faster.

        2) The status pane now displays which test and which builder it is
           showing results for.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-13  Adam Barth  <abarth@webkit.org>

        garden-o-matic should show test results
        https://bugs.webkit.org/show_bug.cgi?id=64440

        Reviewed by Adam Roben.

        This patch introduces the results detail pane, which appears at the
        bottom of the window and contains test results from the bots.
        Currently, you can activate the pane by mousing over one of the builder
        names associated with a failing test.

        This is just a first iteration of the UI.  There's no way to resize or
        zoom in on elements of the details pane, and images likely aren't sized
        correctly, but it's a place to start.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
            - Add constants for our data attributes so we don't typo them!
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
            - Add DOM structure for the details pane.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
            - Bind events for showing and hiding the details pane.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
            - Reduce the number of result types that we query for to avoid
              overfilling the details pane.  We'll probably need another
              solution here in the long-term.  For example, we could use tabs
              to pack more results into the pane.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
            - Now that we're using the config package during testing, we need
              to include it in the testing HTML.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
            - Change the DOM structure of the results detail to make it fit
              nicely in the details pane (rather than flowing freely in the
              body, as it did before).

2011-07-13  Adam Roben  <aroben@apple.com>

        Make TestFailures show every time a possibly-flaky test failed, but hide it by default

        It's useful to be able to see every time a flaky test failed to see whether it failed the
        same way every time. But doing so takes a lot of space, so the list of failures is now
        collapsed by default and can be revealed using a disclosure triangle.

        Fixes <http://webkit.org/b/64455> TestFailures page doesn't show as much information for
        flaky tests as I would like, even though the page is already so long

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector.prototype.allFailures): Replaced flakinessExamples with this
        function. Now returns all failures for the given test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector_unittests.js:
        Added. This just contains some simple tests of the FlakyLayoutTestDetector class. We'll add
        more over time.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Updated the documentation comment to reflect
        that we no longer return passing builds for possibly-flaky tests.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.existing-bugs-list, .suspect-revisions-list, .flakiness-examples-list): Make the list of
        flakiness examples small, too, since it can get quite long.

        (.disclosure-triangle):
        (.expanded > .disclosure-triangle):
        Simple styles for the disclosure triangle.

        (.flakiness-examples-list): Collapse the list by default.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Pass the total number of builds analyzed to
        _domForPossiblyFlakyTests.
        (ViewController.prototype._domForPossiblyFlakyTests): Put a disclosure triangle to the left
        of each test name, and the number of failures to the right. When the disclosure triangle is
        clicked for the first time, we build up the list of failures and expand the element. After
        that we just collapse or expand the element on subsequent clicks.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Pulled in new tests.

2011-07-13  Adam Roben  <aroben@apple.com>
        
        Teach TestFailures to understand NRWT's output when it exits early due to too many failures

        Fixes <http://webkit.org/b/64456> TestFailures page reports way too many failures when NRWT
        exits early

        Reviewed by Dimitri Glazkov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Relaxed the "Exiting early" test not to require
        it to be at the beginning of the line, since NRWT prints a bunch of junk earlier in the
        line. Tightened up the regex that's used to parse the number of failing tests to require the
        leading number to be followed by whitespace so that we won't parse the "2011" in
        "2011-07-13" as a number of failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a test for the above.

2011-07-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Extract model-like TestExpectationLine and TestExpectationFile from TestExpectations.
        https://bugs.webkit.org/show_bug.cgi?id=64386

        This is the first step in converting TestExpectations to a real model.
        * TestExpectationsLine represents a line in the test_expectations.txt file, and
        * TestExpectationsFile represents the file, which is a collection of lines.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2011-07-13  Xan Lopez  <xlopez@igalia.com>

        [GTK] Do not grab focus too early in DRT.

        Reviewed by Gustavo Noronha.

        It causes a layout to happen and a progress signal to be emitted
        since r90900, but at this point we don't have a
        LayoutTestController object and we'll eventually crash. Since we
        already grab focus at the beginning of runTest() this is
        redundant, so get rid of it to fix the crash.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (main): remove call to grab_focus

2011-07-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90893 and r90894.
        http://trac.webkit.org/changeset/90893
        http://trac.webkit.org/changeset/90894
        https://bugs.webkit.org/show_bug.cgi?id=64441

        NRWT still doesn't work on qt-mac platform (Requested by Ossy
        on #webkit).

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] NRWT should pick up the right httpd config file
        https://bugs.webkit.org/show_bug.cgi?id=64086

        * Scripts/run-webkit-tests: Enable NRWT on qt-mac platform after r90810.
        (useNewRunWebKitTests):

2011-07-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:totalSpaceNeeded:]):
        Cast the NSUInteger value to unsigned long to match the format specifier.

2011-07-12  Adam Barth  <abarth@webkit.org>

        Improve garden-o-matic UI when the bots fail to report revision numbers
        https://bugs.webkit.org/show_bug.cgi?id=64427

        Reviewed by Dimitri Glazkov.

        At least Win (dbg)(2) seems to fail to report the SVN revision number
        in full_results.json.  This patch makes garden-o-matic more robust to
        missing revision numbers.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-12  Adam Barth  <abarth@webkit.org>

        Adjust garden-o-matic layout to use fewer lines
        https://bugs.webkit.org/show_bug.cgi?id=64422

        Reviewed by Ojan Vafai.

        This patch effectively merges the test name line with the list of
        builders on which the test fails.  Each test failure now occupies two
        lines instead of three.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:

2011-07-12  Adam Barth  <abarth@webkit.org>

        garden-o-matic should label tests failures of new tests as such
        https://bugs.webkit.org/show_bug.cgi?id=64421

        Reviewed by Ojan Vafai.

        Also, we shouldn't dim failures of new tests, even if we've only seen
        them once because they're likely to be real problems that need
        attention.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-12  Adam Barth  <abarth@webkit.org>

        garden-o-matic should display how many times we've seen a failure
        https://bugs.webkit.org/show_bug.cgi?id=64417

        Reviewed by Ojan Vafai.

        This patch adds some UI to display how many times we've seen a given
        failure, which can be helpful for determining whether that failure is a
        real failure or a flaky test.

        When a failure has only been seen once (i.e., only a single run on a
        single bot), we set the opacity of to 50% to avoid distracting the
        gardener.

        This patch also refactors the failure walker to have a simpler API
        internally by moving from an object-oriented paradigm to a functional
        paradigm.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-12  Chris Rogers  <crogers@google.com>

        Enable Web Audio for chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=64409

        Reviewed by James Robinson.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-07-12  Adam Barth  <abarth@webkit.org>

        Tweak some UI in garden-o-matic now that the tree actually has a
        failure and I can see what this all looks like.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-12  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Skipping a few tests which fail due to differing output
           Unit tests shouldn't be hitting the disk anyway.  It's possible Config should move off of Port and onto Tool/Host directly.
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/gtk_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-07-12  Adam Roben  <aroben@apple.com>

        Teach TestFailures to recognize when run-webkit-tests gets killed by buildbot

        Fixes <http://webkit.org/b/64358> TestFailures page thinks all tests passed in
        http://build.webkit.org/builders/Windows%207%20Release%20(Tests)/builds/14672

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): If run-webkit-tests exited with a non-zero
        exit status but we didn't find any failure counts, assume that there was some error that
        caused run-webkit-tests to die early (like being killed by buildbot due to a timeout).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a new test that shows that we get a failingTestCount of -1 when run-webkit-tests dies
        early.
        (runGetNumberOfFailingTestsTest): Moved most code here from the only pre-existing test in this
        file.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bump the cache number so old cached data that was
        tainted by the bug fixed in this patch will be evicted.

2011-07-12  Adam Barth  <abarth@webkit.org>

        cr-linux-ews complains about tests that aren't actually failing
        https://bugs.webkit.org/show_bug.cgi?id=64367

        The underlying problem here is that full_results.json doesn't have
        enough information to determine whether a given test result was
        expected because whether an actual result is expected depends on
        whether full_results.json was generated duing a test run that included
        pixel tests.

        The right long-term solution is to make full_results.json a complete
        description of what happened durning a test run.  In this patch
        however, to stop the spam, this patch makes the jsonresultsparser
        ignore pixel failures.

        (I'm landing this patch unreviewed in order to stop the bots from
        spamming.  I'll happily address any review comments in a follow-up
        patch.)

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:

2011-07-12  Adam Barth  <abarth@webkit.org>

        Re-work garden-o-matic UI to begin to look like the mocks
        https://bugs.webkit.org/show_bug.cgi?id=64334

        Reviewed by Dimitri Glazkov.

        This patch changes how we display failures to be more like the mock the
        dglazkov made. We now can display the same information much more
        compactly.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-11  Adam Roben  <aroben@apple.com>

        Extract TestFailures's bug-filing code into two new classes

        Fixes <http://webkit.org/b/64300> TestFailures page's new-bug-filing code is a mess!

        Reviewed by Darin Adler and Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js:
        (Buildbot.prototype.resultsDirectoryURL): Changed to return a URI-encoded URL. Otherwise the
        URL isn't valid (and it's harder to mock this function).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot_unittests.js:
        Added. Just tests the above change (for now).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added a license header, enclosed everything in a closure to avoid polluting the global
        namespace, changed the test name to actually describe the passing condition, and replaced
        uses of equals() with equal(). (The latter is the actual name of the function, and matches
        deepEqual, etc.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js: Added.
        (NewBugForm): This class knows how to construct a <form> used for filing new bugs in
        Bugzilla based on some parameters.
        (NewBugForm.prototype.domElement): Creates and returns the <form> element. Code came from
        ViewController.prototype._domForNewAndExistingBugs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm_unittests.js:
        Added. Tests the above code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js: Added.
        (TestFailureBugForm): This class knows how to construct a <form> element used for filing new
        bugs specifically about test failures. Code came from
        ViewController.prototype._domForNewAndExistingBugs.
        (TestFailureBugForm.prototype.domElement): Slightly customizes the <form> element returned
        by NewBugForm.
        (TestFailureBugForm.prototype._computeOperatingSystem):
        (TestFailureBugForm.prototype._computePlatform):
        (TestFailureBugForm.prototype._createBugTitle):
        (TestFailureBugForm.prototype._failingResultsHTMLURL):
        (TestFailureBugForm.prototype._failingRevision):
        (TestFailureBugForm.prototype._passingRevision):
        (TestFailureBugForm.prototype._regressionRangeString):
        Code came from ViewController.prototype._domForNewAndExistingBugs. I broke it out into
        separate functions to break up the rat's nest a bit.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm_unittests.js:
        Added. Tests the above code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): Moved code from here to
        TestFailureBugForm/NewBugForm, and changed this code to use a TestFailureBugForm.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        NewBugForm/TestFailureBugForm.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Added new tests and required files.

2011-07-12  Adam Roben  <aroben@apple.com>

        Test that no intermediate WTF::Strings are created when concatenating with string literals

        Test for <http://webkit.org/b/63330> Concatenating string literals and WTF::Strings using
        operator+ is suboptimal

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp: Added.
        (TestWebKitAPI::TEST): Test that a bunch of different string concatenation expressions don't
        create any intermediate WTF::Strings while they're being evaluated.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Added new file.

2011-07-12  Eric Seidel  <eric@webkit.org>

        [Qt] NRWT should pick up the right httpd config file
        https://bugs.webkit.org/show_bug.cgi?id=64086

        Reviewed by Adam Barth.

        This is more fall-out from the Port class inappropriately encapsulating
        both platform and port knowledge.  We need to split out some of this
        platform knowledge into a separate class which can be better shared
        between ports.

        The fix was to move all the _path_to_apache_config_file logic down
        into the WebKitPort baseclass so that all of the ports can find the
        right apache config file, regardless of what platform they may be running on.

        I did not move this down into base.Port (even though I considered it).
        Chromium duplicates some of this logic, but since they have separate
        subclasses for each port-OS combination (e.g. ChromiumMac, ChromiumWin)
        they wouldn't notice the change.  Eventually we'll move this logic
        out of Port entirely, and then it will be shared by all ports.

        I also cleaned up the http-config logic for ORWT while I was there,
        although since we're killing that code, I'm happy to revert that part
        of the change if changing it is viewed as needlessly risky.

        During this cleanup, I noticed that no ports use the "default" httpd.conf
        which is left over from Mac OS X Tiger (and old linux distros) which used
        Apache 1.3.  I've removed httpd.conf (and associated support in ORWT) since
        we no longer support any ports which use this httpd.conf.

        * Scripts/webkitperl/httpd.pm:
        (getHTTPDConfigPathForTestDirectory):
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:

2011-07-11  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Roben.

        Implement layoutTestController.setTextDirection for WebKit2 and Windows.
        https://bugs.webkit.org/show_bug.cgi?id=61931

        This change implements layoutTextController.setTextDirection for WebKit2
        and Windows so we can run a layout test added by r87770 on them. Each
        implementation adds a wrapper function for Editor::setBaseWritingDirection()
        so LayoutTestController can call it.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setTextDirection): Implemented the binding function
        for layoutTestController.setTextDirection (Windows).
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added a binding function for layoutTestController.setTextDirection (WebKit2).
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: ditto.
        (WTR::LayoutTestController::setTextDirection):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: ditto.

2011-07-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] ImageDiff: Make sure gEcoreEvas is destroyed at the right time.
        https://bugs.webkit.org/show_bug.cgi?id=64293

        Reviewed by Kent Tamura.

        gEcoreEvas was being destroyed after shutdownEfl() was called, so the
        call to ecore_evas_free() failed.

        We now shut it down manually before shutdownEfl() is called.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (main): Destroy gEcoreEvas before shutting down the EFL.

2011-07-11  Ryosuke Niwa  <rniwa@webkit.org>

        Make Chromium Mac and Linux tests bot core builders
        https://bugs.webkit.org/show_bug.cgi?id=63196

        Reviewed by Adam Barth.

        Added Chromium Mac and Linux Release Tests bots core builders.

        Also rearranged the order of bots so that test bots show up right next to
        respective builders.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-11  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Add code related to font management.
        https://bugs.webkit.org/show_bug.cgi?id=63989

        Reviewed by Kent Tamura.

        The added files are responsible for managing fontconfig and adding the
        fonts required by some layout tests to fontconfig's path.

        * DumpRenderTree/efl/FontManagement.cpp: Added.
        (getFontDirectories):
        (getFontFiles):
        (addFontDirectories):
        (addFontFiles):
        (addFontsToEnvironment):
        * DumpRenderTree/efl/FontManagement.h: Added.

2011-07-08  Dirk Pranke  <dpranke@chromium.org>

        nrwt: linting fixes
        https://bugs.webkit.org/show_bug.cgi?id=64225

        Reviewed by Eric Siedel.

        Miscellaneous linting fixes. The most notable change is that
        we add public attributes for user, executive, filesystem, and
        options on the Port object, so we don't have to refer to the
        "protected" versions all over the place".

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-11  Ryosuke Niwa  <rniwa@webkit.org>

        webkit-patch roll-chromium-deps no longer works
        https://bugs.webkit.org/show_bug.cgi?id=64324

        Reviewed by James Robinson.

        Lower the minimum commit message length to 10.

        * Scripts/webkitpy/tool/steps/commit.py:

2011-07-11  Alice Boxhall  <aboxhall@chromium.org>

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-07-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [NRWT] Pixel tests do not work
        https://bugs.webkit.org/show_bug.cgi?id=64091

        Reviewed by Eric Seidel.

        Fix pixel test runs for GTK+ new-run-webkit-tests by exposing the
        path to the ImageDiff binary.

        * Scripts/webkitpy/layout_tests/port/gtk.py: Implement _path_to_image_diff.

2011-07-11  Dirk Pranke  <dpranke@chromium.org>

        Fix hang on win32 in a multiprocessing test that shouldn't have been running.

        Unreviewed, build fix.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-11  Adam Roben  <aroben@apple.com>

        Don't count leaks as test failures on TestFailures's front page

        As a bonus, this patch adds our first unit test.

        Fixes <http://webkit.org/b/64303> REGRESSION (r90489): TestFailures page says far more tests
        are failing on the Leaks bot than actually are

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Exclude lines containing "leak" when summing
        failure counts.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder_unittests.js:
        Added. Contains a simple test to show that leaks aren't counted as test failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
        Added. This is the test harness.

2011-06-14  Mike Stegeman  <mrstegeman@gmail.com>

        [GTK] Add API to allow setting local storage database path
        https://bugs.webkit.org/show_bug.cgi?id=62091

        Reviewed by Martin Robinson and Gustavo Noronha.

        Expose the path of the localStorage databases through a setting
        to allow HTML5 localStorage to be persistent. New setting is:
        html5-local-storage-database-path

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

2011-07-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to rebaseline tests
        https://bugs.webkit.org/show_bug.cgi?id=64186

        Reviewed by Eric Seidel.

        This patch contains a simple HTTP server binding for the
        rebaseline-test command.  The frontend will appear in another patch.

        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-11  Adam Barth  <abarth@webkit.org>

        Add some basic UI for showing regression ranges
        https://bugs.webkit.org/show_bug.cgi?id=64243

        Reviewed by Eric Seidel.

        This UI is all temporary.  It exists mostly just to have some buttons
        to click to exercise the code.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to determine which revisions caused a given failure
        https://bugs.webkit.org/show_bug.cgi?id=64189

        Reviewed by Adam Roben.

        Walking the failure history looking for failures turns out to be
        slightly tricky because the network requests are asynchronous.
        Currently we do all the fetches serially and our cache is unbounded.
        We'll probably optimize both those parameters eventually.

        This patch also generalizes some functionality in the unit testing
        framework to make testing this sort of code easier.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:

2011-07-11  Adam Barth  <abarth@webkit.org>

        Add a webkit-patch command for rebaselining an individual test
        https://bugs.webkit.org/show_bug.cgi?id=64246

        Reviewed by Eric Seidel.

        This patch introduces a command that's able to rebaseline a single
        test.  Currently, the command works only with the build.chromium.org
        buildbots, but extending it to work with the build.webkit.org bots
        shouldn't be that hard.

        A complete rebaseling tool should also include an "optimize baselines"
        command (which moves/deletes baselines in order to reduce the number of
        expected results files), but that will come in a future patch.

        Really BuilderToPort should be merged into builders.py, but I'm going
        to save that for a future patch as well.  (We need to stop shaving yaks
        at some point.)

        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-11  Adam Barth  <abarth@webkit.org>

        garden-o-matic should be able to roll out patches
        https://bugs.webkit.org/show_bug.cgi?id=64185

        Reviewed by Eric Seidel.

        This gardening server API is simply a binding to the rollout machinery
        already present in webkit-patch.

        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: Added.

2011-07-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Mac] Unreviewed fix after r90746.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests): Really disable NRWT for qt-mac platform.

2011-07-11  Adam Roben  <aroben@apple.com>

        Teach TestFailures that ORWT's results.html file might be missing due to all tests passing

        There are three reasons why we might fail to fetch ORWT's results.html:
          - All tests passed, so no results.html was generated
          - Some error during the test run caused results.html not to be generated (e.g., ORWT
            timed out)
          - Some network error occurred when fetching results.html

        We were failing to account for the first possibility in some cases. For test runs before
        r89610, we first check build.webkit.org/json to determine how many tests failed and whether
        ORWT exited early due to too many failures; if all tests passed then we don't fetch
        results.html at all. r89610 changed ORWT to put information in results.html about exiting
        early due to too many failures, so we no longer needed to check build.webkit.org/json to get
        that information, and in r89619 I changed TestFailures to do just that. But I forgot that we
        still needed to check build.webkit.org/json to find out if all tests passed!

        Now, for test runs after r89610, we check results.html first, and then check
        build.webkit.org/json if we fail to fetch results.html. This lets us distinguish between all
        tests passing and the error cases.

        Fixes <http://webkit.org/b/64280> TestFailures page can't pinpoint that r90699 caused 13
        tests to fail on Windows 7 Release (WebKit2 Tests)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version so that old, buggy
        cached data will get evicted. We were marking builds where all tests passed as errors!
        (LayoutTestResultsLoader.prototype._fetchAndParseORWTResults): Added success/error callback
        parameters to the fetchAndParseResultsHTML helper function, and added a similar
        fetchNumberOfFailingTests function that fetches data from build.webkit.org/json (code came
        from later in the function). For test runs before r89610, we first check
        build.webkit.org/json then check results.html. For builds after r89610, we first check
        results.html and then check build.webkit.org/json if we couldn't fetch results.html.

2011-07-11  Csaba Osztrogonác  <ossy@webkit.org>

        new-run-webkit-tests does not support qt-arm or qt-4.8 results
        https://bugs.webkit.org/show_bug.cgi?id=64071

        [Qt] NRWT should pick up the right httpd config file
        https://bugs.webkit.org/show_bug.cgi?id=64086

        Reviewed by Zoltán Herczeg.

        * Scripts/run-webkit-tests: Disable NRWT for qt-mac, qt-arm and qt-4.8 platforms until fix.
        (useNewRunWebKitTests):

2011-07-11  Kenichi Ishibashi  <bashi@chromium.org>

        Add TestNetscapePlugIn/Tests/FormValue.cpp to DRT build files
        https://bugs.webkit.org/show_bug.cgi?id=64248

        Reviewed by Kent Tamura.

        * DumpRenderTree/DumpRenderTree.gypi: Added FormValue.cpp.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Ditto.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Ditto.
        * GNUmakefile.am: Ditto.

2011-07-10  Kenichi Ishibashi  <bashi@chromium.org>

        Let plugins participate in form submission
        https://bugs.webkit.org/show_bug.cgi?id=13061

        Adds NPPVformValue support to the testing plugin.

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added FormValue.cpp
        * DumpRenderTree/TestNetScapePlugIn/Tests/FormValue.cpp: Added.
        (FormValue::FormValue): Ditto.
        (FormValue::NPP_GetValue): Ditto.

2011-07-11  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Tony Chang.

        Complete functions in filesystem.py
        https://bugs.webkit.org/show_bug.cgi?id=63528

        - missing text file functions added
        - functions sorted
        - removed 'append' optional parameters (were unused)
        - adapted filesystem_mock in the same way

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-07-10  Adam Barth  <abarth@webkit.org>

        Clean up style in fallback path calculation
        https://bugs.webkit.org/show_bug.cgi?id=64239

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-07-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Implement the rest of WTR::PlatformWebView
        https://bugs.webkit.org/show_bug.cgi?id=63630

        Reviewed by Kenneth Rohde Christiansen.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2011-07-10  Mark Rowe  <mrowe@apple.com>

        Teach build-webkit how to find the latest WebKitSystemInterface binary.

        * Scripts/build-webkit:

2011-07-09  Adam Roben  <aroben@apple.com>

        Teach TestFailures to abbreviate the examples of test flakiness

        These lists can get quite long, and it's not really helpful in most cases to have soooooo
        many examples of flakiness.

        Fixes <http://webkit.org/b/64203> Lists of flaky revisions on TestFailures page can get so
        long they're hard to navigate

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector.prototype.flakinessExamples): If we have more than a certain number
        of examples, replace the middle items with a separator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.flakiness-example-separator): Added styles for the separator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForPossiblyFlakyTests): Use a vertical ellipsis to represent
        the separator.

2011-07-09  Dirk Pranke  <dpranke@chromium.org>

        nrwt: stack traces from worker-side exceptions aren't very useful inside test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=64218

        Reviewed by Eric Seidel.

        Exceptions aren't picklable and can't be sent across the
        manager/worker message queue without losing information. NRWT
        handles this by turning the stack trace into a set of strings,
        and logging the strings when we receive an exception from the
        worker. However, when you are running tests and something
        crashes on the worker side, test-webkitpy prints the
        manager-side stack trace, which is just confusing and useless.

        This patch changes the logic so that exceptions are passed
        through as-is when the worker and manager are in the same
        process (the --worker-model=inline option). This increases the
        code paths slightly but makes crashes much more useful.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-09  Darin Fisher  <darin@chromium.org>

        Eliminate bad dependency on gfx::Point.
        https://bugs.webkit.org/show_bug.cgi?id=64228

        Reviewed by Kent Tamura.

        * DumpRenderTree/chromium/EventSender.cpp:
        (initMouseEvent):

2011-07-08  Ojan Vafai  <ojan@chromium.org>

        pull static dashboard files into the appengine server from the chromium repository
        https://bugs.webkit.org/show_bug.cgi?id=64208

        Reviewed by Dirk Pranke.

        These files belong in the WebKit repo since they are tied primarily to the webkit tests.
        They have some extra bits to support chromium's gtests, but that seems fine.
        Mainly, this will allow other WebKit hackers to hack on the dashboards.

        As a nice side-effect, we can now push the dashboard files when we do appengine pushes
        instead of the weird thing we used to do of pulling them from the Chromium repository
        and storing them in the appengine datastore. This allows for cleaning up a lot of code
        and will likely make the dashboards load a bit faster.

        The new JS files don't fully match WebKit style, but I'd like to clean that up in a
        followup patch if possible to maintain my sanity with this patch.

        * TestResultServer/app.yaml:
        * TestResultServer/handlers/dashboardhandler.py: Removed.
        * TestResultServer/handlers/menu.py:
        * TestResultServer/main.py:
        * TestResultServer/model/dashboardfile.py: Removed.
        * TestResultServer/static-dashboards/LICENSE.dygraph.txt: Added.
        * TestResultServer/static-dashboards/README.dygraph.txt: Added.
        * TestResultServer/static-dashboards/README.webtreemap.txt: Added.
        * TestResultServer/static-dashboards/aggregate_results.html: Added.
        * TestResultServer/static-dashboards/builders.js: Added.
        * TestResultServer/static-dashboards/dashboard_base.js: Added.
        * TestResultServer/static-dashboards/dygraph-combined.js: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard.html: Added.
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.js: Added.
        * TestResultServer/static-dashboards/timeline_explorer.html: Added.
        * TestResultServer/static-dashboards/treemap.html: Added.
        * TestResultServer/static-dashboards/webtreemap.css: Added.
        * TestResultServer/static-dashboards/webtreemap.js: Added.
        * TestResultServer/stylesheets/dashboardfile.css: Removed.
        * TestResultServer/stylesheets/menu.css:
        * TestResultServer/templates/dashboardfilelist.html: Removed.
        * TestResultServer/templates/menu.html:

2011-07-08  Adam Roben  <aroben@apple.com>

        Make TestFailures's list of flaky tests look more like the list of non-flaky tests

        Fixes <http://webkit.org/b/64204> TestFailures page's flaky tests list is ugly!

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (#failure-history, #possibly-flaky-tests): Expanded this rule to apply to the list of flaky
        tests.
        (#failure-history > li, #possibly-flaky-tests > li): Ditto, but moved the 50px left padding
        from here...
        (#failure-history > li): ...to here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForPossiblyFlakyTests): Give the list an id attribute for
        styling purposes.

2011-07-08  Jeffrey Pfau  <jpfau@apple.com>

        Unreviewed, add myself as committer.

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

2011-07-08  Adam Barth  <abarth@webkit.org>

        TestResultsServer should keep old test results
        https://bugs.webkit.org/show_bug.cgi?id=64199

        Reviewed by Ojan Vafai.

        Having historical data will help us do failure archeology.

        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/model/testfile.py:
        * TestResultServer/templates/showfilelist.jsonp: Added.

2011-07-08  Adam Roben  <aroben@apple.com>

        Remove commit-log-editor's dependency on Module::Load::Conditional

        This module isn't available in Perl 5.8.8 (the version used on Leopard).

        Fixes <http://webkit.org/b/64198> REGRESSION (r90583):
        webkitpy.common.checkout.checkout_unittest failing on Leopard

        Reviewed by Daniel Bates.

        * Scripts/commit-log-editor: Use the new loadTermReadKey() function instead of
        Module::Load::Conditional::can_load.
        (loadTermReadKey): Added. Tries to load Term::ReadKey and returns true if it's successful.

2011-07-08  Adam Roben  <aroben@apple.com>

        Make checkout_unittest more robust against files moving around

        Fixes <http://webkit.org/b/64197> checkout_unittest contains ugly, fragile code to find the
        Scripts directory

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Instantiate a real SCM
        object and use it to get the path to the Scripts directory, rather than hard-coding the
        relative path from this file to Scripts.

2011-07-08  Adam Roben  <aroben@apple.com>

        Make TestFailures remember that run-webkit-tests timed out, even across reloads

        Fixes <http://webkit.org/b/64193> TestFailures page incorrectly thinks all tests passed in
        http://build.webkit.org/builders/Windows%207%20Release%20(Tests)/builds/14589 after a reload

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Store an "error" attribute in the cached data.
        When true, it indicates that there was an error retrieving the results for this build and
        that the errorCallback should be called.

2011-07-08  Adam Barth  <abarth@webkit.org>

        Teach garden-o-matic how to display test results
        https://bugs.webkit.org/show_bug.cgi?id=64141

        Reviewed by Ojan Vafai.

        This patch includes basic infrastructure for probing build.chromium.org
        for test results.  We only handle text and image tests, not anything
        complicated like reftests.  Also, we're using the revision/build
        independent results store on the server, so we're avoiding that
        complication for now.

        It's slightly hacky that we need to probe the server to see what kinds
        of results exist.  A better solution would be to add CORS support to
        the server or to use the local server to help.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:

2011-07-08  Dirk Pranke  <dpranke@chromium.org>

        REGRESSION(90419) NRWT's httpd locking is broken for --child-processes=1
        https://bugs.webkit.org/show_bug.cgi?id=64092

        Reviewed by Tony Chang.

        The code was incorrectly creating empty shards in the
        shard_in_two case.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-07-08  Adam Roben  <aroben@apple.com>

        Teach buildbot to figure out how many webkitpy/webkitperl tests failed

        Fixes <http://webkit.org/b/64192> It's hard to tell how many test-webkitpy/test-webkitperl
        tests failed when looking at build.webkit.org

        Reviewed by Eric Seidel.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestWithFailureCount): New class that represents a test build step which has an associated
        failure count. Eventually we should move more of our test classes to deriving from this.
        (TestWithFailureCount.countFailures): Method for subclasses to override to say how many
        failures occurred.

        (TestWithFailureCount.commandComplete):
        (TestWithFailureCount.evaluateCommand):
        (TestWithFailureCount.getText):
        (TestWithFailureCount.getText2):
        These were all based on RunGtkAPITests.

        (RunPythonTests): Changed to inherit from TestWithFailureCount.
        (RunPythonTests.countFailures): Parses the test-webkitpy output looking for the count of
        failures.
        (RunPerlTests): Changed to inherit from TestWithFailureCount.
        (RunPerlTests.countFailures): Parses the test-webkitperl output looking for the count of
        failures.

2011-07-08  Adam Roben  <aroben@apple.com>

        Ensure $CHANGE_LOG_EMAIL_ADDRESS is set when testing webkitpy's commit-log-editor integration

        Fixes <http://webkit.org/b/64180> REGRESSION (r90564): test-webkitpy failing on multiple
        bots due to commit-log-editor errors

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Set
        $CHANGE_LOG_EMAIL_ADDRESS to the patch author's email address. This ensures that
        commit-log-editor can find a value for the committer's email, and that the committer and
        author email addresses match, which will prevent commit-log-editor from inserting a "Patch
        by" line in the commit message.

2011-07-08  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Views should expose QActions for basic navigation.
        https://bugs.webkit.org/show_bug.cgi?id=64174

        Reviewed by Benjamin Poulain.

        Bring the toolbar in Qt's MiniBrowser back to life.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::navigationAction):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-07-08  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to find test names in commit-log-editor-style commit messages

        TestFailures was relying on Trac turning the list of modified files in our commit messages
        into an HTML list. But Trac only does this when the list of modified files is indented.
        commit-log-editor doesn't indent the file list, so the list wasn't being turned into an HTML
        list, which was confusing TestFailures.

        TestFailures now does much simpler parsing of the commit message (i.e., just a substring
        search) without relying at all on its structure.

        Fixes <http://webkit.org/b/64173> TestFailures page fails to blame r90608 for breaking
        fast/dom/HTMLProgressElement/progress-element-markup.html on Windows

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac.prototype.getCommitDataForRevisionRange): Instead of trying to parse the commit
        message, just return its text.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForRegressionRange): Instead of searching for test names in
        each commit's list of modified files, just search for test names anywhere in the commit's
        message.

2011-07-08  Adam Barth  <abarth@webkit.org>

        sheriffbot is too spammy in IRC
        https://bugs.webkit.org/show_bug.cgi?id=64153

        Reviewed by Eric Seidel.

        Reporting failures in IRC worked well when the tree was greener than it
        is today.  Nowadays, this feature mostly just results in spam about
        false positives.  If we reach a greener state, we can bring this code
        back.

        (Another possibility is to restrict this feature to builder bots,
        rather than including testers, as we did before this patch.)

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-07-08  Adam Roben  <aroben@apple.com>

        Ensure commit-log-editor adds a "Patch by" line when the author and committer are different

        Previously we were only adding a "Patch by" line when the ChangeLog contained a "Reviewed
        by" line. But some patches (like rollout patches) don't contain that line. Now we always add
        "Patch by" to the commit log regardless of the ChangeLog's contents.

        Fixes <http://webkit.org/b/64127> Committer for r90588 is commit-queue@webkit.org, but
        should have been abarth@webkit.org

        Reviewed by Anders Carlsson.

        * Scripts/commit-log-editor:
        (createCommitMessage): Try to put the "Patch by" line just above the "Reviewed by" line, as
        before. If there is no "Reviewed by" line, try to put it just above the first modified file.
        If all else fails, put it at the end of the commit message.
        (patchAuthorshipString): Added. Code came from createCommitMessage.

2011-07-08  Herczeg Zoltan  <zherczeg@webkit.org>

        Reviewed by Andreas Kling.

        Adding myself as a reviewer.

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

2011-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, remove old files from the tree and update paths to new ones.

        * wx/build: Removed.
        * wx/build/build_utils.py: Removed.
        * wx/build/settings.py: Removed.
        * wx/build/waf_extensions.py: Removed.
        * wx/build/wxpresets.py: Removed.
        * wx/packaging/build-mac-installer.py:

2011-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, more fixes for install name issues.

        * wx/packaging/build-mac-installer.py:

2011-07-07  Dirk Pranke  <dpranke@chromium.org>

        test-webkitpy fails on chromium win
        https://bugs.webkit.org/show_bug.cgi?id=64137

        Reviewed by Eric Seidel.

        test-webkitpy doesn't play nicely with the multiprocessing
        module on win32. An earlier change actually reenabled the tests
        on win32 by mistake.

        This patch also fixes a few cases where path names will trip
        things up on win32 (e.g., by testing unix paths on windows).
        We do not lose any real coverage here with those fixes.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-07-07  Leandro Pereira  <leandro@profusion.mobi>

        [ImageDiff] Calculate/print difference right after reading baseline image.
        https://bugs.webkit.org/show_bug.cgi?id=64117

        Reviewed by Kent Tamura.

        Otherwise, ImageDiff will block on fgets() until the universe ends or you ^C
        it.  Whichever happens first.

        * DumpRenderTree/efl/ImageDiff.cpp:
        (main):

2011-07-07  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] DRT: Leak cairo_t to make the pixel tests stop crashing
        https://bugs.webkit.org/show_bug.cgi?id=64107

        Reviewed by Kent Tamura.

        The pointer is later managed by BitmapContext, but it was being
        de-refed and deleted earlier by our RefPtr, causing crashes in all
        pixel tests.

        We now call leakRef() to make sure it is not removed when our
        createBitmapContextFromWebView goes out of context.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):

2011-07-07  Adam Roben  <aroben@apple.com>

        Update TestFailures's title and header immediately upon navigation

        Fixes <http://webkit.org/b/64125> TestFailures page seems slow to react on link clicks

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype.loaded): Create and store an h1 element for displaying the page's
        title.
        (ViewController.prototype._displayBuilder): Set the page's title and clear out any old
        content immediately instead of waiting for the first set of results for the history
        analyzer. As we receive new results from the analyzer we'll just clear out the main content
        area and replace it with the new info.
        (ViewController.prototype._displayTesters): Set the page's title and clear out any old
        content immediately instead of waiting for the list of testers from the buildbot. Sprinkled
        in a little use of our removeAllChildren helper, too.
        (ViewController.prototype._setTitle): Added. Set's the page's title and the header text.

2011-07-07  Adam Roben  <aroben@apple.com>

        Make Checkout use SCM's Executive instead of conjuring up its own

        This will improve integration with the rest of webkitpy, particularly when invoked via
        webkit-patch.

        Fixes <http://webkit.org/b/64115> REGRESSION (r90564): webkitpy's Checkout class uses
        Executive inappropriately

        Reviewed by Adam Barth.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.commit_message_for_this_commit): Use SCM.run instead of creating an Executive for
        our own use. SCM might have some super-special Executive that it uses under the covers, and
        we want to use it, too!

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Mock the SCM.run
        method to call through to Executive.run_command.

2011-07-07  Adam Roben  <aroben@apple.com>

        Make Term/ReadKey.pm an optional dependency of commit-log-editor

        When Term/ReadKey.pm isn't present, the --regenerate-log switch will be non-functional.

        Fixes <http://webkit.org/b/64113> REGRESSION (r90564):
        webkitpy.common.checkout.checkout_unittest failing on GTK bots due to missing
        Term/ReadKey.pm module

        Reviewed by Xan Lopez.

        * Scripts/commit-log-editor: Use Module::Load::Conditional::can_load to only load
        Term/ReadKey.pm if it's present. If it isn't present, ignore the --regenerate-log switch so
        that existing commit messages will be preserved. (Users can manually remove existing commit
        messages using git-reset.)

2011-07-07  Adam Roben  <aroben@apple.com>

        Keep testing that commit messages containing Unicode are handled properly by webkitpy

        Fixes <http://webkit.org/b/64109> REGRESSION (r90571): test-webkitpy no longer tests that we
        correctly handle Unicode in commit messages

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Put some Unicode characters in
        places in the ChangeLog that will end up being included in the commit message.

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Remove Symbian code.
        https://bugs.webkit.org/show_bug.cgi?id=64101

        Reviewed by Benjamin Poulain.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::screenshot):
        * MiniBrowser/qt/MiniBrowser.pro:
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Don't support ridiculous matrix of QT_NO_FEATURE combinations.
        https://bugs.webkit.org/show_bug.cgi?id=64099

        Reviewed by Benjamin Poulain.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::openFile):
        (BrowserWindow::screenshot):
        (BrowserWindow::loadURLListFromFile):

2011-07-07  Adam Roben  <aroben@apple.com>

        Completely ignore too-many-failures builds in TestFailures in most circumstances

        Because a semi-arbitrary subset of tests are run in a too-many-failures build, we can't
        really use them to perform regression analysis. The only time we want to pay attention to
        too-many-failures builds is when we're trying to explain when the current bout of
        too-many-failures started.

        Fixes <http://webkit.org/b/64106> TestFailures page sometimes claims a test started failing
        in a build that didn't even run it (because it exited early due to too many failues)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): Removed old, broken
        too-many-failures handling that would cause us to blame builds that didn't even run a given
        test for breaking it. Instead, skip over all too-many-failures builds unless the most recent
        build was itself a too-many-failures build.

2011-07-07  Adam Roben  <aroben@apple.com>

        Teach webkitpy's Checkout class to use commit-log-editor to create commit messages

        Fixes <http://webkit.org/b/26755> webkit-patch's commit messages are less readable than
        commit-log-editor's

        Reviewed by David Kilzer.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.commit_message_for_this_commit): Run commit-log-editor, passing it the paths of
        the modified ChangeLogs, to generate the commit message, rather than trying to generate one
        ourselves.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Updated the expected commit message
        to match commit-log-editor's format.
        (CommitMessageForThisCommitTest.setUp): Write the ChangeLogs into Tools and LayoutTests
        directories so we can see how the various entries get labeled in the commit message.
        (CommitMessageForThisCommitTest.test_commit_message_for_this_commit): Create a mock SCM
        instance that knows how to find commit-log-editor and pass it to our Checkout instance.
        Don't bother capturing output, since there shouldn't be any.

2011-07-07  Adam Roben  <aroben@apple.com>

        Add a --print-log option to commit-log-editor

        When specified, commit-log-editor takes a set of ChangeLog paths on the command line,
        generates a commit message from those ChangeLogs, prints it to stdout, and exits.

        Prep work for fixing <http://webkit.org/b/26755> webkit-patch's commit messages are less
        readable than commit-log-editor's

        Reviewed by David Kilzer.

        * Scripts/commit-log-editor: Changed to use Getopt::Long to parse options. Added --print-log
        option, which calls through to createCommitMessage, prints the result, and exits.
        (printUsageAndExit): Renamed from "usage" for clarity. Beefed up the usage statement to
        explain commit-log-editor's 2.5 (normal, --print-log, and --help) modes of operation.

2011-07-07  Adam Roben  <aroben@apple.com>

        Extract commit-log-editor's commit-message-generation code into a separate function

        As a bonus, we now skip a bunch of work in the case where we are generating a commit message
        for staged git changes.

        Prep work for fixing <http://webkit.org/b/26755> webkit-patch's commit messages are less
        readable than commit-log-editor's

        Reviewed by David Kilzer.

        * Scripts/commit-log-editor: Moved the default definition of $endl up toward the top of the
        file so that it will be defined even if we aren't operating on an existing log message.
        Moved a bunch of top-level code to generate the commit message from here...
        (createCommitMessage): ...to here.

2011-07-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Open links in a new window when clicking with the middle button in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=63988

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed):
        (decidePolicyForNavigationAction): Ignore the action if a link is
        clicked with the middle buttonm and open the link in a new window.
        (browserWindowPolicyClientInit):

2011-07-07  Adam Barth  <abarth@webkit.org>

        Remove style_references.py
        https://bugs.webkit.org/show_bug.cgi?id=64070

        Reviewed by Eric Seidel.

        We never really adopted the _references design, and this file is a bit
        of an orphan at this point.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/python.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style/main_unittest.py:
        * Scripts/webkitpy/style_references.py: Removed.

2011-07-07  Eric Seidel  <eric@webkit.org>

        Fix WebKit2 expected results search paths for Mac and Qt under new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=64056

        Unreviewed.

        I had written this unittest prior to landing my change, but
        had named it qt_unitest.py, so it wasn't running (nor was
        it added to my git repo).

        Once I fixe the name of the unittest file, it was very easy
        to fix the error in webkit.py (which already had a FIXME).

        * Scripts/webkitpy/layout_tests/port/qt_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-07-07  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Add more debug logging about which test expectations we're using.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Remove unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64065

        Reviewed by Eric Seidel.

        No one should be using this file any more.  This patch removes it from
        the face of the earth.  This patch also removes two NRWT-specific
        command line options that were implemented using
        unexpected_results.json.

        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-07-07  Adam Barth  <abarth@webkit.org>

        REGRESSION(90520): chromium GPU tests produce output in the LayoutTests directory
        https://bugs.webkit.org/show_bug.cgi?id=64067

        Reviewed by Eric Seidel.

        The author of r90520 forgot to change the chromium_gpu.py implemenation
        of this method as well.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-07-06  Eric Seidel  <eric@webkit.org>

        Fix WebKit2 expected results search paths for Mac and Qt under new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=64056

        Reviewed by Adam Barth.

        This fixes the MacPort's version of baseline_search_path to include
        wk2 fallback like WebKitPort's does.  This also re-works the QtPort
        to set self._name (as other ports do) so that WebKitPort's default
        implementations will understand Qt operating system flavors correctly
        (including when running wk2 tests).

        In trying to test this, I realized that nearly all of our port-tests
        use the default FileSystem(), User() and Executive() objects, which
        is really bad, because they expose details of your system in the unittest results!

        Once I fixed many of the Port() calls to pass MockFileSystem(), then
        MacPort.test_tests_for_other_platforms started failing, and I had to
        teach MockFileSystem.glob how to handle directories to make it work again.

        I removed the useless PortTestCase.test_baseline_search_path and replaced
        it with more useful test_baseline_search_path tests in MacPortTest and QtPortTest.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/to_be_moved/deduplicate_tests.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Wean rebaseline-server off unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64063

        Reviewed by Eric Seidel.

        In the process of changing this code to use full_results.json, I
        noticed that the code was broken (because it wasn't tested).  This
        patch also adds test coverage for the broken code.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Wean resultsjsonparser off unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=64061

        Reviewed by Eric Seidel.

        We're about to delete unexpected_results.json, so we need to remove all
        the users.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Cleanup result_summary.py
        https://bugs.webkit.org/show_bug.cgi?id=64057

        Reviewed by Eric Seidel.

        This class had a bunch of out-of-date docstrings that no longer make
        any sense.

        * Scripts/webkitpy/layout_tests/models/result_summary.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Tweak the ChangeLog for DEPS rolls to say "Unreviewed" so that the
        patches can be landed by the commit-queue.

        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Normalize callers of logging.getLogger to use __name__
        https://bugs.webkit.org/show_bug.cgi?id=64054

        Reviewed by Eric Seidel.

        Most callers were already using __name__.  This patch makes everyone
        consistent.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/file_lock.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/models/result_summary.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        * Scripts/webkitpy/python24/versioning.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/patchreader.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move model classes out of layout_package and into models
        https://bugs.webkit.org/show_bug.cgi?id=64053

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/worker.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/models: Added.
        * Scripts/webkitpy/layout_tests/models/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/models/result_summary.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/result_summary.py.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py.
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures.py.
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py.
        * Scripts/webkitpy/layout_tests/models/test_input.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py.
        * Scripts/webkitpy/layout_tests/models/test_results.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_results.py.
        * Scripts/webkitpy/layout_tests/models/test_results_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py.
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2011-07-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: fix typo preventing http startup on windows
        https://bugs.webkit.org/show_bug.cgi?id=64050

        Reviewed by Eric Siedel.

        NRWT checks whether it needs to start the servers by looking
        for "/http/" in the test names. After r90520, the leading slash
        is not present, so the check isn't quite right.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:

2011-07-06  Dirk Pranke  <dpranke@chromium.org>

        nrwt: remove --use-apache from the command line
        https://bugs.webkit.org/show_bug.cgi?id=63358

        Reviewed by Adam Barth.

        Re-land the fix in bug 63358 - the prior fix was flawed in that
        we were trying to start the http server during check_sys_deps()
        but not actually setting up the environment properly. This
        broken prior to this change, but exposed by it, since the patch
        changes the chromium port to call the base class's checks.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move view-related code out of layout_package and into views
        https://bugs.webkit.org/show_bug.cgi?id=64051

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/printing.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/views: Added.
        * Scripts/webkitpy/layout_tests/views/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/metered_stream.py.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py.
        * Scripts/webkitpy/layout_tests/views/printing.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/printing.py.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py.

2011-07-06  Adam Barth  <abarth@webkit.org>

        Add goofy comments to explain why we have these files.

        * Scripts/webkitpy/layout_tests/controllers/__init__.py:
        * Scripts/webkitpy/layout_tests/layout_package/__init__.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move a bunch of classes out of layout_tests.layout_package and into layout_tests.controllers
        https://bugs.webkit.org/show_bug.cgi?id=64048

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/controllers: Added.
        * Scripts/webkitpy/layout_tests/controllers/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/controllers/manager.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py.
        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py.
        * Scripts/webkitpy/layout_tests/controllers/message_broker.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py.
        * Scripts/webkitpy/layout_tests/controllers/message_broker_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py.
        * Scripts/webkitpy/layout_tests/controllers/worker.py: Copied from Tools/Scripts/webkitpy/layout_tests/layout_package/worker.py.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/worker.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Attempt to fix unittest on Leopard.  Let's enumerate the keys in sorted
        order so the test results are predictable.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-07-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        nrwt: make the code be consistent about using test names instead of filenames or paths

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

        It can be hard to figure out where in the code we're assuming
        test names are listed as unix-style relative filenames and where
        they are either absolute paths or relative paths following the
        host filesystem convention.

        This patch changes things so that everything outside of the
        Port object uses (and must assume) unix-style relative
        filenames (with one exception, which is specifying host-local
        filenames as a list of test arguments on the command line).

        This should make things clearer and more consistent, and also
        removes a lot of path conversion calls.

        The changes in this patch outside of port/base.py are largely
        cosmetic changes of "filename" to "test". We add a few routines
        to the base Port implementation to manipulate test names to
        split them, figure out if we're referring to a directory of
        tests, etc.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2011-07-06  Chris Guillory  <ctguil@chromium.org>

        No review necessary.

        Adding myself to committers list in committers.py.
        https://bugs.webkit.org/show_bug.cgi?id=63478

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

2011-07-06  Johnny Ding  <jnd@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=63857
        Implement createPopupMenu for Chromium DRT.

        Reviewed by Tony Chang.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createPopupMenu):
        (WebViewHost::~WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-07-06  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed, rolling out r90503.
        http://trac.webkit.org/changeset/90503
        https://bugs.webkit.org/show_bug.cgi?id=63358

        Makes Chromium Windows canary bots hang.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Move buildbot URL in webkitpy to config.urls
        https://bugs.webkit.org/show_bug.cgi?id=64041

        Reviewed by Eric Seidel.

        This patch prepares for using the buildbot class to talk to the
        Chromium buildbots.

        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:

2011-07-06  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add the correct path to the waf build settings.
        
        * wx/packaging/build-win-installer.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Add missing include.

        * Scripts/webkitpy/tool/bot/irc_command.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Add roll-chromium-deps command to sheriff-bot
        https://bugs.webkit.org/show_bug.cgi?id=64037

        Reviewed by Eric Seidel.

        Lo, and the DEPS were rolled on command.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/commands/roll.py:
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechromiumdeps.py:

2011-07-06  Eric Seidel  <eric@webkit.org>

        Split Driver, DriverOutput and DriverInput out into a new driver.py file
        https://bugs.webkit.org/show_bug.cgi?id=64031

        Reviewed by Adam Barth.

        This ended up kinda large and I'm happy to break it up if desired.

        As part of cleaning up the Port module, I split Driver, DriverInput and DriverOutput
        out into its own driver.py file.

        I also cleaned up how we import Port objects, by making port/__init__.py
        expose Port, Driver, DriverInput, and DriverOutput.  I removed exposure of
        some various test objects as they were causing circular dependencies.
        base.py is now an implementation detail of port.  No longer is "base" referenced
        anywhere in the code.

        I also made Driver.__init__ non-virtual so that sub-classers could all share
        the data storage on Driver.  This more closely matches how other subclasses
        work throughout our python code.

        Standard line-unwrapping and doc-string removal as I went through the code.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/driver.py: Added.
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

2011-07-06  Adam Roben  <aroben@apple.com>

        Clear TestFailures's getNumberOfFailingTests cache

        Now that we support NRWT, we need to clear out old zero values for the NRWT bots that might
        have been cached by old versions of TestFailures.

        Fixes <http://webkit.org/b/64029> TestFailures page still doesn't show NRWT bots if you've
        used it recently

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Added a .version property to the cache data
        that must match the current version. Otherwise we'll ignore the cached data.

2011-06-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        nrwt: remove --use-apache from the command line
        https://bugs.webkit.org/show_bug.cgi?id=63358

        This change removes the --use-apache command line argument. It
        was initially put in when we were trying to get the cygwin
        apache instance to work with Chromium win, but that code has
        bitrotted and doesn't work at all now.

        Arguably we should remove all of the code to allow for a choice
        of web servers, but since we may still want to switch off of
        LigHTTPd at some point on Windows, I'll leave the rest in for
        now (or at least yank it in a different change.)

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-06  Dimitri Glazkov  <dglazkov@chromium.org>

        garden-o-matic should use a favicon to indicate current state.
        https://bugs.webkit.org/show_bug.cgi?id=64027

        Reviewed by Adam Barth.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-green.png: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/favicon-red.png: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html: Added blurb about icons.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js: Added setting icon state.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Allowed the use of favicons.

2011-07-06  Daniel Bates  <dbates@rim.com>

        Fix webkitpy error after changeset 90483 <http://trac.webkit.org/changeset/90483>; Add missing
        parameter to _fetch_file_from_results lamdba function.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-06  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Generate the proper install_name for dylibs on Mac.

        * wx/packaging/build-mac-installer.py:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        [GTK] Only set env. variables in start when strictly needed
        https://bugs.webkit.org/show_bug.cgi?id=64026

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/gtk.py: add a
        setup_environ_for_server method in GtkPort and set as many
        env. variables as possible there.

2011-07-06  Adam Roben  <aroben@apple.com>

        Teach TestFailures how to load, parse, and interpret NRWT test results

        Fixes <http://webkit.org/b/61877> TestFailures page doesn't show testers that use
        new-run-webkit-tests

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.failureDiagnosisTextAndURL): Added support for the new 'flaky' failure
        type. For now we don't account for image-only flakes (but TestFailures doesn't deal with
        pixel tests at all currently).
        (Builder.prototype.getNumberOfFailingTests): Relaxed the regex used for parsing the number
        of failing tests from the buildbot output. Make sure not to count "new passes" (a new
        category introduced by NRWT) as failures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Moved a bunch of code from here to
        _fetchAndParseORWTResults. This function now attempts to load NRWT results, then falls back
        to loading ORWT results.
        (LayoutTestResultsLoader.prototype._fetchAndParseNRWTResults): Added. Tries to load and
        parse the full_results.json file for the given build.
        (LayoutTestResultsLoader.prototype._fetchAndParseORWTResults): Added. Code came from start.
        Fixed a bug along the way where we were sometimes calling the error callback instead of the
        success callback when all tests passed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NRWTResultsParser.js: Added.
        (NRWTResultsParser): Do-nothing constructor.
        (NRWTResultsParser.prototype.parse): Uses eval() (eww!) to get the test results out of the
        JS string, then iterates over all the tests in the results data and builds up a data
        structure matching what ORWTResultsParser returns.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (Array.prototype.contains):
        (String.prototype.contains):
        Added these simple helper functions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        NRWTResultsParser.js.

2011-07-06  Adam Roben  <aroben@apple.com>

        Extract code to parse ORWT's results.html file into its own class

        Prep work for fixing <http://webkit.org/b/61877> TestFailures page doesn't show testers that
        use new-run-webkit-tests

        Reviewed by Adam Barth.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Moved a bunch of code from here...

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ORWTResultsParser.js: Added.
        (ORWTResultsParser):
        (ORWTResultsParser.prototype.parse):
        ...to here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        ORWTResultsParser.js.

2011-07-06  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fix a unittest from hitting the network. :)

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-06  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing an exception in test-webkitpy, caused by bug 64006.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-07-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Run an Xvfb instance to run the API tests on, like we do for the
        layout tests.

        Reviewed by Xan Lopez.

        * Scripts/run-gtk-tests:

2011-07-06  Daniel Bates  <dbates@webkit.org>

        Make SCM unit tests faster
        https://bugs.webkit.org/show_bug.cgi?id=63883

        Speeds up the SCM unit tests by a factor of 4. Currently, we create a
        mock SVN repo for each test_ method in SVNTest and GitTest and creating
        this repo is expensive.

        Instead, it is significantly faster to create the mock SVN repo once
        and then perform a filesystem copy of it for each test_ method.

        Note, Python 2.7's unittest module implements support for per class and
        per module setup and tear down methods which could be used to implement
        similar functionality. At the time of writing, test-webkitpy is designed
        to support Python 2.5. So, we can't take advantage of these Python 2.7
        features :(

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Remove unused parameter from _add_test in test_expectations.py
        https://bugs.webkit.org/show_bug.cgi?id=64008

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:

2011-07-06  Adam Barth  <abarth@webkit.org>

        Use old-run-webkit-tests when --leaks is present
        https://bugs.webkit.org/show_bug.cgi?id=64012

        Reviewed by Adam Roben.

        We'll remove this branch once support of --leaks is added to
        new-run-webkit-tests.

        * Scripts/run-webkit-tests:

2011-07-06  Benjamin Poulain  <benjamin@webkit.org>

        [Qt] [WK2] Add touch mocking to Qt's MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=63995

        Reviewed by Andreas Kling.

        The mouse events are intercepted through QCoreApplication::notify(),
        and fake touch events are generated for mouse events when necessary.

        If touch events are received from the platform, we assume the current
        hardware has a touch screen and we stop generating fake events.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (isTouchEvent):
        (isMouseEvent):
        (MiniBrowserApplication::MiniBrowserApplication):
        (MiniBrowserApplication::notify):
        * MiniBrowser/qt/MiniBrowserApplication.h:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * Scripts/webkitpy/layout_tests/port/gtk.py: use Popen correctly.

2011-07-06  Eric Seidel  <eric@webkit.org>

        webkit-patch failure-reason does not understand NRWT results
        https://bugs.webkit.org/show_bug.cgi?id=64006

        Reviewed by Adam Barth.

        Adam Barth tells me failure-reason should be deleted soon,
        but aroben's fancy new TestFailures/ page doesn't work for
        NRWT yet, and I needed to know when
        third-party-cookie-relaxing started failing.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        [GTK] Add missing environment variables in NWRT
        https://bugs.webkit.org/show_bug.cgi?id=64004

        Reviewed by Gustavo Noronha Silva.

        Add missing environment variables needed by the GTK+ port.

        * Scripts/webkitpy/layout_tests/port/gtk.py: ditto.

2011-07-06  Adam Roben  <aroben@apple.com>

        Make run-api-tests output intelligible on the bots

        run-api-tests's output on the bots was very hard to read for two reasons:
          1) It was mixing its own output with gtest's
          2) It was using ANSI escape sequences to print colored text, but the bots don't support
             that

        Now, the --verbose flag turns off almost all of run-api-tests's own output so that gtest's
        output will not be obscured. We still print "Timeout" messages even in verbose mode, since
        gtest doesn't have any native support for timeouts. Also, when our output is being
        redirected to a file, we don't print ANSI escape sequences.

        Fixes <http://webkit.org/b/63996> It's very hard to read run-api-tests output on the bots

        Reviewed by Sam Weinig.

        * Scripts/run-api-tests: Don't use the :constants interface of Term::ANSIColor. We want to
        use the colored function instead.
        (runAllTestsInSuite): Don't print out suite names in verbose mode; gtest will give us enough
        context that they aren't needed.
        (runTest): Don't print out test names or pass/fail messages in verbose mode; gtest will do
        that for us. Also, use the new possiblyColored function instead of always coloring output.
        (possiblyColored): Added. When printing to a tty, returns the string with the appropriate
        ANSI color escape sequences added. Otherwise just returns the string unmodified.

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Launch Xvfb (mostly) the same way we were launching it in the
        bots, for maximum compatibility.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-07-06  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Split Qt API into two different web views (touch and desktop)
        https://bugs.webkit.org/show_bug.cgi?id=63950

        Co-authored with Benjamin Poulain <benjamin@webkit.org>.

        Reviewed by Kenneth Rohde Christiansen.

        Port WTR/Qt to use QDesktopWebView and force a 800x600 viewport.

        The Qt MiniBrowser now defaults to QDesktopWebView but can be started
        in QTouchWebView mode by passing -touch on the command line.

        A lot of functionality has been removed and/or disabled from
        MiniBrowser until we reintroduce the necessary API's.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        (BrowserView::~BrowserView):
        (BrowserView::load):
        (BrowserView::view):
        (BrowserView::touchWebView):
        (BrowserView::desktopWebView):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (newPageFunction):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::webView):
        (BrowserWindow::newWindow):
        (BrowserWindow::showUserAgentDialog):
        (BrowserWindow::updateUserAgentList):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        * MiniBrowser/qt/main.cpp:
        (main):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::wkView):
        (WTR::WebView::pageRef):
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2011-07-06  Eric Seidel  <eric@webkit.org>

        Unreviewed..

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
         - Fix the pass-thru of --gtk and --qt for old-run-webkit-tests,
           it was previously broken by the existence of isGtk/isQt checks which
           removed the --gtk/--qt args from @ARGV.

2011-07-06  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests uses a 35s timeout for Mac and 6s for all other ports
        https://bugs.webkit.org/show_bug.cgi?id=63983

        Reviewed by Xan Lopez.

        All WebKit ports want to use a 35s timeout.  Only chromium currently
        uses a 6s timeout.  Eventually we'll move all WebKit ports to 6s too
        to further speed up new-run-webkit-tests runs, but that's going to be a while.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Unreviewed.

        NWRT actually seems to work locally, so it should work in the bots
        as long as we take care of the TIMEOUT issue (which is being fixed
        as I write this). Let's give this another shot and fix whatever
        breaks.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-06  Xan Lopez  <xlopez@igalia.com>

        Unreviewed.

        Disable NWRT on GTK. At the very least it needs an updated exected
        results file since NWRT is more sensitive to timeouts, not sure
        what the exact problem is.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-06  Adam Barth  <abarth@webkit.org>

        Fix global variable leak detected by noglobals.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:

2011-07-06  Adam Barth  <abarth@webkit.org>

        garden-o-matic shouldn't show flaky tests by default
        https://bugs.webkit.org/show_bug.cgi?id=63979

        Reviewed by Ojan Vafai.

        If any of the actual test results are PASS, the test is flaky and we
        can ignore it (at least for now).  If we get awesome at dealing with
        failing tests, we might want to tackle flaky tests by refering the user
        to the flakiness dashboard, which is way more awesome at dealing with
        flaky tests that this tool ever will be.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:

2011-07-05  Adam Barth  <abarth@webkit.org>

        garden-o-matic should list the failing tests
        https://bugs.webkit.org/show_bug.cgi?id=63978

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:


2011-07-05  Eric Seidel  <eric@webkit.org>

        Re-enable NRWT on Leopard now that bug 63973 is fixed.

        Reviewed by Adam Barth.

        I also made the should-enable expression a black-list instead
        of a white-list since every bot on build.webkit.org is
        now using NRWT except windows and WebKit2 bots.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Eric Seidel  <eric@webkit.org>

        Perl string concat failure on Leopard (causes NRWT to fail)
        https://bugs.webkit.org/show_bug.cgi?id=63973

        Reviewed by Daniel Bates.

        Leopard's "xcodebuild -version" has a different format from Snow Leopard/Lion
        thus the version parsing logic in webkitdirs.pm seems to fail.

        Default to "3.0" instead of undef when we can't parse the version number.
        This should send us down the correct path for Leopard.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2011-07-05  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix after addition of Source/WebCore/xml/parser dir.

        * waf/build/settings.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        Disable NRWT for Leopard until https://bugs.webkit.org/show_bug.cgi?id=63973 can be fixed.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Eric Seidel  <eric@webkit.org>

        Make run-webkit-tests pass --verbose to new-run-webkit-tests on qt/gtk bots.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:
        (runningOnBuildBot):

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add results_unittests.js to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=63971

        Reviewed by Eric Seidel.

        Adding these unit tests forced me to commit to an API for the results
        module.  I'm not sure if this is the API we'll end up with, but it's
        something not entirely unreasonable.

        Also, I've changed results.js over to WebKit style, as discussed previously.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:

2011-07-05  Eric Seidel  <eric@webkit.org>

        Teach run-webkit-tests how to translate --qt and --gtk for new-run-webkit-tests.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add first unit tests for garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=63969

        Reviewed by Eric Seidel.

        I've also reformated base.js to match WebKit style, as discussed in the
        previous bug.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/base_unittests.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html: Added.

2011-07-05  Eric Seidel  <eric@webkit.org>

        Move Qt, Gtk and Leopard to NRWT.

        We'll roll out any of these if we see problems.

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Adam Barth  <abarth@webkit.org>

        garden-o-matic should understand which tests have unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=63965

        Reviewed by Eric Seidel.

        Currently, this code just logs the list of unexpected failures to the
        console.  A future patch will do something useful with this
        information.  A testing harness will also come in the next patch.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/base.js: Added.
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-05  Adam Barth  <abarth@webkit.org>

        garden-o-matic should know how to fetch test results from the (NRWT) bots
        https://bugs.webkit.org/show_bug.cgi?id=63959

        Reviewed by Eric Seidel.

        Currently, this code just fetches the results and expectations JSON
        blob for Linux from the server and logs it to the console.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

2011-07-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Python tests are failing on leopard
        https://bugs.webkit.org/show_bug.cgi?id=63842

        Fix the missing flush() call that appears to be needed by the
        logging package in python 2.5. Also fix the regressions
        introduced in the run_webkit_test tests when we switched from
        thread to processes (since processes aren't available on 2.5).

        Also fix a missing "from __future__ import with_statement' in
        testfilehandler (unreviewed).

        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * TestResultServer/handlers/testfilehandler.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        re-enabling new-run-webkit-tests on the Snow Leopard WebKit1 bots
        now that we believe the stray http-server issue to be solved.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2011-07-05  Adam Barth  <abarth@webkit.org>

        Turns out we need to support numerals too because that's what jQuery
        uses by default.

        * TestResultServer/handlers/testfilehandler.py:

2011-07-05  Dirk Pranke  <dpranke@chromium.org>

        nrwt: allow for multiple http shards
        https://bugs.webkit.org/show_bug.cgi?id=63116

        Reviewed by Tony Chang.

        This modifies the sharding logic to support multiple http
        shards, but for now we clamp to one shard until we can test
        perf impact and flakiness impact.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-07-05  Dirk Pranke  <dpranke@chromium.org>

        Re-land nrwt: make sharding tests needing locks less hard-coded
        https://bugs.webkit.org/show_bug.cgi?id=63112

        Reviewed by Ojan Vafai.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-07-05  Adam Barth  <abarth@webkit.org>

        TestResultServer should support callback parameter for JSON
        https://bugs.webkit.org/show_bug.cgi?id=63961

        Reviewed by Ojan Vafai.

        This makes using jQuery.ajax so much more pleasant.

        * TestResultServer/handlers/testfilehandler.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        buildbot needs to understand whether NRWT exited early after having too many failures
        https://bugs.webkit.org/show_bug.cgi?id=63839

        Reviewed by Adam Barth.

        Fix-up the exited early messages printed by NRWT so that
        the buildbot can parse them as expected.
        It looks for lines using "if line.find('Exiting early') >= 0:"

        I also plumbed the "early exit" status through to results.json
        in the form of an "interrupted" bool.  It was unclear to me
        if results.json already had enough information to compute this bool
        itself.  It's possible Ojan could come up with a better fix.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:

2011-07-05  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests fails to start http server if one is already running
        https://bugs.webkit.org/show_bug.cgi?id=63956

        Reviewed by Adam Barth.

        * BuildSlaveSupport/kill-old-processes:
         - Removed ^M line endings and sorted the process names.
         - There are no functional changes to this file.
           (except that now that its using unix line endings it can be executed directly!)
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
         - Change the name to 'httpd' to match old-run-webkit-test paths.

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add basic ajax support to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=63874

        Reviewed by Eric Seidel.

        This patch adds some basic infrastructure to garden-o-matic.
        Currently, the infrastructure is just used to make the "quit" command
        use Ajax, but in the future, this infrastructure will be used to do
        more sophistocated remote proceedure calls.

        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:

2011-07-05  Adam Barth  <abarth@webkit.org>

        Add trivial garden-o-matic command (with server)
        https://bugs.webkit.org/show_bug.cgi?id=63872

        Reviewed by Eric Seidel.

        This patch adds a trivial "Hello, world" garden-o-matic command,
        complete with an HTTP server.  This command re-uses a bunch of code
        from the existing rebaseline-server command.  Over time, this command
        will grow to be a tool useful for gardening the WebKit tree.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/abstractservercommand.py: Added.
        * Scripts/webkitpy/tool/commands/gardenomatic.py: Added.
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html: Added.
        * Scripts/webkitpy/tool/servers/gardeningserver.py: Added.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:

2011-07-05  Adam Roben  <aroben@apple.com>

        Make prepare-ChangeLog include modified Perl functions in its ChangeLog template

        This is a very simple first cut. Functions must start with a line that starts with "sub "
        and end with a line that starts with a closing brace. No leading whitespace is allowed.
        Package names aren't parsed at all.

        Fixes <http://webkit.org/b/21591> prepare-ChangeLog should know how to find functions in
        Perl files

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog: Removed redundant code that ignored certain files when
        searching for function line ranges. This is already done inside the get_function_line_ranges
        function.
        (get_function_line_ranges): Cleaned up coding style a little bit. Call
        get_function_line_ranges_for_perl for files with .pl and .pm extensions. For files with an
        unknown extension or no extension, read the shebang line to try to determine the script
        interpreter. Call get_function_line_ranges_for_perl if the interpreter seems to be Perl.
        (get_function_line_ranges_for_perl): Added. Does extremely basic parsing of the file to find
        lines starting with "sub " or "}".

2011-07-05  Adam Roben  <aroben@apple.com>

        Clean up run-api-tests output on Windows

        We were mixing run-api-tests output with gtest output, and the result was a mess.

        Fixes <http://webkit.org/b/63954> run-api-tests output is very confusing on Windows

        Reviewed by Dan Bates.

        * Scripts/run-api-tests:
        (runTest):
        (populateTests):
        Made Windows use the formerly-Mac-only codepaths which correctly suppress gtest output
        except in verbose mode. Most changes are due to indentation. Use of the arch utility is now
        the only Mac-specific thing in these functions. Some other platform-specific code was moved
        from here...

        (prepareEnvironmentForRunningTestTool):
        (testToolPath):
        ...to here.

2011-07-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16652
        Firefox and JavaScriptCore differ in Number.toString(integer)

        Added forwarding header.

        * DumpRenderTree/ForwardingHeaders/wtf/StdLibExtras.h: Added.

2011-07-04  Anders Carlsson  <andersca@apple.com>

        Try to fix Qt build.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:

2011-07-04  Anders Carlsson  <andersca@apple.com>

        NP_RemoveProperty is not called back by Safari when delete npObject.prop is encountered in JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=63915
        <rdar://problem/7124300>

        Reviewed by Sam Weinig.

        Extend the NPRuntimeRemoveProperty to handle delete object.property from JavaScript.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_IdentifierIsString):
        (PluginTest::NPN_UTF8FromIdentifier):
        (PluginTest::NPN_IntFromIdentifier):
        (PluginTest::NPN_RetainObject):
        (PluginTest::NPN_ReleaseObject):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest::Object::removeProperty):
        (PluginTest::Object::identifierIs):
        (PluginTest::Object::NP_RemoveProperty):
        (PluginTest::Object::npClass):
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:
        (NPRuntimeRemoveProperty::TestObject::TestObject):
        (NPRuntimeRemoveProperty::TestObject::hasProperty):
        (NPRuntimeRemoveProperty::TestObject::getProperty):
        (NPRuntimeRemoveProperty::TestObject::removeProperty):
        (NPRuntimeRemoveProperty::PluginObject::PluginObject):
        (NPRuntimeRemoveProperty::PluginObject::~PluginObject):
        (NPRuntimeRemoveProperty::PluginObject::hasMethod):
        (NPRuntimeRemoveProperty::PluginObject::invoke):
        (NPRuntimeRemoveProperty::PluginObject::hasProperty):
        (NPRuntimeRemoveProperty::PluginObject::getProperty):
        (NPRuntimeRemoveProperty::NPP_GetValue):

2011-07-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kent Tamura.

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

        Only the core features are implemented. Most functions are actually
        stubs and will be implemented as soon as its features are needed.
        Build system changes will be made as soon as DRT is completely
        upstreamed.

        * DumpRenderTree/efl/LayoutTestControllerEfl.cpp: Added.
        (LayoutTestController::~LayoutTestController):
        (LayoutTestController::addDisallowedURL):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::copyDecodedHostName):
        (LayoutTestController::copyEncodedHostName):
        (LayoutTestController::dispatchPendingLoadRequests):
        (LayoutTestController::display):
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::keepWebHistory):
        (LayoutTestController::computedStyleIncludingVisitedInfo):
        (LayoutTestController::nodesFromRect):
        (LayoutTestController::layerTreeAsText):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        (LayoutTestController::pageProperty):
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageSizeAndMarginsInPixels):
        (LayoutTestController::webHistoryItemCount):
        (LayoutTestController::workerThreadCount):
        (LayoutTestController::notifyDone):
        (LayoutTestController::pathToLocalResource):
        (LayoutTestController::queueLoad):
        (LayoutTestController::setAcceptsEditing):
        (LayoutTestController::setAlwaysAcceptCookies):
        (LayoutTestController::setCustomPolicyDelegate):
        (LayoutTestController::waitForPolicyDelegate):
        (LayoutTestController::setScrollbarPolicy):
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::removeOriginAccessWhitelistEntry):
        (LayoutTestController::setMainFrameIsFirstResponder):
        (LayoutTestController::setTabKeyCyclesThroughElements):
        (LayoutTestController::setUseDashboardCompatibilityMode):
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setValueForUser):
        (LayoutTestController::setViewModeMediaFeature):
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setSmartInsertDeleteEnabled):
        (waitToDumpWatchdogFired):
        (LayoutTestController::setWaitToDump):
        (LayoutTestController::windowCount):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::setFrameFlatteningEnabled):
        (LayoutTestController::setSpatialNavigationEnabled):
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        (LayoutTestController::setAllowFileAccessFromFileURLs):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        (LayoutTestController::setAutofilled):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        (LayoutTestController::addMockSpeechInputResult):
        (LayoutTestController::setIconDatabaseEnabled):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::setPluginsEnabled):
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        (LayoutTestController::execCommand):
        (LayoutTestController::findString):
        (LayoutTestController::isCommandEnabled):
        (LayoutTestController::setCacheModel):
        (LayoutTestController::setPersistentUserStyleSheetLocation):
        (LayoutTestController::clearPersistentUserStyleSheet):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        (LayoutTestController::clearApplicationCacheForOrigin):
        (LayoutTestController::localStorageDiskUsageForOrigin):
        (LayoutTestController::originsWithApplicationCache):
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        (LayoutTestController::setAppCacheMaximumSize):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        (LayoutTestController::overridePreference):
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        (LayoutTestController::setDeveloperExtrasEnabled):
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        (LayoutTestController::removeAllVisitedLinks):
        (LayoutTestController::callShouldCloseOnWebView):
        (LayoutTestController::apiTestNewWindowDataLoadBaseURL):
        (LayoutTestController::apiTestGoToCurrentBackForwardItem):
        (LayoutTestController::setWebViewEditable):
        (LayoutTestController::markerTextForListItem):
        (LayoutTestController::authenticateSession):
        (LayoutTestController::setEditingBehavior):
        (LayoutTestController::abortModal):
        (LayoutTestController::hasSpellingMarker):
        (LayoutTestController::hasGrammarMarker):
        (LayoutTestController::dumpConfigurationForViewport):
        (LayoutTestController::setSerializeHTTPLoads):
        (LayoutTestController::setMinimumTimerInterval):
        (LayoutTestController::setTextDirection):
        (LayoutTestController::allowRoundingHacks):

2011-06-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, add myself as committer.

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

2011-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90347.
        http://trac.webkit.org/changeset/90347
        https://bugs.webkit.org/show_bug.cgi?id=63886

        Build breaks on Leopard, Chromium-win, WinCairo, and WinCE.
        (Requested by tkent on #webkit).

        * DumpRenderTree/ForwardingHeaders/wtf/StdLibExtras.h: Removed.

2011-07-03  Daniel Bates  <dbates@webkit.org>

        Import Checkout in scm_unittests.py and logging in svn.py to fix
        Python missing global variable errors

        Rubber-stamped by Adam Barth.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Import Checkout.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Import logging.

2011-07-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16652
        Firefox and JavaScriptCore differ in Number.toString(integer)

        Added forwarding header.

        * DumpRenderTree/ForwardingHeaders/wtf/StdLibExtras.h: Added.

2011-04-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Support third-party cookie policy for Qt clients
        https://bugs.webkit.org/show_bug.cgi?id=45455

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setAlwaysAcceptCookies):
        (LayoutTestController::setAlwaysBlockCookies):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-07-03  Adam Barth  <abarth@webkit.org>

        Factor ReflectionHandler out of the rebaseline server.  Just code motion.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py: Added.

2011-07-03  Adam Barth  <abarth@webkit.org>

        Move the rebaseline server out of the commands package and into the
        (new) servers package.  This patch prepares for refactoring this code
        to share server infrastructure with the (forthcoming) garden-o-matic
        command.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/servers/__init__.py: Added.
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/loupe.js:
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py: Added.

2011-07-01  Adam Barth  <abarth@webkit.org>

        Fix typo in master.cfg, hoping to trigger a master restart.

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

2011-07-01  Adam Barth  <abarth@webkit.org>

        Turn off new-run-webkit-tests and remove some debug logging.

        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Add some more debug logging to try to understand why we're getting
        stuck acquring the HTTP lock.

        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Refactor NRWT parsing logic in master.cfg to understand that run-webkit-tests might run NRWT
        https://bugs.webkit.org/show_bug.cgi?id=63854

        Reviewed by Dirk Pranke.

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

2011-07-01  Eric Seidel  <eric@webkit.org>

        new-run-webkit-tests results does not understand that mac uses test_expectations files
        https://bugs.webkit.org/show_bug.cgi?id=63838

        Reviewed by Adam Barth.

        We've decided to "enable" test_expectations for the Mac port for now.
        It makes the results.html results much more confusing to read, but at least they're
        no longer lying to us.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Temporarily disable waiting for ReportCrash to see how this code
        affects performance on the bots.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-07-01  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=63818
        Test bots shouldn't attempt to build TestWebKitAPI on Windows.
        TestWebKitAPI builds as a part of general webkit build and is a
        part of build products archive.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-api-tests:

2011-07-01  Adam Barth  <abarth@webkit.org>

        We shouldn't wait for ReportCrash while the timeout is running
        https://bugs.webkit.org/show_bug.cgi?id=63837

        Reviewed by Eric Seidel.

        Instead, we should move this check to worker.py.

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-07-01  Adam Roben  <aroben@apple.com>

        Stop setting unsafe headers on POSTs via XHR from TestFailures page

        Fixes <http://webkit.org/b/63833> TestFailures page causes a bunch of spew in the
        Inspector's console about unsafe headers

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (fetchResource): Removed unnecessary code to set Content-Length and Connection headers.

2011-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Switch Snow Leopard over to new-run-webkit-tests (except for wk2)
        https://bugs.webkit.org/show_bug.cgi?id=63786

        We're down to one bug blocking the "move to NRWT" bug:
        https://bugs.webkit.org/show_bug.cgi?id=34984
        so we're trying transitioning Snow Leopard to NRWT as an experiment.

        If we run into any blocking issues we'll of course roll this back out
        (or anyone reading this should feel encouraged to).

        * Scripts/run-webkit-tests:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Add a compat shim for --leaks.  Support for --leaks will be added in
        https://bugs.webkit.org/show_bug.cgi?id=63832.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        ReportCrash destabilizes new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63795

        ReportCrash chews up too many system resources that it destablizes
        tests run concurrently.  This patch causes us to spin down all the
        worker processes when ReportCrash is running.

        Also, this patch causes the master process to tell the user we're
        waiting for the crash reporter rather than having that be the worker's
        job.  This stops the user from getting spammed with too many "waiting
        for crash reporter" messages and also cleans up some minor UI issues
        with the meter.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:

2011-07-01  Adam Roben  <aroben@apple.com>

        Teach webkitpy about the new format of our ChangeLog template

        r90229 moved the "Need a short description and bug URL" line to the top of the ChangeLog
        template. But webkitpy didn't know this, so the various rollout-related commands were
        leaving that line in the ChangeLog.

        Fixes <http://webkit.org/b/63815> REGRESSION (r90229): webkit-patch rollout and sheriffbot
        rollout are broken

        Reviewed by Dan Bates.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.update_with_unreviewed_message): Changed to look for the "Need a short
        description and bug URL" line instead of the "Reviewed by" line as the first line of the
        ChangeLog template.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (ChangeLogTest): Updated _new_entry_boilerplate to match what prepare-ChangeLog now
        generates.

2011-07-01  Adam Roben  <aroben@apple.com>

        Make TestFailures stop loading old builds once we've explained all current failures

        We used to do this, but some refactoring in r90165 broke this logic.

        Fixes <http://webkit.org/b/63808> REGRESSION (r90165): TestFailures page always loads all
        builds back to the beginning of time

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Stop fetching old builds once we're told that
        all current failures have been explained.

2011-07-01  Adam Roben  <aroben@apple.com>

        commit-log-editor reorders ChangeLog entries in unexpected ways
        https://bugs.webkit.org/show_bug.cgi?id=63804

        Reviewed by Darin Adler.

        commit-log-editor was changed in r46899 to move the bug title and URL to the top of the
        commit message in order to make git-based tools, which expect the first line of the commit
        message to be a summary of the change, to work better. But this reordering of the ChangeLog
        entry was unpredictable and unexpected.

        I changed prepare-ChangeLog to put the bug title and URL at the top of the ChangeLog entry
        so that commit-log-editor doesn't have to move them. Then I changed commit-log-editor not to
        try to move them.

        * Scripts/commit-log-editor: Partially reverted r46899. We no longer save the "Reviewed by"
        line and try to move it down below the bug title and URL. The order of the text in the
        ChangeLog is now preserved, except that we insert a "Patch by" line just above the "Reviewed
        by" line in cases where the committer and author are not the same person.

        * Scripts/prepare-ChangeLog: Moved the "Reviewed by" line down below the bug title and URL.

2011-07-01  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Adam Roben.

        [CSSRegions] Add build slave
        https://bugs.webkit.org/show_bug.cgi?id=62372

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Add an entry for a release build of Mac.

2011-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90213.
        http://trac.webkit.org/changeset/90213
        https://bugs.webkit.org/show_bug.cgi?id=63792

        The SL bot has an errant HTTP server holding port 8080
        (Requested by abarth on #webkit).

        * Scripts/run-webkit-tests:

2011-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r90163.

        * MiniBrowser/gtk/WebBundle/WebBundleMain.c:
        (didCreatePage):

2011-07-01  Adam Barth  <abarth@webkit.org>

        Exit faster when we get a keyboard interrupt.  Previously, we'd open
        Safari if you ^C NRWT after it found a failure.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Switch Snow Leopard over to new-run-webkit-tests (except for wk2)
        https://bugs.webkit.org/show_bug.cgi?id=63786

        We're down to one bug blocking the "move to NRWT" bug:
        https://bugs.webkit.org/show_bug.cgi?id=34984
        so we're trying transitioning Snow Leopard to NRWT as an experiment.

        If we run into any blocking issues we'll of course roll this back out
        (or anyone reading this should feel encouraged to).

        * Scripts/run-webkit-tests:

2011-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90192.
        http://trac.webkit.org/changeset/90192
        https://bugs.webkit.org/show_bug.cgi?id=63788

        Appears to have caused NRWT on Chromium WebKit Vista to hang
        (Requested by abarth on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove the concept of "being wedged" from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63767

        Worker processes shouldn't ever become wedged.  My understanding is
        that this code was originally motivated by the old threading-based
        design but no longer servers any purpose.

        Note: If we actually have a problem with the test harness getting
        stuck, buildbot will kill us.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        The win32 implementation of fork is sad about forking test-webkitpy.
        Hopefully this will heal the bot.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update new-run-webkit-tests now that the wk2 shared skipped list has moved
        https://bugs.webkit.org/show_bug.cgi?id=63780

        The shared list was moved from mac-wk2 to wk2 as part of
        http://trac.webkit.org/changeset/90125.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-30  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Darin Adler.

        Style Checker should flag removal of "developmentRegion = English;" from project.pbxproj.
        https://bugs.webkit.org/show_bug.cgi?id=62022

        Adds XcodeProjectFileChecker to check removal of "developmentRegion".

        * Scripts/webkitpy/style/checker.py: Added XcodeProjectFileChecker as a checker for *.pbxproj.
        * Scripts/webkitpy/style/checkers/xcodeproj.py: Added.
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py: Added.

2011-06-30  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: make sharding tests needing locks less hard-coded
        https://bugs.webkit.org/show_bug.cgi?id=63112

        This change also changes the manager logic so that it will
        drop the server lock as soon as all of the shards requiring
        the lock have completed.

        This change includes some minor namespace/import changes in the
        unit tests, and also makes the Manager a new-style object, which
        it should've been all along.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove threaded mode from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63771

        This mode is not used and is buggy.  Rather than carry around a bunch
        of unused buggy code, we should rip it out and focus on the
        multiprocess implementation.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Clean up output from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=63759

        Printing messages from the child process looks super ugly because of
        the way the pretty-printer works.  Printing a blank line first is a
        hack, but it makes things at least partially sane.

        Also, handle the case where calling sample throws an exception.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:

2011-06-27  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] DRT: Provide LayoutTestController::setDefersLoading and ::goBack support
        https://bugs.webkit.org/show_bug.cgi?id=63489

        Unskipped:
            loader/navigation-while-deferring-loads.html

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        new-run-webkit-tests should stop when I ^C it
        https://bugs.webkit.org/show_bug.cgi?id=63763

        It still doesn't stop fast enough, but at least with this patch it
        doesn't run more tests.

        Also, I tweaked the UI that happens when there's a keyboard interrupt
        to not be amazingly ugly.  There's still a garbage "Te" left on the
        console, but that's a problem for another day.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-06-30  Adam Roben  <aroben@apple.com>

        Make TestFailures never treat a too-many-failures build as a last-passing build for a test

        Fixes <http://webkit.org/b/63758> TestFailures sometimes incorrectly says that a build was
        the last passing build for a test, when in fact the test wasn't run due to too many failures
        causing old-run-webkit-tests to exit early

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): If there were too many
        failures in this build, assume that all the tests failed in the last build would have failed
        in this build, too, had they been run. Introduced some new local variables to reduce typing,
        and used them throughout.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Fix a regression from r89841 where we wouldn't
        correctly remember whether old-run-webkit-tests exited early due to too many failures for
        builds older than r89610. Also removed an unused parameter while I was at it.

2011-06-30  Adam Roben  <aroben@apple.com>

        Make TestFaiulres only load old-results directories as needed

        Fixes <http://webkit.org/b/63752> Tester pages on TestFailures page load very slowly

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getBuildNames): Moved up into the API section of the class. Now just
        calls through to _getBuildNamesFromResultsDirectory.
        (Builder.prototype.getOldBuildNames): Added. Just calls through to
        _getBuildNamesFromResultsDirectory.
        (Builder.prototype._getBuildNamesFromResultsDirectory): Renamed from getBuildNames. Now
        takes the directory URL as an argument and only fetches that single URL.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Moved most logic to _analyzeBuilds. First
        analyzes builds from Builder.getBuildNames, then from Builder.getOldBuildNames if needed.
        (LayoutTestHistoryAnalyzer.prototype._analyzeBuilds): Moved logic here from start. (Most
        changes are just indentation.) Now takes a callback to call when we've finished analyzing
        all builds in buildNames so that we can try to fetch more build names if needed.

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Update MiniBrowser and WebKitTestRunner to use the client version constants.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowLoaderClientInit):
        (browserWindowUIClientInit):
        * MiniBrowser/gtk/WebBundle/WebBundleMain.c:
        (didCreatePage):
        (WKBundleInitialize):
        * MiniBrowser/gtk/main.c:
        (createWKContextWithInjectedBundle):
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (WKBundleInitialize):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):

2011-06-30  Adam Roben  <aroben@apple.com>

        Identify revisions that modified failing tests on TestFailures page

        Fixes <http://webkit.org/b/63716> TestFailures page should try to infer which commit caused
        a failure by looking at commit logs

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.existing-bugs-list, .suspect-revisions-list): Made this rule apply to the suspect
        revisions list, too.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac): Initialize our memory cache.
        (Trac.prototype.getCommitDataForRevisionRange): Added. Fetches the commit log in RSS form,
        then parses out the revision number, Trac's idea of the commit title, and the files modified
        by the commit. (To get the modified files, we rely on the commit message including a
        prepare-ChangeLog-style file list.)
        (Trac.prototype.logURL): Added a new formatAsRSS parameter.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (removePathExtension): Added. Returns a new string with the last dot and everything after it
        removed.
        (sorted): Added sortFunction parameter.
        (Node.prototype.removeAllChildren): Added. Does what it says.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change to _domForRegressionRange.
        (ViewController.prototype._domForRegressionRange): Changed argument order to match
        _domForNewAndExistingBugs. Now takes the list of failing tests and uses it to figure out
        which revisions modified the failing tests and displays the suspect revisions in a list.

2011-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename should_kill_dump_render_tree to driver_needs_restart in preparation for supporting WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=63743

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [GTK] Crash observed with nspluginwrapper and flash
        https://bugs.webkit.org/show_bug.cgi?id=62249

        Added a TestNetscapePlugin test which verifies that WebKit properly
        handles situations where InvalidateRect is called with a null instance.

        * DumpRenderTree/TestNetscapePlugIn/Tests/x11/CallInvalidateRectWithNullNPPArgument.cpp: Added.
        (CallInvalidateRectWithNullNPPArgument::CallInvalidateRectWithNullNPPArgument):
        (CallInvalidateRectWithNullNPPArgument::NPP_New):
        * GNUmakefile.am: Add the new file to sources list.

2011-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove redundant tests in TestFailuresTest
        https://bugs.webkit.org/show_bug.cgi?id=63742

        These tests are all already covered by TestFailuresTest.test_loads.
        I also added the missing "T" from TestFailuresest. :)

        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:

2011-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(r84294): new-run-webkit-tests results.html generate links to diffs.html or diff.png that don't exist
        https://bugs.webkit.org/show_bug.cgi?id=63494

        This patch does two things:

        1) Refactor diff_image to return the image diff instead of writing the
        diff to a file.  This fixes a bunch of hacks and disentangles a bunch
        of code.

        2) When there's a checksum mismatch but not image diff, we no longer
        report an IMAGE failure to results.html.  That fixes the bug in
        question because results.html won't try to link to a non-existent image
        diff.

        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py:

2011-06-28  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB: Prepare for running layout tests with LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=63593

        The TestShell must always provide a temporary folder for LevelDB,
        not just when the backing store type is overridden.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:

2011-06-30  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [WK2] Create a general wk2 specific LayoutTests/platform/wk2 platform
        qt-wk2, win-wk2, mac-wk2 use this common Skipped list too
        https://bugs.webkit.org/show_bug.cgi?id=61785 

        * Scripts/old-run-webkit-tests:

2011-06-30  Adam Roben  <aroben@apple.com>

        Use a colon to separate test names from failure info on TestFailures

        This matches how the "Possibly Flaky Tests" list works, and is much prettier when the
        failure info itself includes parentheses.

        Fixes <http://webkit.org/b/63722> Crashing symbols on TestFailures page look ugly due to
        double parentheses

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForFailedTest): Use a colon instead of surrounding the failure
        info in parentheses.

2011-06-30  Adam Roben  <aroben@apple.com>

        Robustify PersistentCache against cached data that contains the string ': '

        Fixes <http://webkit.org/b/63721> Exceptions thrown while loading TestFailures page due to
        passing a bad string to JSON.parse

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js:
        (PersistentCache._parseDateAndJSONFromString): Manually split the string on the separator
        using indexOf and substring. (String.prototype.split always splits on all instances of the
        separator.)

2011-06-30  Adam Roben  <aroben@apple.com>

        Include the crashing symbol in crash logs links on TestFailures

        Fixes <http://webkit.org/b/63465> Links to crash logs on TestFailures page should include
        the crashing symbol (like links in results.html do)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Bumped the cache version because we now store
        crashing symbols for crashing tests. Renamed testsForResultTable to parseResultTable because
        it now returns more than just the test names. Specifically, it now looks for crash log links
        and extracts the crashing symbol name from them. Updated callers of parseResultTable to
        match its new behavior. Changed to store the crashing symbol along with the failure type in
        the data we pass to the callback for tests which crashed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (code): Make <code> elements a little smaller because their contents can be quite long.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForFailureDiagnosis): Include the crashing symbol inside a
        <code> element in the link, if there is a crashing symbol.

2011-06-30  Adam Roben  <aroben@apple.com>

        Use objects instead of strings to represent a test result in TestFailures code

        This will eventually allow us to store more than just the type of failure for each test.
        (E.g., we can store the name of the crashing symbol for tests which crashed.)

        Prep work for <http://webkit.org/b/63465> Links to crash logs on TestFailures page should
        include the crashing symbol (like links in results.html do)

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.failureDiagnosisTextAndURL): Changed to expect a testResult object
        instead of just a failureType string.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js:
        (FlakyLayoutTestDetector.prototype.incorporateTestResults): Changed to store a
        testResult-like object for passing tests.
        (FlakyLayoutTestDetector.prototype.flakinessExamples): Changed to expect testResult-like
        objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Store a version number along with the cached data
        so we can throw away cached data that's in an old format. Store a testResult object for each
        test instead of just its failure type.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForFailedTest):
        (ViewController.prototype._domForFailureDiagnosis):
        Changed to expect testResult objects instead of failureType strings.

2011-06-30  Adam Roben  <aroben@apple.com>

        Show full commit logs when visiting Trac from TestFailures page

        Fixes <http://webkit.org/b/63715> Links to Trac on TestFailures page
        should show full commit logs

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac.prototype.logURL): Added new 'showFullCommitLogs' parameter. When specified, we add
        verbose=on to the log URL to tell Trac to show full commit logs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForRegressionRange): Specify true for showFullCommitLogs.

2011-06-30  Adam Roben  <aroben@apple.com>

        Add a link to file a bug about TestFailures to the TestFailures page

        Fixes <http://webkit.org/b/63466> TestFailures page should include a link to file a bug
        about TestFailures itself

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (aside): Added some styles for the new link. It is positioned in the upper-right and
        hopefully not to glaringly obvious.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype.loaded): Set up our main content element and auxiliary UI.

        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._displayTesters):
        Modify the main content element instead of the entire body, as there are other things in the
        body that we want to preserve.

        (ViewController.prototype._domForAuxiliaryUIElements): Create and return an <aside> element
        that contains a link to file a bug about the TestFailures page.

2011-06-30  Adam Roben  <aroben@apple.com>

        Ignore callbacks that correspond to old navigations of the TestFailures page

        Fixes <http://webkit.org/b/63711> TestFailures page sometimes ignores back/forward
        navigations

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer.prototype.start): Check the return value of the callback. If the
        callback returns false, stop fetching more data.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController): Initialize new _navigationID member. This member is used to assign each
        navigation by the user a unique ID.
        (ViewController.prototype.parseHash): Increment the navigation ID.

        (ViewController.prototype._displayBuilder):
        (ViewController.prototype._displayTesters):
        At the start of these functions, record the current navigation ID. Bail out from callbacks
        if the navigation ID has changed, indicating that the user has navigated elsewhere.

2011-06-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add back/forward menu to MiniBrowser toolbar
        https://bugs.webkit.org/show_bug.cgi?id=63445

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Use a GtkMenuToolButton for navigation
        widgets.
        (browserWindowConstructed): Get the page BackForwardList.
        (browserWindowHistoryItemActivated): Go to activated history item.
        (browserWindowHistoryItemSelected): Show the url of currently
        selected history item in the statusbar.
        (createGtkActionFromBackForwardItem): Create a GtkAction from a
        WKBackForwardListItemRef.
        (browserWindowCreateMenuItemFromBackForwardItem): Create a
        GtkMenuItem from a WKBackForwardListItemRef.
        (browserWindowCreateBackForwardMenu): Create a GtkMenu with the
        given history items.
        (browserWindowUpdateNavigationActions): Update navigation widgets
        sensitivity and history menus.
        (didChangeBackForwardList): Call
        browserWindowUpdateNavigationActions().
        (browserWindowLoaderClientInit): Add didChangeBackForwardList
        callback.

2011-06-30  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=63660
        This enables unit-tests step on Windows and MacOS SnowLeopard.

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

2011-06-30  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Implement the rest of WTR::PlatformWebView
        https://bugs.webkit.org/show_bug.cgi?id=63630

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2011-06-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        test-webkitpy is spamming lots of messages about updating test expectations
        https://bugs.webkit.org/show_bug.cgi?id=63680

        This patch changes the passing_run() function to capture the
        output to stdout and stderr and assert that it is empty, and
        also specifies --no-new-test-results by default to avoid getting
        "generating baseline" messages for the expected-missing results.

        Also check that we are logging messages when we generate new
        baselines.

        Also fix a minor bug in the way test_tolerance() was
        checking for whether the tests were passing or not.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-29  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        DRT: Make Hixie76WebSocketProtocolEnabled preference flag configurable from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=63532

        LayoutTestController::overridePreference() will be used to change the value of
        the Hixie76WebSocketProtocolEnabled preference flag from layout tests. In this way,
        we can avoid writing a lot of boilerplate code in each port's DumpRenderTree, but
        at least we need to reset preference values in DumpRenderTree every time we start
        a new test because preference values changed in some test should not be leaked
        to the next test.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        The name of preference key is defined in WebKit/{mac/WebView,win}/WebPreferenceKeysPrivate.h.
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        Set the default value. This will be called from TestShell::resetTestController().
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Set the default value.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Ditto.

2011-06-29  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style fails to detect https://webkit.org/b/XXXXX as a bug number
        https://webkit.org/b/57360

        Modify the regular expression to match https scheme.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Added a test case for https://webkit.org/b/XXXXX.
        * Scripts/webkitpy/common/config/urls.py: Modified bug_url_short to match https scheme.

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: images page switch actual and expected images before they're loaded
        https://bugs.webkit.org/show_bug.cgi?id=63199

        We now preload the images and keep the DOM nodes in memory instead of
        going back to the MemoryCache all the time.  (Also, remove some nutty
        </img> HTML.)

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should tell you when it creates new expectations
        https://bugs.webkit.org/show_bug.cgi?id=63675

        Unforunately, this patch creates a bunch of test-webkitpy spam because
        we don't understand how Python logging works well enough to stop the
        spam.  :(

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Refactor WebKitDriver.run_test into smaller pieces
        https://bugs.webkit.org/show_bug.cgi?id=63673

        There is no functional change here.  Just moving code around.
        This is in preparation for adding support for #CRASHED and #CRASHED - WebProcess

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Simplify skipped file finding in preparation for adding wk2 skipped list fallback
        https://bugs.webkit.org/show_bug.cgi?id=63501

        Re-landing after fixing a bug in WebKitPort.baseline_search_path which broke
        the rebaselineserver unit tests.  Also fixed nits brought up by Dirk after previous landing.

        The goal was to add support for wk2 skipped lists.
        However, I found that our skipped list computation was a
        manual hack (which only worked for the mac port).

        So I fixed a FIXME to move the skipped list finding
        into WebKitPort instead of MacPort.
        Doing so required the concept of a "port_name", since previously
        the only name accessible from a port object was name()
        which includes many things beyond "mac" or "chromium", etc.

        Eventually I believe we'll want to re-think the way that we pass
        in a port_name argument to Port subclasses and expect them to parse
        it.  But for now I just added a cls.port_name variable which contains
        the static information needed to compute wk2 names as well as
        compute Skipped list fallback which works for Mac/Win/Qt and Gtk.

        In order to test my new _skipped_file_search_paths method, I
        fixed another FIXME by making it return relative paths.

        I also fixed the test_expectations_path code in WebKitPort to use port_name.
        It was using name() which would return PORT-VERSION so MacPort was overriding
        it to use just PORT.  After fixing test_expectations_path to use port_name
        (and making it aware of webkit2) I was able to remove the MacPort implementation.

        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add port_name() to access "mac", since name() returns "mac-leopard" etc.
         - Document that real_name() seems to have no purpose.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
         - Add _parse_port_name(), eventually we might call this from WebKitPort directly.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Move Skipped-file finding code down to WebKitPort
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90070.
        http://trac.webkit.org/changeset/90070
        https://bugs.webkit.org/show_bug.cgi?id=63676

        Broke test-webkitpy rebaseline tests (Requested by eseidel2 on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests doesn't support sample-on-timeout
        https://bugs.webkit.org/show_bug.cgi?id=56731

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Simplify skipped file finding in preparation for adding wk2 skipped list fallback
        https://bugs.webkit.org/show_bug.cgi?id=63501

        The goal was to add support for wk2 skipped lists.
        However, I found that our skipped list computation was a
        manual hack (which only worked for the mac port).

        So I fixed a FIXME to move the skipped list finding
        into WebKitPort instead of MacPort.
        Doing so required the concept of a "port_name", since previously
        the only name accessible from a port object was name()
        which includes many things beyond "mac" or "chromium", etc.

        Eventually I believe we'll want to re-think the way that we pass
        in a port_name argument to Port subclasses and expect them to parse
        it.  But for now I just added a cls.port_name variable which contains
        the static information needed to compute wk2 names as well as
        compute Skipped list fallback which works for Mac/Win/Qt and Gtk.

        In order to test my new _skipped_file_search_paths method, I
        fixed another FIXME by making it return relative paths.

        I also fixed the test_expectations_path code in WebKitPort to use port_name.
        It was using name() which would return PORT-VERSION so MacPort was overriding
        it to use just PORT.  After fixing test_expectations_path to use port_name
        (and making it aware of webkit2) I was able to remove the MacPort implementation.

        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add port_name() to access "mac", since name() returns "mac-leopard" etc.
         - Document that real_name() seems to have no purpose.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
         - Add _parse_port_name(), eventually we might call this from WebKitPort directly.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Add _parse_port_name.
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Move Skipped-file finding code down to WebKitPort
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        new-run-webkit-tests complains about missing pixel results instead of plopping down new expectations
        https://bugs.webkit.org/show_bug.cgi?id=38063

        This patch changes new-run-webkit-tests to match old-run-webkit-tests
        in generating new expected results when the expected results are
        missing.

        There are still a couple details that are different:

        1) Image baselines aren't generated unless you run with -p.
        2) Render tree dumps are places in the cross-platform directory instead
        of the platform-specific directory.

        I'm inclined to deal with both of these issues in follow-up patches.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-29  Adam Roben  <aroben@apple.com>

        Teach TestFailures to detect possibly flaky tests and list them separately

        Fixes <http://webkit.org/b/61061> <rdar://problem/9452796> TestFailures page blames
        arbitrary revisions for breaking flaky tests

        Reviewed by Dan Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/FlakyLayoutTestDetector.js: Added.
        (FlakyLayoutTestDetector): This class identifies flaky tests when given the test results
        from various builds (in reverse-chronological order).
        (FlakyLayoutTestDetector.prototype.incorporateTestResults): Detects flaky tests. Tests move
        monotonically through three states: LastSeenFailing, LastSeenPassing, and PossiblyFlaky.
        (FlakyLayoutTestDetector.prototype.flakinessExamples): Finds examples of flakiness for the
        given test. Essentially, finds all the transitions from passing to failing (or vice-versa)
        and puts them in an array in reverse-chronological order.
        (FlakyLayoutTestDetector.prototype.get possiblyFlakyTests): Returns all tests we've detected
        to be possibly flaky.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer): Initialize new members.
        (LayoutTestHistoryAnalyzer.prototype.start): Now passes the callback an object with two
        properties: history and possiblyFlaky. history holds the data this function used to pass to
        the callback, while possiblyFlaky lists all tests that might be flaky and examples of their
        flakiness. Updated documentation comment to match.
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): Now uses a
        FlakyLayoutTestDetector to identify possibly flaky tests. Any possibly flaky tests are
        removed from the failure history, since when they started failing is no longer meaningful.
        We tell our caller to keep calling until all current failures have been explained and we've
        gone through 5 builds without any new flaky tests being identified.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (sorted): New helper function to return a sorted copy of an array.
        (Array.prototype.findLast): New helper function. Like findFirst, but finds the last item
        that matches the predicate.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change in the object passed to us by
        the analyzer. Now puts the list of possibly flaky tests after the failure history.
        (ViewController.prototype._domForFailedTest): Moved some code from here...
        (ViewController.prototype._domForFailureDiagnosis): ...to here.
        (ViewController.prototype._domForPossiblyFlakyTests): New function, builds up a list of
        possibly flaky tests and examples of their flakiness and returns it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        FlakyLayoutTestDetector.js.

2011-06-29  Eric Seidel  <eric@webkit.org>

        Adam says cowboys don't review (or unit test).

        * Scripts/webkitpy/tool/commands/download.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make port/config.py mockable for easier unit testing
        https://bugs.webkit.org/show_bug.cgi?id=63661

        Fix an exception from the unit tests.

        * Scripts/webkitpy/layout_tests/port/config.py:

2011-06-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops:
        Link against zlib1.dll, not the static zlib.lib.

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make port/config.py mockable for easier unit testing
        https://bugs.webkit.org/show_bug.cgi?id=63661

        Right now config.py leaks real system paths for
        webkit_base_dir due to using __file__.  This patch
        adds a filsystem.py wrapper around __file__ so that
        we don't have to jump through hoops in webkit_unittest.py
        to avoid leaking local paths to the unit test results.

        There are probably many more places where we should now
        use filesystem.path_for_module, but starting with just this one.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2011-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove duplicate methods in filesystem.py
        https://bugs.webkit.org/show_bug.cgi?id=63658

        Looks like there was a bad merge at some point.

        I also removed a bunch of redundant docstrings.

        * Scripts/webkitpy/common/system/filesystem.py:

2011-06-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Pass --no-new-test-results to NRWT on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=63653

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=38063.

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

2011-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        [GTK] overlapping drag&drop tests fail on NRWT
        https://bugs.webkit.org/show_bug.cgi?id=57640

        Make a GTK test driver that spawns one Xvfb instance per
        thread. This avoids bad interactions in DnD tests between threads.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89888.
        http://trac.webkit.org/changeset/89888
        https://bugs.webkit.org/show_bug.cgi?id=63609

         "Seems to be causing merging issues on the dashboard, e.g.
        http://test-
        results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20-%20chromium.org&tests=fast%2Fcanvas"
        (Requested by aboxhall on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [webkitpy] Executive.running_pids() sometimes doesn't correctly process "ps" output
        https://bugs.webkit.org/show_bug.cgi?id=63624

        * Scripts/webkitpy/common/system/executive.py: In some cases the
        ps output lines can contain one or more leading white-spaces, so
        strip it before splitting the pid and command name.

2011-06-29  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium] [DRT] ImageDiff should compile in VS2010
        https://bugs.webkit.org/show_bug.cgi?id=63614

        * DumpRenderTree/chromium/ImageDiff.cpp: Include <iterator> for back_inserter.

2011-06-27  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT support for setInteractiveFormValidationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=63496

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

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make new-run-webkit-tests -2 actually use WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=63572

        new-run-webkit-tests -2 works with this change.  However a zillion
        tests fail since it can't find the right skipped lists for wk2.
        The Skipped-list fixing is covered in bug 63501.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Roben.

        Add more machines to Chromium Mac Release and Chromium Mac Release (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=63500

        Added google-mac-3 and google-mac-4.

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

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Dirk Pranke.

        Remove webkitpy's tiger support now that WebKit no longer supports tiger
        https://bugs.webkit.org/show_bug.cgi?id=63568

        I don't think our support actually fully worked anyway.  Regardless
        tiger is dead now (thankfully)!

        I also unwrapped some short lines and added a couple FIXMEs while
        touring the code.

        No new tests, only removing old ones which tested our Tiger support.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/builders.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2011-06-28  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing a typo.

        Fix misspellings of "thead" to "thread".

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests needs a --webkit-test-runner option
        https://bugs.webkit.org/show_bug.cgi?id=63439

        This was accidentally fixed in bug 63501 as well.
        The root problem here was that the webkit unit tests were not using
        enough mocks.  I've fixed them here to use more mocks
        which should unbreak windows.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests should not run mthml tests when MHTML support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=63549

        This way mhtml tests won't show up as "missing" results on all non-chromium platforms.
        I happen to go looking for what code was deciding that .mht was a supported
        extension, found test_files.py and then removed some redundant doc-strings and
        if branching.

        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-28  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Tony Chang.

        Fix filesystem_unittest.FileSystemTest test_read_and_write_file()
        https://bugs.webkit.org/show_bug.cgi?id=63514

        - change write_text_file to write_binary_file
        - check that text_path and binary_path are actually existant files
        - change cleanup block from 'except' to 'finally'

        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-06-28  Adam Roben  <aroben@apple.com>

        Roll out r89924 and r89925

        I didn't mean to commit them!

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        NRWT should wait for ReportCrash
        https://bugs.webkit.org/show_bug.cgi?id=63495

        When a test crashes on Mac, ReportCrash confuses us into thinking the
        test times out.

        I'm not sure how to test this in a meaningful way in our current test
        harness...

        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89881.
        http://trac.webkit.org/changeset/89881
        https://bugs.webkit.org/show_bug.cgi?id=63513

        Makes Qt massively slow (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        NRWT should wait for ReportCrash
        https://bugs.webkit.org/show_bug.cgi?id=63495

        When a test crashes on Mac, ReportCrash confuses us into thinking the
        test times out.

        I'm not sure how to test this in a meaningful way in our current test
        harness...

        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should upload crash logs
        https://bugs.webkit.org/show_bug.cgi?id=55907

        NRWT used to have a different name for crash logs.  I've changed the
        name to patch ORWT.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests needs a --webkit-test-runner option
        https://bugs.webkit.org/show_bug.cgi?id=63439

        NRWT doesn't actually know how to run with the WebKitTestRunner yet
        but it does have a --webkit-test-runner option and will build WebKitTestRunner correctly.

        There is a bunch of other little cleanup in this patch which I added as I
        took a tour through all of our hard-coded DumpRenderTree strings.

        * Scripts/webkitpy/common/net/layouttestresults.py: Added FIXME.
        * Scripts/webkitpy/common/system/outputcapture.py: Fixed spacing to pass PEP8.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Made the FIXME slightly stronger (bad bug).
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: test_shell is dead.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Unwrapped silly wrapping.
        * Scripts/webkitpy/layout_tests/port/base.py: Removed two dead methods.
        * Scripts/webkitpy/layout_tests/port/config.py:
         - build_dumprendertree had no business in this class, removed it.
         - Exposed _FLAGS_FROM_CONFIGURATIONS through flag_for_configuration()
         - Exposed _script_path as script_path() (this probably belongs elsewhere).
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
         - Moved these tests to webkit_unittests.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Now respects the --webkit-test-runner option.
         - setup_test_run is empty in base.py too, no need to override it.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
         - Test the new hotness.
         - Bad, bad, bad!  The old code was using a real Executive during unit-testing!
           I think this code is still hitting disk during the unit tests. :(
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add the option.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/commandtest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Remove optional args option.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        new-run-webkit-tests does not report stderr output
        https://bugs.webkit.org/show_bug.cgi?id=37739

        Almost all the infrastructure appears to be in place to report stderr
        in results.html.  We just need to wire up a bool to tell results.html
        to create the hyperlink.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Dirk Pranke.

        webkitpy unit tests should have more descriptive names than just "Test"
        https://bugs.webkit.org/show_bug.cgi?id=63479

        Luckily we kept these classes in separate namespaces in the harness so
        we were actually running them all even though they had the same name.

        * Scripts/webkitpy/common/system/stack_utils_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:

2011-06-27  Greg Simon  <gregsimon@chromium.org>

        No review necessary.

        Add email addr to contributor list
        https://bugs.webkit.org/show_bug.cgi?id=63478

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

2011-06-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89834.
        http://trac.webkit.org/changeset/89834
        https://bugs.webkit.org/show_bug.cgi?id=63476

        Broke test-webkitpy (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-06-27  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Stop copying obsolete WebKit libraries on Windows
        https://bugs.webkit.org/show_bug.cgi?id=63474
        
        Don't copy obsolete WebKit library directories and files on Windows, they no longer exist and just generate extraneous warnings. These include the CharacterSets directory, dnssd.dll, and icudt40.dll.

        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd:
        * MiniBrowser/MiniBrowserPostBuild.cmd:
        * WebKitTestRunner/win/WebKitTestRunnerPostBuild.cmd:

2011-06-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add Wyatt Carss to the list of non-committer contributors.

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

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkitpy should understand crash logs
        https://bugs.webkit.org/show_bug.cgi?id=63468

        We're planning to use this functionality to upload crash logs along
        with test results for new-run-webkit-tests.

        * Scripts/webkitpy/common/system/crashlog.py: Added.
        * Scripts/webkitpy/common/system/crashlog_unittest.py: Added.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2011-06-27  Adam Roben  <aroben@apple.com>

        Make LayoutTestResultsLoader cache whether old-run-webkit-tests exited early due to too many
        failures

        Fixes <http://webkit.org/b/63470> TestFailures page for a particular builder forgets
        old-run-webkit-tests exited early after reload

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        (LayoutTestResultsLoader.prototype.start): Store both the set of failing tests and whether
        old-run-webkit-tests exited early due to too many failures in PersistentCache.

2011-06-27  Adam Roben  <aroben@apple.com>

        Make TestFailures load build names from build.webkit.org/old-results too

        Build results are periodically moved from results to old-results. This change makes those
        builds still visible to TestFailures.

        Fixes <http://webkit.org/b/63453> TestFailures page doesn't show information for builds that
        have been moved to build.webkit.org/old-results

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getBuildNames): Extracted code to parse build names from a
        build.webkit.org directory listing into a separate function. Instead of omitting .zip files,
        we now only include directory entries whose names are parseable as build names (since
        old-results sometimes contains other random files/directories from who knows what). We now
        fetch both results and old-results (with a FIXME about loading old-results on demand),
        extract build names from each, and concatenate the two sets of names.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.parseBuildName): Changed to return null when the build name isn't
        parseable, rather than throwing an exception.

2011-06-26  Adam Roben  <aroben@apple.com>

        Store analyzed history directly in LayoutTestHistoryAnalyzer instead of in a generic cache

        It seems silly to have a whole generic cache just to store a single object.

        Fixes <http://webkit.org/b/63407> LayoutTestHistoryAnalyzer has a generic cache but doesn't
        need one

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        (LayoutTestHistoryAnalyzer): Replaced this._cache with this._history.
        (LayoutTestHistoryAnalyzer.prototype.start): Ditto.
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory): Ditto, and removed the
        no-longer-needed history argument.

2011-06-26  Adam Roben  <aroben@apple.com>

        Move some inappropriate code out of Builder

        Fixes <http://webkit.org/b/63406> TestFailure page's Builder class has a bunch of code that
        isn't really about a builder

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getBuildNames): Renamed from _getBuildNames, since it now needs to be
        called by other objects.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestHistoryAnalyzer.js:
        Added. Code came from Builder.
        (LayoutTestHistoryAnalyzer):
        (LayoutTestHistoryAnalyzer.prototype.start):
        (LayoutTestHistoryAnalyzer.prototype._incorporateBuildHistory):

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/LayoutTestResultsLoader.js:
        Added. Code came from Builder.
        (LayoutTestResultsLoader):
        (LayoutTestResultsLoader.prototype.start):

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Changed to use LayoutTestHistoryAnalyzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in new
        scripts.

2011-05-17  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Implement CCLayerTreeHost and CCLayerTreeHostImpl portions of threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=58408

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests needs a --webkit-test-runner option
        https://bugs.webkit.org/show_bug.cgi?id=63439

        NRWT doesn't actually know how to run with the WebKitTestRunner yet
        but it does have a --webkit-test-runner option and will build WebKitTestRunner correctly.

        There is a bunch of other little cleanup in this patch which I added as I
        took a tour through all of our hard-coded DumpRenderTree strings.

        * Scripts/webkitpy/common/net/layouttestresults.py: Added FIXME.
        * Scripts/webkitpy/common/system/outputcapture.py: Fixed spacing to pass PEP8.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Made the FIXME slightly stronger (bad bug).
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: test_shell is dead.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Unwrapped silly wrapping.
        * Scripts/webkitpy/layout_tests/port/base.py: Removed two dead methods.
        * Scripts/webkitpy/layout_tests/port/config.py:
         - build_dumprendertree had no business in this class, removed it.
         - Exposed _FLAGS_FROM_CONFIGURATIONS through flag_for_configuration()
         - Exposed _script_path as script_path() (this probably belongs elsewhere).
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
         - Moved these tests to webkit_unittests.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Now respects the --webkit-test-runner option.
         - setup_test_run is empty in base.py too, no need to override it.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
         - Test the new hotness.
         - Bad, bad, bad!  The old code was using a real Executive during unit-testing!
           I think this code is still hitting disk during the unit tests. :(
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add the option.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/commandtest.py:
         - Remove optional args option.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Remove optional args option.

2011-06-27  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        [WK2] WebKitTestRunner should reset FrameFlattening flag to disable before each test
        https://bugs.webkit.org/show_bug.cgi?id=63457

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

2011-06-27  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Reviewed by Kent Tamura.

        [EFL] DRT: Add an ewk_view specialization for EFL's DumpRenderTree.
        It will be plugged into the build system as soon as the rest of the
        DRT code is fully upstreamed.
        https://bugs.webkit.org/show_bug.cgi?id=63086

        * DumpRenderTree/efl/DumpRenderTreeView.cpp: Added.
        (onConsoleMessage):
        (onJavaScriptAlert):
        (onJavaScriptConfirm):
        (onJavaScriptPrompt):
        (drtViewTiledAdd):
        * DumpRenderTree/efl/DumpRenderTreeView.h: Added.

2011-06-27  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kent Tamura.

        [EFL] Add an EventSender implementation to EFL's DumpRenderTree along
        with support files.
        Build system changes will be made as soon as the whole DumpRenderTree
        is upstreamed.
        https://bugs.webkit.org/show_bug.cgi?id=61962

        * DumpRenderTree/efl/EventSender.cpp: Added.
        (setEvasModifiers):
        (translateMouseButtonNumber):
        (sendMouseEvent):
        (sendClick):
        (scheduleAsynchronousClickCallback):
        (updateClickCount):
        (modifierFromJSValue):
        (modifiersFromJSValue):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (evasMouseEventFromHorizontalAndVerticalOffsets):
        (mouseScrollByCallback):
        (continuousMouseScrollByCallback):
        (keyPadNameFromJSValue):
        (keyNameFromJSValue):
        (keyDownCallback):
        (scalePageByCallback):
        (getClass):
        (makeEventSender):
        * DumpRenderTree/efl/EventSender.h: Added.

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove evil uses of hasattr
        https://bugs.webkit.org/show_bug.cgi?id=63430

        For some reason these classes believe that they may be called with
        various flavors of "option" elements and so carefully check to make
        sure that the options element has their option before checking it.

        We had a set_option_default method which was never called, so I made it
        do what callsites seemed to want it to do and replaced 3 callers
        who previously used hasattr manually to use set_option_default instead.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        [Chromium] WebViewHost should be destructed before LayoutTestController, etc.
        https://bugs.webkit.org/show_bug.cgi?id=63427

        ~WebViewHost() navigates to about:blank, so it calls some
        callbacks and LayoutTestController functions.

        * DumpRenderTree/chromium/TestShell.h:
         Move m_printer upper and move m_webViewHost lower.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move server config files to webkitpy.layout_tests.servers
        https://bugs.webkit.org/show_bug.cgi?id=63436

        The config files belong with the servers.

        * Scripts/webkitpy/layout_tests/port/httpd2.pem: Removed.
        * Scripts/webkitpy/layout_tests/port/lighttpd.conf: Removed.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/servers/httpd2.pem: Copied from Tools/Scripts/webkitpy/layout_tests/port/httpd2.pem.
        * Scripts/webkitpy/layout_tests/servers/lighttpd.conf: Copied from Tools/Scripts/webkitpy/layout_tests/port/lighttpd.conf.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move websocket_server and http_server to webkitpy.layout_package.servers
        https://bugs.webkit.org/show_bug.cgi?id=63434

        These classes do not represent ports.  They represent servers.

        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py: Removed.
        * Scripts/webkitpy/layout_tests/port/http_server_base.py: Removed.
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py: Removed.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/http_server.py.
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py.
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py.

2011-06-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove Chromium and ChromiumMac implementations of driver_name now that everything uses DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=63428

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move apache_http_server.py to webkitpy.layout_package.servers
        https://bugs.webkit.org/show_bug.cgi?id=63433

        The apache_http_server.py is a server, not a port.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py: Removed.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/servers: Added.
        * Scripts/webkitpy/layout_tests/servers/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py: Copied from Tools/Scripts/webkitpy/layout_tests/port/apache_http_server.py.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move rebaseline-chromium-webkit-tests.py to webkitpy.to_be_moved
        https://bugs.webkit.org/show_bug.cgi?id=63432

        This code isn't in the dependency cone of new-run-webkit-tests. It's
        unclear what it's final home should be, but this patch moves it out of
        layout_tests to simply the package.

        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Removed.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py: Removed.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests.py: Copied from Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py.
        * Scripts/webkitpy/to_be_moved/rebaseline_chromium_webkit_tests_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move update_webgl_conformance_tests.py to webkitpy.to_be_moved
        https://bugs.webkit.org/show_bug.cgi?id=63429

        This package as nothing to do with the layout_tests package.

        * Scripts/update-webgl-conformance-tests:
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py: Removed.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests_unittest.py: Removed.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py: Copied from Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests_unittest.py.

2011-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move deduplicate_tests.py into webkitpy.to_be_moved
        https://bugs.webkit.org/show_bug.cgi?id=63426

        deduplicate_tests.py doesn't haven anything to do with layout tests.
        It's really a separate script.  This patch moves it to the (new)
        to_be_moved package so that it doesn't distract us when working on NRWT.

        * Scripts/deduplicate-tests:
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py: Removed.
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py: Removed.
        * Scripts/webkitpy/test/main.py:
        * Scripts/webkitpy/to_be_moved: Added.
        * Scripts/webkitpy/to_be_moved/__init__.py: Added.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests.py: Copied from Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py.
        * Scripts/webkitpy/to_be_moved/deduplicate_tests_unittest.py: Copied from Tools/Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py.

2011-06-26  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Remove empty directory.

        * Scripts/webkitpy/layout_tests/test_types: Removed.

2011-06-25  Naoki Takano  <honten@chromium.org>

        Reviewed by Eric Seidel.

        Change my entry from contributors to committers.
        https://bugs.webkit.org/show_bug.cgi?id=63043

        * Scripts/webkitpy/common/config/committers.py: Change my e-mail from takano.naoki@gmail.com to honten@chromium.org. And move the entry to commiters from contributors.

2011-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [Chromium] Update WebKit for WEBKIT_FRAME_TO_DOCUMENT_API_MOVE
        https://bugs.webkit.org/show_bug.cgi?id=63394

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::queueLoad):

2011-06-25  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after r89426.

        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops:
          Link with Cairo DLL for new functionality.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp: Include compatibility
          code for snprintf.

2011-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        run-bindings-tests does not work on Chromium Windows.
        https://bugs.webkit.org/show_bug.cgi?id=63382

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Removed run-bindings-tests as a build step for cr-win.

2011-06-25  Dan Bernstein  <mitz@apple.com>

        Try to fix the Qt and Chromium builds.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setEncodedAudioData):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:

2011-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add an option to enable legacy rounding hacks
        https://bugs.webkit.org/show_bug.cgi?id=63363

        Added layoutTestController.allowRoundingHacks() and implemented it
        on OS X.

        * DumpRenderTree/LayoutTestController.cpp:
        (allowRoundingHacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::allowRoundingHacks):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::allowRoundingHacks):

2011-06-24  Adam Roben  <aroben@apple.com>

        Include the directory containing the failing tests in titles of bugs filed from TestFailures
        when all the tests won't fit

        Fixes <http://webkit.org/b/63350> Short bug titles from TestFailures page give no indication
        which tests are failing

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (longestCommonPathPrefix): Added. Given a set of paths, returns the longest common prefix
        that ends in a path separator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): When we can't fit all the test names
        in the title, first try to include the longest common prefix of the test names, then, if
        that's still too long or there's no common prefix, fall back to not including any
        information about which tests are failing.

2011-06-24  Adam Roben  <aroben@apple.com>

        Include links to Trac in bugs filed from TestFailures

        Fixes <http://webkit.org/b/63348> Bugs filed from TestFailures page should include links to
        Trac for suspect revisions

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js:
        (Trac.prototype.changesetURL): New function, returns the URL for a particular revision in
        Trac.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): If there's only one suspect revision,
        include a link to Trac for it in the first sentence of the description. Otherwise include a
        link to the suspect range after the list of failing tests.

2011-06-24  Nat Duca  <nduca@chromium.org>

        Unreviewed, rolling out r89694.
        http://trac.webkit.org/changeset/89694
        https://bugs.webkit.org/show_bug.cgi?id=58408

        Test shell still not ready for animate changes.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2011-06-24  Adam Roben  <aroben@apple.com>

        Fix typos introduced in r89696

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Pass the result data's constituent parts to the
        callback, since that's what it expects.

2011-06-24  Adam Roben  <aroben@apple.com>

        Make TestFailures correctly remember whether old-run-webkit-tests exited early

        Fixes <http://webkit.org/b/63342> TestFailures page incorrectly claims test run ran to
        completion after reload

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Instead of just storing the number of failures
        in the PeristentCache, store an object that contains both the number of failures and whether
        old-run-webkit-tests exited early.

2011-06-24  Adam Roben  <aroben@apple.com>

        Add links to regression ranges in Trac to the TestFailures page

        Fixes <http://webkit.org/b/61060> <rdar://problem/9452153> TestFailures page should provide
        links to regression ranges in Trac

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Trac.js: Added.
        (Trac): This new class represents a particular instance of Trac for a single project.
        (Trac.prototype.logURL): Returns the URL that can be used to see the log of the given
        repository path between the two specified revisions
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController): Added new trac argument.
        (ViewController.prototype._displayBuilder): Moved code to create the DOM for the
        passed/failed builds from here...
        (ViewController.prototype._domForRegressionRange): ...to here. Now also includes a link to
        Trac if there are multiple suspect revisions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        Trac.js and pass a Trac instance for trac.webkit.org to the ViewController.

2011-05-17  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Implement CCLayerTreeHost and CCLayerTreeHostImpl portions of threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=58408

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):

2011-06-24  Dominic Cooney   <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Convert shadow DOM-related tests to use window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61671

        Remove ensureShadowRoot, shadowRoot, shadowPseudoId and
        removeShadowRoot from layoutTestController; these have been
        replaced by equivalents in window.internals instead.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-06-24  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Dirk Schulze.

        Make run-bindings-tests remove its temporary directories.
        https://bugs.webkit.org/show_bug.cgi?id=63320

        * Scripts/run-bindings-tests:

2011-06-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium] Invalid write inside WebKit::FrameLoaderClientImpl::dispatchDidClearWindowObjectInWorld
        https://bugs.webkit.org/show_bug.cgi?id=63216

        Deleted m_webViewHost which looks leaked.
        
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell):

2011-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build.

        * WebKitTestRunner/GNUmakefile.am:

2011-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed, add myself as committer.

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

2011-06-23  Nat Duca  <nduca@chromium.org>

        Unreviewed, add myself as committer.

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

2011-06-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: move http locking code into manager
        https://bugs.webkit.org/show_bug.cgi?id=63103

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-23  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add support for running layout tests with accelerated rendering
        https://bugs.webkit.org/show_bug.cgi?id=63274

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-23  Adam Roben  <aroben@apple.com>

        Avoid fetching JSON data when possible on TestFailures page to determine if
        old-run-webkit-tests exited early

        As of r89610, results.html includes information about whether old-run-webkit-tests exited
        early, so we don't need to look at JSON data to get this information for builds newer than
        that.

        Fixes <http://webkit.org/b/63281> TestFailures page fetches build JSON for every build,
        which is slow and limits history to the last build master restart

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype._getFailingTests): Moved code dealing with results.html into a new
        function. If we're dealing with a build that has early-exit information in results.html,
        don't bother fetching JSON data and go straight to parsing results.html. Otherwise first use
        the JSON data to determine if old-run-webkit-tests exited early, and then parse results.html
        (as before).

2011-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        sheriffbot can no longer restart
        https://bugs.webkit.org/show_bug.cgi?id=63221

        Fixed and unit tested.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-06-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [WebKit2] WebKitTestRunner does not properly load TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=63287

        Send the path to the TestNetscapePlugin to the WKTR via an environment variable
        so that the plugin loads properly.

        * Scripts/old-run-webkit-tests: Pass the appropriate environment variable to WKTR.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::getEnvironmentVariableAsUTF8String): Added this helper which abstracts away some
        of the work for getting an environment variable and converting it to UTF-8.
        (WTR::TestController::initializeInjectedBundlePath): Use the helper.
        (WTR::TestController::initializeTestPluginDirectory): Get the path from an environment variable now.

2011-06-23  Adam Roben  <aroben@apple.com>

        Record whether old-run-webkit-tests aborted early in results.html

        Fixes <http://webkit.org/b/63280> results.html gives no indication of whether
        old-run-webkit-tests stopped running tests early

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (top level): Switched to heredoc syntax for printing the start of results.html for clarity.
        Added a <style> element with some styles for the new message. If we stopped running early,
        put the reason why at the top of results.html.
        (stopRunningTestsEarlyIfNeeded): Store the message we print in the new
        $stoppedRunningEarlyMessage global.

2011-06-23  Adam Roben  <aroben@apple.com>

        Cache some of the TestFailures page's data in localStorage

        This makes reloading TestFailures much faster. Right now we only store the number of failing
        tests and the list of failing tests for each build. We may choose to store more later, but
        it's easy to run up against quota limits.

        Fixes <http://webkit.org/b/61520> TestFailures page should take advantage of LocalStorage
        APIs (or similar) to improve loading performance

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Changed to use the new PersistentCache object.
        (Builder.prototype.startFetchingBuildHistory): Changed to pass whether or not we're still
        fetching data to the callback.
        (Builder.prototype._getFailingTests): Changed to use the new PersistentCache object. We now
        store the tests in the cache just before calling the callback. (The previous code in this
        function relied on being able to modify the tests object after storing it in the cache and
        having the cached version be updated. This worked while it was a non-serialized cache, but
        PersistentCache uses serialization.)

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/PersistentCache.js: Added.
        (PersistentCache): This object wraps localStorage. It uses JSON to serialize/deserialize
        values, and stores the date that each value was initially stored along with it. This is
        later used for pruning the cache.
        (PersistentCache.contains): Checks whether the key exists in localStorage.
        (PersistentCache.get): Fetch the string we stored in localStorage and extract the original
        value out of it.
        (PersistentCache.set): Serialize the value, add the date to it, and store it in
        localStorage. If this fails due to quota limits, empty the whole cache and try again.
        (PersistentCache.prune): Delete any cached data that is deemed old enough.
        (PersistentCache._addDateToJSONString): Prepend the current date to the string.
        (PersistentCache._emptyCache): Delete everything from localStorage.
        (PersistentCache._parseDateAndJSONFromString): Split apart the date and the JSON string and
        return them.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change to callback signature. When
        we finish fetching data, prune the PersistentCache. While I was here I also fixed a bug
        where we'd never show the new bug link for tests for which we couldn't determine a passing
        revision.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pull in
        PersistentCache.js.

2011-06-23  Adam Roben  <aroben@apple.com>

        Make finding existing bugs and filing new bugs work on TestFailures even when lots of tests are failing

        One bug this fixes is <http://webkit.org/b/61660> New bug links on TestFailures page often
        contain titles that are so long they are rejected by Bugzilla

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        (Bugzilla.prototype.quickSearch): Use fetchResource to POST the search query rather than
        using a query string on the URL. If the search query is very long, using a query string can
        cause the request to be rejected due to the URL being too long. POSTing avoids this issue.
        (Bugzilla.maximumBugTitleLength): Added this constant based on Bugzilla's implementation.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.new-bug-form): Hide the form that we secretly use to file a new bug.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (fetchResource): Added. Code came from getResource. If we're using a GET request, add the
        query parameters to the URL. Otherwise, send them as the body of the request along with the
        appropriate headers.
        (getResource): Now just calls through to fetchResource.
        (urlEncodedQueryParameters): Added. Moved some code here...
        (addQueryParametersToURL): ...from here.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): Shorten the title to just mention the
        number of failing tests if mentioning all the tests would make the title too long. Improved
        the description for large numbers of failures by listing the tests one-per-line instead of
        just having them be comma-separated, which was hard to read. Use a form to file the new bug
        instead of a link so that we can POST the form data. (Using a URL with a query string can
        result in the URL being too long.) The new bug link now just submits the form.

2011-06-23  Adam Roben  <aroben@apple.com>

        Show closed bugs on the TestFailures page in addition to open ones

        Fixes <http://webkit.org/b/63194> TestFailures page should show closed bugs, too

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js:
        (Bugzilla.prototype.quickSearch): Added code to extract the bug's status and store it in the
        returned data.
        (Bugzilla.isOpenStatus): New function, returns true if the passed-in status indicates that
        the associated bug is still open.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (addQueryParametersToURL): Add a missing semicolon.
        (Node.prototype.appendChildren): New function, like appendChild but takes an array-like
        object and appends each of the values stored within.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewAndExistingBugs): Prepend 'ALL' to the query so closed
        bugs will be included in the results. Split the returned bugs into two sets: those which are
        open, and those which are closed. Put the open bugs at the top level of the list, and the
        closed bugs in a second level.

2011-06-23  Adam Roben  <aroben@apple.com>

        Don't count new tests as failures on the TestFailures page

        Fixes <http://webkit.org/b/63254> TestFailures page calls new tests "failures", even though
        they aren't

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Don't add the number of new tests to the number
        of failures.

2011-06-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        nrwt: make TestInput objects printable
        https://bugs.webkit.org/show_bug.cgi?id=63225

        This makes debugging slighlty easier.

        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:

2011-06-22  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy --all errors out because scm_unittest.py can't find module checkout
        https://bugs.webkit.org/show_bug.cgi?id=62943

        Remove "from .checkout import Checkout" from scm_unittest.py since it's included
        by Scripts/webkitpy/common/checkout/__init__.py.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

2011-06-22  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Mark Rowe.

        Add window.internals to WebKit2's WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=61073

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pxbproj:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make sheriff-bot rollout messages a little nicer
        https://bugs.webkit.org/show_bug.cgi?id=63107

        itertools.chain.from_iterable is new in 2.6,
        use itertools.chain(*list) for 2.5 compat.

        * Scripts/webkitpy/tool/bot/irc_command.py:

2011-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make sheriff-bot robust against exceptions from commands
        https://bugs.webkit.org/show_bug.cgi?id=63211

        sheriff-bot was acting strange this afternoon.
        We don't know if this will fix the cause, but
        at least it adds some unit tests and catches
        one possible cause.

        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-06-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Levin.

        <http://webkit.org/b/63212> TestWebKitAPI Xcode project has bogus settings since r86287

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Fix the reference to libgtest.a to
        be relative to the built products directory rather than using a hard-coded path. Remove the
        explicit settings of FRAMEWORK_SEARCH_PATHS, HEADER_SEARCH_PATHS and LIBRARY_SEARCH_PATHS
        as they're all unnecessary. If they were necessary they should be set in the .xcconfig file
        rather than in the .xcodeproj directly.

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: remove obsolete port.shut_down_http_server method
        https://bugs.webkit.org/show_bug.cgi?id=59993

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-06-22  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Andreas Kling.

        Move macpherson from contributor list to committer list.
        https://bugs.webkit.org/show_bug.cgi?id=63179

        * Scripts/webkitpy/common/config/committers.py:
        Move macpherson from contributor list to committer list.

2011-06-22  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should detect returning (Own|Ref)Ptr instead of the Pass*Ptr version.
        https://bugs.webkit.org/show_bug.cgi?id=63204

        * Scripts/webkitpy/style/checkers/cpp.py: Added a check for the return value and combined
          with similar code for the parameter checking.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Removed pass_ptr checks from
          those done for single lines since they don't make sense in that case (variable decls look like function decls).
          Removed some redundant comments (one of which was slightly wrong).
          Added checks for the new functionality and minor other test changes.

2011-06-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add libsoup to libWebCoreInternals build.
        https://bugs.webkit.org/show_bug.cgi?id=62066

        * GNUmakefile.am:

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: handle missing httpd cleanly
        https://bugs.webkit.org/show_bug.cgi?id=62027

        We had reverted the change in r89414, so this adds it back in
        (modifying check_sys_deps() in port/base.py to check for an
        installed web server).

        This change then fixes the change in r89414 to stub out the
        check_sys_deps() in the test port so that the unit tests run correctly.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-06-22  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should check for invalid uses of RefPtr/OwnPtr as parameters.
        https://bugs.webkit.org/show_bug.cgi?id=63188

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests.

2011-06-22  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        Add a buildbot for testing ENABLE(CSS3_FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62891

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

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: don't look for http lock when running the test port
        https://bugs.webkit.org/show_bug.cgi?id=63158

        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-06-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Set up plugin tests
        https://bugs.webkit.org/show_bug.cgi?id=63066

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        Use the QTWEBKIT_PLUGIN_PATH environment variable as the path
        of the test plugin like DRT does.

2011-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        Make sheriff-bot rollout messages a little nicer
        https://bugs.webkit.org/show_bug.cgi?id=63107

        It annoyed me this afternoon that I had to convert sheriff-bots "r12345" revisions
        into urls myself.  So I have now fixed its "preparing" message to include a url.

        I also figured that I should make the messages mention all of the responsible parties
        so that rollouts are never surprises.  If you're in the channel and were involved
        in a patch, you will see if someone is using sheriff-bot to rollout a patch.

        As part of doing this I also changed (and tested) _parse_args to fail-fast
        when given invalid args.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-06-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        run-webkit-websocketserver fails to stop websocket server
        https://bugs.webkit.org/show_bug.cgi?id=63123

        There's a ten-character change in new-run-webkit-websocketserver
        that fixes the actual bug, and then we update the code in
        new-run-webkit-httpd to do the actual stop call, and add more tests
        (refactoring the existing test code so that it is shared).

        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:

2011-06-22  Adam Roben  <aroben@apple.com>

        Add links to existing bugs related to failing tests on TestFailures page

        I changed the layout of the page a little to make it easier to read with all the new
        information. Passing/failing revisions have been moved down below the list of tests to be
        closer to the existing bugs and the new bug link. And each set of tests and its relevant
        information is in a light gray box.

        Fixes <http://webkit.org/b/61665> TestFailures page should link to existing bugs when
        possible

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Bugzilla.js: Added.
        (Bugzilla): This new class represents a single Bugzilla instance.
        (Bugzilla.prototype.quickSearch): Searches Bugzilla using its Quick Search functionality,
        passing the resulting bug titles and URLs to the callback when complete. If called multiple
        times with the same query before the query returns, caches the callbacks so that only one
        query is sent over the wire. When the query completes, all pending callbacks are called.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (#failure-history): Reduce the margin/padding on the top-level list a bit.
        (#failure-history > li): Put each set of tests in a gray box, and indent most information
        inside the box.
        (.test-list): Unindent the list of failing tests so it is visually at the top level.
        (.new-and-existing-bugs): Reduce the space at the bottom of this area so that the bottom of
        each box isn't a big empty space.
        (.existing-bugs-list): Use a smaller text size for existing bugs, since their titles can be
        quite long.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js:
        (addQueryParametersToURL): New function extracted from
        ViewController.prototype._domForNewAndExistingBugs.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController): Take and store an optional Bugzilla instance.
        (ViewController.prototype._displayBuilder): Give the top-level list an id for styling
        purposes and move the list of failing tests above all other information. Only show bug
        information once we've determined the most-recent passing revision for a set of tests. It's
        not that useful to file a new bug before this information has been determined, and searching
        for existing bugs before we've figured out which tests started failing at the same time
        would end up giving you information about a bunch of unrelated tests.
        (ViewController.prototype._domForNewAndExistingBugs): Renamed from _domForNewBugLink. Now
        returns a DocumentFragment instead of an HTMLParagraphElement. If we don't have a Bugzilla
        instance, just returns an empty DocumentFragment. Starts a search for bugs related to the
        failing tests, and adds links to the bugs when the search completes.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Pass a
        Bugzilla instance for bugs.webkit.org to the ViewController.

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Apply current view settings to newly created views in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=63142

        * GtkLauncher/main.c:
        (createWebViewCb):

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use GOption to parse main arguments in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=63060

        Instead of getting the settings from the view, create a new
        settings object not associated with any view so that we can parse
        the command line arguments before creating the view. It will also
        allows to use the same settings for more than one view if we
        eventually support passing more than one uri from the command
        line.

        * GtkLauncher/main.c:
        (parseOptionEntryCallback): Make this function static. Also use
        g_ascii_strtoll/g_ascii_strtod to parse int/float values instead
        of atoi/atof to provide better error messages. And always fill the
        error struct when the function fails.
        (getOptionEntriesFromWebKitWebSettings): Use an array of
        GOptionEntry structs instead of a GArray, since that is what
        g_option_group_add_entries() expects and the array size doesn't
        change.
        (addWebSettingsGroupToContext): Helper function to add the
        websettings group to the option context.
        (main): Create the option context to parse command line arguments.

2011-06-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        [GTK] Implement pixel dump support for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=58242

        * DumpRenderTree/gtk/GNUmakefile.ImageDiff.am: Added.
        * GNUmakefile.am: Separate out the ImageDiff bits of the GNUmakefile.
        * Scripts/old-run-webkit-tests: Update to add support for the GTK+ port.
        * WebKitTestRunner/GNUmakefile.am: Added Cairo specific files to the build.
        * WebKitTestRunner/TestInvocation.cpp: Moved this code to the platform-independent
        file so that we can share it across platforms.
        (WTR::TestInvocation::compareActualHashToExpectedAndDumpResults):
        * WebKitTestRunner/TestInvocation.h: Updated method list.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp: Added Cairo implementation.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Updated to use new helper.

2011-06-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89414.
        http://trac.webkit.org/changeset/89414
        https://bugs.webkit.org/show_bug.cgi?id=63130

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

        * Scripts/webkitpy/layout_tests/port/base.py:

2011-06-22  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Dirk Pranke.

        [NRWT] Print error message when there is no httpd present on the system
        https://bugs.webkit.org/show_bug.cgi?id=62027

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:

2011-06-21  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.
        Fix crashes in new-run-webkit-tests resulting from the
        change to the http_server logic in r89400. Python 2.5
        on Mac 10.5 has some weird error paths.

        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/common/system/executive.py:

2011-06-21  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r89401 and r89403.
        http://trac.webkit.org/changeset/89401
        http://trac.webkit.org/changeset/89403
        https://bugs.webkit.org/show_bug.cgi?id=62970

        Breaks mac build and mistakenly enables the spellcheck API

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

2011-06-21  Kent Tamura  <tkent@chromium.org>

        [Mac] Sort Xcode project files.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2011-06-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck API should be build-able.
        https://bugs.webkit.org/show_bug.cgi?id=62970

        * Scripts/build-webkit:

2011-06-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: attempt #3 at fixing server startup/shutdown
        https://bugs.webkit.org/show_bug.cgi?id=62829

        Attempt yet again to make starting and stopping servers
        reliable. It turns out that apache has races between when the
        ctl process exists and when it writes/removes the pid file.
        This change accounts for the races.

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Added.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-21  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=63080
        Unit-tests step on test-only bot is broken.
        Removing the step until run-api-tests is fixed.

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

2011-06-20  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=63017
        "Unit tests" step on bots should provide more information in case of failure.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: added --verbose flag to UnitTests step.

2011-06-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: order shards by name, not number of tests
        https://bugs.webkit.org/show_bug.cgi?id=62753

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-06-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        we should only log the test names to the tests_run.txt files during layout_tests
        https://bugs.webkit.org/show_bug.cgi?id=62751

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue/ews-bots should run run-bindings-tests for every patch
        https://bugs.webkit.org/show_bug.cgi?id=63010

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-06-20  Chang Shu  <cshu@webkit.org>

        Reviewed by Adam Barth.

        fast/js/sputnik/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code tests fail when showModalDialog isn't supported
        https://bugs.webkit.org/show_bug.cgi?id=53676

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

2011-06-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        buildbots should run run-bindings-tests
        https://bugs.webkit.org/show_bug.cgi?id=63001

        run-bindings-tests takes 2.4 seconds on my machine, so
        I expect this will not be noticeable on the bots.

        I also removed tiger-specific checks since Tiger is no
        longer a supported platform for webkit.

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

2011-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r89249.

        * GtkLauncher/main.c:
        (main):

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove LayoutTestController::setTimelineProfilingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=62994

        * DumpRenderTree/LayoutTestController.cpp:
        (closeWebInspectorCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-06-20  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] General mechanism for adjusting WebKitWebSettings in GtkLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=55308

        * GtkLauncher/main.c: Added general mechanism for adjusting WebKitWebSettings.
        (parseOptionEntryCallback): Callback for parsing option entry.
        (getOptionEntriesFromWebKitWebSettings): Basing on the WebKitWebSettings properties prepare
        list of option entries.
        (transformStringToBoolean): Transform function for boolean convertion used by parseOptionEntryCallback.
        (transformStringToInt): Transform function for int convertion used by parseOptionEntryCallback.
        (transformStringToFloat): Transform function for float convertion used by parseOptionEntryCallback.
        (parseAdditionalOptions): Help function parsing additional commandline options.
        (main): Added call to parseAdditionalOptions.

2011-06-20  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Compile error in ActivateFontsQt.cpp on Mac
        https://bugs.webkit.org/show_bug.cgi?id=62869

        Add QFont include to fix "incomlete type QFont" error.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2011-06-19  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Martin Robinson.

        [GTK] Enable Media Stream feature and make it default on
        https://bugs.webkit.org/show_bug.cgi?id=60394

        * Scripts/build-webkit:

2011-06-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89198.
        http://trac.webkit.org/changeset/89198
        https://bugs.webkit.org/show_bug.cgi?id=62953

        Chromium breakage on "Linux Tests" (Requested by senorblanco
        on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

        Git.push_local_commits_to_server() should use passed username and
        password when we don't have cached credentials
        https://bugs.webkit.org/show_bug.cgi?id=62941

        Fixes a issue where Git.push_local_commits_to_server() would always look
        for cached credentials regardless of whether a username and password
        were passed as arguments. Instead, if given both a username and password
        then we shouldn't look for cached credentials (since we were explicitly given
        credentials).

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Added unit tests.

2011-06-18  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove run-javascriptcore-tests --skip-build option; Instead add --build/no-build options
        https://bugs.webkit.org/show_bug.cgi?id=62767

        Part 3 of 3

        Remove the command-line option --skip-build now that the master BuildBot has been restarted
        following <http://trac.webkit.org/changeset/89138>.

        Instead, specify --no-build to get analogous functionality.

        * Scripts/run-javascriptcore-tests:

2011-06-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: fix test sorting
        https://bugs.webkit.org/show_bug.cgi?id=58691

        This changes the sorting to use a "natural" sort order such that
        foo2.html sorts before foo13.html, and sorts the tests so
        that all the tests in a directory are run before any test in a
        subdirectory.

        This change also adds a split() method to the filesystem since
        that is needed to cluster files into a directory otherwise.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:

2011-06-18  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Compiler warning in double->int conversion in TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=51554

        This code is providing a JS API for removing a property by numeric ID.
        We get it from JS as a double, and must convert it to an int before using it.

        Test: LayoutTests/plugins/npruntime/remove-property.html

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:
        (NPRuntimeRemoveProperty::TestObject::invoke):

2011-06-18  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Don't exit webkit-patch when running on Win32 python
        https://bugs.webkit.org/show_bug.cgi?id=55811

        Most of the basic actions work in the meantime,
        so let people play with in on Win32 now.

        * Scripts/webkit-patch:

2011-06-18  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-06-18  Berend-Jan Wever  <skylined@chromium.org>

        Reviewed by Eric Seidel.

        Some names with spaces are incorrectly reported as not containing spaces
        while running prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=55572

        * Scripts/VCSUtils.pm: Updated CHANGE_LOG_NAME check for spaces to allow
          non-alphanumeric characters in names.

2011-06-18  Michael Saboff  <msaboff@apple.com>

        Reviewed by Eric Seidel.

        Enhancement: New Script to Format malloc_history output as tree
        https://bugs.webkit.org/show_bug.cgi?id=56378

        New script to process malloc_history output to tree format.

        * Scripts/malloc-tree: Added.

2011-06-17  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Daniel Bates.

        https://bugs.webkit.org/show_bug.cgi?id=62918 
        Pass configuration to UnitTests step in master.cfg

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

2011-06-17  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] Add Evas-based ImageDiff implementation.
        https://bugs.webkit.org/show_bug.cgi?id=61942

        Build system changes will be performed as soon as the complete
        DumpRenderTree implementation is upstreamed.

        * DumpRenderTree/efl/ImageDiff.cpp: Added.
        (pixelFromImageData):
        (differenceImageFromDifferenceBuffer):
        (computeDistanceBetweenPixelComponents):
        (calculatePixelDifference):
        (calculateDifference):
        (getTemporaryFile):
        (printImage):
        (printImageDifferences):
        (resizeEcoreEvasIfNeeded):
        (readImageFromStdin):
        (parseCommandLineOptions):
        (shutdownEfl):
        (abortWithErrorMessage):
        (initEfl):
        (main):

2011-06-17  Tony Chang  <tony@chromium.org>

        Reviewed by Dirk Pranke.

        [chromium] force rebaseline-chromium-webkit-tests to use the chromium port
        https://bugs.webkit.org/show_bug.cgi?id=62907

        This fixes a bug where the ImageDiff on the user's machine doesn't
        match the logic used on the Chromium buildbots.  This has the downside
        of requiring that the Chromium ImageDiff is built, but it turns out
        that even with --tolerance 0, the CG ImageDiff will allow small pixel
        differences through.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-06-17  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction.

        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops:
        Update WinCairo property sheet to link against the Cairo DLL,
        now that we are using a more recent Cairo build. 

2011-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Brian Weinstein.

        Create a simple example of using the COM-based C++ listeners.
        A new onclick event is attached (via C++) to the WebKit logo
        in the default test pattern displayed on startup.  Clicking on
        the logo causes a message box to be displayed.
        https://bugs.webkit.org/show_bug.cgi?id=61885

        * WinLauncher/DOMDefaultImpl.h: Added.  Stub implementation of
          the WebScriptObject and DOMEventListener.
        * WinLauncher/WinLauncher.cpp:
        (SimpleEventListener::SimpleEventListener): Example implementation
          of a simple DOM event listener.
        (SimpleEventListener::handleEvent): 
        (WinLauncherWebHost::didFinishLoadForFrame): Added implementation
         to bind a C++ method to the 'onclick' event for the WebKit logo.
        (_tWinMain):
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncher.vcproj: Add new DOMDefaultImpl.h file.

2011-06-17  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Support undo/redo in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=62809

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):

2011-06-17  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove run-javascriptcore-tests --skip-build option; Instead add --build/no-build options
        https://bugs.webkit.org/show_bug.cgi?id=62767

        Part 2 of 3

        Update the BuildBot master.cfg to use the new --no-build run-javascriptcore-tests
        command line option instead of --skip-build.

        We'll remove --skip-build from run-javascriptcore-test in a follow up patch once the
        master buildbot picks up the change.

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

2011-06-17  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove run-javascriptcore-tests --skip-build option; Instead add --build/no-build options
        https://bugs.webkit.org/show_bug.cgi?id=62767

        Part 1 of 3

        Towards renaming the option --skip-build to --no-build. Add --build/--no-build options to
        run-javascriptcore-tests. Also, add a remark about these options to the usage message
        printed by run-javascriptcore-tests.

        We'll remove --skip-build in a follow up patch once the master buildbot picks up the changes.

        * Scripts/run-javascriptcore-tests: Additionally, remove unnecessary initialization
          of $showHelp.

2011-06-17  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Replace GdkRectangle by cairo_rectangle_int_t
        https://bugs.webkit.org/show_bug.cgi?id=60687

        Replace GdkRectangle by cairo_rectangle_int_t.

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Replace GdkRectangle by cairo_rectangle_int_t.
        (createBitmapContextFromWebView):
        * DumpRenderTree/gtk/TextInputController.cpp: Ditto.
        (firstRectForCharacterRangeCallback):

2011-06-16  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=62603
        Run run-api-tests on bots in debug mode.
        Release mode is disabled due to https://bugs.webkit.org/show_bug.cgi?id=61812.

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

2011-06-16  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] DumpRenderTree: Add GCController, PixelDumpSupport and
        WorkQueueItem.
        They will be plugged into the build system once the EFL's DRT is
        fully upstreamed.
        https://bugs.webkit.org/show_bug.cgi?id=61958

        * DumpRenderTree/efl: Added.
        * DumpRenderTree/efl/GCControllerEfl.cpp: Added.
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp: Added.
        (createBitmapContextFromWebView):
        * DumpRenderTree/efl/WorkQueueItemEfl.cpp: Added.
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        * DumpRenderTree/efl/WorkQueueItemEfl.h: Added.
        (WorkQueueItem::~WorkQueueItem):
        (LoadItem::LoadItem):
        (LoadHTMLStringItem::LoadHTMLStringItem):
        (ScriptItem::ScriptItem):
        (LoadingScriptItem::LoadingScriptItem):
        (LoadingScriptItem::invoke):
        (NonLoadingScriptItem::NonLoadingScriptItem):
        (NonLoadingScriptItem::invoke):
        (BackForwardItem::BackForwardItem):
        (BackItem::BackItem):
        (ForwardItem::ForwardItem):

2011-06-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, make sure the waf build checks the webKitBranchBuild
        preference like the perl scripts do.

        * waf/build/build_utils.py:
        * waf/build/settings.py:

2011-06-16  Tommy Widenflycht  <tommyw@google.com>

        Reviewed by Tony Gentilcore.

        MediaStream API: Runtime enabled features
        https://bugs.webkit.org/show_bug.cgi?id=62798

        Add the WebRuntimeFeatures API for Media Streams and enable the feature by default in DumpRenderTree.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-06-16  Torsten Kurbad  <gentoo@tk-webart.de>

        Reviewed by Eric Seidel.

        Add support for sys.platform == 'linux3' by relaxing
        conditional statements and/or extending lookup dicts.
        This way, Linux kernels >=3.0-rc1 get supported in the
        build process.
        https://bugs.webkit.org/show_bug.cgi?id=62730

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/file_lock.py:
        * Scripts/webkitpy/common/system/path_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88796.
        http://trac.webkit.org/changeset/88796
        https://bugs.webkit.org/show_bug.cgi?id=62790

        It made fast/dom/nodesFromRect-basic.html time out on Qt,
        64-bit, debug mode (Requested by Ossy on #webkit).

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::nodesFromRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        (PlainTextController::plainText):
        * DumpRenderTree/qt/PlainTextControllerQt.h:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Revert the patches in r88995 and r88999; the http servers don't
        seem to be shutting down reliably.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add some debugging messages to triage problems introduced in
        r88995.

        * Scripts/webkitpy/layout_tests/port/http_server_base.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: should clean up stale server processes from a previous run
        https://bugs.webkit.org/show_bug.cgi?id=62615

        This change fixes cases where NRWT might start a server and then
        exit, leaving the server still running. Now NRWT should detect
        this case and clean up on the next run, without shutting down
        any processes it didn't start.

        This change also fixes a bug in executive.kill_process on UNIX
        where zombies weren't being handled properly.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: fix http, websocket server startup, shutdown
        https://bugs.webkit.org/show_bug.cgi?id=62180

        This change refactors all of the server-related code to
        have consistent semantics. It pushes the start()/stop()
        logic into the base class and adds four much smaller routines
        for specialization:
        _prepare_config() - for optionally writing config files etc.
            to disk prior to starting the server
        _remove_stale_log_files()
        _spawn_process() - the actual launch of the subprocess
        _cleanup_after_stop() - and custom cleanup code

        Prior to this change the three server implementations were
        fairly inconsistent, leading to lots of weirdness on the bots
        with servers being left around, etc.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: clean up code prior to functional changes for server startup/shutdown
        https://bugs.webkit.org/show_bug.cgi?id=62256

        This patch does a bunch of minor cleanup of the code, but there
        should be no functional changes except that all of the modules
        will now use the same exception type. Other changes include
        removing unused code paths and functions, pushing 'name' and
        'pid_file' into the base class of the server objects, and using
        the Filesystem object instead of the codecs, tempfile, and
        shutils modules.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: add integration tests for new-run-webkit-httpd, stop calling shut_down_http_server
        https://bugs.webkit.org/show_bug.cgi?id=62251

        shut_down_http_server() was a total hack that was only used by
        new-run-webkit-httpd, so I've moved the code there and switched
        to using executive.kill_process() for the common case. The
        method itself will be removed in the patch on bug 59993.

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Added.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix test-webkitpy failure introduced in r88986.

        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-06-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        NRWT: doesn't support webarchives, has stale skipping logic.
        https://bugs.webkit.org/show_bug.cgi?id=58293

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-15  Jeremy Orlow  <jorlow@webkit.org>

        Change my email to @webkit.org

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

2011-06-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by David Hyatt.

        CSS 2.1: Support replaced elements with relative intrinsic sizes
        https://bugs.webkit.org/show_bug.cgi?id=15849

        CSS 2.1 failure: html4/replaced-intrinsic-ratio-001
        https://bugs.webkit.org/show_bug.cgi?id=53099

        Recognize *.htm tests in the old & new DRT implementation, needed for the vanilla css2.1 html4 tests.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/test_files.py:

2011-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add a statusbar to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=62634

        It shows the url of the current hovered link.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed): Create the GtkSatusbar.
        (mouseDidMoveOverElement): Update statusbar text.
        (browserWindowUIClientInit): Add implementation for
        mouseDidMoveOverElement().
        * MiniBrowser/gtk/GNUmakefile.am: Add new files to compilation.
        * MiniBrowser/gtk/WebBundle/WebBundleMain.c: Added.
        (mouseDidMoveOverElement): Pass the url of the current hovered
        link to the UI process.
        (didCreatePage): Set the UI client adding an implementation for
        mouseDidMoveOverElement().
        (WKBundleInitialize):
        * MiniBrowser/gtk/main.c:
        (createWKContextWithInjectedBundle): Create a global context with
        the injected bundle.
        (loadURI): Use the global context.
        (main):

2011-06-14  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        https://bugs.webkit.org/show_bug.cgi?id=62495
        Bug 62495 - combine windows and mac kill-old-processes script
        Add a platform agnostic script.  Remove the recently added mac flavor.
        Note: Leaving the windows one alone, since it is currently used by the WebKit bots.
        
        * BuildSlaveSupport/kill-old-processes: Added.
        * BuildSlaveSupport/mac: Removed.
        * BuildSlaveSupport/mac/kill-old-processes: Removed.

2011-06-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: handle worker exceptions cleanly
        https://bugs.webkit.org/show_bug.cgi?id=62614

        This change modifiers new-run-webkit-tests to handle exceptions
        raised by worker threads better, by:
        - capturing the worker's stack and logging it in the manager
        - propagating the worker's exception in the caller correctly
        - attempting to cancel the workers and clean up even when
          we get an unexpected exception

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-06-14  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] fast/dom/HTMLScriptElement/nested-execution.html failed
        https://bugs.webkit.org/show_bug.cgi?id=62227

        QtWebkit does not yet support different CacheModels. This change will 
        expose setCacheModel() with a stub implementation, which is enough to pass the LayoutTest.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setCacheModel):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-14  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] tst_QWebFrame::overloadedSlots() fails
        https://bugs.webkit.org/show_bug.cgi?id=37319

        Since we don't implictly convert 'document' object to QWebElement
        in metacalls anymore, change the controller to expect QVariantMap instead.

        The method plainText() was updated to use QVariantMap as well to let the bridge
        do the conversion directly for us.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::nodesFromRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        (PlainTextController::plainText):
        * DumpRenderTree/qt/PlainTextControllerQt.h:

2011-06-14  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove dead code in DumpRenderTree/TestNetscapePlugIn/main.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62630

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New): remove dead variable 'forceCarbon'

2011-06-13  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        [NRWT] Fix a WebKitDriver so that it returns an actual hash value if DRT returns that.
        https://bugs.webkit.org/show_bug.cgi?id=59188

        A current WebKitDriver doesn't try to return an actual hash value if DRT does not return an image.
        WebKitDriver should always return an actual hash value if DRT returns that.

        No tests since I'll add sample reftests to make sure mismatch reftests work later,
        which should be in a separate patch.

        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-13  Kent Tamura  <tkent@chromium.org>

        [Chromium-win] Fix two wrong assertions exposed by r88757.

        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::paintTrackbar):

2011-06-13  Alexey Proskuryakov  <ap@apple.com>

        Added an updated e-mail address for Matt Lilek, to make Bugzilla autocomplete
        and commit queue happy.

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

2011-06-13  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Build fix to chromium DRT until we can rebaseline some tests
        https://bugs.webkit.org/show_bug.cgi?id=62608

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-06-13  Chris Rogers  <crogers@google.com>

        Reviewed by Dirk Pranke.

        Add Web Audio support to chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=62306

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::setEncodedAudioData):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::encodedAudioData):
        (LayoutTestController::shouldDumpAsAudio):
        (LayoutTestController::setShouldDumpAsAudio):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleAudioHeader):
        (TestShellPrinter::handleAudioHeader):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::dump):

2011-06-13  Jaehun Lim  <ljaehun.lim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Add load error handler to EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=62347

        Add a handler function of "load,error" to EWebLauncher.
        EWebLauncher now displays a simple error page on load errors.

        * EWebLauncher/main.c:
        (on_load_error):
        (browserCreate):

2011-06-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] [Qt] Eliminate duplicate TestNetscapePlugin implementation
        https://bugs.webkit.org/show_bug.cgi?id=62385

        Remove duplicate TestNetscapePlugIn implementation. Having two copies
        of this code makes keeping it in sync much more difficult. The files are
        almost identical and this change ports the X11 changes to main.cpp.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New): Do not set the plugin as windowless always. Doing this breaks
        some results on Qt and this seems to be unnecessary for the moment.
        (keyEventToChar): Added this helper which converts a X11 keycode into a char.
        (handleEventX11): Use the handler to properly convert the keycode. Do not print
        adjustCursorEvent output. The tests currently do not trigger this for Cocoa and thus
        it should not be in the results.
        (NPP_GetValue): Properly handle NPPVpluginNeedsXEmbed and make it clearer why the
        XP_UNIX block is first by guarding against using a null instance.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Update source list add
        the XP_UNIX define for Linux.
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp: Removed.
        * GNUmakefile.am: Update source list.

2011-06-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88671.
        http://trac.webkit.org/changeset/88671
        https://bugs.webkit.org/show_bug.cgi?id=62591

        "didn't work" (Requested by dpranke on #webkit).

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-13  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        New test method on TestNetscapePlugin for https://bugs.webkit.org/show_bug.cgi?id=61482.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:

2011-06-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: add integration tests for new-run-webkit-httpd, stop calling shut_down_http_server
        https://bugs.webkit.org/show_bug.cgi?id=62251

        shut_down_http_server() was a total hack that was only used by
        new-run-webkit-httpd, so I've moved the code there and switched
        to using executive.kill_process() for the common case. The
        method itself will be removed in the patch on bug 59993.

        * Scripts/new-run-webkit-httpd:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py: Added.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62578

        * Scripts/build-webkit:

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62545

        * Scripts/build-webkit:

2011-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Export an API similar to WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57820

        Build GtkLauncher2 for WebKit2. It's actually the same GtkLauncher
        code, but linking to libwebkit2gtk.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (createBrowser):
        (main):

2011-06-12  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r88625.
        http://trac.webkit.org/changeset/88625
        https://bugs.webkit.org/show_bug.cgi?id=61073

        Breaks SL Webkit2 Tests

        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-06-12  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] LayoutTestController needs setTextDirection implementation
        https://bugs.webkit.org/show_bug.cgi?id=62442

        Implements LayoutController.setTextDirection.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-12  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Hajime Morita.

        Add window.internals to WebKit2's WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=61073

        Test: fast/harness/internals-object.html

        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame): initialize window.internals
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-06-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88616.
        http://trac.webkit.org/changeset/88616
        https://bugs.webkit.org/show_bug.cgi?id=62517

        It broke editing/text-iterator/findString.html (Requested by
        tonikitoo on #webkit).

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-12  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] LayoutTestController needs setTextDirection implementation
        https://bugs.webkit.org/show_bug.cgi?id=62442

        Implements LayoutController.setTextDirection.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-06-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: 'images' links on results.html don't work
        https://bugs.webkit.org/show_bug.cgi?id=62194

        Use relative path when generating images-diffs.html

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        Added _output_testname.

2011-06-10  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Script to kill old processes on Mac.
        This matches the windows version.
        https://bugs.webkit.org/show_bug.cgi?id=62479  
        
        * BuildSlaveSupport/mac: Added.
        * BuildSlaveSupport/mac/kill-old-processes: Added.

2011-06-10  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        When sheriffbot reports failures on IRC instead of saying "(and more..)" it should say the number of tests that are failing
        https://bugs.webkit.org/show_bug.cgi?id=62489

        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        add a compile guard ENABLE(FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62049

        * Scripts/build-webkit:

2011-06-10  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dimitri Glazkov.

        <rdar://problem/9562114> Fix DumpRenderTree build for production configuration.

        Ensure that DumpRenderTree can find libWebCoreTestSupport.dylib and the associated
        header file.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2011-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rolling out r88471, because it broke plugin tests on Qt.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):
        (NPP_GetValue):
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp: Added.
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_instance):
        (webkit_test_plugin_set_window):
        (executeScript):
        (webkit_test_plugin_new_stream):
        (webkit_test_plugin_destroy_stream):
        (webkit_test_plugin_stream_as_file):
        (webkit_test_plugin_write_ready):
        (webkit_test_plugin_write):
        (webkit_test_plugin_print):
        (keyEventToChar):
        (webkit_test_plugin_handle_event):
        (webkit_test_plugin_url_notify):
        (webkit_test_plugin_get_value):
        (webkit_test_plugin_set_value):
        (NP_GetMIMEDescription):
        (NP_Initialize):
        (NP_Shutdown):
        (NP_GetValue):
        * GNUmakefile.am:

2011-06-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Implement the next bit of the TextInputController (hasMarkedText and markedRange)
        https://bugs.webkit.org/show_bug.cgi?id=55603

        Add callbacks to support hasMarkedText and markedRange and also clean up existing 
        TextInputController support.

        * DumpRenderTree/gtk/TextInputController.cpp:
        (setMarkedTextCallback): Accept parameters in terms of start and length, instead
        of start and end. This matches the other ports. Do not use GLib style early returns.
        (hasMarkedTextCallback): Added.
        (markedRangeCallback): Added.
        (insertTextCallback): Cleanup as described above.
        (unmarkTextCallback): Cleanup as described above.
        (firstRectForCharacterRangeCallback): Cleanup as described above.
        (selectedRangeCallback): Cleanup as described above.

2011-06-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: support webaudio in chromium driver
        https://bugs.webkit.org/show_bug.cgi?id=62226

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-06-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Added a test for Vector::reverse()
        https://bugs.webkit.org/show_bug.cgi?id=62393

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-06-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        [GTK] [Qt] Eliminate duplicate TestNetscapePlugin implementation
        https://bugs.webkit.org/show_bug.cgi?id=62385

        Remove duplicate TestNetscapePlugIn implementation. Having two copies
        of this code makes keeping it in sync much more difficult. The files are
        almost identical and this change ports the X11 changes to main.cpp.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (keyEventToChar): Added this helper which converts a X11 keycode into a char.
        (handleEventX11): Use the handler to properly convert the keycode. Do not print
        adjustCursorEvent output. The tests currently do not trigger this for Cocoa and thus
        it should not be in the results.
        (NPP_GetValue): Properly handle NPPVpluginNeedsXEmbed.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Update source list.
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp: Removed.
        * GNUmakefile.am: Update source list.

2011-06-09  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Tony Chang.

        Test plugin should support event logging on the windows port.
        https://bugs.webkit.org/show_bug.cgi?id=61721

        The WebKit win port interprets a 0 return from plugin NPP_HandleEvent()
        calls to mean the plugin handled the event.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventWin): Return 0 for each event on windows.

2011-06-09  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Many editing tests failed on missing shouldBeginEditingInDOMRange:range printout
        https://bugs.webkit.org/show_bug.cgi?id=62381

        Activate QGraphicsScene and setFocus on QGraphicsItem to make sure the view has the focus.
        QWKPagePrivate::isViewFocused() will check it later.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2011-06-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        Teach Qt about window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61074

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

2011-06-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Disable running layout tests on Mac EWS bots (and fix cr-linux bots to run them again)
        https://bugs.webkit.org/show_bug.cgi?id=62362

        The mac bots are failing inspector tests.  We don't know why yet.
        So for now, turning run-webkit-tests off for the mac-ews.

        Also noticed that due to the wrong variable name the cr-linux
        bots weren't running tests!

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-06-09  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonac.

        [Qt][WK2] Canvas tests make css2.1 ones failing
        https://bugs.webkit.org/show_bug.cgi?id=53427

        Adding a workaround for this issue by mimicing the behaviour of DumpRenderTree.
        Since the Qt port should eventually go to QRawFont, this issue will be resolved
        in the future. Both clearMemoryCaches() and removeAllApplicationFonts() are
        needed for the workaround.

        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::platformInitialize):

2011-06-09  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Provide a way in DRT to check the platform name
        https://bugs.webkit.org/show_bug.cgi?id=56855

        Patch for adding 'platformName' static property to DRT's
        LayoutController and provide platform specific implementations.

        In principle, this feature will be only of interest for writing
        accessibility tests, so that's why it's only implemented in the
        Mac, Gtk and Win platforms.

        * DumpRenderTree/LayoutTestController.h: New method platformName().
        * DumpRenderTree/LayoutTestController.cpp:
        (getPlatformNameCallback): New callback for 'platformName'.
        (LayoutTestController::staticValues): New static property.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::platformName): Implemented.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::platformName): Implemented.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::platformName): Implemented.

2011-06-08  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        Add mikelawther to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=62354

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

2011-06-08  Kent Tamura  <tkent@chromium.org>

        [Chromium] Fix a typo.

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::draw):

2011-06-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        [Chromium] Support vertical sliders in Windows DRT
        https://bugs.webkit.org/show_bug.cgi?id=62352

        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::draw):
          Paint VerticalSliderThumbType and VerticalSliderTrackType.
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:
          Add VerticalSliderTrackType and VerticalSliderThumbType.
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::paintTrackbar):
          Convert Windows identifiers to the internal identifiers for vertical sliders.

2011-06-08  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        add a short-flag for --experimental-fully-parallel
        https://bugs.webkit.org/show_bug.cgi?id=62321

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: don't turn the tree red when there are new passes
        https://bugs.webkit.org/show_bug.cgi?id=62311

        Look for "new passes" instead of "passed unexpectedly" in evaluateCommand
        to match commandComplete.

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

2011-06-08  Tom Hudson  <tomhudson@google.com>

        Reviewed by Mihai Parparita.

        Allow sorting in RebaselineServer based on 'metric' field in unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=60964

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        Add 'Sort tests by metric' link.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        (disableSorting): Activate 'Sort tests by metric' link.
        (enableSorting): Deactivate 'Sort tests by metric' link.
        (selectDirectory): Call enableSorting()/disableSorting() depending
        on currently selected failure type, and sort tests if requested.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        New .disabled-control class for deactivated links.

2011-06-08  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Adam Barth.

        Add web permissions callbacks for mixed content blocking.
        https://bugs.webkit.org/show_bug.cgi?id=61946

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setAllowDisplayOfInsecureContent):
        (LayoutTestController::setAllowRunningOfInsecureContent):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPermissions.cpp:
        (WebPermissions::allowDisplayingInsecureContent):
        (WebPermissions::allowRunningInsecureContent):
        (WebPermissions::setDisplayingInsecureContentAllowed):
        (WebPermissions::setRunningInsecureContentAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-06-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        webkitpy: fix typo causing us to skip the port unit tests in chromium_linux
        https://bugs.webkit.org/show_bug.cgi?id=62259

        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:

2011-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: master.cfg errors when nrwt successfully runs test
        https://bugs.webkit.org/show_bug.cgi?id=62303

        Access self.incorrectLayoutLines instead of incorrectLayoutLines in evaluateCommand.

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

2011-06-08  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Dimitri Glazkov.

        Control Indexeddb backends from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=61000

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-06-08  Andreas Kling  <kling@webkit.org>

        Add Pierre Rossi to contributors list for EZ-CC.

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

2011-06-08  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Andreas Kling.

        Add Ilya Sherman to list of committers
        https://bugs.webkit.org/show_bug.cgi?id=62270

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

2011-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: Bot master should print useful information on waterfall/console for nrwt
        https://bugs.webkit.org/show_bug.cgi?id=62178

        Added commandComplete and evaluateCommand for NewRunWebKitTests class
        to parse new-run-webkit-tests' results.

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

2011-06-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy: add a popen() call to executive
        https://bugs.webkit.org/show_bug.cgi?id=62179

        This change adds a popen() wrapper call to the Executive object.
        This will allow other webkitpy scripts that currently call
        subprocess directly to use Executive, instead.

        No additional tests are necessary (the existing tests cover the code).

        * Scripts/webkitpy/common/system/executive.py:

2011-06-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove repeated IPC traffic from SetRenderTreeSize message
        https://bugs.webkit.org/show_bug.cgi?id=62244

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        Add stub for didLayoutForFrame.

2011-06-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        rebaseline-chromium-webkit-tests: fix baselining order for linux, linux_x86_64
        https://bugs.webkit.org/show_bug.cgi?id=62241

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-06-07  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Enable tests on the mac-ews

        When we bring the mac-ews back up, we're going to try running tests!

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-06-07  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=62215
        Allow comparisons with 0 in LIKELY and UNLIKELY macros.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-06-07  Nico Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] -Wdelete-non-virtual-dtor pass for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=62210

        The change to TestEventPrinter fixes a latent bug, because
        objects are deleted through the TestEventPrinter type, but none
        of the subclasses have destructors or non-POD members.

        The changes to NotificationPresenter and WebViewHost do _not_ to fix a
        real bug, they just make clang's -Wdelete-non-virtual-dtor happy. As
        discussed at http://codereview.chromium.org/7094005/, we prefer making
        leaf class destructors virtual over making the leaf classes final.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::~NotificationPresenter):
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::~TestEventPrinter):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/WebViewHost.h:

2011-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dirk Pranke.

        [chromium] Chromium bots on build.webkit.org don't upload results.html
        https://bugs.webkit.org/show_bug.cgi?id=61961

        Don't fix the path on chromium port erroneously.

        * BuildSlaveSupport/test-result-archive:

2011-06-06  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build by ensuring that the autogenerated sources
        necessary for libWebCoreInternals are recorded in a predeclared
        variable before assigning to BUILT_SOURCES.

        * GNUmakefile.am: Predeclare libwebcoreinternals_built_sources.

2011-06-06  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=62097
        Fix the problem that integral bitfield check incorrectly barked at ?: expressions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-06-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Enable feature/symbol detection in NWRT/GTK
        https://bugs.webkit.org/show_bug.cgi?id=62136

        Disable feature detection through DRT, since we don't support it,
        and set the libwebcore patch correctly so that symbol detection
        through 'nm' works.

        * Scripts/webkitpy/layout_tests/port/gtk.py:

2011-06-06  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Add a "prerender" state for page visibility.
        https://bugs.webkit.org/show_bug.cgi?id=62062

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setPageVisibility):

2011-06-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Implement download feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61865

        Buildfix for --minimal and CONFIG+=qt_minimal build after r88161.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        * QtTestBrowser/launcherwindow.h:

2011-06-06  Barát Tibor  <Barat.Tibor@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement download feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61865

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::downloadRequest):
        (LauncherWindow::fileDownloadFinished):
        * QtTestBrowser/launcherwindow.h:

2011-06-04  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make DumpRenderTree initialize window.internals.
        https://bugs.webkit.org/show_bug.cgi?id=61076

        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: link WebCoreTestSupport.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObjectForFrameInStandardWorld):

2011-06-06  Alexandru Chiculita  <achicu@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
        https://bugs.webkit.org/show_bug.cgi?id=61628

        * Scripts/build-webkit:

2011-06-06  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE(CSS_REGIONS) guard for CSS Regions support
        https://bugs.webkit.org/show_bug.cgi?id=61631

        * Scripts/build-webkit:

2011-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build.

        * GNUmakefile.am: Use javascriptcore_cflags when building libWebCoreInternals.

2011-06-05  Alexey Proskuryakov  <ap@apple.com>

        Add an e-mail address for Cameron McCormack that matches Bugzilla (so that auto-completion
        works properly).

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

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Update git branch build dir handling to match what other
        WebKit scripts expect, so other scripts work properly with wx.

        * waf/build/build_utils.py:
        * waf/build/settings.py:

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Restore the PPC build and allow users to specify architectures
        to build on Mac.

        * waf/build/settings.py:
        * wx/install-unix-extras:

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for recent trunk changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setTextDirection):
        * waf/build/settings.py:

2011-06-04  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build.

        * GNUmakefile.am: Add some missing newline escape.

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ bulid.

        * GNUmakefile.am: Add JSDOMWrapper.cpp to the libWebCoreInternals
        source list.

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        nrwt: should skip chromium test expectation overrides on upstream bots
        https://bugs.webkit.org/show_bug.cgi?id=61888

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: minor logging, code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=62055

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the build failure on the GTK+ 32-bit Release bot.

        * GNUmakefile.am: Add JSInternal.{cpp,h} to the BUILT_SOURCES list.

2011-05-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ryosuke Niwa.

        [GTK] Support smart replace for the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=61734

        Call into the DumpRenderTreeSupportGtk hooks to toggle smart replace.
        This is required to produce consistent test results.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Set the smart replace setting to on by default.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSmartInsertDeleteEnabled): Added an implementation of this
        methods which calls into DumpRenderTreeSupportGtk.

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dimitri Glazkov.

        Teach Gtk build about window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61071

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared): Inject the new internals object when the
        window object clears.
        * GNUmakefile.am: Add new source files and includes necessary for window.internals.
        Also do a little bit of cleanup.

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Worker may not be stopped after LT.
        https://bugs.webkit.org/show_bug.cgi?id=61847

        Re-submit a variant of the first fix for this bug. It's possible
        that actually calling cleanup() in the worker threads was taking
        too long and we triggered the assertions in the manager thread.

        I've bumped up the timeout in the manager and added better
        diagnostics. I also cleaned up the cleanup() code a bit because
        there was some unnecessary if-checks.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: fix duplicate logging regression
        https://bugs.webkit.org/show_bug.cgi?id=61981

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2011-06-03  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Adam Barth.

        Modified addTouchPoint to correctly re-use touchPoint id values starting
        from the lowest not-un-use touchPoint id as is done by the embedder
        APIs. (Fixes BUGCR36415)

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

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::addTouchPoint):

2011-06-03  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Draw DRT scroll bar thumb with CG when WebKit renders with Skia
        https://bugs.webkit.org/show_bug.cgi?id=61534

        Skia on Mac uses Skia to render WebKit, and CG
        to render UI elements. The CG elements need a
        transcribed graphics context that preserves the
        canvas matrix, and the canvas clip.

        The SkiaBitLocker utility class sets up a CGContext
        from the SkCanvas, locks the bitmap's bits, and
        releases the lock when the class goes out of scope.

        The SkiaBitLocker implementation is described by
        this patch:
        http://codereview.chromium.org/7031006/

        When WebKit uses Skia for rendering, the WebCanvas
        is an SkCanvas. Create an equivalent CGContext to
        draw the scrollbar thumb.

        As the Chrome Mac port does not yet use Skia, this
        patch has no effect and requires no tests.

        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm:
        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):

2011-06-03  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        Fix typo.

        * Scripts/old-run-webkit-tests:

2011-06-03  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Print error message when there is no httpd present on the system
        https://bugs.webkit.org/show_bug.cgi?id=61939

        * Scripts/old-run-webkit-tests: Propose to run with --no-httpd.
        * Scripts/webkitperl/httpd.pm:

2011-06-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] cpu-profiler-profiling layout test is flaky on Linux Debug.
        https://bugs.webkit.org/show_bug.cgi?id=61533

        Skip cpu-profiler-profiling in debug, implement a fast headless alternative.

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::setJavaScriptProfilingEnabled):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setJavaScriptProfilingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-06-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        NRWT needs a way to log to a file without including backspaces without needing --verbose
        https://bugs.webkit.org/show_bug.cgi?id=60328

        This change modifies NRWT so that if it can tell if it is
        writing to a terminal, it will overwrite any messages printed
        in the 'one-line-progress' and 'updates' print options, and if
        not (or if --verbose was specified) the messages will be printed
        without backspaces.

        If the overwriting updates are disabled, one-line-progress will
        only print every 10 seconds instead of on every update. This
        ensures that we still get updates once in a while while the
        tests are running, even if we're not in --verbose mode. Note
        that one-line-progress will now still be printed in --verbose,
        since it's useful as long as you're not flooded with the
        updates.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-06-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] autogen.sh is run twice for each buld on the bots
        https://bugs.webkit.org/show_bug.cgi?id=61951

        * Scripts/webkitdirs.pm: Only check the previous autotools arguments
        for the WebKit project. This prevents build-jsc runs from forcing subsequent
        build-webkit runs to re-rerun autogen.sh.

2011-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87946.
        http://trac.webkit.org/changeset/87946
        https://bugs.webkit.org/show_bug.cgi?id=61965

        Cause NRWT to break (Requested by abarth|gardener on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linking new WebCoreTestSupport library.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow): Added injection code.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]): Ditto.

2011-06-02  Hao Zheng  <zhenghao@chromium.org>

        Reviewed by Dirk Pranke.

        Call cleanup() explicitly at the end of worker.run().
        https://bugs.webkit.org/show_bug.cgi?id=61847

        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r87926.
        http://trac.webkit.org/changeset/87926
        https://bugs.webkit.org/show_bug.cgi?id=60313

        Fails to find WebCoreTestSupport.dylib on bots.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):

2011-05-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linking new WebCoreTestSupport library.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow): Added injection code.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]): Ditto.

2011-06-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        Adjust efl coding style to more efl directories
        https://bugs.webkit.org/show_bug.cgi?id=61903

        * Scripts/webkitpy/style/checker.py: Adjust efl coding style to efl directories.

2011-06-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        old-run-webkit-tests: add support for audio files
        https://bugs.webkit.org/show_bug.cgi?id=57992

        * Scripts/old-run-webkit-tests:

2011-06-01  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Implement layoutTestController.setImagesAllowed for controlling the respective behavior of the WebPermissionClient
        https://bugs.webkit.org/show_bug.cgi?id=34314

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setImagesAllowed):
        (LayoutTestController::setStorageAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPermissions.cpp: Copied from Tools/DumpRenderTree/chromium/WebPermissions.h.
        (WebPermissions::WebPermissions):
        (WebPermissions::~WebPermissions):
        (WebPermissions::allowImages):
        (WebPermissions::allowStorage):
        (WebPermissions::setImagesAllowed):
        (WebPermissions::setStorageAllowed):
        (WebPermissions::reset):
        * DumpRenderTree/chromium/WebPermissions.h:

2011-06-01  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Tony Chang.

        Test plugin should support event logging on the windows port.
        https://bugs.webkit.org/show_bug.cgi?id=61721

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventWin): Well, handle them.

2011-06-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Use correct file name for dragging out images.
        https://bugs.webkit.org/show_bug.cgi?id=24887

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::dumpFilenameBeingDragged):
        * DumpRenderTree/chromium/EventSender.h:

2011-06-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt: make webaudio work w/o content-length header
        https://bugs.webkit.org/show_bug.cgi?id=61819

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-06-01  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][WK2] Add QGLWidget viewport support to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61802

        Add command line parameter and menu item to MiniBrowser application 
        enabling use of QGLWidget for browser viewport.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::toggleGLViewport):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Print out autogen arguments when they differ from the last set, to help
        with debugging build issues.

        * Scripts/webkitdirs.pm: Print out previous and current build arguments
        when they differ.

2011-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] run-launcher should run MiniBrowser in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=61858

        * Scripts/run-launcher: Check whether -2 command line option has
        been passed and run MiniBrowser instead of GtkLauncher.

2011-05-31  Hao Zheng  <zhenghao@chromium.org>

        Reviewed by Dirk Pranke.

        Fix exception in verbose printing mode.
        https://bugs.webkit.org/show_bug.cgi?id=61723

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2011-05-31  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=54807
        We have been assuming plain bitfields (like "int a : 31") are always signed integers.
        However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain
        bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned.
        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html
        Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers,
        always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good
        rule we should have in order to make our code independent from compilers and compiler flags.

        * Scripts/webkitpy/style/checkers/cpp.py:

2011-05-31  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        Add a JavaScript function layoutTestController.setTextDirection().
        https://bugs.webkit.org/show_bug.cgi?id=50952

        This change adds a new JavaScript function setTextDirection() to the
        LayoutTestController class of Safari and Chrome to write layout tests
        that changes the text direction of an editable element.

        * DumpRenderTree/LayoutTestController.cpp:
        (setTextDirectionCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setTextDirection):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setTextDirection):

2011-05-31  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] User-agent list of Qt test browsers is very outdated
        https://bugs.webkit.org/show_bug.cgi?id=61531

        The user can edit the user-agent manually, so there's no need to have
        a super complete and up to date list, but it's nice to have it
        minimally updated.

        * MiniBrowser/qt/useragentlist.txt:
        * QtTestBrowser/useragentlist.txt:

2011-03-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        [GTK] [WebKit2] Implement a basic WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57068

        Add an implementation of WebKitTestRunner for GTK+.

        * Scripts/build-webkittestrunner: Added knowledge of GTK+ TestRunner.
        * Scripts/old-run-webkit-tests: Ditto.
        * Scripts/run-launcher: Ditto.
        * Scripts/webkitdirs.pm: Ditto.
        * WebKitTestRunner/GNUmakefile.am: Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp: Added.
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        * WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp: Added.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp: Added.
        * WebKitTestRunner/gtk/TestInvocationGtk.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/gtk/main.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        (main): Added.

2011-05-31  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: doesn't wait for children if it gets a ctrl-c
        https://bugs.webkit.org/show_bug.cgi?id=60241

        * Scripts/new-run-webkit-tests:

2011-05-31  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        webkitpy should create zips with zip -9
        https://bugs.webkit.org/show_bug.cgi?id=61789

        Dave Kilzer suggested we add this to make zips uploaded to bugzilla smaller.

        * Scripts/webkitpy/common/system/workspace.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:

2011-05-31  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement find feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61425

        Buildfix for --minimal and CONFIG+=qt_minimal build.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:

2011-05-31  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement find feature for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61425

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::createChrome):
        (LauncherWindow::showFindBar):
        (LauncherWindow::find):
        * QtTestBrowser/launcherwindow.h:

2011-05-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement JavaScript dialogs in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=61725

        * MiniBrowser/gtk/BrowserWindow.c:
        (WKStringGetCString): Helper function to get a UTF-8 c string from
        a WKStringRef.
        (WKURLGetCString): Helper function to get a UTF-8 c string from a
        WKURLRef.
        (browserWindowUpdateURL): Update to use WKURLGetCString.
        (didReceiveTitleForFrame): Update to use WKStringGetCString.
        (createMessageDialog): Create a GtkMessageDialog.
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (browserWindowUIClientInit):

2011-05-29  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket closing handshake
        https://bugs.webkit.org/show_bug.cgi?id=35721

        * Scripts/webkitpy/thirdparty/__init__.py:
        Pull in pywebsocket 0.6b1. We need to update pywebsocket
        to get the right behavior of closing handshake.

2011-05-29  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        REGRESSION (r86515): svn-apply ignores diffs that omit line count in chunk range
        https://bugs.webkit.org/show_bug.cgi?id=61162

        Fixes an issue where svn-apply may ignore a diff that contains a chunk range line
        that omits a line count. In particular, the chunk range regular expression does
        not match a chunk range line that omits a line count. GNU diff(1) will omit the
        line count in the chunk range if the line count is exactly 1. For example, appending
        a new line to the end of an existing file F that contains exactly one line of text will
        be represented in a diff with a chunk range line that omits the line count for F.

        * Scripts/VCSUtils.pm:
          (parseChunkRange): Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added unit test "Git: Append new line to the end of an existing file".

2011-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        EWS builds patches that fail to build twice, which seems useless and slows down the bots
        https://bugs.webkit.org/show_bug.cgi?id=55585

        This patch switches all the early warning system bots over to the new
        PatchAnalysisTask-based infrastructure.  This patch makes these bots
        more efficient (in the case where patches fail to build) and paves the
        way for running tests on these bots!

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-05-28  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        Add bashi as a committer.

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

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

2011-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        When checking whether the tree is red, the EWS posts a link to the wrong log
        https://bugs.webkit.org/show_bug.cgi?id=61072

        We need to cache the original script error because that contains the
        failure log we want to upload.  If we don't cache that script error,
        self._script_error will get overwritten when we sanity check the clean
        tree (and it also has test failures).

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
            - This testing approach is slightly goofy.  We'd like to use
              assertRaisesRegexp, but that's not available until Python 2.7.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:

2011-05-27  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Add layoutTestController.setStorageAllowed() to control whether access
        to the localStorage API is enabled via the WebPermissionClient
        https://bugs.webkit.org/show_bug.cgi?id=61581

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setStorageAllowed):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebPermissions.h: Added.
        (WebPermissions::WebPermissions):
        (WebPermissions::allowStorage):
        (WebPermissions::setStorageAllowed):
        (WebPermissions::reset):

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        NRWT: clean up metered_stream code in preparation for 'nooverwriting' patch
        https://bugs.webkit.org/show_bug.cgi?id=60326

        This patch removes a lot of the complexity from the
        metered_stream implementation that was unnecessary since there
        was only one caller and the logic could be coordinated better.

        There should be no functional changes in this patch, just code
        getting deleted and cleaned up.

        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        NRWT: minor cleanup in printing module
        https://bugs.webkit.org/show_bug.cgi?id=60329

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2011-05-27  Steve Lacey  <sjl@chromium.org>

        Reviewed by David Levin.

        Add sjl@chromium.org as a committer.

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

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

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        NRWT: remove --print detailed-progress
        https://bugs.webkit.org/show_bug.cgi?id=60324

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-05-27  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        NRWT: debug messages from the workers are being logged twice
        https://bugs.webkit.org/show_bug.cgi?id=60428

        It looks like when the workers are run in separate processes
        we end up getting two copies of every log message they print.
        This has to do with the multiprocessing module on UNIX cloning
        the log configuration in a way I wasn't expecting, and so two
        log handlers end up getting registered.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-05-27  Adam Roben  <aroben@apple.com>

        Always decode tester names from location.hash

        When navigating directly to a tester-specific URL (e.g.,
        <http://build.webkit.org/TestFailures/#/Windows%207%20Release%20(Tests)>), you could end up
        with a URL-encoded tester name in the page, and then the encoded name could make its way
        into Bugzilla bugs. Bad!

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype.parseHash): Pass the tester name we got from location.hash through
        decodeURIComponent before trying to use it.

2011-05-27  Adam Roben  <aroben@apple.com>

        Remove testing code that snuck into r87528

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._domForNewBugLink): Remove a line I was using for some testing.

2011-05-27  Adam Roben  <aroben@apple.com>

        Add links to TestFailures to easily file bugs about failing tests

        Fixes <http://webkit.org/b/61636> <rdar://problem/9514886> TestFailures page should have
        links to file bugs for failing tests

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.resultsPageURL): New helper function to return the URL to results.html
        for a particular build.
        (Builder.prototype._getFailingTests): Use resultsPageURL.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Add links to file bugs about each set of
        failures.
        (ViewController.prototype._domForBuildName): Use resultsPageURL.
        (ViewController.prototype._domForNewBugLink): Added. Creates an element that represents the
        new bug link. The bug has a title, description, and URL already filled in for you!

2011-05-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87464.
        http://trac.webkit.org/changeset/87464
        https://bugs.webkit.org/show_bug.cgi?id=61643

        client-close/server-close tests are flaky on Chromium Mac and
        Windows (Requested by aklein on #webkit).

        * Scripts/webkitpy/thirdparty/__init__.py:

2011-05-27  Alexey Proskuryakov  <ap@apple.com>

        Added Douglas Davidson to contributors list for easier CC'ing.

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

2011-05-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Fix worldID and destinationDomain argument names
        https://bugs.webkit.org/show_bug.cgi?id=61571

        As part of working on r87423, I noticed a couple of inconsistencies in
        argument names:
        - We would use worldId in .h files but worldID in .cpp files.
          Standardize on the latter
        - SecurityOrigin::addOriginAccessWhitelistEntry would take a
          destinationDomains argument, even though the actual parameter was for
          a single domain (renamed to be singular).

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):

2011-05-26  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket closing handshake
        https://bugs.webkit.org/show_bug.cgi?id=35721

        * Scripts/webkitpy/thirdparty/__init__.py:
        Pull in pywebsocket 0.6b1. We need to update pywebsocket
        to get the right behavior of closing handshake.

2011-05-26  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        WebKitTestRunner needs layoutTestController.setAuthorAndUserStylesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42676

        Implemented layoutTestController.setAuthorAndUserStylesEnabled for WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAuthorAndUserStylesEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-26  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser "Switch User Agent" dialog is broken
        https://bugs.webkit.org/show_bug.cgi?id=61527

        The setMaximumHeight() call is unecessary and breaks the dialog at
        least on my setup.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::showUserAgentDialog):

2011-05-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Roben.

        [Qt] Allow popup windows from plugins when initiated by a user gesture

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

        Support parameters introduced in plugin-initiate-popup-window.html

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_handle_event):

2011-05-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Support cross-origin XMLHttpRequest in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=59843

        Expose setIsolatedWorldSecurityOrigin in LayoutTestController.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setIsolatedWorldSecurityOrigin):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-05-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Status bar, toolbar, and menu bar checks should be in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=61474
        <rdar://problem/9468337>

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add empty entries in the WKBundlePageUIClient.

2011-05-26  Andreas Kling  <kling@webkit.org>

        Unreviewed, correct address to webkit-committers mailing list.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:

2011-05-25  Adam Roben  <aroben@apple.com>

        Don't assume that builds finish in the order they were started

        Fixes <http://webkit.org/b/61464> TestFailures page shows failures from a not-most-recent
        build when one slave is taking a long time to finish a build

        Reviewed by Antti Koivisto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getMostRecentCompletedBuildNumber): Don't assume that all builds that are
        newer than the oldest in-progress build are also themselves in progress. Just check whether
        each build is actually in progress (as signified by its presence in the currentBuilds set).

2011-05-25  Adam Roben  <aroben@apple.com>

        Correctly detect cases where only a single test failed/crashed/timed out

        Fixes <http://webkit.org/b/61463> TestFailures page doesn't show testers with only a single
        failing test

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Don't require "test cases" to be plural. It
        will be singular when only a single test fails/crashes/times out.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayTesters): Only pluralize "test" when more than one test
        failed/crashed/timed out.

2011-05-26  Tom Hudson  <tomhudson@google.com>

        Reviewed by Tony Chang.

        Add flags to Chromium ImageDiff to write image comparison metrics on
        stdout.
        https://bugs.webkit.org/show_bug.cgi?id=60569

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::createFromStdin): Fix spelling.
        (maxOf3): New function to do 3-way maximum.
        (getRedComponent): Extract red component from ABGR packed encoding.
        (getGreenComponent): Extract green component from ABGR packed encoding.
        (getBlueComponent): Extract blue component from ABGR packed encoding.
        (weightedPercentageDifferent): Determine % of pixels different in two
        images multiplied by intensity difference of each pixel.
        (printHelp): Document new arguments.
        (compareImages): Parameterize.
        (untestedCompareImages): Parameterize.
        (diffImages): Parameterize; write results on stdout if requested.
        (main): Parse new arguments.

2011-05-25  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        WebKitTestRunner needs layoutTestController.setPrivateBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42697

        Implemented layoutTestController.setPrivateBrowsingEnabled for WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setPrivateBrowsingEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-25  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION (WebKit2): Crash in Flash on USA Today photo gallery
        https://bugs.webkit.org/show_bug.cgi?id=61428
        <rdar://problem/9457006>

        Reviewed by Adam Roben.

        The crash occurs when Flash posts a message to a window that it
        creates, and in processing the message, it calls NPN_Evaluate to
        evaluate JavaScript that removes the plug-in from the page. Flash then
        crashes when we return to Flash code.

        This test emulates that behavior.

        * DumpRenderTree/TestNetscapePlugIn/win/CallJSThatDestroysPlugin.cpp: Added.
        (CallJSThatDestroysPlugin::CallJSThatDestroysPlugin):
        Initialize member vars.
        (CallJSThatDestroysPlugin::~CallJSThatDestroysPlugin):
        Remove our custom property from the message window, and destroy it.
        (CallJSThatDestroysPlugin::NPP_Destroy):
        Set m_isDestroyed, log that the plug-in was destroyed, and notify the
        layout test controller that we're done.
        (wndProc):
        Get the PluginTest object, and call its runTest() function.
        (CallJSThatDestroysPlugin::NPP_New):
        Setup the test: register a class for the message-only window, create
        it, and post a message to it to run the test.
        (CallJSThatDestroysPlugin::runTest):
        Execute JS that removes the plug-in from the page, and if we're not
        destroyed, log a success message.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Add new test to project.

2011-05-25  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        webkitpy's NetworkTransaction shouldn't use mechanize
        https://bugs.webkit.org/show_bug.cgi?id=61450

        mechanize.HTTPError is just an alias for urllib2.HTTPError, so
        use urllib2 directly.  Re-add NetworkTransaction to
        test_results_uploader.py (reverting r87124).

        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2011-05-25  Kevin Ollivier  <kevino@theolliviers.com>

        [Chromium] Unreviewed build fix. Do not define WTF/JS_EXPORT_PRIVATE to JS_EXPORTDATA
        until the port begins using those export macros.

        * DumpRenderTree/chromium/config.h:

2011-05-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87257.
        http://trac.webkit.org/changeset/87257
        https://bugs.webkit.org/show_bug.cgi?id=61457

        This broke layout tests, see bug 61431. (Requested by
        hwennborg on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-05-25  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] fast/css/disabled-author-styles.html failed
        https://bugs.webkit.org/show_bug.cgi?id=61438

        Implemented API setAuthorAndUserStylesEnabled in LayoutTestControllerQt.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-05-25  Adam Roben  <aroben@apple.com>

        Identify, rather than skip, builds where run-webkit-tests exited early due to too many failures

        Fixes <http://webkit.org/b/61441> TestFailures page should show when run-webkit-tests
        started exiting early due to too many crashes, timeouts, or failures

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getNumberOfFailingTests): Rather than returning -1 ("unknown") when
        run-webkit-tests exits early due to too many failures, pass that information in another
        argument to the callback.
        (Builder.prototype.startFetchingBuildHistory): Updated the documentation comment to reflect
        the new structure of the object passed to the callback.
        (Builder.prototype._getFailingTests): Updated to expect a tooManyFailures boolean from
        getNumberOfFailingTests and to pass that along to our own callbacks.
        (Builder.prototype._incorporateBuildHistory): Updated to expect a tooManyFailures boolean
        from _getFailingTests and to store that value in the history object.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        (.info): Added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayBuilder): Updated for change in structure to the history
        object and to add a note when run-webkit-tests exited early due to too many failures.
        (ViewController.prototype._displayTesters): Renamed testersAndFailureCounts to
        latestBuildInfos since each entry now contains more than just the tester and failure count.
        Now displays a message for testers where the latest build exited early due to too many
        failures. Updated to expect a tooManyFailures boolean from getNumberOfFailingTests and to
        store that value in latestBuildInfos.

2011-05-24  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer.
        https://bugs.webkit.org/show_bug.cgi?id=61273

        * Scripts/build-webkit: Added INPUT_COLOR feature flag.

2011-05-24  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Dimitri Glazkov.

        Control Indexeddb backends from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=61000

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-05-24  Robert Hogan  <robert@webkit.org>

        Reviewed by Ryosuke Niwa.

        [Qt] Fix fast/events/selectstart-by-single-click-with-shift.html
        https://bugs.webkit.org/show_bug.cgi?id=61393

        * DumpRenderTree/qt/EventSenderQt.h:
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (getModifiers): static function for interpreting modifiers
        (EventSender::mouseDown): Respect keyboard modifiers
        (EventSender::keyDown): use new static function
        (EventSender::sendOrQueueEvent): whitespace fix

2011-05-24  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding MHTML reading support.
        https://bugs.webkit.org/show_bug.cgi?id=7168

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Remove most style checks on Source/ThirdParty/glu, since it doesn't
        follow WebKit style.
        https://bugs.webkit.org/show_bug.cgi?id=61365

        * Scripts/webkitpy/style/checker.py:

2011-05-24  Adam Roben  <aroben@apple.com>

        Don't allow forcing builds through the build.webkit.org web interface

        Someone has been forcing bogus builds.

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

2011-05-24  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Adam Roben.

        WebKitTestRunner needs layoutTestController.setJavaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=42669

        Fixes the regression issue caused by patch 94265. The patch didn't intialize the setting before the 
        layouttest starting, it will make the test cases after editing/execCommand/clipboard-access.html failed.
        Because that case changed the setting.

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

2011-05-24  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [ORWT]Make --skipped=only option work with parameters with LayoutTests/ prefix
        https://bugs.webkit.org/show_bug.cgi?id=61052

        * Scripts/old-run-webkit-tests:

2011-05-24  Adam Roben  <aroben@apple.com>

        Make TestFailures show how many tests are failing on each tester, and omit testers with no failures

        Fixes <http://webkit.org/b/61063> <rdar://problem/9460533> TestFailures page shows testers
        that don't have any failing tests, which isn't useful

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js:
        (Buildbot.prototype.getTesters): Renamed from getTesterNames. Now returns Builder objects
        instead of name strings.
        (Buildbot.prototype._buildersForNames): Added. Helper function to convert an array of
        builder names into an array of builders.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js:
        (Builder.prototype.getMostRecentCompletedBuildNumber): Added. Returns the build number of
        the most recently completed build, or -1 if there is no such build.
        (Builder.prototype.getNumberOfFailingTests): Added. Returns the number of tests that failed
        in the given build, or -1 if the number could not be determined. Some of this code came from
        _getFailingTests.
        (Builder.prototype._getBuildJSON): Added. Code came from _getFailingTests.
        (Builder.prototype._getFailingTests): Changed to use new _getBuildJSON and
        getNumberOfFailingTests functions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js:
        (ViewController.prototype._displayTesters): Get the current number of test failures for each
        tester and show it in the list. Omit testers that have no failures at all. We keep the
        testers and failure counts in an array and sort it before displaying the current data, as
        the order in which data will be fetched is unpredictable.

2011-05-23  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [nrwt] don't use NetworkTranslation when uploading results
        https://bugs.webkit.org/show_bug.cgi?id=61315

        This avoids autoinstalling mechanize.  It didn't matter anyway
        because test_results_uploader.py wasn't using mechanize to make the
        request so NetworkTransaction::run wasn't doing anything extra
        (it only matters if it catches mechanize.HTTPError).

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2011-05-23  Tony Chang  <tony@chromium.org>

        Reviewed by Dirk Pranke.

        [chromium] fix the rebaseline tool to work with Linux GPU failures
        https://bugs.webkit.org/show_bug.cgi?id=61312

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-05-23  Darin Adler  <darin@apple.com>

        Ignore generated .pyc files in a directory full of python code.

        * Scripts/webkitpy/common/checkout/scm: Added property svn:ignore.

2011-05-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        sheriffbot should give more details about the failures in IRC
        https://bugs.webkit.org/show_bug.cgi?id=61233

        With this patch, sheriffbot will annonce the set of failing tests,
        which might help folks triage the problem.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-05-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87078.
        http://trac.webkit.org/changeset/87078
        https://bugs.webkit.org/show_bug.cgi?id=61294

        Patch contains errors and seems likely to break a bunch of
        bots (Requested by abarth on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-05-23  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Convert json_results_generator.py to output version 4 JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60869

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-05-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Move generation of shell_command from port to executive
        https://bugs.webkit.org/show_bug.cgi?id=61251

        After move it's possible to use the code in other places too.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/system/executive.py:

2011-05-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setJavaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=42669

        Implement setJavaScriptCanAccessClipboard in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setJavaScriptCanAccessClipboard):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-22  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix policyDelegate in Qt DRT
        https://bugs.webkit.org/show_bug.cgi?id=61247

        Use the 'policy delegate' implemented in FrameLoaderClient
        for layout tests. The partial implementation in DumpRenderTreeQt
        is redundant, so remove it.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::acceptNavigationRequest):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::waitForPolicyDelegate):

2011-05-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use double quotes for filename arguments
        https://bugs.webkit.org/show_bug.cgi?id=61250

        Windows does not support single quotes on the command line,
        so replace them with double quotes.

        * Scripts/prepare-ChangeLog:

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.pauseTransitionAtTimeOnElementWithId
        https://bugs.webkit.org/show_bug.cgi?id=42550
        
        Implement pauseTransitionAtTimeOnElementWithId in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        Copy the code for pausing animations, FIXME comments and all.
        (WTR::LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-20  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by Stephen White.

        Adding myself to the committers list.

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

2011-05-19  Adam Roben  <aroben@apple.com>

        Test that the WebKit2 UI process doesn't crash when starting a download

        Test for <http://webkit.org/b/61142> <rdar://problem/9471680> REGRESSION (r86812): Crash
        (preceded by assertion) in fastMalloc when downloading a file

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/18-characters.html: Added.

        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp: Added.
        (TestWebKitAPI::decidePolicyForNavigationAction): Start a download.
        (TestWebKitAPI::decideDestinationWithSuggestedFilename): Record that the download was
        started, cancel the download, and return a bogus string.

        (TestWebKitAPI::setContextDownloadClient):
        (TestWebKitAPI::setPagePolicyClient):
        Simple helper functions.

        (TestWebKitAPI::TEST): Load 18-characters.html, which should trigger a download thanks to
        our policy client, and run until we know that the download was started. If we haven't
        crashed, we win!

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        Added new files.

2011-05-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ryosuke Niwa.

        Fix style errors in DumpRenderTree/chromium/.
        https://bugs.webkit.org/show_bug.cgi?id=61172

        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (CppBoundClass::getAsCppVariant):
        (CppBoundClass::bindToJavascript):
        * DumpRenderTree/chromium/CppBoundClass.h:
        (CppBoundClass::GetterCallback::~GetterCallback):
        (CppBoundClass::CppBoundClass):
        (CppBoundClass::Callback::~Callback):
        (CppBoundClass::MemberCallback::MemberCallback):
        (CppBoundClass::MemberCallback::~MemberCallback):
        (CppBoundClass::MemberGetterCallback::MemberGetterCallback):
        (CppBoundClass::MemberGetterCallback::~MemberGetterCallback):
        * DumpRenderTree/chromium/CppVariant.h:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        (DRTDevToolsAgent::~DRTDevToolsAgent):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::sendFrontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/EventSender.cpp:
        (SavedEvent::SavedEvent):
        (EventSender::EventSender):
        (EventSender::keyDown):
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::Image):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::WorkQueue::reset):
        (WorkItemBackForward::WorkItemBackForward):
        (WorkItemLoadingScript::WorkItemLoadingScript):
        (WorkItemNonLoadingScript::WorkItemNonLoadingScript):
        (WorkItemLoad::WorkItemLoad):
        (WorkItemLoadHTMLString::WorkItemLoadHTMLString):
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::WorkItem::~WorkItem):
        (LayoutTestController::WorkQueue::WorkQueue):
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::MockSpellCheck):
        (MockSpellCheck::~MockSpellCheck):
        * DumpRenderTree/chromium/MockSpellCheck.h:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        (NotificationPresenter::NotificationPresenter):
        * DumpRenderTree/chromium/Task.cpp:
        (WebTask::WebTask):
        * DumpRenderTree/chromium/Task.h:
        (TaskList::TaskList):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::DRTPrinter):
        (TestShellPrinter::TestShellPrinter):
        * DumpRenderTree/chromium/TestNavigationController.cpp:
        (TestNavigationEntry::TestNavigationEntry):
        (TestNavigationEntry::~TestNavigationEntry):
        (TestNavigationController::TestNavigationController):
        (TestNavigationController::reload):
        (TestNavigationController::loadEntry):
        (TestNavigationController::didNavigateToEntry):
        * DumpRenderTree/chromium/TestNavigationController.h:
        (TestShellExtraData::TestShellExtraData):
        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpHistoryItem):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (TestShell::waitTestFinished):
        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::startWorkerContext):
        (TestWebWorker::terminateWorkerContext):
        (TestWebWorker::postMessageToWorkerContext):
        (TestWebWorker::clientDestroyed):
        (TestWebWorker::postMessageToWorkerObject):
        (TestWebWorker::postExceptionToWorkerObject):
        (TestWebWorker::postConsoleMessageToWorkerObject):
        (TestWebWorker::confirmMessageFromWorkerObject):
        (TestWebWorker::reportPendingActivity):
        (TestWebWorker::workerContextClosed):
        (TestWebWorker::~TestWebWorker):
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h:
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp:
        (WebThemeEngineDRTWin::paintButton):
        (WebThemeEngineDRTWin::paintMenuList):
        (WebThemeEngineDRTWin::paintTrackbar):
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h:
        (WebThemeEngineDRTWin::WebThemeEngineDRTWin):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::navigate):
        (WebViewHost::updateSessionHistory):
        (WebViewHost::paintInvalidatedRegion):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-05-19  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        Detect hangs in run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=48043

        * Scripts/run-api-tests: Added test timeouts

2011-05-19  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Adam Roben.

        run-api-tests should run one test per process
        https://bugs.webkit.org/show_bug.cgi?id=61088

        * Scripts/run-api-tests: Resurrecting the previous revison of this file, with fixes to system call under Windows, 
        return code, and parsing GTest output format.

2011-05-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt][GTK] plugins/get-url-with-javascript-url.html fails
        https://bugs.webkit.org/show_bug.cgi?id=60834
        Fix unix test plugin for plugins/get-url-with-javascript-url.html

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_stream):
        (webkit_test_plugin_write_ready):
        (webkit_test_plugin_write):

2011-05-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86869, r86873, r86875, and r86877.
        http://trac.webkit.org/changeset/86869
        http://trac.webkit.org/changeset/86873
        http://trac.webkit.org/changeset/86875
        http://trac.webkit.org/changeset/86877
        https://bugs.webkit.org/show_bug.cgi?id=61139

        broke builds and debug DRT (Requested by rniwa on #webkit).

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):

2011-05-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added linking new WebCoreTestSupport library.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::bindJSObjectsToWindow): Added injection code.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]): Ditto.

2011-05-19  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=60015

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::scalePageBy):
        * DumpRenderTree/qt/EventSenderQt.h:

2011-05-19  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] IME candidate window appears wrong position in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=61023

        Call the focused frame's firstRectForCharacterRange() instead of the
        main frame so that DRT behaves as the same as Chromium.

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::firstRectForCharacterRange):

2011-05-18  Adam Roben  <aroben@apple.com>

        Add a new page to build.webkit.org to help find when tests started failing

        The page is accessible at <http://build.webkit.org/TestFailures/>. It is pretty minimalist
        right now, but already shows some useful information. It's somewhat similar to webkit-patch
        failure-reason and sheriffbot, and perhaps can be combined with them eventually. It's a
        little more convenient than either of them, though, because it's all done in the browser
        (and thus it's easy to go directly to the relevant test results).

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Buildbot.js: Added.
        (Buildbot): This class represents a Buildbot server.
        (Buildbot.prototype.buildURL): Returns the URL for the summary page for a particular build.
        (Buildbot.prototype.builderNamed): Returns a Builder with the given name.
        (Buildbot.prototype.getTesterNames): Fetches the names of all testers and passes them to the
        callback.
        (Buildbot.prototype.parseBuildName): Breaks up a build name into its constituent parts. Must
        be implemented by a derived class that understands this server's build naming scheme.
        (Buildbot.prototype.resultsDirectoryURL): Returns the URL for the results directory for a
        particular build.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Builder.js: Added.
        (Builder): This class represents one builder on the buildbot.
        (Builder.prototype.buildURL): Returns the URL for the summary page for a particular build.
        (Builder.prototype.failureDiagnosisTextAndURL): Returns data that provides a little more
        information about a particular test failure.
        (Builder.prototype.startFetchingBuildHistory): Periodically calls the callback with
        information about when tests started failing.
        (Builder.prototype.resultsDirectoryURL): Returns the URL for the results directory for a
        particular build.
        (Builder.prototype._getBuildNames): Fetches the names of all builds and passes them to the
        callback.
        (Builder.prototype._getFailingTests): Fetches the results.html page for the given build and
        extracts all the failing tests listed in it, passing them to the callback.
        (Builder.prototype._incorporateBuildHistory): Gets the failing tests for the specified
        build, merges them into the build history, and calls the callback telling it whether the
        next build should be fetched to provide more information.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailures.css:
        Added. Just some simple styles.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/Utilities.js: Added.
        (createDefinitionList): Takes an array of pairs and turns them into a DL element.
        (getResource): Wrapper around XMLHttpRequest.
        (Array.prototype.findFirst): Finds the first element matching the given predicate and
        returns it.
        (Array.prototype.last): Returns the last element of the array.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ViewController.js: Added.
        (ViewController): This class contains the main logic for displaying the page.
        (ViewController.loaded): Just calls through to parseHash.
        (ViewController.parseHash): Either starts analyzing failures on a particular builder, or
        shows the list of all testers so one can be chosen. This function is called when the page
        loads and whenever we get a hashchange event.
        (ViewController._displayBuilder): Asks the builder to fetch build history, and displays it
        as it is fetched. The display ends up grouping tests by when they started failing.
        (ViewController._displayTesters): Gets the list of testers and displays it.

        (ViewController._domForBuildName):
        (ViewController._domForFailedTest):
        Helper functions to create descriptions and links for a particular build or failed test.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/WebKitBuildbot.js: Added.
        (WebKitBuildbot): Calls up to the base class constructor with the correct base URL.
        (WebKitBuildbot.prototype.parseBuildName): Parses a build.webkit.org-style build name.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/index.html: Added. Just
        loads all the files and sets up a ViewController, which does the rest.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html: Added a link to the new
        page.

2011-05-18  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement layoutTestController.setValueForUser()
        https://bugs.webkit.org/show_bug.cgi?id=60956

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setValueForUser):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        plugins/invalidate_rect.html fails on linux ports

        - Make the unix test netscape plugin recognize the onPaintEvent
          and windowedPlugin parameters.

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

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::displayInvalidatedRegion):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_handle_event):

2011-05-17  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] move Lucid 64 bit results into LayoutTests/platform/chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=60895

        Update the tools to handle the move.  Lucid 32 results now go in
        chromium-linux-x86 and the default platform on Linux is now x86_64.

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py: Default to x86_64
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py: Default to Lucid
        * Scripts/webkitpy/layout_tests/port/base.py: ditto
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py: Update directory fallback and default to Lucid 64
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py: Update tests to default to x86_64
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Update bot names.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py: Whitespace cleanup.

2011-05-17  Adam Roben  <aroben@apple.com>

        Make run-api-tests work on Windows when there are spaces in the path

        Fixes <http://webkit.org/b/60954> REGRESSION (r86511): run-api-tests fails if there are
        spaces in the path to TestWebKitAPI.exe

        Reviewed by David Levin.

        * Scripts/run-api-tests:
        (runTestTool): Use the "direct object" form of system() to avoid having the path to
        TestWebKitAPI.exe be split by the shell.

2011-05-16  Ian Henderson  <ianh@apple.com>

        Reviewed by Joseph Pecoraro.

        Page::goToItem doesn't work while loading is deferred
        https://bugs.webkit.org/show_bug.cgi?id=60412

        Add setDefersLoading and goBack methods to LayoutTestController.  We
        need to use goBack() instead of history.back() because the latter goes
        through NavigationScheduler, hence doesn't exhibit the bug.

        * DumpRenderTree/LayoutTestController.cpp:
        (goBackCallback):
        (setDefersLoadingCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::goBack):
        (LayoutTestController::setDefersLoading):

2011-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        TestWebKitAPI should build with clang if it can
        https://bugs.webkit.org/show_bug.cgi?id=60918

        * TestWebKitAPI/Configurations/CompilerVersion.xcconfig:
        Update CompilerVersion.xcconfig to match others.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add CompilerVersion.xcconfig to the project.

        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        Add some casts to quiet warnings from clang.

2011-05-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        add dpranke as a reviewer
        https://bugs.webkit.org/show_bug.cgi?id=60919

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

2011-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Anders Carlsson.

        [Gtk] plugins/get-url-notify-with-url-that-fails-to-load.html crashes on buildbot

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

        The unix test plugin needs to call the test's NPP_URLNotify
        rather than the browsers.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_url_notify):

2011-05-16  Brent Fulgham  <bfulgham@webkit.org>

        Rubber-stamped by Adam Roben.

        Adding myself as a reviewer.
        * Scripts/webkitpy/common/config/committers.py:

2011-05-16  Sam Weinig  <sam@webkit.org>

        Fix typo pointed out by Dave Levin.

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::assertWKStringEqual):
        Strig -> String.

2011-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Convert api tester over to using gtest expectations directly
        https://bugs.webkit.org/show_bug.cgi?id=60862

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::assertWKStrigEqual):
        Add convenience macro to compare WK2 strings. Add some overloads of toSTD to make
        the implementation of the macro simpler.

        * TestWebKitAPI/Test.h:
        Remove TEST_ASSERT forwarder.

        [Test changes elided]

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * MiniBrowser/Configurations/Base.xcconfig: Fixed typo.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2011-05-16  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        Can't horizontally scroll iframes and overflow because wheel events are always accepted
        https://bugs.webkit.org/show_bug.cgi?id=60779

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Set new default method to nil.

2011-05-16  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Tools.pro misses include(common.pri)
        https://bugs.webkit.org/show_bug.cgi?id=60883

        It includes features.pri, which depends on common.pri (the build is
        not broken today with the default options, but this is the right
        thing to do).

        * Tools.pro:

2011-05-15  Dominic Cooney  <dominicc@chromium.org>

        Unreviewed: adding myself to committers.py.

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

2011-05-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Chris Jerdonek.

        svn-apply can't handle Git diff that only changes executable bit
        https://bugs.webkit.org/show_bug.cgi?id=60848

        Fixes an issue where svn-{apply, unapply} fail to handle a Git diff for a file
        that only has an executable bit change.

        * Scripts/VCSUtils.pm:
          - Modified regex $chunkRangeRegEx to match chunk range with ending text, say: @@ -2,6 +2,18 @@ foo().
        (parseDiff): Modified to count the number of text chunks in the diff. This should also help towards
        fixing <https://bugs.webkit.org/show_bug.cgi?id=29684>.
        * Scripts/svn-apply:
        (patch): Only use standard patch tool if the patch is non-empty and for a text file (i.e. not a binary patch).
        * Scripts/svn-unapply:
        (patch): Ditto.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated expected results for test cases to account for numTextChunks.
          - Fixed malformed chunk range in test cases: "Git: simple", and "Git: Git diff followed by SVN diff".
          - Added test case "Git: file that only has an executable bit change".
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:
          - Updated expected results for test cases to account for numTextChunks.

2011-05-15  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * TestWebKitAPI/win/main.cpp:
        (main):

2011-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Make API tester more gtest friendly
        https://bugs.webkit.org/show_bug.cgi?id=60859

        * Scripts/run-api-tests:
        Numerous changes:
        - Remove logic to run tests one at a time.
        - Remove logic to build up a list of tests, instead just pass --gtest_list_tests to 
          the test runner and allow gtest to print it for us.
        - Forward stdout from the test tool to stdout, even in non-verbose runs.
        - Run test tool from the current working directory instead of the root webkit
          directory.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Move plist to be with other bundle sources.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::run):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        Simplify TestController down to a single run function. We should consider removing the class
        entirely at some point.

2011-05-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86504.
        http://trac.webkit.org/changeset/86504
        https://bugs.webkit.org/show_bug.cgi?id=60853

        "Broke Qt EventSender in editing/selection tests" (Requested
        by mwenge on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] fix http/tests/plugins/plugin-document-has-focus.html

        The support for this test added to the unix test plugin here
        may allow other platforms to pass it (nearly everyone
        skips it). On Qt it required a bit of trickiness with
        the page's EventSender object to get it working fully though,
        so only unskipping Qt here.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::eventSender):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-14  Arno Renevier  <arno@renevier.net>

        Reviewed by Martin Robinson.

        make run-gtk-tests executable
        https://bugs.webkit.org/show_bug.cgi?id=59278

        * Scripts/run-gtk-tests:

2011-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        NPP_URLNotify is not called if a URL passed to NPN_GetURLNotify fails to load
        https://bugs.webkit.org/show_bug.cgi?id=60823
        <rdar://problem/9430386>

        Add test that calls NPN_GetURLNotify on a URL that can't be loaded, and checks if NPP_URLNotify is called.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLNotifyWithURLThatFailsToLoad.cpp: Added.
        (GetURLNotifyWithURLThatFailsToLoad::GetURLNotifyWithURLThatFailsToLoad):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_New):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_URLNotify):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86476.
        http://trac.webkit.org/changeset/86476
        https://bugs.webkit.org/show_bug.cgi?id=60832

        It made plugins/get-url-notify-with-url-that-fails-to-
        load.html crash on GTK (Requested by Ossy on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLNotifyWithURLThatFailsToLoad.cpp: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        NPP_URLNotify is not called if a URL passed to NPN_GetURLNotify fails to load
        https://bugs.webkit.org/show_bug.cgi?id=60823
        <rdar://problem/9430386>

        Add test that calls NPN_GetURLNotify on a URL that can't be loaded, and checks if NPP_URLNotify is called.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLNotifyWithURLThatFailsToLoad.cpp: Added.
        (GetURLNotifyWithURLThatFailsToLoad::GetURLNotifyWithURLThatFailsToLoad):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_New):
        (GetURLNotifyWithURLThatFailsToLoad::NPP_URLNotify):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLWithJavaScriptURL.cpp:

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        NPN_GetURL with a javascript: URL doesn't send back the result in the stream
        https://bugs.webkit.org/show_bug.cgi?id=60810

        Add a test that calls NPN_GetURL on a javascript: URL and checks that it gets back the expected result.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Add files.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Add new NPN and NPP wrappers and sort them according to the order they appear in npfunctions.h

        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLWithJavaScriptURL.cpp: Added.
        (GetURLWithJavaScriptURL::GetURLWithJavaScriptURL):
        (GetURLWithJavaScriptURL::NPP_New):
        (GetURLWithJavaScriptURL::NPP_NewStream):
        (GetURLWithJavaScriptURL::NPP_DestroyStream):
        (GetURLWithJavaScriptURL::NPP_WriteReady):
        (GetURLWithJavaScriptURL::NPP_Write):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_NewStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_URLNotify):
        call the PluginTest NPP wrappers.

2011-05-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86447.
        http://trac.webkit.org/changeset/86447
        https://bugs.webkit.org/show_bug.cgi?id=60809

        "Broke some uses of EventSender object on Qt" (Requested by
        mwenge on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::eventSender):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-13  Robert Hogan  <robert@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] fix http/tests/plugins/plugin-document-has-focus.html

        The support for this test added to the unix test plugin here
        may allow other platforms to pass it (nearly everyone
        skips it). On Qt it required a bit of trickiness with
        the page's EventSender object to get it working fully though,
        so only unskipping Qt here.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::eventSender):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2011-05-13  Adam Roben  <aroben@apple.com>

        Exclude the Leopard NRWT bot from the core builder set

        Fixes <http://webkit.org/b/60392> Leopard Intel Release (NRWT) shouldn't be a core builder

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__): Tighten up the Leopard regexp to only allow the non-NRWT Leopard bots
        in the core builder set.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest.test_builder_name_regexps): Updated to match the current set of builders and
        regexps.

2011-05-13  Adam Roben  <aroben@apple.com>

        Group all the NRWT bots together

        This also gets the new NRWT bots out of the middle of Apple's bots. Since these new NRWT
        bots are experimental, it seems best not to clutter up the non-experimental bots with
        experimental ones.

        Fixes <http://webkit.org/b/60769> New "(NRWT)" bots are right in the middle of Apple's bots
        on build.webkit.org

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Moved the "(NRWT)" bots next to the
        Chromium testers, which also use new-run-webkit-tests.

2011-05-13  Adam Roben  <aroben@apple.com>

        Add a plugin test that dumps the plugin window's rect

        Part of the test for <http://webkit.org/b/60194> <rdar://problem/9383760> REGRESSION
        (r79167): Windowed plugins in Google Reader don't move when the article list is scrolled

        Reviewed by Dan Bernstein.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/DumpWindowRect.cpp: Added.
        (DumpWindowRect::DumpWindowRect): Just call up to the base class.
        (DumpWindowRect::performWindowGeometryTest): Find our window rect relative to the test
        harness window and log it.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added DumpWindowRect.

2011-05-13  Adam Roben  <aroben@apple.com>

        Move code required for most tests of plugin window geometry into a base class

        WebKit2's asynchronous plugin window positioning makes testing window geometry tricky. By
        having all the trickiness in a shared base class, writing new window geometry tests will be
        much easier.

        Fixes <http://webkit.org/b/60776> It's hard to write tests that check plugin window geometry

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowRegionIsSetToClipRect.cpp:
        (WindowRegionIsSetToClipRect::WindowRegionIsSetToClipRect): Changed to inherit from the new
        WindowGeometryTest base class. Most of the code from this class was moved to the new base
        class.
        (WindowRegionIsSetToClipRect::performWindowGeometryTest): Renamed from checkWindowRegion.
        This is called by the base class when it is safe to check the window's geometry. Note that
        the m_didCheckWindowRegion logic was removed completely; it has never been needed and was
        just vestigial code from an earlier version of this test.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added new
        WindowGeometryTest class.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowGeometryTest.cpp: Added. Code came from
        WindowRegionIsSetToClipRect.
        (WindowGeometryTest::finishTest): This is the only change from WindowRegionIsSetToClipRect.
        We now call the new virtual performWindowGeometryTest function instead of checkWindowRegion.
        Subclasses can implement that function to perform their own tests.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowGeometryTest.h: Added.

2011-05-13  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Missing 2nd #EOF if WebProcess is killed.
        https://bugs.webkit.org/show_bug.cgi?id=60761

        If the WebProcess is killed, only one #EOF is yielded
        by WebKitTestRunner. However, run-webkit-test wait for
        a second #EOF, which signals the finishing of pixel dump.
        Since this never happens, run-webkit-test waits forever.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2011-05-13  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] chromium-linux tests shouldn't run on other platforms
        https://bugs.webkit.org/show_bug.cgi?id=60162

        Remove _tests_for_other_platforms defs because r82753
        implemented it properly in the baseclass in webkit.py.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2011-05-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Remove unused option of EWeblauncher
        https://bugs.webkit.org/show_bug.cgi?id=60747

        Remove sudo-workaround option.
        This option is not used and make other option wrong.

        * EWebLauncher/main.c:

2011-05-12  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Fix config.json to address missing WK2 builder/tester config.
        Fix naming of machines (xserve not macpro)

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

2011-05-12  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Add SnowLeopard Debug builder and Test bot.
        apple-xserve-8 = SL Debug Tester.
        apple-xserve-9 = SL Debug Builder.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2011-05-12  Adam Barth  <abarth@webkit.org>

        This patch disables sheriffbot's bug postings.  He's just been way too
        spammy recently due to test flakiness.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2011-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        After relaunching an unresponsive web process, web page stops responding to mouse movement
        https://bugs.webkit.org/show_bug.cgi?id=60669
        <rdar://problem/9409934>
        
        This test follows the steps needed to reproduce this bug:
        1) Hang the web process
        2) While the web process is hung, move the mouse (so WebPageProxy thinks it is processing a mouse move event)
        3) Kill and restart the WebProcess
        4) Move the mouse
        
        We are testing that we receive mouse move events after the WebProcess has restarted.

        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame): Set a flag that we finished loading.
        (TestWebKitAPI::processDidBecomeUnresponsive): Kill the web process once we become unresponsive.
        (TestWebKitAPI::processDidCrash): Reload the page when the process crashes, which restarts the web process.
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash_Bundle.cpp: Added.
        (TestWebKitAPI::MouseMoveAfterCrashTest::MouseMoveAfterCrashTest):
        (TestWebKitAPI::MouseMoveAfterCrashTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKit2/mouse-move-listener.html: Added.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateMouseMove): Sends the messages that simulate a mouse move.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateMouseMove): Ditto.

        Add new files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:

2011-05-12  Tomasz Morawski  <t.morawski@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Added initialization/shutdown for ecore_file library
        https://bugs.webkit.org/show_bug.cgi?id=60457

        Added initialization and shuthown for ecore_file library and replaced
        realpath function to ecore_file_realpath.

        * EWebLauncher/main.c:
        (quit):
        (findThemePath):
        (main):

2011-05-12  Young Han Lee  <joybro@company100.net>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement layoutTestController.layerTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=60367

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Teach validate-committer-lists how to validate committers bugzilla_email()
        https://bugs.webkit.org/show_bug.cgi?id=60651

        It turns out we currently have 9 committers with invalid values for their
        bugzilla_email field (meaning we don't know what email is their bugzilla account).
        "Alexander Kellett" <lypanov@mac.com>
        "Andre Boule" <aboule@apple.com>
        "Cameron McCormack" <cam@webkit.org>
        "Chris Petersen" <cpetersen@apple.com>
        "Eli Fidler" <eli@staikos.net>
        "Matt Lilek" <webkit@mattlilek.com>
        "Pierre d'Herbemont" <pdherbemont@free.fr>
        "Scott Violet" <sky@chromium.org>
        "Adam Treat" <treat@kde.org>

        Most of those haven't committed in a very long time, so it's not suprising
        that we haven't noticed that their bugzilla emails are bogus.

        * Scripts/validate-committer-lists:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

2011-05-11  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=59561
        Switch TestWebKitAPI to GTest

        Fixes Makefiles and WinCairo build as well

        * Makefile:
        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::runAllTests):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):

2011-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Add Luke Macpherson to committers.py as a Contributor
        https://bugs.webkit.org/show_bug.cgi?id=60639

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

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 4/12: Update the build script to enable 3D rendering by default for Qt.

        * Scripts/build-webkit:

2011-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r86161): WKPreferences API test failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=60658

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

2011-05-11  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Modify jsonresults_unittest.py to use a dict format for its test data, and modify jsonresults.py to flatten hierarchical directory structures in input JSON.
        https://bugs.webkit.org/show_bug.cgi?id=60521

        First steps towards making the results JSON all hierarchical.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2011-05-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, adding new LayoutTestController method stubs.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        (LayoutTestController::applicationCacheDiskUsageForOrigin):

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        [WebKit2] exceededDatabaseQuota function on WKPageUIClient needs to provide information
        about the usage for both the origin overall and the database in question.
        https://bugs.webkit.org/show_bug.cgi?id=60573

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

2011-05-10  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Adding myself as a reviewer.
        https://bugs.webkit.org/show_bug.cgi?id=60587

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

2011-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Csaba Osztrogonác.

        queues.webkit.org should show 1000+ instead of 1000 when we hit the query limit
        https://bugs.webkit.org/show_bug.cgi?id=60614

        AppEngine has a result limit of 1000.  We hit that when trying
        to find out how many patches the style-queue (and other queues)
        have passed in the last 30 days.  So lets display 1000+ instead
        of 1000 to avoid confusion. (Ossy was asking about this in #webkit tonight.)

        I also made the status pages show "never" instead of just "ago" when we
        haven't seen a pass or boot message in the last 1000 messages.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/templates/queuestatus.html:

2011-05-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        sheriffbot shouldn't spam bugs when it can't figure out who to blame
        https://bugs.webkit.org/show_bug.cgi?id=60613

        This patch limits the number of bugs sheriffbot will spam to three.
        Ideally, we'd come up with some smarter huerstics, but hopefully this
        will cut down on the bugmail spam for slow bots.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2011-05-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bots should be robust against test-webkitpy hangs
        https://bugs.webkit.org/show_bug.cgi?id=60579

        Added a killAfterTimeout subroutine, which takes a child_pid
        and timeout, and will setup a watchdog process to kill that child
        after the timeout.  killAfterTimeout will waitpid on the child.

        * EWSTools/start-queue.sh:

2011-05-10  MORITA Hajime  <morrita@google.com>

        Unreviewed, moved myself to the reviewers list.

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

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        StorageTracker should report actual local storage usage on disk
        https://bugs.webkit.org/show_bug.cgi?id=60558

        * DumpRenderTree/LayoutTestController.cpp:
        (localStorageDiskUsageForOriginCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::localStorageDiskUsageForOrigin):

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add ApplicationCache API to get disk usage per origin
        https://bugs.webkit.org/show_bug.cgi?id=57127

        Added test that loads two frames with ~15Kb image, checks usage,
        deletes app cache, verifies usage is 0.

        * DumpRenderTree/LayoutTestController.cpp:
        (applicationCacheDiskUsageForOriginCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Added stub.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added stub.
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added stub.
        (LayoutTestController::applicationCacheDiskUsageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Added stub.
        (LayoutTestController::applicationCacheDiskUsageForOrigin):

2011-05-10  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed, adding Rafael Antognolli as a committer.

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

2011-05-10  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Add WebCore::Setting to block displaying and/or running insecure content on secure pages
        https://bugs.webkit.org/show_bug.cgi?id=58378

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAllowDisplayOfInsecureContent):
        (LayoutTestController::setAllowRunningOfInsecureContent):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        Add plumbing for new settings to Chromium DRT.

2011-05-10  Enrica Casucci  <enrica@apple.com>

        Reviewed by Beth Dakin.

        Added my name to the reviewers list and removed my name from
        to committer-only list.

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

2011-05-10  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style shouldn't filter the errors using the modified lines for the xml and test expectations checkers.
        https://bugs.webkit.org/show_bug.cgi?id=60466

        * Scripts/webkitpy/style/checker.py: (unrelated) style fix.
        * Scripts/webkitpy/style/checker_unittest.py: Remove the file_path check since
          that property was removed.
        * Scripts/webkitpy/style/checkers/test_expectations.py: Turn off the line
          filtering for errors.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Add testing to
          verify that the line filtering is turned off.
        * Scripts/webkitpy/style/checkers/xml.py: Turn off the line filtering for errors
          and remove the unused file_path parameter.
        * Scripts/webkitpy/style/checkers/xml_unittest.py: Add testing to verify that the
          line filtering is turned off (and fix test_no_error).
        * Scripts/webkitpy/style/error_handlers.py: Added a way to turn off the filtering
          of errors based on the lines changed in the patch.
        * Scripts/webkitpy/style/error_handlers_unittest.py: Added a test for turning off
          the filtering.

2011-05-10  Adam Roben  <aroben@apple.com>

        Update some plugin tests to work with WebKit2's asynchronous windowed plugin positioning on Windows

        Fixes <http://webkit.org/b/60442> <rdar://problem/9403200> REGRESSION (r85795):
        platform/win/plugins/window-geometry-initialized-before-set-window.html and
        platform/win/plugins/window-region-is-set-to-clip-rect.html failing on Windows 7 Release
        (WebKit2 Tests)

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/NPNInvalidateRectInvalidatesWindow.cpp:
        (NPNInvalidateRectInvalidatesWindow::NPP_SetWindow): Moved some code from here to the new
        WindowedPluginTest::testHarnessWindow function.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowGeometryInitializedBeforeSetWindow.cpp:
        (WindowGeometryInitializedBeforeSetWindow::NPP_SetWindow): Only check the window's size, not
        its position. In WebKit2, the position won't have been set yet, so we can't test it. But it
        turns out only the size mattered for <http://webkit.org/b/46716>, which this test was
        created for.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowRegionIsSetToClipRect.cpp:
        (WindowRegionIsSetToClipRect::WindowRegionIsSetToClipRect): Converted to be a
        WindowedPluginTest, and initialized new members.
        (WindowRegionIsSetToClipRect::startTest): Make our plugin window visible, and set things up
        to ensure we get a WM_WINDOWPOSCHANGED message about it becoming visible.
        (WindowRegionIsSetToClipRect::finishTest): Check that the window region is what we expect,
        then clean up and tell the test harness we're done.
        (WindowRegionIsSetToClipRect::checkWindowRegion): Moved code to check the window region here
        from NPP_SetWindow. Changed to use the fancy new log() function instead of pluginLog().
        (WindowRegionIsSetToClipRect::showTestHarnessWindowIfNeeded): Show the test harness's window
        if it is hidden. This is needed to ensure we get a WM_WINDOWPOSCHANGED message when our own
        window becomes visible.
        (WindowRegionIsSetToClipRect::hideTestHarnessWindowIfNeeded): Hide the test harness's window
        if it was hidden at the start of the test.
        (WindowRegionIsSetToClipRect::wndProc): When our timer fires, tell the UI process to paint.
        This should cause our window to become visible and our window region to get set. When we get
        a WM_WINDOWPOSCHANGED message, we can finally finish the test.
        (WindowRegionIsSetToClipRect::NPP_GetValue): Return our script object.
        (WindowRegionIsSetToClipRect::ScriptObject::hasMethod): We only have one method:
        "startTest".
        (WindowRegionIsSetToClipRect::ScriptObject::invoke): Call through to the PluginTest object.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.cpp:
        (WindowedPluginTest::testHarnessWindow):
        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.h:
        Added this helper function. Code came from NPNInvalidateRectInvalidatesWindow.

2011-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add new qt-4.8 platform for layout testing
        https://bugs.webkit.org/show_bug.cgi?id=60544

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:

2011-05-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86108.
        http://trac.webkit.org/changeset/86108
        https://bugs.webkit.org/show_bug.cgi?id=60533

        Broke makefile based builds and Cairo (Requested by weinig on
        #webkit).

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::Test::~Test):
        (TestWebKitAPI::Test::name):
        (TestWebKitAPI::Test::Register::Register):
        (TestWebKitAPI::Test::Register::create):
        (TestWebKitAPI::Test::Test):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::testFailed):
        (TestWebKitAPI::TestsController::registerCreateTestFunction):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):

2011-05-09  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        Skip reftests if pixel tests are disabled.

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

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:

2011-05-09  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DumpRenderTreeQt needs an implementation of unmarkText
        https://bugs.webkit.org/show_bug.cgi?id=60499

        The implementation is similar to gtk.

        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        (TextInputController::unmarkText):
        * DumpRenderTree/qt/TextInputControllerQt.h:

2011-05-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Teach new-run-webkit-tests to follow symlinks when trying to determine the arch of DumpRenderTree on linux
        https://bugs.webkit.org/show_bug.cgi?id=60520

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2011-05-09  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Sam Weinig.

        Switch TestWebKitAPI to GTest
        https://bugs.webkit.org/show_bug.cgi?id=59561

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::runAllTests):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):

2011-05-09  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] DRT eventSender.addTouchPoint method is not setting the start position
        https://bugs.webkit.org/show_bug.cgi?id=60487

        When adding a new touch point, the start position of this point needs to be set.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):

2011-05-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Roben.

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

        Unskip plugins/embed-prefers-plugins-for-images.html

        Add image/png mime-type to test netscape plugin on Unix.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_GetMIMEDescription):

2011-05-09  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        Pull jsonresults_unittest test cases out into separate test methods.
        https://bugs.webkit.org/show_bug.cgi?id=60418

        * TestResultServer/model/jsonresults_unittest.py:

2011-05-09  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] fix fast/dom/Geolocation/window-close-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=60458

        Update all pages with Mock position/error/permission.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setMockGeolocationPosition):

2011-05-09  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Implement Page Visibility API.
        https://bugs.webkit.org/show_bug.cgi?id=54181

        * DumpRenderTree/LayoutTestController.cpp:
        (setPageVisibilityCallback):
        (resetPageVisibilityCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::setPageVisibility):
        (LayoutTestController::resetPageVisibility):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::resetPageVisibility):
        (LayoutTestController::setPageVisibility):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-05-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Testing EWS spins on patches with a large number of failures
        https://bugs.webkit.org/show_bug.cgi?id=60441

        In cases where the tree has a small number of persistent failures but a
        patch has a large number of failures, we weren't believing any results.
        That lead to us retrying the patch forever while we waited for
        trustworthy results that would never come.

        This patch loosens the semantics of unexpected_failures to return a
        subset (rather than the exact set) of unexpected failures.  In the case
        where the tree has a bounded number of failures and the patch has an
        unbounded number of failures, we can accurately compute such a subset
        and reject the patch.

        * Scripts/webkitpy/tool/bot/expectedfailures.py:
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-07  Joe Mason  <jmason@rim.com>

        Reviewed by Daniel Bates.

        FrameLoader::isProcessingUserGesture is wrong in dispatchWillPerformClientRedirect
        https://bugs.webkit.org/show_bug.cgi?id=52211

        Dump isUserProcessingGesture in willPerformClientRedirect so that the layout tests can be extended.
        (For the Mac and Chromium ports - other ports don't support dumping user gestures in DRT.)

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willPerformClientRedirect):
        (WebViewHost::didStartProvisionalLoad):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):

2011-05-07  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the build; remove some more references to isTiger(), which was removed in changeset 86007
        <http://trac.webkit.org/changeset/86007> (bug #60438).

        * Scripts/old-run-webkit-tests:
          - Removed reference to isTiger() from openDumpTool(), captureSavedCrashLog(), and
            file local variable. 

2011-05-07  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Remove references to Tiger in scripts
        https://bugs.webkit.org/show_bug.cgi?id=60438

        Remove isTiger() and all of the code that depends on it.

        * Scripts/build-webkit:
        * Scripts/ensure-valid-python:
        * Scripts/gdb-safari:
        * Scripts/webkitdirs.pm:

2011-05-06  David Grogan  <dgrogan@chromium.org>

        Reviewed by Eric Seidel.

        update link to message about mac 64bit git binaries
        https://bugs.webkit.org/show_bug.cgi?id=60411

        The original message implied (correctly, at-the-time) that
        http://code.google.com/p/git-osx-installer/ doesn't provide 64-bit
        binaries. The new message notes that they do. This might prevent someone
        else from spending a few minutes confused.

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-05-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: crashes in race with crashing DRT
        https://bugs.webkit.org/show_bug.cgi?id=60238

        This fixes a race where if we wrote the URL to DRT and
        DRT crashed immediately, we could get a broken pipe
        error back during the write() and not handle it correctly,
        causing NRWT to also crash.

        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a --skip-integrationtests mode to test-webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=60354

        These two test suites account for 2/3 of test-webkitpy's running time
        because they're not actually unit tests.  They're integration tests.
        This patch adds the ability to skip integration tests by passing a
        command line argument to test-webkitpy.  The buildbots will continue to
        run these integration tests to make sure they don't regress.  This
        option is for use by developers when working on parts of the code that
        are well-covered by unit tests.

        * Scripts/webkitpy/common/system/file_lock_integrationtest.py: Copied from Tools/Scripts/webkitpy/common/system/file_lock_unittest.py.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Copied from Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py: Removed.
        * Scripts/webkitpy/test/main.py:

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The results.zip generated by the Chromium EWS are too big
        https://bugs.webkit.org/show_bug.cgi?id=60352

        Currently results.zip created by the Chromium EWS bot contain roughly
        1000 tests that we expect to fail.  These test results are not helpful
        to contributors.

        There are several approaches to solving this problem:

        1) We could be more selective about which files to include in the zip.
        2) We could ask new-run-webkit-tests not to generate results for
           expected failures.
        3) We could ask new-run-webkit-tests not to run tests that we expect to
           fail.

        This patch takes approach (3).  Currently, we're ignoring the outcome
        of failing tests anyway, so there's not much point in actually running
        them.  As a side benefit, this will speed up the test run by about 6%.
        In the future, we might revisit this decision and choose another
        approach.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2011-05-06  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Use qt-arm platform instead of qt-linux on ARM platform.

        * Scripts/old-run-webkit-tests:

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        Add an option to NRWT to skip failing tests
        https://bugs.webkit.org/show_bug.cgi?id=60295

        This option is similar to the way old-run-webkit-tests works.  We're
        planning to use this option on the testing EWS bots because they don't
        use information from failing tests yet.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-05-04  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Dimitri Glazkov.

        Implement LayoutTestController::pseudoShadowId()
        https://bugs.webkit.org/show_bug.cgi?id=60034

        shadowPseudoId support in the various LayoutTestController
        implementations.

        * DumpRenderTree/LayoutTestController.cpp:
        (shadowPseudoIdCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::shadowPseudoId):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::shadowPseudoId):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowPseudoId):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-05-06  Adam Barth  <abarth@webkit.org>

        EWS can't reject patches
        https://bugs.webkit.org/show_bug.cgi?id=60345

        We're supposed to use patch.id() for the attachment ID, silly.

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

2011-05-05  Steve Lacey  <sjl@chromium.org>

        Reviewed by Ojan Vafai.

        Fix generation of results html file by passing relative path to scm
        methods.
        Generate diff images for results html file.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-05-05  Andy Estes  <aestes@apple.com>

        Reviewed by Daniel Bates.

        update-webkit should handle Internal using a different VCS than OpenSource.
        https://bugs.webkit.org/show_bug.cgi?id=60310

        isGit() and isSVN() cache their results, so Internal will always be
        updated using the VCS commands used for OpenSource. If Internal uses a
        different VCS, this will fail. Fix this by calling isGitDirectory() and
        isSVNDirectory() instead, which do not cache their results.

        * Scripts/update-webkit:

2011-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: revamp integration tests incl. tests for servers
        https://bugs.webkit.org/show_bug.cgi?id=59985

        This change adds the ability to run "integration tests" that
        depend on (and affect) the local environment on your machine.
        These tests can be run manually by invoking python on the
        test file in question and passing the '-i' flag, but are
        not run automatically as part of test-webkitpy.

        Integration tests are identified by being methods named as
        "integration_test_*" instead of "test_*", and we use a
        custom TestLoader instead of the default one provided by
        unittest.

        This change also adds a protected "_default_to_apache" method
        to the port object so we can do the right thing when starting
        and stopping web servers with less mechanism.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-05-05  Adam Roben  <aroben@apple.com>

        Robustify DRT's pixel-dumping code against semi-random alpha channel values on Windows

        DRT generates a pixel dump on Windows using the WM_PRINT message. This message (just like
        most of GDI) doesn't write anything meaningful into the alpha channel. In some cases, the
        alpha channel will even get filled with zeros (like when ::GradientFill is used). To
        safeguard against this, we fill the alpha channel with constant full opacity after the
        WM_PRINT message is handled to ensure we end up with an opaque image. (Note that we can't
        just ignore the alpha channel when creating the PNG; Mac's pixel results have an alpha
        channel, and we want to be able to compare Mac and Windows pixel results, so Windows pixel
        results need an alpha channel, too.)

        Fixes <http://webkit.org/b/60300> draws-gradient.html's pixel results can't be correctly
        generated due to alpha channel weirdness

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (makeAlphaChannelOpaque): Added this helper function to fill a bitmap's alpha channel with
        constant full opacity.
        (createBitmapContextFromWebView): Make the bitmap's alpha channel opaque before wrapping it
        in a CGContext or cairo_surface.

2011-05-05  Adam Roben  <aroben@apple.com>

        Add support for layoutTestController.dumpAsText(true) to WebKitTestRunner

        Passing true tells the test harness to dump pixels even though we're not dumping a render
        tree.

        Fixes <http://webkit.org/b/60298> Calling layoutTestController.dumpAsText(true) in
        WebKitTestRunner doesn't result in pixel results being generated

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added dumpPixels
        argument to dumpAsText.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Updated for dumpAsText change.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::dumpAsText): Store the dumpPixels argument.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Updated for IDL change.

        * WebKitTestRunner/win/InjectedBundle.vcproj: Added .idl files as a convenience for Windows
        developers.

2011-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: merge os, version fields in test config
        https://bugs.webkit.org/show_bug.cgi?id=60004

        This change removes the 'o/s' field from the TestConfiguration
        object, and changes the 'MAC', 'WIN', and 'LINUX' modifiers in
        the expectations file to macros that expand to the version names
        for each platform.

        This means that you can once again put any subset of the
        operating system versions on a single line, e.g.:
          BUGX LEOPARD XP LINUX : fast/html/foo.html = FAIL

        This change will break any existing test_expectations.txt
        file that uses the "OS-VERSION" macros, which are no longer
        needed. It turns out they were never needed, as just VERSION
        by itself was sufficient. The test_expectations.txt file should
        be updated accordingly prior to landing this change.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-05-05  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] switch from Lucida to free fonts for Hindi and Thai
        https://bugs.webkit.org/show_bug.cgi?id=60287

        The fonts are provided by the ttf-thai-tlwg and ttf-indic-fonts
        packages on Lucid. There are actually multiple Thai fonts in the
        package, so I just picked one.

        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (setupFontconfig):

2011-05-05  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] google-chrome-64 builds should now fallback to chromium-linux-x86_64 results
        https://bugs.webkit.org/show_bug.cgi?id=60290

        It used to be that google-chrome-32 was hardy32, google-chrome-64 was
        hardy64, chromium-linux was hardy32 and chromium-linux-x86_64 was
        lucid64.  Because of that, google-chrome-64 used to skip the
        chromium-linux-x86_64 results since they were more incorrect.

        Now that we're switching to lucid for google-chrome, we want
        google-chrome-64 to fall back to chromium-linux-x86_64.

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:

2011-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: merge TestExpectations, TestExpectationsFile classes
        https://bugs.webkit.org/show_bug.cgi?id=60002

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:

2011-05-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should reject patches which fail ewses
        https://bugs.webkit.org/show_bug.cgi?id=47534

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Support PageGroup in QGraphicsWKView/QWKPage constructors
        https://bugs.webkit.org/show_bug.cgi?id=59638

        1. Call QGraphicsWKView constructor with pageGroupRef.
        2. Disable setFontFamily calls as it breaks Qt test fonts.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):

2011-05-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Add --only-webkit option to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=60245

        * Scripts/build-webkit: If --only-webkit was specified
        just build the WebKit project, and not its dependencies.

2011-05-05  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add didNotHandleWheelEvent callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=60203

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowUIClientInit): Stub out didNotHandleWheelEvent callback.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Stub out didNotHandleWheelEvent callback.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Stub out didNotHandleWheelEvent callback.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage): Stub out didNotHandleWheelEvent callback.
        (WTR::TestController::initialize): Stub out didNotHandleWheelEvent callback.

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add more missing imports from scm refactor
        https://bugs.webkit.org/show_bug.cgi?id=60239

        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        sheriff-bot is having more exception trouble
        https://bugs.webkit.org/show_bug.cgi?id=60233

        A webpage-forced build was causing SB to throw an exception.
        We've long had this bug, but we just didn't notice it until now.

        In debugging this I found we fetch an absurd amount of data now
        that we use buildbot's json (instead of xmlrpc), so I added
        the filter=1 parameter to reduce it a little.  That required
        me to handle the case where filter=1 would strip
        result=0 in some cases (it's unclear why it does that).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Unreviewed, Adding Cris Neckar as a committer

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

2011-05-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Wk2][Symbian] Capabilities for Qt MiniBrowser and QtWebProcess on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=59462

        * MiniBrowser/qt/MiniBrowser.pro: Add Symbian OS capabilities to executable. Also enable data paging. 

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The testing EWS bots should upload layout-test-results.zip to bugs after failures
        https://bugs.webkit.org/show_bug.cgi?id=60223

        This required sharing a bit of code between the commit-queue
        (which already knew how to do this) and the new EWS testing bots.

        In the process I also cleaned up EWS testing a little and
        removed some dead code from the commit-queue.

        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-05-04  James Kozianski  <koz@chromium.org>

        Reviewed by Eric Seidel.

        Add method to make a Port able to retrieve TestOutputSets from its builders.
        https://bugs.webkit.org/show_bug.cgi?id=58211

        This will be used in the new rebaseline script - TestOutputs are
        potential new baselines.

        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        sheriff-bot can't parse results.html
        https://bugs.webkit.org/show_bug.cgi?id=60196

        The problem was that the NRWT bots are currently core
        and so sheriff-bot was trying to diagnose failures on
        them.  It was trying to parse their results.html file
        and BeautifulSoup was throwing an exception.

        It seems our version of BeautifulSoup was quite old
        and unable to handle <script> tags correctly.
        This moves us to 3.2 which doesn't seem to have this bug.

        * Scripts/webkitpy/thirdparty/BeautifulSoup.py:

2011-05-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the EWS test logging less verbose
        https://bugs.webkit.org/show_bug.cgi?id=60201

        This should help us generate less than a hundred MB of logs per hour.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143

        Disable touch icon by default. 

        * Scripts/build-webkit:

2011-05-04  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Add gpu acceleration flags to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=60168
        Adding support for command line flags 
        enable-accelerated-2d-canvas an
        enable-accelerated-drawing in DumpRenderTree.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setLegacyAccelerated2dCanvasEnabled):
        (TestShell::setAcceleratedDrawingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-05-04  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] run-qtwebkit-tests misses exec bit
        https://bugs.webkit.org/show_bug.cgi?id=60188

        Also removing an unecessary import (mostly to let this bugfix goes
        through the system, as this is just a chmod).

        * Scripts/run-qtwebkit-tests:

2011-05-04  Adam Barth  <abarth@webkit.org>

        Fix import of ircproxy module to actually import the module.  I don't
        really understand how this code could have worked before.

        * Scripts/webkitpy/common/host.py:

2011-05-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][Wk2][Symbian] Minor UI facelift for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=60172

        * MiniBrowser/qt/BrowserWindow.cpp: Bring in UI layout changes from QtTestBrowser
        (BrowserWindow::BrowserWindow):

2011-05-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        [NRWT] --new-baseline should put baselines in the directory specified by --additional-platform-directory
        https://bugs.webkit.org/show_bug.cgi?id=60088
        
        Makes --new-baseline put new baselines into the first entry in the
        baseline search path, including any additional directories passed in via
        --additional-platform-directory.
        
        Simplifies baseline_path() by making it return the first entry in the
        baseline search path instead of requiring each port to have an
        implementation (should not result in any behavior change).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-05-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix circular dependency in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=60075

        These functions don't belong in bugzilla.py.  They only exist there
        because they are old.  Really, these functions shouldn't be free
        functions at all, but that's a patch for another day.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/bugzilla/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/upload.py:

2011-05-03  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60141
        Remove reference to libWebKitSystemInterfaceTiger.a from build-webkit

        * Scripts/build-webkit:

2011-05-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Update rebaseline queue server to handle hierarchical test results
        https://bugs.webkit.org/show_bug.cgi?id=60063
        
        Update test result parsing done by the rebaseline queue server to handle
        the hierarchical test result output that is generated as of r85254.

        * RebaselineQueueServer/templates/builder-queue-edit.html:

2011-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        webkit-patch post-commits HEAD^.. throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=60027

        * Scripts/webkitpy/common/checkout/scm/git.py:

2011-05-03  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Layout tests may timeout if loadFinished receives false
        https://bugs.webkit.org/show_bug.cgi?id=60064

        When using layoutTestController.queueLoad(), if QWebPage::loadFinished(bool) receives false
        then the layout test may timout. It happens that QWebPage::loadFinished() receives false when
        a response is ignored, like it should be for 204 responses. It is a problem for creating
        tests for 204 responses for example.

        This change has been tested and it causes no regressions in layout tests.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::maybeDump):

2011-05-03  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r85659.
        http://trac.webkit.org/changeset/85659
        https://bugs.webkit.org/show_bug.cgi?id=59977

        restarting isn't working correctly

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-05-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: fix http server startup/shutdown

        Previous versions of the code had three problems that made startup
        and shutdown flaky. The first is that it would throw exceptions
        if it couldn't delete stale log files, which was overly
        paranoid. The second is that some of the exceptions weren't
        defined properly. The third, and most important, is that it was
        using urllib to check if ports were available, which was leaving
        sockets in a half-closed state, and keeping ports from being
        reused. By switching to raw sockets, we are able to now reliably
        restart.

        This change also switches the code to using Executives to stop
        processes, which will let us delete a bunch of code in the
        port/* implementations and fix a weird layering problem in a
        subsequent patch.

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

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2011-05-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        fix failing printing_unittest on win32
        https://bugs.webkit.org/show_bug.cgi?id=59963

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-05-03  Adam Roben  <aroben@apple.com>

        Fix most strict PassOwnPtr violations on Windows

        Fixes <http://webkit.org/b/60025> Windows should (almost) build with strict PassOwnPtr
        enabled

        Reviewed by Anders Carlsson.

        * WebKitAPITest/Test.h: Use adoptPtr.

2011-05-03  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        Add myself to the committers list.

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

2011-05-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Layout test animations/3d/replace-filling-transform.html failing
        https://bugs.webkit.org/show_bug.cgi?id=59839

        Add animations/3d to the list of tests run in the chromium-gpu configuration since these tests exercise the compositor.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-05-03  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed, rolling out r85471.
        http://trac.webkit.org/changeset/85471
        https://bugs.webkit.org/show_bug.cgi?id=59922

        The rule of thumb in EFL is that you init in all the places
        you use it. So, if in your application you call ecore_evas_*
        functions, you have to call ecore_evas_init() first.

        * EWebLauncher/main.c: always call *_init() functions when you use
        that namespace.
        (quit):
        (main):

2011-05-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        remove no longer used method
        https://bugs.webkit.org/show_bug.cgi?id=59981

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2011-05-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        add image toggling behavior from old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=59978

        Output -diffs.html files. This matches old-run-webkit-tests.
        In theory, we could use data urls in the results.html file, but
        data urls don't currently have access to local files.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:

2011-05-02  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [nrwt] remove some obsolete references to .checksum files
        https://bugs.webkit.org/show_bug.cgi?id=59971

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-05-02  Adam Roben  <aroben@apple.com>

        Take advantage of implicit nullptr_t -> PassOwnPtr conversion

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * DumpRenderTree/chromium/CppBoundClass.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Compiler warning in Tools/MiniBrowser/main.c
        https://bugs.webkit.org/show_bug.cgi?id=59986

        Remove a compiler warning.

        * MiniBrowser/gtk/main.c: Use full array initializers to prevent some compilers
        from complaining.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add runtests_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=59955

        I forgot to add this file in a previous patch.

        * Scripts/webkitpy/tool/steps/runtests_unittest.py: Added.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Change the testing EWS to log failures explicitly to avoid an infinite loop.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2011-05-02  Adrienne Walker  <enne@google.com>

        Unreviewed, fix misspelled contributor name.

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

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        cr-linux-ews should run tests
        https://bugs.webkit.org/show_bug.cgi?id=59272

        This patch turns on testing for the cr-linux-ews.  Yay!

        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Incorporate a review comment that I mistakenly omitted from my last commit.

        * DumpRenderTree/gtk/EventSender.cpp: Use unsigned here instead of unsigned int.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        EWS should report the list of unexpected failures
        https://bugs.webkit.org/show_bug.cgi?id=59923

        We cache the results of the first layout test results run on the task
        so the EWS can grab them later.  Another option is to include them in
        the exception that's thrown, but this approach seemed slightly more
        aesthetic.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add base case for a test-running EWS
        https://bugs.webkit.org/show_bug.cgi?id=59920

        Later I will subclass this to run the Chromium Linux EWS.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py: Added.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-02  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:

2011-05-02  Nico Weber  <thakis@chromium.org>

        Reviewed by Mihai Parparita.

        Add --no-webkit2 to the output of "build-webkit -h"
        https://bugs.webkit.org/show_bug.cgi?id=59942

        * Scripts/build-webkit:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] old-run-webkit-tests should disable the Ubuntu overlay scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=59943

        Disable the Ubuntu overlay scrollbar while testing, by injecting the
        LIBOVERLAY_SCROLLBAR=0 environment variable.

        * Scripts/old-run-webkit-tests:

2011-05-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] editing/selection/select-out-of-editable.html failing after r83967
        https://bugs.webkit.org/show_bug.cgi?id=58667

        Do not trigger mouse down events when the EventSender knows that a mouse button is
        already down. These type of situations can confuse Xvfb and cause dragging failures.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseDownCallback): Do not trigger another mouse button down event if the mouse button
        is already down. This can interfere with drags in Xvfb.

2011-05-02  Zsolt Fehér  <h490267@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        DRT sideeffect revealed by r71268.
        https://bugs.webkit.org/show_bug.cgi?id=48958

        Reset QWebSettings::ZoomTextOnly attribute before all tests. 

        Call setTextSizeMultiplier(1.0) to reset TextZoomFactor and 
        PageZoomFactor too. It should be done before resetsettings() 
        to guarantee resetting QWebSettings::ZoomTextOnly correctly.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2011-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85469.
        http://trac.webkit.org/changeset/85469
        https://bugs.webkit.org/show_bug.cgi?id=59928

        Broke  webkitpy-tests on Windows 7, GTK and Qt. (Requested by
        bbandix on #webkit).

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py: Removed.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-02  Tomasz Morawski  <t.morawski@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        Cleanup EFL initialization/shutdown in the EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=59922

        Removed ecore_evas_init and edje_init form main function due to they
        are also called in the ewk_init. Moved ewk_shutdown to quit function.

        * EWebLauncher/main.c:
        (quit):
        (main):

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add base case for a test-running EWS
        https://bugs.webkit.org/show_bug.cgi?id=59920

        Later I will subclass this to run the Chromium Linux EWS.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py: Added.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add the ability to skip python and perl unit tests on EC2
        https://bugs.webkit.org/show_bug.cgi?id=59918

        * Scripts/webkitpy/common/config/ports.py:
            - This is slightly ugly, but it's useful...
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-04-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add new directory to the build.

        * waf/build/settings.py:

2011-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement UI client in minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=58416

        It also allows to open more than one minibrowser window from the
        command line.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowFinalize):
        (browser_window_init):
        (browserWindowConstructed):
        (createNewPage):
        (showPage):
        (closePage):
        (runJavaScriptAlert):
        (browserWindowUIClientInit):
        * MiniBrowser/gtk/main.c:
        (loadURI):
        (main):

2011-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement page loader client in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=58024

        A new class BrowserWindow has been added to implement the page
        loader client. It makes supporting multiple windows easier. Window
        title and url entry are now updated during the loading process.

        * MiniBrowser/gtk/BrowserWindow.c: Added.
        (activateUriEntryCallback):
        (goBackCallback):
        (goForwardCallback):
        (browserWindowFinalize):
        (browserWindowGetProperty):
        (browserWindowSetProperty):
        (browser_window_init):
        (browserWindowConstructed):
        (browser_window_class_init):
        (browserWindowUpdateTitle):
        (browserWindowSetTitle):
        (browserWindowSetLoadProgress):
        (browserWindowUpdateURL):
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishDocumentLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didReceiveTitleForFrame):
        (didFirstLayoutForFrame):
        (didFirstVisuallyNonEmptyLayoutForFrame):
        (didRemoveFrameFromHierarchy):
        (didStartProgress):
        (didChangeProgress):
        (didFinishProgress):
        (didBecomeUnresponsive):
        (didBecomeResponsive):
        (browserWindowLoaderClientInit):
        (browser_window_new):
        (browser_window_get_view):
        * MiniBrowser/gtk/BrowserWindow.h: Added.
        * MiniBrowser/gtk/GNUmakefile.am:
        * MiniBrowser/gtk/main.c:
        (createWindow):

2011-04-28  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=59743
        <rdar://problem/9040413> Add an install target for production builds.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2011-04-28  Adam Roben  <aroben@apple.com>

        Stop and restart ATSServer before each test run on Leopard

        This is to work around an ATSServer leak that eventually causes tests
        to fail.

        Fixes <http://webkit.org/b/51807> <rdar://problem/9273894>
        fast/blockflow/broken-ideograph-[small-caps|font].html sometimes fails on Leopard buildbots
        (due to ATSServer leak)

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (StopATSServer):
        (StartATSServer):
        Added these new commands to stop and start ATSServer.

        (TestFactory.__init__): Stop and start ATSServer on Leopard before running tests.

2011-04-28  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        add Leopard NRWT bot to the scheduler
        https://bugs.webkit.org/show_bug.cgi?id=59766

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

2011-04-28  Sam Weinig  <sam@webkit.org>

        Fix WebKitTestRunner build.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        The Derived Sources target needs a product name.

2011-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add install support for WebKitTestRunner.
        <rdar://problem/9349055>

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add missing CompilerVersion.xcconfig.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Add install path and tell it not to skip installation.

        Add missing CompilerVersion.xcconfig.

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * Scripts/build-webkit:

2011-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Make reading skipped files from additional platform
        directories work in WebKit2 mode.

        * Scripts/old-run-webkit-tests:
        (buildPlatformTestHierarchy): Simplify logic to always use the first
        and last platforms in the build hierarchy as the test hierarchy, and to
        insert the WebKit2 platform in the middle if it exists. Yum.

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        Remove build system integration and test harness integration for WML.

        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Mihai Parparita.

        use a hierarchical data structure to store results json
        https://bugs.webkit.org/show_bug.cgi?id=59736

        Instead of a map from test name to results dict, we now store a hierarchical
        data structure.

        Old: { foo/bar/baz.html: results_dict, foo/bar/baz2.html: results_dict }
        New:
        { foo: {
            bar: {
              baz.html: results_dict,
              baz2.html: results_dict } } }

        This cut ~52% of the size of times_ms.json. I expect it will cut
        30-40% of full_results.json and unexpected_results.json.

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        Using os.sep was just wrong since relative_test_filename canonicalizes separators.
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        Instead of plumbing through the change to all of the rebaselineserver
        python and JS, just convert to the old format after reading in the json.

2011-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS Bubbles should show commit-queue position when patch is in the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=59744

        Add target="_top" to the bubble links.  This was
        forgotten when I moved from using an onclick to a normal link.

        * QueueStatusServer/templates/statusbubble.html:

2011-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bubbles should show "submit to ews" button if they've not been processed
        https://bugs.webkit.org/show_bug.cgi?id=59751

        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/submittoews.py:
        * QueueStatusServer/templates/statusbubble.html:
        * QueueStatusServer/templates/submittoews.html:

2011-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS Bubbles should show commit-queue position when patch is in the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=59744

        This was actually just a 2 line change to statusbubble.py.
        I also cleaned up statusbubble.html a little while I was there
        (the links are now actual <a> tags and have hover).

        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/templates/statusbubble.html:

2011-04-28  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        add a mac leopard release NRWT bot
        https://bugs.webkit.org/show_bug.cgi?id=59733

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

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Avoid crashing when running new-run-webkit-tests outside of
        version control.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-28  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        * GNUmakefile.am:

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix python printing test
        https://bugs.webkit.org/show_bug.cgi?id=59719

        Now that we run scm commands in summarize_results, --verbose prints
        debug logging to stderr.

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        link to tests at a specific revision in the results.html file
        https://bugs.webkit.org/show_bug.cgi?id=59711

        * Scripts/webkitpy/common/checkout/scm.py:
        Add a method to get the head svn revision.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:
        Include the svn revision in the results json.

2011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Sam Weinig.

        [GTK] Remove WKURLCreateWithURL()
        https://bugs.webkit.org/show_bug.cgi?id=59691

        Use WKURLCreateWithUTF8CString() instead of WKURLCreateWithURL().

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

2011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WKView should be a GtkWidget
        https://bugs.webkit.org/show_bug.cgi?id=59603

        Don't use WKViewGetWindow(), use WKView as a GtkWidget instead.

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

2011-04-28  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add ARM specific Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=59680

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitdirs.pm:

2011-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        error_log.txt should include PHP errors
        https://bugs.webkit.org/show_bug.cgi?id=59643

        Turns out this was really easy after I finally learned
        enough about PHP to do it...

        I'm adding this in hopes of better tracking down
        our random http failures.

        * Scripts/webkitperl/httpd.pm:

2011-04-27  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should flags spacing errors for braces on the same line.
        https://bugs.webkit.org/show_bug.cgi?id=59665

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added some tests for the check
          and fixed some test cases to not trigger this error since it isn't what they are verifying.

2011-04-27  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style error for spaces after periods in a comment has a bad error
        message and warns about end of line spaces.
        https://bugs.webkit.org/show_bug.cgi?id=59663

        * Scripts/webkitpy/style/checkers/cpp.py: Fix both issues.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests for spaces at the end of line
        and changed the error messages.

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        remove assertion now that platform/mac-tiger no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=59660

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        remove test that didn't make sense
        https://bugs.webkit.org/show_bug.cgi?id=59658

        It was artifically saying the test wasn't expected to pass,
        but the expectations string was empty. The case of unexpected
        passes with a real expectations string is tested later in the
        same test.

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2011-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        WebKit2 needs to notify the client when a plugin fails to initialize
        https://bugs.webkit.org/show_bug.cgi?id=59657

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Add stubs.

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Add a few more missing options to new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=59567

        Add support for:
            --threaded
            --gc-between-tests
            --complex-text

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Fix an OwnPtr-related issue that was missed before the strictness was turned on.
        
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Forgot to upload the new times_ms.json file after splitting
        it out from full_results.json.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Fix snafu in generating the JSON for the chromium tests.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-04-27  Ojan Vafai  <ojan@chromium.org>

        Fix bad merge. This broke the chromium tests generating JSON files.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        Don't look for results in a location that no longer exists.

        * Scripts/old-run-webkit-tests:

2011-04-27  Adrienne Walker  <enne@google.com>

        Unreviewed, add Chrome GPU folks to contributors that I'm tired of manually CCing

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

2011-04-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        only include failures in full_results.json
        https://bugs.webkit.org/show_bug.cgi?id=59256

        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Roben.

        move times into their own json file
        https://bugs.webkit.org/show_bug.cgi?id=59239

        The test runtimes are the only case where we need an entry for
        every test that was run, including passing tests. Move them into
        their own json file so we can prune the other json files to only
        include failing tests.

        Use a trie-like data structure to hold the tests to avoid including
        full test paths. This cuts 52% of the filesize. The end result is ~700k
        pre-gzip.

        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        Exclude times from the parsed TestResults.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager.py:

2011-04-27  Anders Carlsson  <andersca@apple.com>

        More casts and more clang++ build fixes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2011-04-27  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        lazily autoinstall thirdparty python libraries
        https://bugs.webkit.org/show_bug.cgi?id=55723

        This helps by only having pywebsocket installed when the bots run.  It
        doesn't help much for devs since webkit-patch pulls in almost everything.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/thirdparty/__init__.py: Add an import hook so we can install based on
            the import command rather than just installing everything.
        * Scripts/webkitpy/thirdparty/__init___unittest.py: Added.

2011-04-27  Girish Ramakrishnan  <girish@forwardbias.in>

        Add my IRC nick.

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

2011-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        sherrifbot create-bug shouldn't assign bugs to webkit.review.bot
        https://bugs.webkit.org/show_bug.cgi?id=59545

        To do this, I needed a way to look up contributors by irc-name
        (since anyone in #webkit who might use this command may not be a committer).
        To lookup contributors, I had to make Contributor a real object.
        Which led me to redesign parts of committers.py...
        and finally fix one spot in changelog.py where we wanted to be
        looking up contributors and not committers.

        Overall a pretty simple fix, once you wade through the yak-hair.

        This may not prevent *all* possible ways that bugs would get assigned
        to webkit.review.bot.  If we don't recognize the requester we will
        go through the previous code path (which shouldn't change the assignee
        on the bug from the default as far as I can tell).

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/committers_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:

2011-04-27  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Upstream Symbian platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=58435

        Exempting directory WebKit/qt/symbian/platformplugin from style guide.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-04-27  Jeff Miller  <jeffm@apple.com>

        Correct my IRC nickname.

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

2011-04-27  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Darin Adler.

        Change the email used on bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=59582

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

2011-04-27  James Kozianski  <koz@chromium.org>

        Reviewed by Ojan Vafai.

        Extract map from port to builder name.
        https://bugs.webkit.org/show_bug.cgi?id=58301

        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/builders.py: Added.
        * Scripts/webkitpy/layout_tests/port/builders_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/factory.py:

2011-04-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Add proxy support to GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=58852

        Add SOUP_TYPE_PROXY_RESOLVER_DEFAULT feature or set SOUP_SESSION_PROXY_URI for developers behind proxy.

        * GNUmakefile.am:
        * GtkLauncher/main.c:
        (main):

2011-04-27  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by David Levin.

        Adding myself as a Chromium contributor to committers.py.

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

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

2011-04-26  David Grogan  <dgrogan@chromium.org>

        Reviewed by David Levin.

        Adding myself to Chromium contributors list in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=59565

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

2011-04-26  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        WebKitTestRunner needs layoutTestController.addOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=42544

        Also implemented removeOriginAccessWhitelistEntry and resetOriginAccessWhitelists.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::addOriginAccessWhitelistEntry):
        (WTR::LayoutTestController::removeOriginAccessWhitelistEntry):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        AX: Add more text marker routines to DRT
        https://bugs.webkit.org/show_bug.cgi?id=58949

        Add a few more methods to help test the text marker system, including nextMarker, previousMarker and
        stringForMarkerRange.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (nextTextMarkerCallback):
        (previousTextMarkerCallback):
        (stringForTextMarkerRangeCallback):
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * DumpRenderTree/mac/Configurations/CompilerVersion.xcconfig:
        * MiniBrowser/Configurations/CompilerVersion.xcconfig:
        * WebKitTestRunner/Configurations/CompilerVersion.xcconfig:

2011-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        Rubberstamped by Eric Seidel.

        Enable waf to be used to build other ports
        https://bugs.webkit.org/show_bug.cgi?id=58213

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        * waf: Added.
        * waf/build: Added.
        * waf/build/build_utils.py: Added.
        * waf/build/settings.py: Added.
        * waf/build/waf_extensions.py: Added.
        * waf/build/wxpresets.py: Added.

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Scripts/build-webkit:
        Remove feature.

        * iExploder/iexploder-1.3.2/htdocs/htmltags.in:
        * iExploder/iexploder-1.7.2/src/html-tags/webkit:
        Remove from fuzzer.

2011-04-26  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Update WinLauncher with command-line arguments to allow the
        transparency to be tested.  Use --transparent to create a
        transparent view.  Use --desktop to have the view fill the
        desktop area of the screen.
        https://bugs.webkit.org/show_bug.cgi?id=58300

        * WinLauncher/WinLauncher.cpp:
        (usesLayeredWebView): New method to indicate that the
        program is running with layered windows (alpha-blended
        transparent windows).
        (shouldUseFullDesktop): New method to indicate that the
        program is running across the full desktop (less any
        task bars.)
        (resizeSubViews): Layered window mode doesn't have any
        winapi child windows, so this routine is exited early
        for that case.
        (subclassForLayeredWindow): Subclass the window so we can
        override its defaut message loop.
        (computeFullDesktopFrame): Convenience function to get the
        desktop region and update the frame dimensions appropriately.
        (_tWinMain): Updated to accept the new '--transparent' and
        '--desktop' arguments.
        (InitInstance): Modified to exit early for the transparent
        background case.  WebKit will construct our primary window (with
        appropriate settings) so we don't need to create one ourselves.
        (WndProc): 
        (TransparentWndProc): New message loop for transparent windows,
        since they need special handling to support dragging.

2011-04-26  Alexandre MAzari  <amazari@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement LayoutTestController::setPluginsEnabled
        https://bugs.webkit.org/show_bug.cgi?id=59184

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setPluginsEnabled):

2011-04-26  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        Remove the unnecessary code that updates preference.

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

2011-04-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] accessibility/aria-combobox-expected.txt
        https://bugs.webkit.org/show_bug.cgi?id=59399

        Implement isExpanded(), as it's used in the layout test.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isExpanded): Implemented.

2011-04-26  Adrienne Walker  <enne@google.com>

        Reviewed by Kent Tamura.

        [chromium] Fix memory leak in DRT due to OwnPtr<T*>
        https://bugs.webkit.org/show_bug.cgi?id=59489

        * DumpRenderTree/chromium/WebViewHost.h:

2011-04-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Implement isChecked in DRT
        https://bugs.webkit.org/show_bug.cgi?id=59385

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isChecked): Implemented.

2011-04-26  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, rolling out r84949.
        http://trac.webkit.org/changeset/84949
        https://bugs.webkit.org/show_bug.cgi?id=58852

        Broke GTK+ compilation

        * GtkLauncher/main.c:
        (main):

2011-04-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        sheriff-bot should have a create-bug command
        https://bugs.webkit.org/show_bug.cgi?id=59491

        This patch has some stderr unittest spew, but I will
        fix it after my live demo.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-04-26  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Add proxy support to GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=58852

        Add SOUP_TYPE_PROXY_RESOLVER_DEFAULT feature or set SOUP_SESSION_PROXY_URI for developers behind proxy.

        * GtkLauncher/main.c:
        (main):

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

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

2011-04-26  Finnur Thorarinsson  <finnur.webkit@gmail.com>

        Reviewed by David Levin.

        Adding myself as a Chromium contributors to committers.py.

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

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

2011-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        DumpRenderTree/chromium should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59458

        All these changes are pretty straight forward.

        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (GetterPropertyCallback::GetterPropertyCallback):
        (CppBoundClass::bindGetterCallback):
        * DumpRenderTree/chromium/CppBoundClass.h:
        (CppBoundClass::bindProperty):
        (CppBoundClass::bindFallbackCallback):
        (CppBoundClass::bindFallbackMethod):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::DRTDevToolsClient):
        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestEventPrinter::createDRTPrinter):
        (TestEventPrinter::createTestShellPrinter):
        * DumpRenderTree/chromium/TestEventPrinter.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::createMainWindow):
        (TestShell::createDRTDevToolsClient):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationClientMock):
        (WebViewHost::speechInputController):
        (WebViewHost::deviceOrientationClientMock):
        (WebViewHost::reset):
        (WebViewHost::navigate):
        (WebViewHost::setPendingExtraData):
        (WebViewHost::canvas):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-04-26  Adam Roben  <aroben@apple.com>

        Make DRT/win log loading errors the same way DRT/mac does

        Fixes <http://webkit.org/b/59303> [Windows WebKit1 Tests]
        http/tests/misc/will-send-request-returns-null-on-redirect.html failing since r84742

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult): Removed the workaround for
        <rdar://problem/5064234>, which has long since been fixed, and then made this function match
        -[NSError(DRTExtras) _drt_descriptionSuitableForTestResult] more closely.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        REGRESSION (84876): build-webkit produces an error message
        https://bugs.webkit.org/show_bug.cgi?id=59460

        * Scripts/webkitdirs.pm:

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Fix timestamp comparison in check-for-weak-vtables-and-externals
        https://bugs.webkit.org/show_bug.cgi?id=59416
        
        We should only re-run the check-for-weak-vtables-and-externals script
        if the executable is more recent than the last run.

        * Scripts/check-for-weak-vtables-and-externals:

2011-04-26  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Implement LayoutTestController::setAutofilled
        https://bugs.webkit.org/show_bug.cgi?id=59439

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAutofilled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-04-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Teach build-webkit where newer Xcode versions store the application-wide build settings user default.

        * Scripts/webkitdirs.pm:

2011-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Leaks Viewer throws "Cannot post cyclic structures" in Safari 5
        https://bugs.webkit.org/show_bug.cgi?id=56090

        Make LeaksViewer work with versions of browsers that don't support message
        passing of cyclic structures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParser.js:
        (LeaksParser.this._worker.onmessage):
        (LeaksParser):
        (LeaksParser.prototype.addLeaksFile):
        Use LeaksParserImpl directly if we don't support passing cyclic structures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserImpl.js: Copied from BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js.
        (LeaksParserImpl):
        (LeaksParserImpl.prototype.addLeaksFile):
        (LeaksParserImpl.prototype._incorporateLeaks):
        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (onmessage):
        Factor out LeaksParser implementation into LeaksParserImpl.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js:
        (workersSupportCyclicStructures):
        Add function to detect if workers support passing cyclic structures.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html:
        Add LeaksParserImpl.js include.

2011-04-25  Jeff Miller  <jeffm@apple.com>

        Reviewed by Timothy Hatcher.

        Treat strings defined with UI_STRING_LOCALIZE_LATER_KEY() as debugging strings in extract-localizable-strings
        https://bugs.webkit.org/show_bug.cgi?id=59373

        * Scripts/extract-localizable-strings: Add UI_STRING_LOCALIZE_LATER_KEY() to isDebugMacro var.

2011-04-25  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding a few Chromium contributors to committers.py.

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

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

2011-04-23  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Nodes in shadow DOM should not be GCed while their hosts are alive
        https://bugs.webkit.org/show_bug.cgi?id=59284

        Chromium DRT over-refcounted the NPObject wrappers it used to
        marshal shadowRoot nodes back to tests (WebBindings::makeNode
        births NPObjects with referenceCount == 1). This masked the GC bug
        59284 in tests by making shadowRoot nodes live forever.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::shadowRoot):
        (LayoutTestController::ensureShadowRoot):

2011-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes. Add new methods to wx LayoutTestController,
        and update the URL for downloading waf.
        
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * Scripts/webkitdirs.pm:

2011-04-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84627.
        http://trac.webkit.org/changeset/84627
        https://bugs.webkit.org/show_bug.cgi?id=59271

        It broke Symbian build (Requested by Ossy on #webkit).

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-04-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        rebaseline-chromium-webkit-tests: clean up output
        https://bugs.webkit.org/show_bug.cgi?id=59240

        This change dramatically changes the output the tool provides
        by default. The previous output (more or less) is still there
        in -v / verbose / debug mode, but the default output is
        way terser and more readable. It mostly says which files are
        updated, which are duplicates, and which are not found in an
        archive. Feedback desired :).

        This change also adds a scm.exists() method to the SCM object
        so that we can cleanly figure out what we're doing while
        rebaselining.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-04-22  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add Ilya Sherman (isherman@chromium.org) to the list of contributors
        https://bugs.webkit.org/show_bug.cgi?id=59231

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

2011-04-22  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: Exception raised when stderr contains binary data
        https://bugs.webkit.org/show_bug.cgi?id=59083

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        Use write_binary_file() instead of write_text_file().

2011-04-22  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setFrameFlatteningEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42536

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setFrameFlatteningEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CommitQueue should remember the expected failures from patch to patch
        https://bugs.webkit.org/show_bug.cgi?id=59253

        Previously, we stored the set of expected failures on the task object,
        which meant the commit-queue forgot about them after each patch.  This
        patch moves them to the CommitQueue object so they will have a longer
        lifetime.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Brian Weinstein.

        WebKit2: Implement JavaScript unresponsiveness timer/callbacks
        https://bugs.webkit.org/show_bug.cgi?id=59248

        Stub out shouldInterruptJavaScript callbacks.

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

2011-04-22  Daniel Bates  <dbates@webkit.org>

        Reviewed by Csaba Osztrogonác.

        webkit-patch land hangs if svn prompts for credentials
        https://bugs.webkit.org/show_bug.cgi?id=31500

        Make has_authorization_for_realm() return True only if there exists a credentials file
        that contains either the word "password" or "passtype". We assume that these words don't
        coincide with the actual credential data (e.g. a person's username is "password").

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
          - Added test cases:
            test_has_authorization_for_realm_using_credentials_with_passtype(),
            test_has_authorization_for_realm_using_credentials_with_password(),
            test_not_have_authorization_for_realm_with_credentials_missing_password_and_passtype()
          - Renamed test_not_have_authorization_for_realm() to test_not_have_authorization_for_realm_when_missing_credentials_file()
            to better describe what it's testing.
          - Repurposed test_has_authorization_for_realm() to take realm and credential data to use
            and return the result of calling has_authorization_for_realm() so that the caller can
            assert the result; Renamed to _test_has_authorization_for_realm_using_credentials() to
            better reflect its new purpose.

2011-04-22  Adam Barth  <abarth@webkit.org>

        Remove double-negative.  (Sorry this was bugging me.)

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor LayoutTestResultsReader out of CommitQueue
        https://bugs.webkit.org/show_bug.cgi?id=59244

        This code will be shared with the EWS when they start running tests.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py: Added.
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-04-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        My recent changes to how LayoutTestResults.results_from_string
        uncovered a bug in our use of urllib2.
        We now are treating the return value from _fetch_results_html()
        (which returns urllib2.openurl()) as a string.  That's incorrect,
        the return value is a file-like object (which auto-converts to a
        string in most cases).

        I've updated our urllib2-using code to correctly call .read() on the
        resulting object before treating it like a string.
        Unfortunately there is no easy way to test this mis-understanding
        of the openurl() semantics.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor PatchAnalysis task out of CommitQueueTask
        https://bugs.webkit.org/show_bug.cgi?id=59220

        This is a first step towards teaching the EWS to run tests.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py: Added.

2011-04-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT: implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=59082

        * DumpRenderTree/gtk/EventSender.cpp:
        (scalePageByCallback): scalePageBy() support.

2011-04-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        LayoutTestResults should know how to handle NRWT json files
        https://bugs.webkit.org/show_bug.cgi?id=59168

        LayoutTestResults was originally created to be a parallel
        to existing NRWT architecture for dealing with results files.
        But then it turns out that NRWT has no such architecture. :(
        So this patch writes the necessary code to handle reading
        full_results.json and unexpected_results.json files from
        NRWT layout-test-results directories.

        LayoutTestResults has thus morphed from being ORWT-only to
        supporting both ORWT and NRWT.  It's possible at some future
        point that other pieces of the NRWT architecture will learn
        how to read JSON files in which case this can go away.

        This is all done for making it possible for the commit-queue
        to run the tests using NWRT and be able to understand the results
        (for flaky test reporting, etc.)

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py: Added.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py: Added.

2011-04-22  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Upstream Symbian platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=58435

        Exempting directory WebKit/qt/symbian/platformplugin from style guide.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2011-04-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Qt should use the mac-wk2 skipped list
        https://bugs.webkit.org/show_bug.cgi?id=58536

        * Scripts/old-run-webkit-tests:

2011-04-21  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        Remove find-mismatched-layout-test-results since it's not needed in a
        checksum free world.
        https://bugs.webkit.org/show_bug.cgi?id=59156

        * Scripts/find-mismatched-layout-test-results: Removed.

2011-04-21  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        Teach build-webkit and update-webkit that the WinCairo port does
        not need the non-redistributable WebKitSupportLibraries.zip file.
        Also append the _Cairo_CFLite label to the build target for the
        default (no argument) case when building with '--wincairo'
    
        https://bugs.webkit.org/show_bug.cgi?id=58801

        * Scripts/build-webkit: Don't die if WebKitSupportLibraries.zip
          doesn't exist.
        * Scripts/webkitdirs.pm: Append '_Cairo_CFLite' to the default
          'Release' build target when passed the '--wincairo' flag.
        * Scripts/update-webkit: Don't die if WebKitSupportLibraries.zip
          doesn't exist.

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: obsolete old code, part 5: rename message_broker2 to message_broker
        https://bugs.webkit.org/show_bug.cgi?id=58758

        Since worker_mixin is now only used by worker, there's no point
        in having it split across two files.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Added
        * Scripts/webkitpy/layout_tests/layout_package/message_broker2.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: * Added
        * Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py: Removed.

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: obsolete old code, part 4: merge worker_mixin into worker
        https://bugs.webkit.org/show_bug.cgi?id=58756

        Since worker_mixin is now only used by worker, there's no point
        in having it split across two files.

        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py: Removed.

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: obsolete old code, part 3 - rename test_runner to manager
        https://bugs.webkit.org/show_bug.cgi?id=58754

        test_runner hasn't been a great name for some time, since all of
        the test running is actually done in worker and
        single_test_runner. Rename to manager to match the terminology
        elsewhere.

        * Scripts/webkitpy/layout_tests/layout_package/manager.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: obsolete old threading code, part 2
        https://bugs.webkit.org/show_bug.cgi?id=58753

        This merges the test_runner2 code back into test_runner since
        there's only a single type of test runner now.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        * Scripts/build-webkit:
        * Tools.pro:

2011-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch upload should assign the bug to you
        https://bugs.webkit.org/show_bug.cgi?id=33699

        This patch only re-assigns the bug if it is currently unassigned.  We
        can be more aggressive in the future if people want us to be more
        agressive.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        move json_results.html over to LayoutTests/fast/harness
        https://bugs.webkit.org/show_bug.cgi?id=59154

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ValidateChangeLogs doesn't work on SVN
        https://bugs.webkit.org/show_bug.cgi?id=59115

        svn-create-patch lies about the diff in the working copy by moving
        ChangeLog entries to the top of the diff.  That's fine on most cases,
        but causes problems for ValidateChangeLogs, which is trying validate
        the where the ChangeLog entry appears.

        I haven't added a test for this change because I couldn't figure out
        how to write one.  The issue is more of an integration issue, which
        we're not really set up to test in our unit testing framework.  If this
        patch had worked around the output from svn-create-patch, then I could
        have tested that we behave correctly on sample svn-create-patch output,
        but, in this case, I've removed the dependency on svn-create-patch.  I
        could test that we behave correctly on "svn diff" output, but we
        already have those tests.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:

2011-04-21  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        old-run-webkit-tests/new-run-webkit-tests shouldn't read or write .checksum files
        https://bugs.webkit.org/show_bug.cgi?id=58402

        * Scripts/old-run-webkit-tests: Don't read or write .checksum files.
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: Don't write .checksum files.
        * Scripts/webkitpy/layout_tests/port/base.py: Don't read .checksum files.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py: Update passing pngs to include a checksum.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        final tests for results.html file
        https://bugs.webkit.org/show_bug.cgi?id=59150

        This gets us close to 100% code coverage. Once this is
        checked in, I'll move this file over to LayoutTests/fast/harness
        and make it a proper layout test.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        only expand visible rows
        https://bugs.webkit.org/show_bug.cgi?id=59130

        For the chromium port, where there are many expected failures,
        expanding all of them is quite slow. Only expand the visible ones.
        This makes the default case. Also, make the expanding async to
        avoid totally killing the process.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js:

2011-04-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] DRT: implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=59082

        Rolling out r84507 since it broke many GTK+ tests.

        * DumpRenderTree/gtk/EventSender.cpp:

2011-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Add way to garbage collect between each test when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=59126

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (runTest):
        * Scripts/old-run-webkit-tests:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:

2011-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Mihai Parparita.

        fix another innocuous JS error in expand/collapseAllExpectations
        https://bugs.webkit.org/show_bug.cgi?id=59122

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        put unexpected passes into their own table
        https://bugs.webkit.org/show_bug.cgi?id=59016

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        initial set of tests for new results.html file
        https://bugs.webkit.org/show_bug.cgi?id=59031

        Also, fix the bugs (mostly innocuous JS errors) the tests found.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_test.js: Added.

2011-04-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] missing LayoutTestController::callShouldCloseOnWebView()
        https://bugs.webkit.org/show_bug.cgi?id=59086

        callShouldCloseOnWebView() implementation.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::callShouldCloseOnWebView):

2011-04-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT: implement eventSender.scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=59082

        * DumpRenderTree/gtk/EventSender.cpp:
        (scalePageByCallback): scalePageBy() support.

2011-04-20  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        layoutTestController can create and destroy shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59058

        Chromium, Mac, GTK and Qt DRT; and WK2 test runner.

        * DumpRenderTree/LayoutTestController.cpp:
        (ensureShadowRootCallback):
        (removeShadowRootCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowRoot):
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::ensureShadowRoot):
        (LayoutTestController::removeShadowRoot):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):
        (WTR::LayoutTestController::ensureShadowRoot):
        (WTR::LayoutTestController::removeShadowRoot):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: handle ctrl-c more cleanly
        https://bugs.webkit.org/show_bug.cgi?id=58849

        * Scripts/new-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:

2011-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84431.
        http://trac.webkit.org/changeset/84431
        https://bugs.webkit.org/show_bug.cgi?id=59061

        Breaks for folks who don't have editbugs (Requested by abarth
        on #webkit).

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

2011-04-20  Leo Yang  <leo.yang@torchmobile.com.cn>

        Unreviewed.

        Adding myself to committers.py.

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

2011-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch upload should assign the bug to you
        https://bugs.webkit.org/show_bug.cgi?id=33699

        This patch only re-assigns the bug if it is currently unassigned.  We
        can be more aggressive in the future if people want us to be more
        agressive.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

2011-04-20 Peter Gal <galpeter@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Modify builder.html template to allow easy access
        to list more builds on the builder's page.

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

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

2011-04-20  Peter Gal  <galpeter@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Add the default template for builder page.

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

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

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        move page generation into a single function
        https://bugs.webkit.org/show_bug.cgi?id=59027

        Now executing the script doesn't create any state. We should then
        be able to write tests for this by setting custom results data.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        move global state into a shared object
        https://bugs.webkit.org/show_bug.cgi?id=59023

        This makes the code more testable.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        move global state into a shared object
        https://bugs.webkit.org/show_bug.cgi?id=59023

        This makes the code more testable.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add expandAll/collapseAll links
        https://bugs.webkit.org/show_bug.cgi?id=59011

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for wx 2.9.1, Cocoa and 64-bit builds.

        * Scripts/webkitdirs.pm:
        * wx/build/build_utils.py:
        * wx/build/settings.py:
        * wx/install-unix-extras:
        * wx/packaging/build-mac-installer.py:
        * wx/packaging/build-win-installer.py:

2011-04-20  Adam Roben  <aroben@apple.com>

        Replace old-run-webkit-tests's win-7 platform with win-7sp0

        It was an error that we had a win-7 platform to begin with. Windows 7 was the most recent
        version of Windows we cared about, so its results should just go in win. But now that
        Windows 7 SP1 exists (and has different results for some tests), we need a place to store
        results for Windows 7 without SP1 (and older versions of Windows).

        Part of <http://webkit.org/b/56617> Several tests fail on Windows 7 SP1 due to font
        differences from Windows 7 "SP0"

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests: Replaced win-7 with win-7sp0. Newer versions of Windows 7
        will just use "win".

        * Scripts/webkitdirs.pm:
        (isWindows7SP0): Added. Replaces isWindows7, because that function had no remaining callers.

2011-04-20  Adam Roben  <aroben@apple.com>

        Teach webkitdirs::winVersion about build numbers

        The build number isn't currently used, but soon will be.

        As a bonus, winVersion now works on non-Cygwin variants of Perl!

        Fixes <http://webkit.org/b/58991> Need a way to distinguish between Windows 7 and Windows 7
        SP1

        Reviewed by Anders Carlsson.

        * Scripts/webkitdirs.pm:
        (isAnyWindows): Added. Returns true if we're running on any Windows-ish Perl.
        (determineWinVersion): Use `cmd /c ver` to get the version number, including the build
        number. Parse the version number into a hash, similar to how osXVersion() works.

        (isWindows7):
        (isWindowsVista):
        (isWindowsXP):
        Updated for changes to winVersion().

2011-04-20  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by Kenneth Russell.

        Add support for composite-to-texture to DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=58675

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setCompositeToTexture):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-04-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The commit-queue is confused when non-layout tests fail
        https://bugs.webkit.org/show_bug.cgi?id=58955

        As seen in http://queues.webkit.org/results/8474435

        It fails to create an archive of the layout test results
        and then throws an exception.

        I've fixed this by making it catch the exception as well
        as made it so it never calls that path in the common case.

        I've updated MockFileSystem to understand rmtree's affect on
        directories as well as files.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/workspace.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Fix check for whether a failure is expected to deal with
        flaky tests and FAIL expectations.
        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        don't show missing text results for tests that only dump image results
        https://bugs.webkit.org/show_bug.cgi?id=58931

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        don't show failures table if there are only new tests
        https://bugs.webkit.org/show_bug.cgi?id=58929

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        don't show failures table if there are only new tests
        https://bugs.webkit.org/show_bug.cgi?id=58929

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Fix unittest failures from http://trac.webkit.org/changeset/84294.

        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        switch new-run-webkit-tests to using the new results file
        https://bugs.webkit.org/show_bug.cgi?id=58861

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Renata Hodovan  <reni@webkit.org>

        Reviewed by Eric Seidel.

        Move the alignment related macros from Vector.h to new Alignment.h.
        https://bugs.webkit.org/show_bug.cgi?id=56000

        Adding the new file to the forwarding headers of Tools.

        * DumpRenderTree/ForwardingHeaders/wtf/Alignment.h: Added.

2011-04-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix for Win / wx 2.9 wxPython installation.

        * wx/packaging/build-win-installer.py:
        * wx/packaging/wxWebKitInstaller.iss.in:

2011-04-19  Adam Roben  <aroben@apple.com>

        Skip another accelerated-compositing-sensitive test when accelerated compositing is disabled

        * Scripts/old-run-webkit-tests: Skip media/controls-without-preload.html on Windows when
        accelerated compositing is disabled.

2011-04-19  Ojan Vafai  <ojan@chromium.org>

        Remove accidentally committed debug code.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Avoid duplicate stub implementation of test routine
        for WinCairo build.

        * WebKitTestRunner/win/TestInvocationWin.cpp: Exclude
        WinCairo from using this stub.

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        make results file work with audio and reftests
        https://bugs.webkit.org/show_bug.cgi?id=58860

        Also fix bug with timeout tests and store a bit in the JSON
        for new image tests instead of loading the image result to check if it's there.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r84206): 50 tests failing on SnowLeopard Intel Release (WebKit2 Tests) due to extra "supportsFullScreen() == true" output
        https://bugs.webkit.org/show_bug.cgi?id=58890

        Add a layoutTestController flag which controls when full screen callbacks are written to stdout.
        Defaults to false.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added dumpFullScreenCallbacks().
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::supportsFullScreen): Only write to stdout if shouldDumpFullScreenCallbacks is set.
        (WTR::InjectedBundlePage::enterFullScreenForElement): Ditto.
        (WTR::InjectedBundlePage::exitFullScreenForElement): Ditto.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize new ivar.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpFullScreenCallbacks): Added.
        (WTR::LayoutTestController::shouldDumpFullScreenCallbacks): Added.

2011-04-19  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html fails (DRT sideeffect)
        https://bugs.webkit.org/show_bug.cgi?id=35086

        fast/xmlhttprequest/xmlhttprequest-no-file-access.html caused
        a DRT sideeffect problem, because the resetSettings didn't set
        the default value of LocalContentCanAccessFileUrls.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):

2011-04-18  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [GTK] Need support for dumping focus rectangles in pixel results
        https://bugs.webkit.org/show_bug.cgi?id=53647

        Dump the selection rect if it has been requested.

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView):

2011-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy should run the ActiveWorkItems tests
        https://bugs.webkit.org/show_bug.cgi?id=58859

        Also make the unit tests pass. :)

        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/model/queue.py:
        * QueueStatusServer/model/workitems.py:

2011-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org should show trailing-days pass counts for queues
        https://bugs.webkit.org/show_bug.cgi?id=58812

        This lets us see if each bot is pulling its own weight or not.
        Before I wrote this patch our suspicious was that one of the
        cq bots was doing most of the work.  Turns out they're actually
        pretty even in their recent pass counts.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/templates/queuestatus.html:

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: obsolete old threading code, part 1
        https://bugs.webkit.org/show_bug.cgi?id=58752

        This patch removes support for the 'old-inline' and
        'old-threads' worker models, and deletes the corresponding code.
        Now that the new code is stable, this stuff is no longer
        necessary.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: add an --additional-drt-flag option
        https://bugs.webkit.org/show_bug.cgi?id=58680

        NRWT has a bunch of command line flags that exist to pass
        custom flags to DRT, especially on chromium. It would be nice
        if there was a generic mechanism to pass through flags so we
        didn't have all the custom ones.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: WKTR should support WebKit2 full screen APIs
        https://bugs.webkit.org/show_bug.cgi?id=56318

        Respond to enterFullScreenForElement() and exitFullScreenForElement(), allowing 
        WKTR to test the LayoutTest/fullscreen/ tests.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add support for WKBundlePageFullScreenClient.
        (WTR::InjectedBundlePage::supportsFullScreen): Added.
        (WTR::InjectedBundlePage::enterFullScreenForElement): Added.
        (WTR::InjectedBundlePage::exitFullScreenForElement): Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Enable the full screen preference.

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: remove chromium-specific relpath hack for --results-directory
        https://bugs.webkit.org/show_bug.cgi?id=58388

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-18  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] expose title direction to webkit client
        https://bugs.webkit.org/show_bug.cgi?id=58823

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setTitleTextDirection):
        Add member and setter to let us stash the title direction at load time.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveTitle):
        * DumpRenderTree/chromium/WebViewHost.h:
        Adapt to new API; push the title into layoutTestController when we
        receive it.

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed.

        Re-land r84112. It was rolled out in r84127 but it didn't need
        to be. Only r84111 actually broke things.

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: don't run more processes than necessary
        https://bugs.webkit.org/show_bug.cgi?id=58751

        Previously NRWT would start up 1 process for each processor on
        the machine by default, which was a waste if we were only
        running a few shards of tests.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        include links to actual.png files for new pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=58831

        Load image elements to confirm whether the files exist.
        Image elements will load without being appended to the DOM.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add a zoomed view for pixel results to the new results html file
        https://bugs.webkit.org/show_bug.cgi?id=58827

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add labels to results html page
        https://bugs.webkit.org/show_bug.cgi?id=58803

        -fix iframe size to be the size of the png results
        -fix a bunch of aesthetic nits
        -fix some incorrectly styled code

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-18  Chang Shu  <cshu@webkit.org>

        Reviewed by Eric Seidel.

        WebKitTestRunner needs layoutTestController.pathToLocalResource
        https://bugs.webkit.org/show_bug.cgi?id=42541

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm:
        (WTR::LayoutTestController::pathToLocalResource):
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        (WTR::LayoutTestController::pathToLocalResource):
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        (WTR::LayoutTestController::pathToLocalResource):

2011-04-18  Timothy Hatcher  <timothy@apple.com>

        Make update-webkit-localizable-strings put WebKit/win strings in WebCore
        now that all localized strings in WebKit/win use WEB_UI_STRING.

        https://webkit.org/b/58747

        Reviewed by Dan Bernstein.

        * Scripts/update-webkit-localizable-strings: Remove the code that updated WebKit/win differently.

2011-04-18  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Use WCHAR instead of TCHAR
        https://bugs.webkit.org/show_bug.cgi?id=58755

        We always use the UNICODE versions of windows functions, so
        the usage of TCHAR makes no sense and mixing them is bad style.

        * WinLauncher/PrintWebUIDelegate.cpp:
          Also fix various style issues (including indentation and removal of ugly C-casts).
        * WinLauncher/WinLauncher.cpp:

2011-04-18  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Andreas Kling.

        Add layoutTestController.shadowRoot to Qt DRT.
        https://bugs.webkit.org/show_bug.cgi?id=58759

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::shadowRoot): Added.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84111.
        http://trac.webkit.org/changeset/84111
        https://bugs.webkit.org/show_bug.cgi?id=58771

        Chromium linux layout tests are broken. (Requested by loislo2
        on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84112.
        http://trac.webkit.org/changeset/84112
        https://bugs.webkit.org/show_bug.cgi?id=58770

        Chromium linux layout tests are broken. (Requested by loislo2
        on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-17  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel and Adam Barth.

        webkit-patch land hangs if svn prompts for credentials
        https://bugs.webkit.org/show_bug.cgi?id=31500

        Prompt for username and password when using git-svn and there aren't cached SVN credentials.

        * Scripts/webkitpy/common/checkout/scm.py:
          - Added mixin class SVNRepository and made both class SVN and Git inherit from it.
          - Moved SVN.has_authorization_for_realm() to class SVNRepository and removed default value
            for argument realm; modified call sites as needed.
          - Modified AuthenticationError constructor to take optional prompt_for_password argument.
          - Modified {SCM, SVN, Git}.commit_with_message() to take optional password argument.
          - Modified Git._commit_on_branch() to take optional username and password argument.
          - Modified Git.push_local_commits_to_server() to take optional username and password
            argument and to call has_authorization_for_realm().
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
          - Modified SVNTest.test_commit_without_authorization() to take dummy realm argument.
          - Modified SVNTest.test_not_have_authorization_for_realm() to pass realm argument to
            SVN.has_authorization_for_realm().
        * Scripts/webkitpy/common/net/credentials.py:
          - Modified Credentials.read_credentials() to call User.prompt_password() instead
            of using getpass.getpass() directly.
        * Scripts/webkitpy/common/system/user.py:
          - Added User.prompt_password().
        * Scripts/webkitpy/tool/steps/commit.py:
          - Modified Commit.run() to prompt for a password if needed.

2011-04-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: save stderr into the layout-test-results dir
        https://bugs.webkit.org/show_bug.cgi?id=58690

        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: read stderr from chromium DRT separately
        https://bugs.webkit.org/show_bug.cgi?id=58708

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

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

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * TestWebKitAPI/PlatformWebView.h:
        * WebKitTestRunner/config.h:
        * WebKitTestRunner/win/TestInvocationWin.cpp:

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(CAIRO) to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=55192

        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * WebKitTestRunner/config.h:

2011-04-16  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        show diffs+test inline in the results page
        https://bugs.webkit.org/show_bug.cgi?id=58723
        
        Put each row in it's own tbody and sort based on tbodies. That way
        we can append the results to the tbody inline as another table row.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-16  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        handle new tests in the new results html file
        https://bugs.webkit.org/show_bug.cgi?id=58715

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        old-run-webkit-tests: save the list of tests actually run to a file
        https://bugs.webkit.org/show_bug.cgi?id=58692

        * Scripts/old-run-webkit-tests:

2011-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        fix MockFileSystem.abspath() on windows
        https://bugs.webkit.org/show_bug.cgi?id=58713

        The existing code was borked on Windows if a path was passed
        in using a drive letter (e.g., "d:\foo.txt"), and would go
        into an infinite recursive loop. While win paths shouldn't
        normally be passed into the mock filesystem, this just
        bulletproofs things a bit (note that "/foo.txt" is considered
        an absolute path on windows python as well.

        * Scripts/webkitpy/common/system/filesystem_mock.py:

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        show stderr files and httpd log files
        https://bugs.webkit.org/show_bug.cgi?id=58714

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Scripts/build-webkit:

2011-04-15  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        When a message with url embedded is added to console, the "file:" scheme
        and path should be stripped.
        https://bugs.webkit.org/show_bug.cgi?id=58665

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::lastFileURLPathComponent):
        (WTR::InjectedBundlePage::willAddMessageToConsole):

2011-04-15  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        Add takeFocus callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=58686

        Add empty WKPageUIClient entries for the takeFocus callback in the MiniBrowser and WebKitTestRunner.

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

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        only show pretty-diff/wdiff if they were generated
        https://bugs.webkit.org/show_bug.cgi?id=58682

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-04-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] DRT: Default custom policy delegate decision should be Ignore.

        If layoutTestController.setCustomPolicyDelegate() is called with only
        one argument, the second ("permissive") should default to false.

        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix path to layout test in new results file
        https://bugs.webkit.org/show_bug.cgi?id=58618

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix sorting in new results file
        https://bugs.webkit.org/show_bug.cgi?id=58616

        -Fix the custom sort to return -1, 0, 1 instead of true/false.
        -Secondary sort by test name when sort values are equal.
        -Sort by test name by default.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-15  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        check-webkit-style shouldn't complain about not including a primary header file 
        if none exists
        https://bugs.webkit.org/show_bug.cgi?id=39514

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2011-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        queues.webkit.org should display when a bot last rebooted
        https://bugs.webkit.org/show_bug.cgi?id=58562

        There is more repeated code here than I would like.  I fear
        my django-fu isn't quite up to snuff.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/templates/queuestatus.html:

2011-04-14  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by Adam Barth.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563
        
        Fixed compile error on Mac when using Core Graphics.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):

2011-04-14  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563

        * DumpRenderTree/chromium/TestShell.cpp:
        (makeCanvasOpaque):
        (TestShell::dumpImage):
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp:
        (WebThemeControlDRTWin::WebThemeControlDRTWin):
        (WebThemeControlDRTWin::draw):
        (WebThemeControlDRTWin::drawTextField):
        (WebThemeControlDRTWin::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::canvas):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-04-14  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Add -maximize flag to QtTestBrowser and MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=58007

        Adds flag to start the test browsers maximized.
        Symbian started maximized on QtTestBrowser - made MiniBrowser follow
        suit.
        Also fixes some ToggleFullScreen issues so that prior window state is
        restored.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::toggleFullScreenMode):
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::toggleFullScreenMode):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-04-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add checkbox to only show unexpected results to new results file
        https://bugs.webkit.org/show_bug.cgi?id=58606

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Implement ImageDiff Logic.
        http://bugs.webkit.org/show_bug.cgi?id=58486

        * DumpRenderTree/win/ImageDiffCairo.cpp: Added.
        (strtof):
        (readFromData):
        (createImageFromStdin):
        (releaseMallocBuffer):
        (createDifferenceImage):
        (imageHasAlpha):
        (writeToData):
        (main):
        * DumpRenderTree/win/ImageDiff.vcproj: Updated for new
          ImageDiffCairo.cpp (excluding from Apple builds).
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops: Use
          new ImageDiffWinCairoCommon.vsprops file.
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops: Use
          new ImageDiffWinCairoCommon.vsprops file.
        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Added.
        * Scripts/old-run-webkit-tests: Make sure proper executable
          is built and executed for WinCairo port.

2011-04-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        only show expected failure type for ports that use an expectations file
        https://bugs.webkit.org/show_bug.cgi?id=58588

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue fails to catch IOError when results.html is missing
        https://bugs.webkit.org/show_bug.cgi?id=58589

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

2011-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix for Mac installation script.

        * wx/packaging/build-mac-installer.py:

2011-04-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        sort columns in the new json_results.html file
        https://bugs.webkit.org/show_bug.cgi?id=58581

        Also fix padding on TDs and the path to layout tests.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html:

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        queues.webkit.org should display when a bot last passed a patch
        https://bugs.webkit.org/show_bug.cgi?id=58546

        I am suspicious that some of our commit-queue instances are never
        actually passing anything.

        This will let us know if those bots are never passing patches.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/templates/queuestatus.html:

2011-04-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        REGRESSION (r83764): webkitpy.layout_tests.port.chromium_win_unittest.ChromiumWinTest.test_default_worker_model fails on apple-windows-13
        https://bugs.webkit.org/show_bug.cgi?id=58545

        Remove platform-specific overrides; the default behavior should
        be working everywhere now, I think.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queues are hitting an exception trying to land when the tree is red
        https://bugs.webkit.org/show_bug.cgi?id=58558

        Just an un-tested (and thus broken) code path from yesterday's changes.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for wxMSW and wx 2.9.1.1.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::shadowRoot):
        * wx/build/wxpresets.py:

2011-04-14  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        [chromium] Failing GPU video tests
        https://bugs.webkit.org/show_bug.cgi?id=57926

        Added/updated GPU directory names for rebaseline tool.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-13  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        Perl unit test removeEOL.pl should print test case name on failure
        https://bugs.webkit.org/show_bug.cgi?id=58513

        * Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl: Pass $title as
          second argument of Test::Simple::ok().

2011-04-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        gdb-safari should pass arguments to safari.
        https://bugs.webkit.org/show_bug.cgi?id=58439

        We can do:
          gdb-safari --debug LayoutTests/.../foo.html

        * Scripts/gdb-safari: Passing @ARGV to Safari via gdb --arg.

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.
        https://bugs.webkit.org/show_bug.cgi?id=52763

        r83799 broke test-webkitpy because it assumed we always have
        access to a real filesystem (we don't during the unit tests).
        Stubbing out the copy for now but we might need a better
        solution at some point.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests --run-singly option is busted
        https://bugs.webkit.org/show_bug.cgi?id=55909

        Python's broken lexical scoping strikes again :(.

        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-13  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        generated unexpected_results.html from unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=52763

        Eventually, we'll merge this with results.html and have a single richer results page.
        For now, I just want to get something checked in that we can iterate on.

        * Scripts/webkitpy/layout_tests/layout_package/json_results.html: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-04-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Up the failure limit to allow the commit-queue to actually land when the tree is red
        https://bugs.webkit.org/show_bug.cgi?id=58499

        This change increases the --exit-after-N-failures limit used by the commit-queue
        from 1 to 10.  This will cause the code added in bug 58494 to actually get
        exercised and the queues should start being able to land when the trees are red.

        When testing I found that test_runtests_leopard_commit_queue_hack_command was the
        only unit test to actually detect this change!  Since we don't actually
        run on leopard anymore, I removed the hack code and repurposed the test.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2011-04-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should be able to land when tree is red
        https://bugs.webkit.org/show_bug.cgi?id=58494

        There is some yak hair on my hands, I will admit.

        This change is mostly about adding an ExpectedFailures
        class to track when the bots are red and we should be
        ignoring failures when landing from the commit-queue.

        However, to make intelligent decisions about patches we
        need to know whether the run hit the --exit-after-N-failures limit
        or not.  Right now that information is not saved off in results.html
        so we have to pull the information from RunTests.

        I've plumbed the --exit-after-N-failures information into
        LayoutTestResults for now to make the ExpectedFailures code cleaner.

        As a result of adding all these additional calls to delegate.layout_test_results()
        I broke some of our flaky test detection tests and had to re-write them
        to not depend on the number of layout_test_results code.

        At the same time I updated the commit-queue to use the newer filesystem
        API (to allow us to use MockFileSystem) which required further changes
        to the layout tests.  Changes were required in either case, since
        we're now calling layout_test_results() in more cases, which previously
        would try and hit the disk (until I moved it to use tool.filesystem).

        I should note that *all* of this code is disabled for now, since our
        --exit-after-N-failures limit is currently 1!  (Thus were always in the
        case where we can't actually tell if the layout test results are legit.)
        I will up that limit in a second patch (which may require a couple more unit test tweaks).

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/expectedfailures.py: Added.
        * Scripts/webkitpy/tool/bot/expectedfailures_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2011-04-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * TestWebKitAPI/PlatformWebView.h: Limit include of
          <CoreGraphics/CGGeometry> to PLATFORM(CG) users.

2011-04-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        [NRWT] Rename --baseline-search-patch to --additional-platform-directory to match ORWT
        https://bugs.webkit.org/show_bug.cgi?id=58489
        
        r83743 added --additional-platform-directory to old-run-webkit-tests,
        rename the equivalent flag in new-run-webkit-tests to be consistent.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Rebaseline queue server
        https://bugs.webkit.org/show_bug.cgi?id=57891

        Adds a simple rebaseline queue server (meant to run at
        http://rebaseline-queue.appspot.com/). It presents a list of all (NRWT)
        builders and their failing tests, and allows those tests to be added to
        a per-builer rebaseline queue.

        A subsequent change will add a mode to NRWT (and/or a wrapper script)
        for pulling the tests to be rebaselined from the server and running them
        with --reset-results (the initial use-case is for the GPU hardware bots,
        which do not have checked-in baselines, therefore there is no need for a
        check-in step yet).

        * RebaselineQueueServer/app.yaml: Added.
        * RebaselineQueueServer/handlers/__init__.py: Added.
        * RebaselineQueueServer/handlers/builderqueue.py: Added.
        * RebaselineQueueServer/handlers/pages.py: Added.
        * RebaselineQueueServer/index.yaml: Added.
        * RebaselineQueueServer/main.py: Added.
        * RebaselineQueueServer/model/__init__.py: Added.
        * RebaselineQueueServer/model/queueentry.py: Added.
        * RebaselineQueueServer/static/builder-frame-empty.html: Added.
        * RebaselineQueueServer/static/styles.css: Added.
        * RebaselineQueueServer/templates/builder-picker.html: Added.
        * RebaselineQueueServer/templates/builder-queue-edit.html: Added.
        * RebaselineQueueServer/templates/builder-queue-list.html: Added.
        * RebaselineQueueServer/templates/home.html: Added.

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        nrwt: enable multiple processes by default on Chromium Win.
        https://bugs.webkit.org/show_bug.cgi?id=55163

        Re-land r79268; it should be more stable now and will hopefully
        work.

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: configure logging in child processes properly
        https://bugs.webkit.org/show_bug.cgi?id=58296

        Logging propagated properly from manager to worker processes on
        Unix but not on Windows; this fixes that.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: suppress extraneous pretty patch warnings
        https://bugs.webkit.org/show_bug.cgi?id=58295

        NRWT wasn't being careful about when it logged messages from
        PrettyPatch not being available; it should only log during
        check_build(), and be silent otherwise. This was causing us to
        get multiple errors at runtime, which was confusing.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Jian Li.

        add chromium-linux-x86_64 to rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=58461

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-13  Tony Chang  <tony@chromium.org>

        Unreviewed, fix NRWT.  Stack:

            return super(ChromiumPort, self).results_directory(self)
        TypeError: results_directory() takes exactly 1 argument (2 given)

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-13  Adam Roben  <aroben@apple.com>

        Teach ORWT about extra platform-specific directories to be searched before the default ones

        Fixes <http://webkit.org/b/58446> ORWT needs a way to look in a user-specified directory for
        platform-specific results

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (top-level): Added @additionalPlatformDirectories and hooked up
        --additional-platform-directories to populate it.
        (buildPlatformResultHierarchy): Prepend the additional platform directories to the default
        list (after filtering out any of the additional directories that don't exist).

2011-04-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        Add the /T command to taskkill.exe.
        This will kill spawned child processes.
        
        * BuildSlaveSupport/win/kill-old-processes:

2011-04-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        Sort kill list alphabeticaly.
        Fixed capitalization on VcBuildHelper.  

        * BuildSlaveSupport/win/kill-old-processes:

2011-04-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=58384
        Update kill-old-processes to include a few new ones.
        
        * BuildSlaveSupport/win/kill-old-processes:

2011-04-13  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] PluginPackage should check whether a plugin mixes GTK+ 2 and 3 symbols itself
        https://bugs.webkit.org/show_bug.cgi?id=58297

        Do not disable flash specifically when built with GTK+ 3 -
        PluginPackage should do the right thing while loading plugins.

        * GtkLauncher/main.c:
        (main):

2011-04-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Add WebSettings::setValidationMessageTimerMagnification()
        https://bugs.webkit.org/show_bug.cgi?id=57426

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo): Disable the validation message timer.

2011-04-12  James Kozianski  <koz@chromium.org>

        Unreviewed.

        Adding myself to committers.py.

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

2011-04-12  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction for WinCairo bot after r83639.
        https://bugs.webkit.org/show_bug.cgi?id=51790

        Correct typo for the new "update-webkit-wincairo-libs" script.

        * Scripts/build-webkit: Incorrectly calling the
          update-webkit-cairo-libs which does not exist.

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        A change that should have been part of http://trac.webkit.org/changeset/83628

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Setting should be off for most tests. Reset to false.

2011-04-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: --results-directory is relative to builddir, not $PWD
        https://bugs.webkit.org/show_bug.cgi?id=58272

        NRWT was interpreting the --results-directory cmd line arg as
        relative to the build directory, not the current working
        directory (ORWT uses the latter, which is much more intuitive).
        
        This patch fixes the base case, but includes an override for
        Chromium that is needed until the bots can be updated.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, roll out r83621 as it broke the GTK build.

        [GTK] arguments passed to build-jsc and build-webkit scripts are not taken into account
        https://bugs.webkit.org/show_bug.cgi?id=58333

        * Scripts/build-jsc:
        * Scripts/build-webkit:

2011-04-12  Carl Lobo  <carllobo@gmail.com> and Brent Fulgham <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Patch to download the WinCairo dependancies as part of build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=51790

        This patch downloads the dependancies from 
            http://idisk.mac.com/bfulgham-Public/WinCairoRequirements.zip 
        checking the modification timestamp etc. 

        * Tools/Scripts/build-webkit
        * Tools/Scripts/update-webkit: Modified to understand the --wincairo
          flag, and to update WinCairo dependencies when used.
        * Tools/Scripts/update-webkit-cairo-libs: added
        * Tools/Scripts/update-webkit-dependency: added
        * Tools/Scripts/update-webkit-auxiliary-libs

2011-04-12  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Pressing Tab in Web Inspector's console does not cycle through completion options
        https://bugs.webkit.org/show_bug.cgi?id=56020

        Don't call TranslateMessage() in the MiniBrowser or TestWebKitAPI for key messages destined for a WebKit2 view,
        since WebKit will do this for us.  If we didn't do this, TranslateMessage() would be called twice,
        which would generate two characters for every keypress (for example).  I didn't bother doing this for
        WebKitTestRunner, since it doesn't get any WM_KEYDOWN events.
        
        Add new WebKit2/TranslateMessageGeneratesWMChar test to test expected TranslateMessage() behavior.

        * MiniBrowser/win/main.cpp:
        (shouldTranslateMessage): Added.
        (_tWinMain): Don't call TranslateMessage() unless shouldTranslateMessage() says to.
        * TestWebKitAPI/PlatformUtilities.h: Added shouldTranslateMessage() on Windows.
        * TestWebKitAPI/PlatformWebView.h: Added simulateAKeyDown().
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp: Added.
        (TestWebKitAPI::didNotHandleKeyEventCallback): Added.
        (TestWebKitAPI::runAndWatchForWMChar): Added.
        (TestWebKitAPI::TEST): Added.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::run): Don't call TranslateMessage() unless shouldTranslateMessage() says to.
        (TestWebKitAPI::Util::shouldTranslateMessage): Added.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateAKeyDown): Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added TranslateMessageGeneratesWMChar.cpp.

2011-04-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: update code to use port.results_directory() instead of options.results_directory
        https://bugs.webkit.org/show_bug.cgi?id=58290

        This is some preliminary refactoring for bug 58272.

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy: fix mock_filesystem abspath to handle relative paths
        and add filesystem.chdir() and filesystem.getcwd() to be able
        to test this and mock it out.

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

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/filesystem_unittest.py:

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Setting should be off for most tests. Reset to false.

2011-04-12  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Eric Seidel.

        [Qt] Enable JIT build for SH4 platforms.
        https://bugs.webkit.org/show_bug.cgi?id=58317


        * DumpRenderTree/qt/DumpRenderTree.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * Scripts/webkitdirs.pm:

2011-04-12  Tony Chang  <tony@chromium.org>

        Reviewed by Andreas Kling.

        [Qt] embed checksums in PNGs written by Qt-DRT
        https://bugs.webkit.org/show_bug.cgi?id=58173

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):

2011-04-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should upload failure diffs when tests fail
        https://bugs.webkit.org/show_bug.cgi?id=58348

        This change was mostly just plumbing.  We were already saving
        this information for flaky test reporting.  I just made it possible
        for normal failures to report archives as well.

        I did a little abstraction work to try and share some code between
        flakytestreporter.py and this new code.  There is still more we could do.

        In making this change I also went through and updated the various
        places we have urls hard-coded in our python and pointed them at
        common.config.urls.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/tool/bot/botinfo.py: Added.
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py: Added.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-04-12  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Eric Seidel.

        svn-apply and/or patch(1) has trouble applying patches that makes changes to files
        with Windows line endings
        https://bugs.webkit.org/show_bug.cgi?id=53625

        Fixes an issue where a patch made on a SCM checkout on a Unix file system cannot be
        applied to an SCM checkout on a Windows file system and vice-versa.

        This issue manifests itself due to custom SCM settings as well as differences in
        gitattributes support in older versions of Git (e.g. 1.7.0.3). We implement support
        into svn-apply/unapply to compensate for differences in line endings by converting
        the line endings in a patch to match the line endings in the target file (if it exists).

        * Scripts/VCSUtils.pm:
          - Added parseFirstEOL(), which returns the first end-of-line character(s) that appear in the
            content read from the specified file handle. Obviously, this heuristic will not work
            for files with mixed line endings, but I don't envision such files to be the norm. If
            this turns out to be an issue then we can improve the heuristic.
          - Added firstEOLInFile().
          - Modified parsePatch() and parseDiff() to take an optional hash reference to an options hash.
            In particular, added the hash key shouldNotUseIndexPathEOL to control whether to use the line
            endings in the diff instead of the line endings in the target file.
          - Extracted local variable $chunkRangeRegEx from fixChangeLogPatch() so that it can be
            re-used in parseDiff().
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Modified to pass {shouldNotUseIndexPathEOL => 1}
          to parsePatch() since these unit tests don't create mock files. Instead, created unit tests that use
          mock files in file VCSUtils_unittest/parseDiffWithMockFiles.pl.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseFirstEOL.pl: Added.

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        REGRESSION (r83550): Multiple http tests crashing in the web process in SQLite beneath CFNetwork on Windows 7 Release (WebKit2 Tests)
        https://bugs.webkit.org/show_bug.cgi?id=58336

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Remove cache clearing as that is causing tests to crash on Windows 7.

2011-04-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        REGRESSION(r77974): http/tests/security/aboutBlank/security-context-window-open.html is failing
        <rdar://problem/8981346>
        https://bugs.webkit.org/show_bug.cgi?id=54159

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        (WTR::InjectedBundlePage::decidePolicyForNewWindowAction):
        (WTR::InjectedBundlePage::decidePolicyForResponse):
        (WTR::InjectedBundlePage::unableToImplementPolicy):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Add short-circuited policy client which matches WebKit1.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Clear the cache between tests to ensure consistent results.

2011-04-11  George Guo  <George.Guo@nokia.com>

        Reviewed by Eric Seidel.

        prepare-ChangeLog support email input but -h did not show the option
        https://bugs.webkit.org/show_bug.cgi?id=58164

        Add email option to -h to improve the usability

        * Scripts/prepare-ChangeLog:

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Rename MediaControls to MediaControlRootElement.
        https://bugs.webkit.org/show_bug.cgi?id=58250

        * Scripts/do-webcore-rename: Documented the renaming.

2011-04-11  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2011-04-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move focus management out of WebKit via  the UIClient
        <rdar://problem/8784068>
        https://bugs.webkit.org/show_bug.cgi?id=58278

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        Add stubs for new UIClient functions.

2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
        https://bugs.webkit.org/show_bug.cgi?id=53605

        Add an implementation of the PlainTextController for the GTK+ DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (addControllerToWindow): Added this helper method.
        (webViewWindowObjectCleared): Use the new helper to add EventSender
        and the PlainTextController to the window object.
        * GNUmakefile.am: Added PlainTextController source files.
        * DumpRenderTree/gtk/PlainTextController.cpp: Added. This will rely
        on DumpRenderTreeSupportGtk to convert a JSValueRef into a WebKitDOMRange
        until that functionality exists somewhere in the WebKitGTK+ stack.
        * DumpRenderTree/gtk/PlainTextController.h: Added.

2011-04-11  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Adding my IRC nick.

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

2011-04-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        new-run-webkit-tests: fix crash when running under windows cmd.exe
        https://bugs.webkit.org/show_bug.cgi?id=58197

        We would intermittently crash when running NRWT directly under
        cmd.exe on windows because we were sharing the stdin file
        descriptor between the python process and the http server.
        cmd.exe really didn't like that, and there was no reason to
        share the descriptor, so we now use a PIPE instead.

        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-04-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add unit tests for Port.diff_image()
        https://bugs.webkit.org/show_bug.cgi?id=58196

        Add the unit tests for the fix in bug 58195.

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:

2011-04-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: implement support for audio, take two
        https://bugs.webkit.org/show_bug.cgi?id=58195

        Attempt to re-land the fix for bug 58101 (which was initially
        landed in r83330, but rolled out). This is the same patch but
        fixes crashes in Port.diff_image() caused by the change for
        empty image files being None instead of ''.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement AccessibilityUIElement::{row|column}IndexRange in DRT
        https://bugs.webkit.org/show_bug.cgi?id=57854

        Implement missing features in GTK's DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (indexRangeInTable): New helper function to get the range string
        for the current cell inside the parent table, either from the
        point of view of rows or columns.
        (AccessibilityUIElement::rowIndexRange): Implemented by relying on
        the new helper function indexRangeInTable().
        (AccessibilityUIElement::columnIndexRange): Ditto.

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement AccessibilityUIElement::cellForColumnAndRow in DRT
        https://bugs.webkit.org/show_bug.cgi?id=57826

        Implement missing feature in GTK's DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::cellForColumnAndRow): Implemented, by
        relying on the analogous function from the AtkTable interface.

2011-04-05  Timothy Hatcher  <timothy@apple.com>

        Fix the extract-localizable-strings script errors that started after
        WEB_UI_STRING was added to LocalizedStrings.h in WebCore.

        * Scripts/extract-localizable-strings: Skip LocalizedStrings.h.

2011-04-11  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        fix crc computation on 64 bit machines
        https://bugs.webkit.org/show_bug.cgi?id=58243

        unsigned long is dependenct on CPU architecture, so use unsigned which is always 32 bits

        * DumpRenderTree/CyclicRedundancyCheck.cpp:
        (makeCrcTable):
        (computeCrc):
        * DumpRenderTree/CyclicRedundancyCheck.h:
        * DumpRenderTree/PixelDumpSupport.cpp:
        (appendIntToVector):
        (convertChecksumToPNGComment):

2011-04-10  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Eric Seidel.

        Require no undefined symbols during compilation.

        [Qt] [WK2] WebKitTestRunner, QtWebProcess and WTRInjectBundle should fail to compile when there's undefined symbols
        https://bugs.webkit.org/show_bug.cgi?id=54896

        Add -Wl,--no-undefined to catch missing symbols early.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-04-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Remove collector dirs from the list of build dirs.

        * wx/build/settings.py:

2011-04-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add Source/JavaScriptCore/heap to the list of directories.

        * wx/build/settings.py:

2011-04-10  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r83384): Change to chromium.py is resulting in failures of the test framework on linux.
        https://bugs.webkit.org/show_bug.cgi?id=58201

        * Scripts/webkitpy/layout_tests/port/chromium.py: Commented out the assert for now,
        and filed bug 58202.

2011-04-09  David Levin  <levin@chromium.org>

        Unreviewed, rolling out r83394.
        http://trac.webkit.org/changeset/83394
        https://bugs.webkit.org/show_bug.cgi?id=53625

        Patch was incorrect as noted in the bug.

        * Scripts/svn-apply:

2011-04-09  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        svn-apply and/or patch(1) has trouble applying patches that makes changes to files with Windows line endings
        https://bugs.webkit.org/show_bug.cgi?id=53625

        * Scripts/svn-apply: Ensure that the portions of patches
        which are for vcproj/vsprops files has DOS line endings.

2011-04-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        It looks like NRWT has not been stopping DRT/TestShell
        instances properly on windows, probably for a long time.
        This would go a long way to explaining why we often have
        processes lying around :)

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

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2011-04-09  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Don't link against fontconfig or X11 if embedded
        https://bugs.webkit.org/show_bug.cgi?id=58104

        * DumpRenderTree/qt/DumpRenderTree.pro: fontconfig !included in embedded
        * QtTestBrowser/QtTestBrowser.pro: ditto
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: ditto
        * WebKitTestRunner/qt/WebKitTestRunner.pro: ditto

2011-04-08  Jon Honeycutt  <jhoneycutt@apple.com>

        http/tests/loading/preload-append-scan.php is failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=58178

        Reviewed by Brian Weinstein.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (lastPathComponent):
        Use CFURL API to find the last path component, rather than
        PathFindFileName(), because the latter will include the query string.

2011-04-08  Jian Li  <jianli@chromium.org>

        Unreviewed, rolling out r83327, r83330 since these patches are very
        likely to break chromium webkit mac10.6 builders.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-04-08  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Eric Seidel.

        add chromium-gpu-linux-x86_64 to the recognized list of ports
        https://bugs.webkit.org/show_bug.cgi?id=58099

        Add chromium-gpu-linux-x86_64 to fix assert.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Scripts/build-webkit:

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Scripts/build-webkit:

2011-04-08  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        new-run-webkit-tests: configure a NRWT test bot for Mac SL
        https://bugs.webkit.org/show_bug.cgi?id=58114

        This change removes the old new-run-webkit-tests entry and
        updates it for a new test-only bot.

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

2011-04-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Roben.

        Make layoutTestController.shadowRoot return null, not undefined,
        when its argument is invalid.
        https://bugs.webkit.org/show_bug.cgi?id=58121

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowRoot):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):

2011-04-08  Pere Martir  <pere.martir4@gmail.com>

        Reviewed by Adam Roben.

        Locate NSTD.EXE in 64-bit Windows
        https://bugs.webkit.org/show_bug.cgi?id=57847

        * Scripts/old-run-webkit-tests:

2011-04-08  Adam Roben  <aroben@apple.com>

        Qt build fix

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Pull in stdarg.h for va_list.

2011-04-07  Adam Roben  <aroben@apple.com>

        Test that NPP_SetWindow is passed a null window handle during plugin destruction on non-Mac platforms

        Test for <http://webkit.org/b/47009> WebKit2 needs to call NPP_SetWindow when destroying a
        plugin

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginLogWithArguments): Moved code to format and log the message here...
        (pluginLog): ...from here.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Added pluginLogWithArguments.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::log): Added. Calls through to pluginLogWithArguments.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added log.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPPSetWindowCalledDuringDestruction.cpp: Added.
        (NPPSetWindowCalledDuringDestruction::setWillBeDestroyed): Records that destruction is about
        to begin.
        (NPPSetWindowCalledDuringDestruction::NPPSetWindowCalledDuringDestruction): Simple
        constructor.
        (NPPSetWindowCalledDuringDestruction::NPP_GetValue): Creates and returns a ScriptObject that
        can be used to invoke our setWillBeDestroyed function.
        (NPPSetWindowCalledDuringDestruction::NPP_SetWindow): Records what has happened (and logs if
        anything unexpected happens).
        (NPPSetWindowCalledDuringDestruction::NPP_Destroy): On Mac, logs a failure message if
        NPP_SetWindow was called during destruction. On other platforms, logs a failure message if
        NPP_SetWindow was *not* called during destruction.
        (NPPSetWindowCalledDuringDestruction::ScriptObject::hasMethod): Return true for our only
        method, setWillBeDestroyed.
        (NPPSetWindowCalledDuringDestruction::ScriptObject::invoke): Call through to the PluginTest
        object.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Added new test.

        * Scripts/old-run-webkit-tests: Skip the new test when using out-of-process plugins with
        WebKit1 on Mac, since it can't work properly due to <http://webkit.org/b/58077>.

2011-04-08  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement increment() and decrement() functions in DRT's AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=58039

        Implement missing functions in GTK's DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::increment): Implemented.
        (AccessibilityUIElement::decrement): Implemented.

2011-04-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        Make WK2 layoutTestController.shadowRoot return undefined, not
        null, when its argument is not an element.
        https://bugs.webkit.org/show_bug.cgi?id=58121

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):

2011-04-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        Change reference port for Mac GPU baselines from
        Leopard to SnowLeopard, XP to Win7, and Linux-x86
        to Linux x86-64.

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

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Scripts/build-webkit:

2011-04-07  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        update DRT to embed checksums in png files
        https://bugs.webkit.org/show_bug.cgi?id=57871

        We insert the bytes for the comment in printPNG rather than at encode
        time because each platform does its own PNG encoding (either using CG
        or cairo).  Putting this in pringPNG avoids having to duplicate this
        code, although it's not as clean as doing it at encoding time.

        We insert the comment right after the IHDR chunk of the PNG.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/CyclicRedundancyCheck.cpp: Added.
        (makeCrcTable): Ported from LayoutTests/fast/canvas/webgl/resources/pnglib.js
        (computeCrc): Ported from LayoutTests/fast/canvas/webgl/resources/pnglib.js
        * DumpRenderTree/CyclicRedundancyCheck.h: Added.
        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        (convertChecksumToPNGComment): Generate the bytes to insert.
        (printPNG): Insert the png comment before the first IDAT section.
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * GNUmakefile.am:

2011-04-07  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Replace WKStringGetCharactersPtr() with WKStringGetCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=58058

        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        (TestWebKitAPI::TEST): Add tests for  WKStringGetLength() and WKStringGetCharactersPtr().

2011-04-07  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.isPageBoxVisible
        https://bugs.webkit.org/show_bug.cgi?id=42695

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::isPageBoxVisible):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-07  Adam Roben  <aroben@apple.com>

        Build fix

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added a missing import.

2011-04-07  Adam Roben  <aroben@apple.com>

        Move ExtractTestResults[AndLeaks]'s summarizing code back from commandComplete() to finished()

        commandComplete() is never called for MasterShellCommands like ExtractTestResults[AndLeaks].
        (Unfortunately the buildbot documentation does not make this clear.) finished() is the only
        hook we have, so we have to do our work there. I added a new addCustomURLs method which can
        be overridden by subclasses to provide extra URLs before we call up to the base class (after
        which adding more URLs is no longer possible).

        Really hopefully fixes <http://webkit.org/b/56032> Leaks viewer should be linked from leaks
        bot results page

        Reviewed by John Sullivan.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults.addCustomURLs): Moved code to add the "view results" URL here...
        (ExtractTestResults.finished): ...from here. This replaces commandComplete, since that
        method is never called for MasterShellCommands.
        (ExtractTestResultsAndLeaks.addCustomURLs): Replaced commandComplete (which is never called)
        with this method (which is).

2011-04-07  Adam Roben  <aroben@apple.com>

        Move ExtractTestResults[AndLeaks]'s summarizing code from finished() to commandComplete()

        This matches how most of our other build steps work, so is good just for improving
        consistency between build steps. It should also make it possible for
        ExtractTestResultsAndLeaks to successfully add a URL to Leaks Viewer. (Previously we were
        trying to do this in finished() after we had called up to the base class, but that was
        apparently too late to add more URLs.)

        Hopefully fixes <http://webkit.org/b/56032> Leaks viewer should be linked from leaks bot
        results page

        Reviewed by John Sullivan.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults): Added a descriptionDone property so that we don't have to manually
        call setText to get the right text to show up for this step. This matches how most of our
        other build steps work.
        (ExtractTestResults.commandComplete): Replaced our override of finished with this function.
        This is how most of our other build steps work.
        (ExtractTestResultsAndLeaks.commandComplete): Replaced our override of finished with this
        function, to match the base class.

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        webkit-patch shouldn't state the whole working copy when calling check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=58022

        Previously, we were ignoring the args variable!  This patch fixes the
        regression introduced in http://trac.webkit.org/changeset/82771.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:

2011-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        REGRESSION: "webkit-patch land" doesn't work correctly in SVN subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=58017

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=57984

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::pageSizeAndMarginsInPixels):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-06  Chris Rogers  <crogers@google.com>

        Reviewed by Tony Chang.

        Add web audio support to DumpRenderTree (mac port)
        https://bugs.webkit.org/show_bug.cgi?id=57969

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setEncodedAudioDataCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsAudio):
        (LayoutTestController::setDumpAsAudio):
        (LayoutTestController::encodedAudioData):
        (LayoutTestController::setEncodedAudioData):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpAudio):
        (dump):

2011-04-06  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] LayoutTestController needs to implement numberOfPendingGeolocationPermissionRequests
        https://bugs.webkit.org/show_bug.cgi?id=56086

        Add the missing method.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::getAllPages): Add a method to return all the pages allocated for the current test.
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Scripts/build-webkit: Added QUOTA build flag

2011-04-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Adjust the apple webkit port's default timeout to match
        old-run-webkit-tests at 35 seconds.

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

        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-04-06  Scott Cameron  <sccameron@rim.com>

        Reviewed by Eric Seidel.

        Remove global variable $httpdPath and replace with the return value of
        getHTTPDPath().  Also remove unnecessary calls to getHTTPDPath().
        https://bugs.webkit.org/show_bug.cgi?id=53499

        * Scripts/run-iexploder-tests:
        * Scripts/webkitperl/httpd.pm:

2011-04-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551
        
        * DumpRenderTree/config.h:
        * WebKitAPITest/config.h:
        * WebKitTestRunner/config.h:

2011-04-06  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        teach run-webkit-tests to read checksums from png files
        https://bugs.webkit.org/show_bug.cgi?id=57993

        * Scripts/old-run-webkit-tests: Read the first 2k of a .png if there's
          no .checksum and look for the checksum in there.

2011-04-06  David Dorwin  <ddorwin@chromium.org>

        Reviewed by David Levin.

        Enable fullscreen layout tests for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=55726

        Make DumpRenderTree always run with fullscreen enabled (equivalent of --enable-fullscreen).

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo):

2011-04-06  Adam Roben  <aroben@apple.com>

        Add a "view leaks" link to builds on SnowLeopard Intel Leaks

        Fixes <http://webkit.org/b/56032> Leaks viewer should be linked from leaks bot results page

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults.resultDirectoryURL): Added. Moved code to calculate the URL for the
        build's results directory here...
        (ExtractTestResults.finished): ...from here.
        (ExtractTestResultsAndLeaks): New class that's used by the leaks builder
        (ExtractTestResultsAndLeaks.finished): Calls up to the base class, but also adds a "view
        leaks" link to point to Leaks Viewer for this build.
        (TestFactory): Added ExtractTestResultsClass abstraction. This isn't overridden anywhere,
        but it seemed good to add for consistency with BuildAndTestFactory.
        (BuildAndTestFactory): Added ExtractTestResultsClass abstraction.
        (BuildAndTestLeaksFactory): Use ExtractTestResultsAndLeaks as our ExtractTestResultsClass so
        that we'll get a "view leaks" link.

2011-04-06  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Eric Seidel.

        [Gtk] plugins/set-status.html fails
        https://bugs.webkit.org/show_bug.cgi?id=57844

        Allow an empty status text to be dumped.

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

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageNumberForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42329

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::pageNumberForElementById):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-06  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DumpRenderTree: do not try to free NULL SoupURIs
        https://bugs.webkit.org/show_bug.cgi?id=57932

        Some Layout tests have invalid URIs that do not generate valid
        SoupURI instances. Do not try to free those NULL SoupURIs.

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

2011-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        ORWT shouldn't generate diff files for tests without expected files
        https://bugs.webkit.org/show_bug.cgi?id=57846

        * Scripts/old-run-webkit-tests:

2011-04-05  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Mac build fix. Handle cases where 10.4 SDK is not installed, and also add x86_64 arch
        to deps.

        * wx/install-unix-extras:

2011-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82978, r82999, and r83001.
        http://trac.webkit.org/changeset/82978
        http://trac.webkit.org/changeset/82999
        http://trac.webkit.org/changeset/83001
        https://bugs.webkit.org/show_bug.cgi?id=57913

        Does not work in Python 2.5 (Requested by abarth on #webkit).

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:

2011-04-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.numberOfPages
        https://bugs.webkit.org/show_bug.cgi?id=42694

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::numberOfPages):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-05  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        [chromium] stop putting results downloaded from WebKit Linux in chromium-linux-x86_64
        https://bugs.webkit.org/show_bug.cgi?id=57889

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-05  Adam Barth  <abarth@webkit.org>

        Silly with statement, from the future!

        * Scripts/webkitpy/common/system/executive.py:

2011-04-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Tony Chang.

        Don't use Exception.message because it's deprecated
        https://bugs.webkit.org/show_bug.cgi?id=57892

        Suppress the warning for now.  When we move to Python 3, we might need
        to something more dramatic.

        * Scripts/webkitpy/common/system/executive.py:

2011-04-05  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Add builders.js to dashboard file list
        https://bugs.webkit.org/show_bug.cgi?id=57899

        Add file added by http://crrev.com/80538 to dashboard file list.

        * TestResultServer/handlers/dashboardhandler.py:

2011-04-05  MORITA Hajime  <morrita@google.com>

        Reviewed by Adam Barth.

        webkit-patch should print git's stderr when git svn dcommit fail
        http://webkit.org/b/57861

        * Scripts/webkitpy/common/checkout/scm.py:

2011-04-05  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Add --baseline-search-path to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=56233
        
        Add NRWT option to specify additional directories to look for baselines
        (will be used by hardware GPU bots which will have local per-bot
        expectations for some tests)

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-04-05  Adam Roben  <aroben@apple.com>

        Strip off /results.html from results URLs before trying to load leaks files from them

        r82734 changed build.webkit.org's "view results" URLs to point straight to the results.html
        files, rather than pointing to the directory that contains them. This is more convenient for
        people browsing build.webkit.org, but confused Leaks Viewer.

        Fixes <http://webkit.org/b/57869> REGRESSION (r82734): Links in Leaks Viewer's Recent Builds
        list don't work

        Reviewed by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Strip off "/results.html" from the results URL.

2011-04-05  Carol Szabo  <carol@webkit.org>

        Unreviewed.

        Updated my info in committers.py

        Scripts\webkitpy\common\config\committers.py 

2011-04-05  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Make WebKitLibraries optional for building QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=57542

        * Scripts/build-webkit:

2011-04-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MiniBrowser defaultUrl does not work
        https://bugs.webkit.org/show_bug.cgi?id=57021

        Match the behavior and coding of MiniBrowser to QtTestBrowser.
        * MiniBrowser/qt/main.cpp:
        (main):

2011-04-05  Jade Han  <jade.han@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [Symbian] Disable WebKitTestRunner for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=54977

        This change is a preparation to enable building webkit2 for Symbian.
        Bug 57834 is filed to fix and enable WebKitTestRunner for Symbian.

        * Tools.pro:

2011-04-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix timeoutTimer of MiniBrowser's UrlLoader
        https://bugs.webkit.org/show_bug.cgi?id=57832

        Only QWKPage has loadFinished signal so connect to it instead of BrowserWindow.

        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):

2011-04-05  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Linux Release minimal build fix after r82919.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::loadURLListFromFile):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::loadURLListFromFile):

2011-04-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Make URL loader accessible from testbrowser's menus
        https://bugs.webkit.org/show_bug.cgi?id=57823

        Add "Load URLs from file" to QtTestBrowser's and to MiniBrowser's menu.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::loadURLListFromFile):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::createChrome):
        (LauncherWindow::loadURLListFromFile):
        * QtTestBrowser/launcherwindow.h:

2011-04-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Brian Weinstein.

        Remove duplicate API from WKContext
        <rdar://problem/8727879>
        https://bugs.webkit.org/show_bug.cgi?id=57815

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/SendingMessagesToTheWebProcessBeforeItIsValid.cpp: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Remove SendingMessagesToTheWebProcessBeforeItIsValid since the API it was testing is now removed.

2011-04-04  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] don't write .checksum files if a fallback platform has an embedded checksum
        https://bugs.webkit.org/show_bug.cgi?id=57783

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, run uninstall when cleaning to remove built files
        from WebKitBuild.

        * Scripts/webkitdirs.pm:

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebGL support
        https://bugs.webkit.org/show_bug.cgi?id=31517

        Add support to the DRT for turning on WebGL when a layout tests requests it.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Allow turning on WebGL from tests.

2011-04-04  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAllowFileAccessFromFileURLs):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-04  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] DumpRenderTree breaks compilation in some uClibc environments
        https://bugs.webkit.org/show_bug.cgi?id=57602

        * DumpRenderTree/qt/main.cpp:
        (get_backtrace):

2011-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add new LayoutTestController method stub to wx.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::shadowRoot):

2011-04-04  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, fix exception in rebaseline tool.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-04-02  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Geoff Garen.

        For Dan!
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2011-04-02  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Geoff Garen.

        Need to reset the scale, much like zoom.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2011-04-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=57605
        Frame::pageScaleFactor() should not affect getBoundingClientRect() or 
        getClientRects()
        -and corresponding-
        <rdar://problem/9194541>

        Add DRT support for the scaleWebView SPI.
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController scalePageBy:atX:andY:]):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::scalePageBy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-04-02  Dominic Cooney  <dominicc@google.com>

        Reviewed by Martin Robinson.

        Add layoutTestController.shadowRoot to GTK DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=57551

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowRoot):

2011-04-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Remove AbstractStep._run_script and move script names to ports.py
        https://bugs.webkit.org/show_bug.cgi?id=57704

        Replace deprecated _run_script with _tool.executive.run_and_throw_if_fail.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/roll_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:

2011-04-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Emulate shebang on Win32
        https://bugs.webkit.org/show_bug.cgi?id=55927

        Scripts on Windows work only if they are called with the explicit interpreter.
        Read the first line of scripts to detect the correct executable.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/system/executive.py: Added interpreter_for_script().
        * Scripts/webkitpy/common/system/executive_unittest.py:

2011-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        apos entities shouldn't show up in ChangeLogs when using webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=57692

        Previously, we were using BeautifulSoup to process XML from
        bugs.webkit.org, but that's incorrect.  We should be using
        BeautifulStoneSoup to process the XML.  We were getting the &apos;
        entity wrong because &apos; is an XML entity but not an HTML entity.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82721.
        http://trac.webkit.org/changeset/82721
        https://bugs.webkit.org/show_bug.cgi?id=57687

        This patch introduced assertion failures on the GTK+ bots.
        (Requested by mrobinson on #webkit).

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowRoot):

2011-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix.

        [Qt][WK2] Build Webkit2 using "-2" option on Qt
        https://bugs.webkit.org/show_bug.cgi?id=55074

        * Scripts/build-webkit: Ensure that "-2" isn't passed to qmake.
        (The isWK2() function removes it from @ARGV, but not from @options.)

2011-04-01  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] [WK2] MiniBrowser.qrc not found - regression from rev 82671
        https://bugs.webkit.org/show_bug.cgi?id=57666

        * MiniBrowser/qt/MiniBrowser.qrc: Renamed from Tools/MiniBrowser/MiniBrowser.qrc.

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests: fix feature detection, skipped platform lists on mac

        We apparently never implemented the code to skip tests based on
        what was compiled into DRT. Also, change the logic used to skip
        platform directories to match what old-run-webkit-tests does: 
        skip every test not in a directory in the baseline search path.

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

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2011-03-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        <http://webkit.org/b/56730> new-run-webkit-tests fails on Lion seed

        Teach new-run-webkit-tests about the concept of an unreleased version of Mac OS X.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-04-01  Chang Shu  <cshu@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Build Webkit2 using "-2" option on Qt
        https://bugs.webkit.org/show_bug.cgi?id=55074

        * Scripts/build-webkit:

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: remove spurious port version override in webkit.py
        base.py provides a default implementation so this is just
        breaking things.

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

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben.

        Make view results on waterfall direct link to results.html
        https://bugs.webkit.org/show_bug.cgi?id=57671

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add "/results.html" to the URL.
        * Scripts/old-run-webkit-tests: Add links to httpd access and error logs.

2011-04-01  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        (TestWebKitAPI::flushMessages):

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add adoptWK to WKRetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=57670

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::createSessionStateContainingFormData):
        * WebKitTestRunner/StringFunctions.h:
        Replace custom versions of adoptWK with the API on in WebKit2/WKRetainPtr.h.

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix leak noticed by Adam Roben in LayoutTestController::shadowRoot.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):
        Make judicious use of adoptWK().

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        Fix extract-localizable-strings for macro change from UI_STRING -> WEB_UI_STRING.

        * Scripts/extract-localizable-strings:

2011-04-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Shockwave plug-in doesn't accept mouse events
        https://bugs.webkit.org/show_bug.cgi?id=57653
        <rdar://problem/8483273>

        Add a plug-in test.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::indicateTestFailure):
        Move code from NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject here.

        (PluginTest::NPN_ConvertPoint):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPDeallocateCalledBeforeNPShutdown.cpp:
        (NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject):
        Call indicateTestFailure.

        * DumpRenderTree/TestNetscapePlugIn/Tests/mac: Added.
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/ConvertPoint.cpp: Added.
        (ConvertPoint::ConvertPoint):
        (ConvertPoint::testConvert):
        (ConvertPoint::NPP_New):

2011-04-01  Dominic Cooney  <dominicc@google.com>

        Reviewed by Martin Robinson.

        Add layoutTestController.shadowRoot to GTK DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=57551

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::shadowRoot):

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs layoutTestController.shadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=57661

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shadowRoot):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Implement layoutTestController.shadowRoot for WebKit2.

2011-04-01  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=57568

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setDatabaseQuota):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch completes the cleanup of
        rebaseline-chromium-webkit-tests to work with all of the
        variants of a platform (we can now rebaseline gpu- and non-gpu
        files at the same time).

        When the rebaselining is complete, any lines declared as
        REBASELINE in the expectations file that matches a test that was
        actually rebaselined will be deleted, even if only one of the
        variants was actually rebaselined. This may cause odd problems,
        but is better than where we're at today.

        This change removes the -g flag and deprecates -w. The -g flag is gone
        because GPU baselines are handled just like any other variant.
        The -w flag is deprecated because this tool now only works
        against the canaries, since that's the only place we have a full
        set of bots. It will be trivial to change this to
        build.webkit.org if we decide that's where we want them to be.

        Also, this patch deletes a lot of cruft that is no longer needed
        in the test_expectations code and the port-specific code.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-04-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        rebaseline-chromium-webkit-tests does not work correctly with
        version-specific baselines. This patch updates the tool to use
        all of the version-specific bots on the canaries, and will now
        attempt to rebaseline all of the versions by default, although
        it will not update both GPU and CPU versions.
        
        Also, it will no longer modify the test_expectations.txt file
        *at all*. You will have to manually delete the REBASELINE lines
        after running the tool and determining that it did what you
        wanted it to do. This should be fixed in a separate bug - see
        webkit bug #55191.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-03-31  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] update the rebaseline tool to know about pngs with checksums
        https://bugs.webkit.org/show_bug.cgi?id=57481

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Skip over .checksum files if the checksum is already in the png
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2011-04-01  Adam Roben  <aroben@apple.com>

        Retrieve revision numbers from the build's got_revision property in Leaks Viewer

        Previously, we were getting the revision of the first revision that triggered a build.
        Choosing the last revision would have been more accurate. But got_revision is what is used
        everywhere else on build.webkit.org, and should work even when there were no changes that
        triggered a build (e.g., if someone clicked the Force Build button).

        Fixes <http://webkit.org/b/57630> Leaks viewer gets some revision numbers wrong in the
        recent builds list

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Pull the revision number out of the got_revision
        property, rather than out of the first (i.e., earliest) change in the sourceStamp object.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js:
        (Array.prototype.first): Added this helper function to return the first element in an array
        that matches the given predicate, or null if no such element exists.

2011-03-31  Adam Roben  <aroben@apple.com>

        Prefer (but don't require) bug URLs to be on their own line when parsing bug numbers from ChangeLogs

        Fixes <http://webkit.org/b/57579> webkit-patch is too strict about bug URL formatting

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (parse_bug_id_from_changelog): Fall back to parse_bug_id if we weren't able to find a bug
        URL on its own line.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (BugzillaTest.test_parse_bug_id_from_changelog): Updated expected results for test
        progression, and added a new test that uses a short bug URL while I was at it.

2011-04-01  Adam Roben  <aroben@apple.com>

        Mark .vcproj/.vsprops/.sln files as being Windows-only

        Fixes <http://webkit.org/b/57489> Mac builders built 82512, but shouldn't have

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added patterns to mark .vcproj/.vsprops/.sln files and .vcproj
        directories as Windows-only.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShoulBuildTest): Added test cases for the above.

2011-04-01  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Build MiniBrowser for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=56319

        Have MiniBrowser reference it's own copy of useragentlist.txt instead
        of copying QtTestBrowser's.
        Remove Tools/MiniBrowser/DerivedSources.pro
        This reduces complexity in the Tools scripts due to Symbian limitations.

        * DerivedSources.pro:
        * MiniBrowser/DerivedSources.pro: Removed.
        * MiniBrowser/MiniBrowser.qrc:
        * MiniBrowser/qt/MiniBrowser.pro:
        * Scripts/webkitdirs.pm:

2011-03-31  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.clearAllDatabases
        https://bugs.webkit.org/show_bug.cgi?id=42540

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::clearAllDatabases):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-03-31  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setAllowUniversalAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=42692

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:

2011-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Implement mouseDown, mouseUp, and mouseMoveTo in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57573

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        Added real definitions for mouseDown, mouseUp, mouseMoveTo and leapForward.
        Removed fake definitions of keyDown and contextClick.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::operator==): Added. So we can compare two WKPoint structs.
        (WTR::parseModifier): Added.
        (WTR::parseModifierArray): Added.
        (WTR::EventSendingController::EventSendingController): Initialize the
        new data members.
        (WTR::EventSendingController::mouseDown): Added. Calls
        WKBundlePageSimulateMouseDown.
        (WTR::EventSendingController::mouseUp): Added. Calls
        WKBundlePageSimulateMouseUp.
        (WTR::EventSendingController::mouseMoveTo): Added. Calls
        WKBundlePageSimulateMouseMotion.
        (WTR::EventSendingController::leapForward): Added.
        (WTR::EventSendingController::updateClickCount): Added. Used by the
        mouseDown/Up functions to create a click count.

        * WebKitTestRunner/InjectedBundle/EventSendingController.h: Updated
        for the changes above.

2011-03-31  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] implement LayoutTestController::setWillSendRequestReturnsNull
        https://bugs.webkit.org/show_bug.cgi?id=57362

        Do not generate DRT output if willSendRequestReturnsNull is set.

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

2011-03-31  Vamshikrishna.Yellenki  <vamshi@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Implement MiniBrowser for Gtk port.
        https://bugs.webkit.org/show_bug.cgi?id=48512

        Initial implementation of the Gtk MiniBrowser.

        * MiniBrowser/gtk/GNUmakefile.am: Added.
        * MiniBrowser/gtk/main.c: Added.
        (activateUriEntryCallback):
        (destroyCallback):
        (goBackCallback):
        (goForwardCallback):
        (createToolbar):
        (createWebView):
        (createWindow):
        (argumentToURL):
        (main):

2011-03-30  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Adds layoutTestController.shadowRoot accessor to Mac DRT.
        https://bugs.webkit.org/show_bug.cgi?id=57415

        * DumpRenderTree/LayoutTestController.cpp:
        (shadowRootCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::shadowRoot):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::shadowRoot):

2011-03-30  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Chris Marrin.

        Update fast/canvas tests to avoid dumping the render tree when possible
        https://bugs.webkit.org/show_bug.cgi?id=57493

        * DumpRenderTree/mac/DumpRenderTree.mm: Make DRT aware of new default values for
          accelerated drawing and accelerated drawing for canvas

2011-03-30  Adam Roben  <aroben@apple.com>

        Stop ignoring leaks in CGGradientCreateWithColorStops

        Fixes <rdar://problem/7888547>.

        Rubber-stamped by John Sullivan.

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks): Removed some code to ignore those leaks.

2011-03-30  Timur Iskhodzhanov  <timurrrr@google.com>

        Reviewed by Alexey Proskuryakov.

        Add some dynamic annotations to JavaScriptCore/wtf
        https://bugs.webkit.org/show_bug.cgi?id=53747

        By using these annotations we can improve the precision of finding
        WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind.
        These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1".

        These files don't add new functionality, so don't need extra tests.

        * DumpRenderTree/ForwardingHeaders/wtf/DynamicAnnotations.h: Added.

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops:
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops:
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops:
        * DumpRenderTree/win/ImageDiffProduction.vsprops:
        * DumpRenderTree/win/ImageDiffRelease.vsprops:
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops:
        * FindSafari/FindSafariProduction.vsprops:
        * FindSafari/FindSafariRelease.vsprops:
        * FindSafari/FindSafariReleaseCairoCFLite.vsprops:
        * FindSafari/FindSafariReleasePGO.vsprops:
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops:
        * MiniBrowser/Configurations/MiniBrowserRelease.vsprops:
        * MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops:
        * WebKitAPITest/WebKitAPITestProduction.vsprops:
        * WebKitAPITest/WebKitAPITestRelease.vsprops:
        * WebKitAPITest/WebKitAPITestReleaseCairoCFLite.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops:
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops:
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops:
        * WinLauncher/WinLauncherProduction.vsprops:
        * WinLauncher/WinLauncherRelease.vsprops:
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops:
        * record-memory-win/record-memory-winProduction.vsprops:
        * record-memory-win/record-memory-winRelease.vsprops:
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops:
        * DumpRenderTree/win/ImageDiffProduction.vsprops:
        * FindSafari/FindSafariProduction.vsprops:
        * FindSafari/FindSafariReleasePGO.vsprops:
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops:
        * WebKitAPITest/WebKitAPITestProduction.vsprops:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops:
        * WinLauncher/WinLauncherProduction.vsprops:
        * record-memory-win/record-memory-winProduction.vsprops:

2011-03-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix LoadHTMLStringItem::invoke() after r75966
        Unskip http/tests/navigation/go-back-to-error-page.html

        Also add the location of DumpRenderTreeSupportQt.h
        to DRT's include paths.

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

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/GCControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::queueLoadHTMLString):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp:
        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        * DumpRenderTree/qt/WorkQueueItemQt.cpp:
        (LoadAlternateHTMLStringItem::invoke):
        * DumpRenderTree/qt/WorkQueueItemQt.h:
        (LoadAlternateHTMLStringItem::LoadAlternateHTMLStringItem):
        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.h:

2011-03-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Roben.

        SheriffBot rollouts take too long
        https://bugs.webkit.org/show_bug.cgi?id=57498

        We used to build before landing rollouts via the commit-queue to
        prevent further breakage, but now that our individual commit-queue
        machines are slower, building takes too long.  I can't remember the
        last time a rollout broke compile.  It seems like just landing the
        patch is the better trade-off.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-03-30  Adam Barth  <abarth@webkit.org>

        Remove platform/chromium-mac-snowleopard
        https://bugs.webkit.org/show_bug.cgi?id=57486

        This directory no longer exists, so we can remove it from the fallback
        chain.

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * DumpRenderTree/DumpRenderTree.sln:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops: Copied from Tools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseLTCG.vsprops.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseLTCG.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops: Copied from Tools/DumpRenderTree/win/DumpRenderTreeReleaseLTCG.vsprops.
        * DumpRenderTree/win/DumpRenderTreeReleaseLTCG.vsprops: Removed.
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffProduction.vsprops: Copied from Tools/DumpRenderTree/win/ImageDiffReleaseLTCG.vsprops.
        * DumpRenderTree/win/ImageDiffReleaseLTCG.vsprops: Removed.
        * FindSafari/FindSafari.vcproj:
        * FindSafari/FindSafariProduction.vsprops: Copied from Tools/FindSafari/FindSafariReleaseLTCG.vsprops.
        * FindSafari/FindSafariReleaseLTCG.vsprops: Removed.
        * MiniBrowser/Configurations/MiniBrowserProduction.vsprops: Copied from Tools/MiniBrowser/Configurations/MiniBrowserReleaseLTCG.vsprops.
        * MiniBrowser/Configurations/MiniBrowserReleaseLTCG.vsprops: Removed.
        * MiniBrowser/MiniBrowser.vcproj:
        * Scripts/webkitdirs.pm:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitAPITest/WebKitAPITestProduction.vsprops: Copied from Tools/WebKitAPITest/WebKitAPITestReleaseLTCG.vsprops.
        * WebKitAPITest/WebKitAPITestReleaseLTCG.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops: Copied from Tools/WebKitLauncherWin/WebKitLauncherWinReleaseLTCG.vsprops.
        * WebKitLauncherWin/WebKitLauncherWinReleaseLTCG.vsprops: Removed.
        * WebKitTestRunner/WebKitTestRunner.sln:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj:
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops: Copied from Tools/WebKitTestRunner/win/InjectedBundleReleaseLTCG.vsprops.
        * WebKitTestRunner/win/InjectedBundleReleaseLTCG.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops: Copied from Tools/WebKitTestRunner/win/WebKitTestRunnerReleaseLTCG.vsprops.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseLTCG.vsprops: Removed.
        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherProduction.vsprops: Copied from Tools/WinLauncher/WinLauncherReleaseLTCG.vsprops.
        * WinLauncher/WinLauncherReleaseLTCG.vsprops: Removed.
        * record-memory-win/record-memory-win.vcproj:
        * record-memory-win/record-memory-winProduction.vsprops: Copied from Tools/record-memory-win/record-memory-winReleaseLTCG.vsprops.
        * record-memory-win/record-memory-winReleaseLTCG.vsprops: Removed.

2011-03-30  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Chromium] Expose the shadow DOM to DumpRenderTree JS tests.
        https://bugs.webkit.org/show_bug.cgi?id=56573

        Added LayoutTestController.shadowRoot() to Chromium DRT.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::shadowRoot):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-03-30  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] DumpRenderTree: Implement LayoutTestController::setPluginsEnabled
        https://bugs.webkit.org/show_bug.cgi?id=57430

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setPluginsEnabled):
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        make webkit-patch upload respect -d
        https://bugs.webkit.org/show_bug.cgi?id=57425

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2011-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Make "webkit-patch --dry-run --verbose land" log the SVN command it's going to use
        https://bugs.webkit.org/show_bug.cgi?id=57429

        * Scripts/webkitpy/common/checkout/scm.py:

2011-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82383.
        http://trac.webkit.org/changeset/82383
        https://bugs.webkit.org/show_bug.cgi?id=57417

        "nrwt isn't shutting down cleanly" (Requested by dpranke on
        #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make validation message bubble testable
        https://bugs.webkit.org/show_bug.cgi?id=57290

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Change a setting so that validation
          bubbles isn't hidden automatically.

2011-03-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: use 'threads' on win instead of 'old-threads'

        It's a bit unclear whether multiple threads or multiple
        processes will be a better model on windows. This change will
        test threads for now while we're still working out the bugs in
        multiple-processes.

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

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-29  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style confused by two ChangeLog entries in a row from same user
        https://bugs.webkit.org/show_bug.cgi?id=57250

        * Scripts/webkitpy/style/checker.py: Add the line should be checked function to ChangeLogChecker.
        * Scripts/webkitpy/style/checker_unittest.py: Fix test due to that new function.
        * Scripts/webkitpy/style/checkers/changelog.py: Made this code aware of what lines were being checked.
          It basically assumes only one ChangeLog entry is being processed because that is the standard case and
          checking more than that would be very messey.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Add testing to catch the broken case.
        * Scripts/webkitpy/style/error_handlers.py: Added should_line_be_checked.

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Mac] Enable interactive-validation tests on Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=57308

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Enable the form interactive validation feature.

2011-03-29  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setAllowUniversalAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=42692

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setAllowUniversalAccessFromFileURLs):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2011-03-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [DRT] GtkScrolledWindow adds three pixels of padding between the WebView and the scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=57067

        Eliminate extra spacing between the DRT GtkScrolledWindow and the DRT WebView. This
        will allow WebKit1GTK+ and WebKit2GTK+ to share test results. Followup commits will
        update DRT and pixel results as hundreds of results will need to be updated.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (setDefaultsToConsistentStateValuesForTesting): Eliminate spacing on the GtkScrolledWindow
        by overriding the theme RC/CSS files.

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Use per-configuration vsprops in tools projects to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57394

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebug.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugAll.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseLTCG.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeDebug.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeDebugAll.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeReleaseLTCG.vsprops: Added.
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffDebug.vsprops: Added.
        * DumpRenderTree/win/ImageDiffDebugAll.vsprops: Added.
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/ImageDiffRelease.vsprops: Added.
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops: Added.
        * DumpRenderTree/win/ImageDiffReleaseLTCG.vsprops: Added.
        * FindSafari/FindSafari.vcproj:
        * FindSafari/FindSafariDebug.vsprops: Added.
        * FindSafari/FindSafariDebugAll.vsprops: Added.
        * FindSafari/FindSafariDebugCairoCFLite.vsprops: Added.
        * FindSafari/FindSafariRelease.vsprops: Added.
        * FindSafari/FindSafariReleaseCairoCFLite.vsprops: Added.
        * FindSafari/FindSafariReleaseLTCG.vsprops: Added.
        * FindSafari/FindSafariReleasePGO.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserDebug.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserDebugAll.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserDebugCairoCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserRelease.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserReleaseLTCG.vsprops: Added.
        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitAPITest/WebKitAPITestDebug.vsprops: Added.
        * WebKitAPITest/WebKitAPITestDebugAll.vsprops: Added.
        * WebKitAPITest/WebKitAPITestDebugCairoCFLite.vsprops: Added.
        * WebKitAPITest/WebKitAPITestRelease.vsprops: Added.
        * WebKitAPITest/WebKitAPITestReleaseCairoCFLite.vsprops: Added.
        * WebKitAPITest/WebKitAPITestReleaseLTCG.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitLauncherWin/WebKitLauncherWinDebug.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinDebugAll.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinDebugCairoCFLite.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops: Added.
        * WebKitLauncherWin/WebKitLauncherWinReleaseLTCG.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleDebug.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleDebugAll.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleDebugCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundleReleaseLTCG.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WebKitTestRunner/win/WebKitTestRunnerDebug.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerDebugAll.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerDebugCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseLTCG.vsprops: Added.
        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherDebug.vsprops: Added.
        * WinLauncher/WinLauncherDebugAll.vsprops: Added.
        * WinLauncher/WinLauncherDebugCairoCFLite.vsprops: Added.
        * WinLauncher/WinLauncherRelease.vsprops: Added.
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops: Added.
        * WinLauncher/WinLauncherReleaseLTCG.vsprops: Added.
        * record-memory-win/record-memory-win.vcproj:
        * record-memory-win/record-memory-winDebug.vsprops: Added.
        * record-memory-win/record-memory-winDebugAll.vsprops: Added.
        * record-memory-win/record-memory-winDebugCairoCFLite.vsprops: Added.
        * record-memory-win/record-memory-winRelease.vsprops: Added.
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops: Added.
        * record-memory-win/record-memory-winReleaseLTCG.vsprops: Added.

2011-03-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        test_runner2.py can crash due to undefined variable
        https://bugs.webkit.org/show_bug.cgi?id=57356

        Replace reference to undefined variable with a variable that's actually
        defined.  AFAICT, there's no way to test this code.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:

2011-03-29  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        cleanup rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=57375

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
            - Split _extract_and_add_new_baselines into 3 functions
            - Reduce the amount of line wrapping (the file already has lines
              over 80 col, so may as well try to make the file consistent)
            - Remove unnecessary ()s

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Make WinCairo a core builder.
        https://bugs.webkit.org/show_bug.cgi?id=57373

        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Add WinCairo.
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py: Add WinCairo.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update update-webkit-localizable-strings to understand that WebKit and
        WebKit2 strings go in WebCore.

        Also make extract-localizable-strings optionally use an exclude file. No individual
        warnings are produced about unlocalized strings when there is no exclude file. This
        is needed for WebCore, since there are too many bare strings.

        https://webkit.org/b/57354

        Reviewed by Sam Weinig.

        * Scripts/extract-localizable-strings: Support "-" to mean no exclude file.
        * Scripts/update-webkit-localizable-strings: Update paths to scan WebCore and WebKit2.

2011-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        WebKit2 bundle page needs to offer generated file hooks
        https://bugs.webkit.org/show_bug.cgi?id=57279

        (Land missing part of the original patch after r82289.)

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Added new callbacks.

2011-03-29  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] NRWT should be able to read checksums from png comments
        https://bugs.webkit.org/show_bug.cgi?id=57280

        * Scripts/read-checksum-from-png: Added. Utility script to read the checksum
            from a file.
        * Scripts/webkitpy/common/system/filesystem.py: Add open_binary_file_for_reading
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/base.py: When loading a checksum,
            if the -checksum.txt file doesn't exist, try looking in the png.
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/read_checksum_from_png.py: Added. Scan the first
            2k for a png comment with the checksum
        * Scripts/webkitpy/layout_tests/read_checksum_from_png_unittest.py: Added.

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Gustavo Noronha Silva.

        [GTK] http/tests/uri/username-with-no-hostname.html fails
        https://bugs.webkit.org/show_bug.cgi?id=57325

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): URI host value check done case-insensitively.

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] http/tests/uri/username-with-no-hostname.html fails
        https://bugs.webkit.org/show_bug.cgi?id=57325

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): Check URI before submitting the request
        to WebCore.

2011-03-29  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Ojan Vafai.

        [chromium] DRT EventSender: remove identity from dragTargetDragEnter() calls
        https://bugs.webkit.org/show_bug.cgi?id=57303

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::doDragDrop):
        (EventSender::beginDragWithFiles):

2011-03-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add -print-loaded-urls option to Qt's MiniBrowser and to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=57314

        Provide possibility to print loaded urls to the standard output.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::printURL):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::printURL):
        (LauncherWindow::cloneWindow):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-03-29  Gabor Loki  <loki@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Teach build-jsc how to build JavaScriptCore on Qt
        https://bugs.webkit.org/show_bug.cgi?id=56918

        * Scripts/build-jsc: Remove duplicated --qt options to avoid passing them to qmake.

2011-03-28  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Teach build-jsc how to build JavaScriptCore on Qt
        https://bugs.webkit.org/show_bug.cgi?id=56918

        * Scripts/build-jsc:
        * Scripts/webkitdirs.pm:

2011-03-28  Andrew Foster  <andrewf@chromium.org>

        Reviewed by Ojan Vafai.

        webkit-patch should be more intelligent about whether a bug applies to a patch
        Create a new function, parse_bug_id_from_changelog() which determines
        that a bug is related to a patch by parsing the output generated from
        prepare-ChangeLog, rather than arbitrarily matching a URL to a bug in
        the description of a patch.
        https://bugs.webkit.org/show_bug.cgi?id=56989

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/net/bugzilla/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog.py:
        * Scripts/webkitpy/tool/commands/upload.py:

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Revert accidentally commited change.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):

2011-03-28  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] have DRT write the png checksum into a png comment
        https://bugs.webkit.org/show_bug.cgi?id=57255

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage):

2011-03-28  Adele Peterson  <adele@apple.com>

        Removing Qt stub, since it doesn't use the same header as the others.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:

2011-03-28  Adele Peterson  <adele@apple.com>

        Added a few more stubs.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::hasGrammarMarker):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::hasGrammarMarker):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::hasGrammarMarker):

2011-03-28  Adele Peterson  <adele@apple.com>

        Build fix.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::hasGrammarMarker):

2011-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Seidel.

        Testing support for <rdar://problem/9112694> REGRESSION (r79411): "Check grammar with spelling" context menu doesn't check as you type
        https://bugs.webkit.org/show_bug.cgi?id=57173

        * DumpRenderTree/LayoutTestController.cpp:
        (hasGrammarMarkerCallback): Added.
        (LayoutTestController::staticFunctions): Added case for hasGrammarMarker.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm: (createWebViewAndOffscreenWindow): Call setGrammarCheckingEnabled.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: (LayoutTestController::hasGrammarMarker): Added. Call new hasGrammarMarker method.

2011-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Trivial typo fix after r82082.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2011-03-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        Add myself to the committers list.

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

2011-03-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        WebKit2 unfortunately uses code from WebKit, so MiniBrowser needs
        to link against WebKit.framework for now.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:

2011-03-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Disable QT_ASCII_CAST_WARNINGS for applications.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * MiniBrowser/qt/MiniBrowser.pro:
        * QtTestBrowser/QtTestBrowser.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-03-28  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser doesn't reset its window title when opening about:blank
        https://bugs.webkit.org/show_bug.cgi?id=57224

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::onTitleChanged):
        * QtTestBrowser/mainwindow.h:

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Accept the withKeyboard parameter to supportsFullScreenForElement.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:supportsFullScreenForElement:withKeyboard:]):

2011-03-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Levin.

        check-webkit-style should check ChangeLog for a valid bug number
        https://bugs.webkit.org/show_bug.cgi?id=57184

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog.py: Added.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Added.

2011-03-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Use explicit conversion for string to avoid depending on the default codec
        installed by the user code.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):

2011-03-26  Maciej Stachowiak  <mjs@apple.com>

        Revert inadvertantly committed changes.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-03-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Show page icons (favicons) in QtTestBrowser location bar.
        https://bugs.webkit.org/show_bug.cgi?id=57162

        * QtTestBrowser/QtTestBrowser.qrc:
        * QtTestBrowser/favicon.png: Added.
        * QtTestBrowser/locationedit.cpp:
        (defaultPageIcon):
        (LocationEdit::LocationEdit):
        (LocationEdit::setPageIcon):
        (LocationEdit::resizeEvent):
        (LocationEdit::updateInternalGeometry):
        * QtTestBrowser/locationedit.h:
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::onIconChanged):
        (MainWindow::onLoadStarted):
        * QtTestBrowser/mainwindow.h:

2011-03-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Force DumpRenderTree to use 96 DPI
        https://bugs.webkit.org/show_bug.cgi?id=56866

        Make sure that GTK+ is set to use 96 DPI when running tests. This ensures
        broader compatibility with WebKit2 and makes setting font sizes more straightforward.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Set the screen resolution and GTK+ xft property to 96 DPI.
        (resetDefaultsToConsistentValues):Remove the call which repeatedly set the GDK screen resolution.
        (setDefaultsToConsistentStateValuesForTesting): Update the font sizes to reflect the new DPI.

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        TestNetscapePlugIn needs to register support for an image MIME type so
        we can test that the embed tag prefers plug-ins to render image MIME
        types.

        * DumpRenderTree/TestNetscapePlugIn/mac/Info.plist: Register image/png.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetMIMEDescription): Ditto.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Ditto.

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        Add a test for getting and setting the HTTP Cookie Accept Policy in WebKit2.

        The test is named "CookieManager" so that we can eventually exercise more of the
        CookieManager functionality in the test.

        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp: Added.
        (TestWebKitAPI::didGetTestHTTPCookieAcceptPolicy):
        Assert that the policy returned is equal to the policy set in
        didGetUserHTTPCookieAcceptPolicy, and then restore the user's policy.
        (TestWebKitAPI::didGetUserHTTPCookieAcceptPolicy):
        Set the policy to something different than the user's policy and get the policy again.
        (TestWebKitAPI::didFinishLoadForFrame):
        Get the user's policy so that it can be restored at the end of the test.
        (TestWebKitAPI::TEST):
        Load about:blank so that the Web Process gets instatiated (needed to get the
        CookieManager).

        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add CookieManager.cpp.

2011-03-24  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Fix the build so that gcc-4.1 and up can be used to build on SnowLeopard.

        * wx/build/settings.py:

2011-03-24  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Adam Roben.

        Implement layoutTestController.setAutoFilled in DRT on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56828

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAutofilled): Implemented.

2011-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Correct vsprops file for Debug variant of the CFLite build.
        Disable a CFNETWORK-specific test when building for CFLite.

        * TestWebKitAPI/Configurations/TestWebKitAPIDebugCairoCFLite.vsprops:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-03-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        fix regressions introduced in 81908 - there were a couple of
        code paths that only fired under python 2.5 that I missed.

        Also change a couple of 'python' references to sys.executable
        in order to handle runing test-webkitpy with a binary other than
        something called 'python'.

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

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/test/cat.py:
        * Scripts/webkitpy/test/echo.py:

2011-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Add a stub implementation of the TestInvocation dumping logic.
        Update project files to reflect new file.

        * WebKitTestRunner/cairo: Added.
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp: Added.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2011-03-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: clean up worker model defaults. This
        changes the default behavior to 'threads' instead of
        'old-threads', and clarifies that chromium-win-* and
        chromium-mac-leopard are exceptions.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-23  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Darin Adler.

        Media Stream API: fix the order of the options in build-webkit.
        https://bugs.webkit.org/show_bug.cgi?id=56949

        Fix the order of the options in build-webkit.

        * Scripts/build-webkit:

2011-03-23  Adam Klein  <adamk@chromium.org>

        Reviewed by Mihai Parparita.

        Add an option to new-run-webkit-httpd to allow overriding the location of LayoutTests directory
        https://bugs.webkit.org/show_bug.cgi?id=56884

        This option will be utilized by Chromium's ui_tests to allow
        referencing js-test-resources from a layout test over HTTP.

        * Scripts/new-run-webkit-httpd:
        Added --layout_tests_dir option.
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        Plumbed through as layout_tests_dir param.

2011-03-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: run tests in ascending alphabetical order per
        dir. This is a second attempt at the fix; the first attempt, in 
        r81597, broke the behavior on the old-inline and old-threads
        worker models.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-23  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] GTK's DRT to ouput detail's string for the 'property-change' signal
        https://bugs.webkit.org/show_bug.cgi?id=56953

        Print the string for the detail of 'property-change' signal.

        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
        (axObjectEventListener): Print the detail string.

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Web Inspector: compile DebuggerScript.js into DebuggerScriptSource.h
        https://bugs.webkit.org/show_bug.cgi?id=56843

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach update-webkit about gyp
        https://bugs.webkit.org/show_bug.cgi?id=56881

        This makes it possible for someone who builds from Xcode
        to just run update-webkit --gyp and have the project files
        generated after update automatically.

        I also added a stand-alone "generate-project-files" script
        wrapping Source/gyp/configure.  This makes running gyp simpler
        since most people will not have gyp or Source/gyp in their path.

        * Scripts/build-webkit:
        * Scripts/generate-project-files: Added.
        * Scripts/update-webkit:

2011-03-22  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add +[WebApplicationCache getOriginsWithCache]
        https://bugs.webkit.org/show_bug.cgi?id=56722

        * DumpRenderTree/LayoutTestController.cpp:
        (originsWithApplicationCacheCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Pass array of origin's database identifiers.
        (originsArrayToJS): Helper function for converting array of WebSecurityOrigins to a JS array of origin identifiers.
        (LayoutTestController::originsWithApplicationCache):
        (LayoutTestController::originsWithLocalStorage):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Added stub.
        (LayoutTestController::originsWithApplicationCache):

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add support to build-webkit for building with gyp-generated project files
        https://bugs.webkit.org/show_bug.cgi?id=56877

        build-webkit is a cesspool.  This change just hacks in --gyp support for Mac.
        Eventually we'll want to support gyp-generated projects in a more general manner.

        * Scripts/build-webkit:

2011-03-22  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56781> Add --dsym switch to enable dsym generation when building with Xcode

        Reviewed by Joseph Pecoraro.

        * Scripts/build-webkit: Updated usage statement to include
        --dsym.
        * Scripts/webkitdirs.pm: Added $generateDsym variable.
        (generateDsym): Added. Call determineGenerateDsym() and
        return $generateDsym.
        (determineGenerateDsym): Added.  Parse @ARGV for --dsym and set
        $generateDsym.
        (argumentsForXcode): Added.  Returns additional arguments for
        xcodebuild based on command-line switches.
        (XcodeOptions): Updated to include argumentsForXcode() in the
        array returned.

2011-03-22  Adam Roben  <aroben@apple.com>

        Make Leopard Debug bots and Windows XP Debug (Tests) core builders

        These bots are consistently green again.

        Fixes <http://webkit.org/b/56830> Leopard Debug bots and Windows XP Debug (Tests) should be
        core builders

        Rubber-stamped by Antti Koivisto.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot.__init__): Loosened the regexps for Leopard and Windows.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest.test_builder_name_regexps): Updated expectations.

2011-03-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81597.
        http://trac.webkit.org/changeset/81597
        https://bugs.webkit.org/show_bug.cgi?id=56801

        Change results in lots of unexpected flaky on the dashboard.
        (Requested by pfeldman on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-21  Sam Weinig  <sam@webkit.org>

        Fix failing tests on the WebKit2 bots.

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

2011-03-21  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShowDebugLayerTree):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):

2011-03-21  Adam Roben  <aroben@apple.com>

        Try again to get buildbot to show run-javascriptcore-tests's actual.html as an HTML file

        Fixes <http://webkit.org/b/56746> build.webkit.org shows run-javascriptcore-tests's HTML
        output as plain text

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): List actual.html as one of our log files so it will get uploaded
        to the master.
        (RunJavaScriptCoreTests.commandComplete): Reading the actual.html file here won't work,
        since we're running on the build master, not the slave. Instead, turn the raw source of
        actual.html which the build slave uploaded into an HTML log.

2011-03-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        new-run-webkit-tests: run tests in ascending alphabetical order per dir
        https://bugs.webkit.org/show_bug.cgi?id=56760

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2011-03-21  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Media Stream API patch 0: adding compilation guards.
        https://bugs.webkit.org/show_bug.cgi?id=56458

        Adding options to enable the media stream API feature in Chromium.

        * Scripts/build-webkit:

2011-03-21  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Add a command line option to capture stdout and stderr for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=56323

        Using freopen to redirect STDOUT and STDERR when DumpRenderTree command line provide 
        "--stdout" or "--stderr" option.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::processArgsLine):
        (WebCore::DumpRenderTree::loadNextTestInStandAloneMode):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setRedirectOutputFileName):
        (WebCore::DumpRenderTree::setRedirectErrorFileName):
        * DumpRenderTree/qt/main.cpp:
        (isOption):
        (takeOptionValue):
        (printUsage):
        (main):

2011-03-21  Adam Roben  <aroben@apple.com>

        Fix exceptions on the buildbot due to my last change

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete): Catch exceptions due to actual.html not existing.

2011-03-21  Adam Roben  <aroben@apple.com>

        Teach buildbot to treat run-javascriptcore-tests's actual.html as an HTML file

        Fixes <http://webkit.org/b/56746> build.webkit.org shows run-javascriptcore-tests's HTML
        output as plain text

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests): Removed the logfiles variable, which can only handle plaintext
        logs.
        (RunJavaScriptCoreTests.commandComplete): Use the addHTMLLog method to upload actual.html to
        the build master. This will correctly treat it as HTML.

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeRefCounted.h: Copied from DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeShared.h.
        * DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeShared.h: Removed.
        * Scripts/do-webcore-rename:

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Dan Bernstein.

        Add stub to LayoutTestControllerGtk.cpp to fix GTK build
        https://bugs.webkit.org/show_bug.cgi?id=56719

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415

        * DumpRenderTree/LayoutTestController.cpp:
        (clearApplicationCacheForOriginCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Adding stubs.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::clearApplicationCacheForOrigin): 
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Adding stub.
        (LayoutTestController::clearApplicationCacheForOrigin):

2011-03-18  Dan Bernstein  <mitz@apple.com>

        Revised build fix for r81135.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2011-03-18  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebKitTestRunner/config.h: Add a missing #endif.

2011-03-18  Andreas Kling  <kling@webkit.org>

        Unbreak Qt build after r81494.

        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2011-03-18  Sam Weinig  <sam@webkit.org>

        Fix windows build. This was really Adam Roben's fault. I swear!

        * WebKitTestRunner/config.h:

2011-03-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Pixel tests don't work in WebKitTestRunner on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56630

        Cross-platformize (Mac and Windows CG) the pixel dumping code in WebKitTestRunner to use WebKit2
        built-in snapshotting instead of using the window server on the Mac.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::setPixelResult):
        (WTR::InjectedBundle::shouldDumpPixels):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        Take the snapshot in the bundle and send it to the UIProcess for dumping.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cg: Added.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Copied from WebKitTestRunner/mac/TestInvocationMac.mm.
        (WTR::createCGContextFromImage):
        (WTR::computeMD5HashStringForContext):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/TestInvocationMac.mm: Removed.
        Making pixel dumping code shared for CG ports. Also use the WTF/MD5 instead of platform specific code.

        * WebKitTestRunner/win/TestInvocationWin.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        Keep stub for Cairo build.

        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreGraphics.vsprops: Added.
        Add CG configuration.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Add new files.

2011-03-18  Adam Roben  <aroben@apple.com>

        Don't allow Leaks Viewer's vertical scrollbar to cover up long function names

        Rubber-stamped by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (.data-grid .data-container): Use overflow-y:auto instead of the Inspector's default
        overflow-y:overlay so that the scrollbar doesn't overlay the content.

2011-03-18  Adam Roben  <aroben@apple.com>

        Don't ellipsize long or indented function names in Leaks Viewer

        Fixes <http://webkit.org/b/56037> Leaks viewer needs horizontal
        scrollbar

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (.data-grid .data-container):
        (.data-grid td > div, .data-grid th > div):
        Allow the contents to extend to the right.

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix some leaks in DRT seen on the leaks bot

        Fixes <http://webkit.org/b/56638> addURLToRedirectCallback and
        setWillSendRequestClearHeaderCallback in DRT are leaky

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/ForwardingHeaders/wtf/OwnArrayPtr.h: Added.

        * DumpRenderTree/LayoutTestController.cpp:
        (addURLToRedirectCallback):
        (setWillSendRequestClearHeaderCallback):
        Use OwnArrayPtr to cause the strings to be deleted.

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix a NSURLCredential leak seen on the leaks bot

        Fixes <http://webkit.org/b/56637> -[SynchronousLoader
        connection:didReceiveAuthenticationChallenge:] is leaky

        Reviewed by John Sullivan.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]): Use a RetainPtr to
        cause the NSURLCredential to be released.

2011-03-18  John Knottenbelt  <jknotten@chromium.org>

        Unreviewed.

        Remove unnecessary brackets around my email address.

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

2011-03-18  Adam Roben  <aroben@apple.com>
        
        Remove some files I accidentally added in r81454

        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreGraphics.vsprops: Removed.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Removed.

2011-03-18  Adam Roben  <aroben@apple.com>

        Ignore an NSNumberFormatter leak on SnowLeopard

        * Scripts/old-run-webkit-tests:
        (countAndPrintLeaks): Ignore leaks in -[NSNumberFormatter
        getObjectValue:forString:errorDescription:].

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix a leak beneath LayoutTestController::authenticateSession seen on the bots

        Rubber-stamped by Mark Rowe.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::authenticateSession): Use a RetainPtr to cause the NSURLRequest to be
        released.

2011-03-17  Adam Roben  <aroben@apple.com>

        Address a review comment I missed in r81445

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (LeaksParserWorker.prototype._parseLeaks): Anchor the RegExp used to find the number of
        leaked bytes to speed up searching on long lines.

2011-03-17  Adam Roben  <aroben@apple.com>

        Mark leaky builds orange, even if all regression tests passed

        Fixes <http://webkit.org/b/56609> SnowLeopard Intel Leaks bot appears green on
        build.webkit.org when all tests pass even though there are still leaks

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitLeakTests): Set the warnOnWarnings property to True so that the entire build will
        be marked orange if this build step generates warnings.

2011-03-17  Adam Roben  <aroben@apple.com>

        Allow values in Leaks Viewer to be shown as percentages

        Double-clicking on a column will toggle between showing percentages and showing real values.

        Fixes <http://webkit.org/b/56628> Would like to view values as percentages of the total
        number of leaked bytes in Leaks Viewer

        Reviewed by Joe Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (LeaksParserWorker.prototype._incorporateLeaks): Calculate the (never-shown) top-level
        node's totalTime, which is used in calculating percentages.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (monkeyPatchInspectorObjects): Only format values as bytes if we aren't supposed to be
        showing them as percentages.

2011-03-17  Adam Roben  <aroben@apple.com>

        Show the number of leaked bytes, not just leaked allocations, in Leaks Viewer

        The Self and Total columns now report the number of leaked bytes. The new Calls column shows
        the number of leaked allocations. And the new Average column shows the average number of
        leaked bytes per call.

        Fixes <http://webkit.org/b/56344> Leaks Viewer should show how many bytes were leaked, not
        just how many allocations

        Reviewed by Joe Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js:
        (LeaksParserWorker.prototype._parseLeaks): Parse the number of leaked bytes from the "Leak:"
        line and store it with the leak stack.
        (LeaksParserWorker.prototype._createNode): Initialize the averageTime and numberOfCalls
        properties.
        (LeaksParserWorker.prototype._incorporateLeaks): Updated to get the stack from the .stack
        property, and changed to store the number of leaked bytes in .selfTime/.totalTime.
        .numberOfCalls now holds the number of leaked allocations.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js:
        (Preferences): Set samplingCPUProfiler to false so that the Average and Calls columns will
        appear.
        (monkeyPatchInspectorObjects): Format the values as bytes.

2011-03-17  Adam Roben  <aroben@apple.com>

        Make Leaks Viewer able to count leaks in builds that didn't fail any regression tests

        Fixes <http://webkit.org/b/56626> Leaks Viewer omits recent builds which didn't fail any
        regression tests

        Reviewed by James Robinson.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Get the number of leaks out of the "text" array, which
        is always populated, even when all regression tests pass.

2011-03-10  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        Add a check logic for reftests in case that a reftest is marked AS REBASELINE.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-03-17  Adam Roben  <aroben@apple.com>

        Skip a compositing-sensitive test when accelerated compositing is disabled

        Reviewed by Sam Weinig.

        * Scripts/old-run-webkit-tests: Skip media/media-document-audio-repaint.html when
        accelerated compositing is disabled.

2011-03-17  Adam Roben  <aroben@apple.com>

        Start using PlatformSpecificScheduler for the Mac builders

        The current set of file/directory patterns should work for Mac builders. We may discover
        that there are more files and directories we can exclude from the Mac builds, but they can
        be added later.

        Fixes <http://webkit.org/b/56593> Mac builders do lots of unnecessary builds

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Moved the Mac builders into two
        PlatformSpecificSchedulers: one for Leopard, and one for SnowLeopard.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Allow "mac-leopard" and "mac-snowleopard" platforms, and
        cleaned up patterns a little bit.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Fixed some expected results.
        (ShouldBuildTest.test_should_build): Start testing "mac-leopard" and "mac-snowleopard"
        platforms.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * DumpRenderTree/DumpRenderTree.xcodeproj: Modified property svn:ignore.
        * MiniBrowser/MiniBrowser.xcodeproj: Modified property svn:ignore.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Modified property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Modified property svn:ignore.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Modified property svn:ignore.

2011-03-17  Adam Roben  <aroben@apple.com>

        Make old-run-webkit-tests pick up mac-wk2 results when running in WebKit2 mode on Windows

        Fixes <http://webkit.org/b/56563> Running WebKit2 tests on Windows should use results from
        mac-wk2

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (expectedDirectoryForTest): Clean up the code to search in extra Mac platform result
        directories on Windows. Add mac-wk2 to the set of extra platforms we look in on Windows when
        we're running in WebKit2 mode.

2011-03-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Clean up Inspector strings.
        https://bugs.webkit.org/show_bug.cgi?id=56557

        Modify the script to deal correctly with "\xNN" escapes, and to
        check strings in Chromium's DevTools.js.

        * Scripts/check-inspector-strings:

2011-03-17  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Benjamin Poulain.

        Update autoinstall to install mechanize 0.2.4
        https://bugs.webkit.org/show_bug.cgi?id=56499

        Newer versions of mechanize support HTTPS proxies, which is necessary
        for people using webkit-patch behind firewalls.

        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/thirdparty/__init__.py:

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        REGRESSION (r81084): media/invalid-media-url-crash.html and editing/execCommand/indent-paragraphs.html failing on WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56541

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        Check for an empty host in addition to a null host.  This bug was introduced
        when porting off of the KURL code and onto the WKURLRef version.

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add Lucas Forschler to the list of WebKit committers.

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

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed upon and dictated through Adam Roben.

        Escape crashing function names in results.html. This fixes an issue
        when a crash involves a type with templates.

        * Scripts/old-run-webkit-tests:

2011-03-16  Daniel Sievers  <sievers@google.com>

        Reviewed by James Robinson.

        Add setting to always force compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=56156

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setForceCompositingMode):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2011-03-15  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        Ignore files that will be used by reftests in old-run-webkit-tests.

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

        * Scripts/old-run-webkit-tests:

2011-03-15  Felipe Oliveira da Silva Netto  <f.dachshund@gmail.com>

        Reviewed by Adam Roben.

        Function relativeScriptsDir doesn't return the correct relative
        Scripts directory.

        * Scripts/webkitdirs.pm:
        (relativeScriptsDir): Ensure we use the directory that contains
        webkitdirs.pm, not the one that contains the original script that
        was invoked.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for long linker commands on Win and method return error, plus a Mac
        fix to link against the Security framework after recent WebKitSystemInterface changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::originsWithLocalStorage):
        * wx/build/settings.py:
        * wx/build/waf_extensions.py:

2011-03-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add script to convert a patch to a prettypatch and show in the default browser
        https://bugs.webkit.org/show_bug.cgi?id=56416

        This can be used either like
            $ svn-create-patch | show-pretty-diff
        or
            $ show-pretty-diff patch.diff

        * Scripts/show-pretty-diff: Added.

2011-03-15  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Adam Roben.

        Adding myself as a reviewer.

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

2011-03-15  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPDeallocateCalledBeforeNPShutdown.cpp:
        (NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject):

2011-03-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make sure that NP_Shutdown is always the last NPP function called
        https://bugs.webkit.org/show_bug.cgi?id=56391

        Add a test that times out if an NP_Deallocate object is called after NP_Shutdown.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::PluginTest):
        (PluginTest::NP_Shutdown):
        (PluginTest::registerNPShutdownFunction):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPDeallocateCalledBeforeNPShutdown.cpp: Added.
        (NPDeallocateCalledBeforeNPShutdown::NPDeallocateCalledBeforeNPShutdown):
        (NPDeallocateCalledBeforeNPShutdown::TestObject::~TestObject):
        (NPDeallocateCalledBeforeNPShutdown::ScriptableObject::hasProperty):
        (NPDeallocateCalledBeforeNPShutdown::ScriptableObject::getProperty):
        (NPDeallocateCalledBeforeNPShutdown::NPP_New):
        (NPDeallocateCalledBeforeNPShutdown::NPP_GetValue):
        (NPDeallocateCalledBeforeNPShutdown::shutdown):
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Shutdown):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        * DumpRenderTree/LayoutTestController.cpp:
        (setAutofilledCallback): Added.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAutofilled): Added.
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAutofilled): Added.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAutofilled): Added.
        (LayoutTestController::setValueForUser): Style tweak.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAutofilled): Added (stub).
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAutofilled): Added (stub).

2011-03-15  Dan Bernstein  <mitz@apple.com>

        Build fix after r81135.

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:

2011-03-15  Dan Bernstein  <mitz@apple.com>

        Build fix after r81135.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        * WebKitTestRunner/mac/TestInvocationMac.mm:
        * WebKitTestRunner/mac/main.mm:

2011-03-15  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(80977): breaks Qt ARMv7 Linux Release bot
        https://bugs.webkit.org/show_bug.cgi?id=56349

        * QtTestBrowser/QtTestBrowser.pro: Link against fontconfig
        on platforms where we use it. Copied from DumpRenderTree.pro.

2011-03-15  Dan Bernstein  <mitz@apple.com>

        Build fix after r81135.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/chromium/config.h:
        * DumpRenderTree/config.h:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * TestWebKitAPI/TestWebKitAPIPrefix.h:
        * WebKitAPITest/HostWindow.cpp:
        * WebKitAPITest/TestsController.cpp:
        * WebKitAPITest/config.h: Added.
        * WebKitAPITest/main.cpp:
        * WebKitAPITest/tests/WebViewDestruction.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/GCController.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp:
        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp:
        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/config.h: Added.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        * WebKitTestRunner/qt/main.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/win/TestControllerWin.cpp:
        * WebKitTestRunner/win/TestInvocationWin.cpp:
        * WebKitTestRunner/win/main.cpp:
        * wx/build/settings.py:

2011-03-15  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [NRWT] Add support for reftests to new-run-webkit-tests.

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

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-15  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix compilation warning after r80892
        https://bugs.webkit.org/show_bug.cgi?id=56302

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::originsWithLocalStorage):

2011-03-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Document the qmakearg argument, and hint how to build webkit2 on Qt
        https://bugs.webkit.org/show_bug.cgi?id=56326

        * Scripts/build-webkit: add --qmakearg to build-webkit --help

2011-03-15  Adam Roben  <aroben@apple.com>

        Make Windows 7 Release (Tests) a core builder

        We can probably make Windows XP Debug (Tests) a core builder, too, but we should probably
        give it a few more days of greenness first.

        Fixes <http://webkit.org/b/55665> Windows 7 Release (Tests) should be a core builder

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot): Added a regexp to match Windows 7 Release (Tests).

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest): Updated the list of builders to match the current list on build.webkit.org.
        Updated the core regexps to match the buildbot module. Updated the expected results to match
        the current set of core builders.

2011-03-14  Adam Roben  <aroben@apple.com>

        Add forgotten file from r81116

        * TestWebKitAPI/Configurations/TestWebKitAPICFNetwork.vsprops: Added.

2011-03-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        about:blank fake responses don't get serialized when sent the UIProcess
        <rdar://problem/9108119>
        https://bugs.webkit.org/show_bug.cgi?id=56357

        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp: Added.
        (TestWebKitAPI::decidePolicyForResponse):
        (TestWebKitAPI::TEST):
        Add test that loads of about:blank have a response with a MIMEType of text/html.

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        Add helper to get the MIMEType from a WKURLResponse.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add new files.

2011-03-14  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Command-line options for QGLWidget and WebGL to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=56006

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2011-03-14  James Kozianski  <koz@chromium.org>

        Reviewed by Ojan Vafai.

        Add method to make BuildBot return test outputs
        https://bugs.webkit.org/show_bug.cgi?id=54374

        The Builder.latest_cached_build will be used by the new rebaseline
        script to determine the build to use baselines from.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-03-14  Adam Roben  <aroben@apple.com>

        Test that WKBundlePageCanHandleRequest returns true for empty document URLs

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle): Store the result of the test.
        (TestWebKitAPI::setInjectedBundleClient): Hook up our callback.
        (TestWebKitAPI::TEST): Register "emptyscheme" as an empty document scheme, load a page to
        ensure the web process is initialized, then ask the bundle to run the test and assert that
        it succeeded.

        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp: Added.
        (TestWebKitAPI::CanHandleRequestTest::CanHandleRequestTest): Just call up to the base class.
        (TestWebKitAPI::canHandleURL): Helper function to test whether WebKit2 claims to be able to
        handle a given URL.
        (TestWebKitAPI::runTest): Check that empty document URLs can be handled (and that an unknown
        URL type cannot be handled).
        (TestWebKitAPI::CanHandleRequestTest::didReceiveMessage): Run the test and return the
        result.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        Added new files to the project.

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81094.
        http://trac.webkit.org/changeset/81094
        https://bugs.webkit.org/show_bug.cgi?id=56355

        Broke the chromium DRT related build. (Requested by dave_levin
        on #webkit).

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):

2011-03-14  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShowDebugLayerTree):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        (TestShell::dump):
        * DumpRenderTree/chromium/TestShell.h:
        (TestParams::TestParams):

2011-03-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Roben.

        [Qt][WK2]Unbreak InjectedBundle on Qt
        https://bugs.webkit.org/show_bug.cgi?id=54109

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Use new WebKit2
        API's instead of KURL to analyze the URL.
        * WebKitTestRunner/StringFunctions.h:
        (WTR::adoptWK): Moved from InjectedBundlePage.cpp to make it available globally
        in the WebKitTestRunner project.
        (WTR::toWK): Use adoptWK.
        (WTR::operator<<): Added helper for printing a WKURL.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Do not link
        against WebCore.

2011-03-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        check-webkit-style falsely should not complain about WebKit2 API headers in the Shared directory
        https://bugs.webkit.org/show_bug.cgi?id=56321

        * Scripts/webkitpy/style/checker.py: Add the patch "Source/WebKit2/Shared/API/c"
        to the list of exceptions for WebKit2 C API headers.

2011-03-14  Adam Roben  <aroben@apple.com>

        Show the list of recent leaky builds in reverse chronological order

        Previously they were being shown in a deterministic but surprising order based on
        lexicographically sorting the build offsets (-1, -10, -2, -3...).

        Fixes <http://webkit.org/b/56342> Leaks Viewer shows recent builds in a strange order

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Sort the builds by revision before passing them to our
        callback.

2011-03-14  Adam Roben  <aroben@apple.com>

        Show a list of up to 10 recent leaky builds when Leaks Viewer loads

        Fixes <http://webkit.org/b/56043> Leaks Viewer should present a list of recent builds to
        analyze

        Reviewed by David Kilzer and Joe Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (#url-prompt): Made this a bit taller to make room for the list of builds.

        (#recent-builds-loading-indicator):
        (#recent-builds-list):
        Added styles for the build list and loading indicator.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer.loaded): Pass the URL from the query through decodeURIComponent before loading
        it. This will unescape it.
        (LeaksViewer.urlPromptButtonClicked): Moved code from here to _urlChosenFromPrompt.
        (LeaksViewer._didLoadRecentBuilds): Added. Stores the builds and updates the prompt.
        (LeaksViewer._displayURLPrompt): Start loading the recent leaky builds.
        (LeaksViewer._updateURLPrompt): Create a list of the recent leaky builds and add them to the
        prompt UI.
        (LeaksViewer._urlChosenFromPrompt): Added. Code came from urlPromptButtonClicked. This is
        now also used when a recent build is clicked.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js: Added.
        (RecentBuildsLoader): Store the callback.
        (RecentBuildsLoader.prototype.start): Load the N most recent builds from the specified
        builder. Find the revision number, leak count, and results URL for each one. Pass the
        resulting info to our callback.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js:
        (range): Added this helper function to return an array containing the integers [0, n).

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Added
        RecentBuildsLoader.js and added text to the prompt UI to show the recent builds.

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Fix two memory leaks within LayoutTestController's storage support.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::originsWithLocalStorage): Don't leak the JSStringRef that is returned
        by JSStringCreateWithCFString.
        (LayoutTestController::deleteLocalStorageForOrigin): Don't leak the WebSecurityOrigin that we
        allocate.

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <http://webkit.org/b/56304> REGRESSION(r80892): 100,000+ leaks seen on the build bot

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions): Remove duplicate entries.

2011-03-14  Alice Liu  <alice.liu@apple.com>

        Reviewed by Dan Bernstein.

        DumpRenderTree Perl Support fails to build with ARCHS="i386 x86_64"

        * DumpRenderTree/mac/PerlSupport/Makefile:
        Add whitespace when joining "-arch" with the architectures passed in as arguments.

2011-03-14  Daniel Bates  <dbates@rim.com>

        https://bugs.webkit.org/show_bug.cgi?id=55438
        Add double quotes around value of -DCMAKE_WINCE_SDK that I inadvertently did not add
        when landing changeset 81041 <http://trac.webkit.org/changeset/81041>.

        * Scripts/build-webkit:

2011-03-14  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Cleanup: Separate port-specific implementation details from webkitdirs::buildCMakeProject()
        https://bugs.webkit.org/show_bug.cgi?id=55438

        Separate out the EFL- and WinCE-specific logic from the port-independent logic in
        webkitdirs::buildCMakeProject(). Also, remove redundant code for generating the
        CMake arguments for feature defines.

        * Scripts/build-webkit:
          - Added cMakeArgsFromFeatures() to convert the @features array to CMake arguments.
          - Modified EFL and WinCE-specific building logic to call buildCMakeProjectOrExit().
          - Sorted forward declarations.
          - Initialize $makeArgs with the empty string so as to simplify its use in string operations;
            Modified call sites as needed.
        * Scripts/webkitdirs.pm:
          - Added cleanCMakeGeneratedProject() to clean a CMake build.
          - Added buildCMakeGeneratedProject() to build using generated build system.
          - Added buildCMakeProjectOrExit() which is a facade for building a CMake project.
          - Added generateBuildSystemFromCMakeProject() to generate the build system from
            a CMake project.
          - Removed buildCMakeProject(). This functionality is in buildCMakeProjectOrExit().

2011-03-14  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        Extend the layout test controller to expose the number of pending
        geolocation requests, so that we can test that the requests have
        been cancelled on page close.

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfPendingGeolocationPermissionRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate numberOfPendingGeolocationPermissionRequests]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):


2011-03-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Modify my email address in committers.py.

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

2011-03-13  Joe Wild  <joseph.wild@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher does not load the same set of fonts as the DRT
        https://bugs.webkit.org/show_bug.cgi?id=34959

        This patch adds the option "-use-test-fonts" to the QtTestBrowser.
        When this option is used the webkit fonts are loaded the same
        as they are in DumpRenderTree.  This option can be used on
        QtTestBrowser and run-launcher.  It can only be used
        on Linux systems with FcInit and is configured as such.

        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (initWebKitTestFonts):
        (launcherMain):
        (LauncherApplication::handleUserOptions):

2011-03-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8995822> Build DumpRenderTree perl support only for the architectures
        DumpRenderTree is being built for.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2011-03-12  Dan Bernstein  <mitz@apple.com>

        Suggested by Mark Rowe.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Leave C++ exceptions enabled
        as they were before r80915.

2011-03-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Should be able to download a PDF to the Downloads folder
        https://bugs.webkit.org/show_bug.cgi?id=56256

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        Update for API changes.

2011-03-11  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=51878
        Add WebKit1 API to view and delete local storage

        Added tests that write to LocalStorage, delete one origin, get list of origins with local storage, delete all origins.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (syncLocalStorageCallback):
        (observeStorageTrackerNotificationsCallback):
        (deleteAllLocalStorageCallback):
        (deleteLocalStorageForOriginCallback):
        (originsWithLocalStorageCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/StorageTrackerDelegate.h: Added.
        * DumpRenderTree/StorageTrackerDelegate.mm: Added.
        (-[StorageTrackerDelegate init]):
        (-[StorageTrackerDelegate logNotifications:controller:]):
        (-[StorageTrackerDelegate originModified:]):
        (-[StorageTrackerDelegate dealloc]):
        (-[StorageTrackerDelegate setControllerToNotifyDone:]):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (observeStorageTrackerNotifications):
        (syncLocalStorage):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::syncLocalStorage):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::syncLocalStorage):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::syncLocalStorage):
        (LayoutTestController::observeStorageTrackerNotifications):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::deleteAllLocalStorage):
        (LayoutTestController::originsWithLocalStorage):
        (LayoutTestController::deleteLocalStorageForOrigin):

2011-03-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Crash calling WebContext::clearResourceCaches(InMemoryResourceCachesOnly) before the Web
        Process has finished launching.
        https://bugs.webkit.org/show_bug.cgi?id=56208

        * TestWebKitAPI/Tests/WebKit2/SendingMessagesToTheWebProcessBeforeItIsValid.cpp: Added.
        (TestWebKitAPI::TEST):
        Test that calling WKContextClearResourceCaches works with both options when called before
        the Web Process is valid.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the new test.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Ditto.

2011-03-11  Adam Roben  <aroben@apple.com>

        Make it possible to view all leaks from a build at once in Leaks Viewer

        You can now give Leaks Viewer the URL of a build results page (e.g.,
        <http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r80847%20(15493)/>), and it
        will load all the leaks files from that build.

        Fixes <http://webkit.org/b/56030> Leaks Viewer: Would like to be able to look at all leaks
        files from a particular build at once, rather than one at a time

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksLoader.js: Added.
        (LeaksLoader): Initialize our properties.
        (LeaksLoader.prototype.start): If the URL ends in .txt, assume it's a single leaks file and
        load it. Otherwise assume it's a build results page URL and start fetching the leaks files
        from that page.
        (LeaksLoader.prototype._loadLeaksFiles): Tell our client how many leaks files we're loading
        so it can provide feedback. Then load each one and pass it to the client.
        (LeaksLoader.prototype._loadLeaksFromResultsPage): Load the HTML of the results page, parse
        it into a DOM, pull out all the links to leaks files, and load each one.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParser.js: Added.
        (LeaksParser): Initialize our worker.
        (LeaksParser.prototype.addLeaksFile): Tell the worker about the leaks file's contents.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksParserWorker.js: Added.
        This code mostly came from Worker.js.
        (LeaksParserWorker): Initialize our profile.
        (LeaksParserWorker.prototype.addLeaksFile): Parse the leaks file and incorporate it into our
        profile.
        (LeaksParserWorker.prototype._parseLeaks):
        (LeaksParserWorker.prototype._createNode):
        (LeaksParserWorker.prototype._incorporateLeaks):
        Moved these functions here from LeaksViewer. _incorporateLeaks is essentially just a renamed
        version of createProfile which adds to this.profile instead of making a new profile each
        time.
        (onmessage): Parse the file and send back the new profile.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (#loading-indicator):
        (#spinner):
        (#loading-indicator-label):
        Tweaked styles to accomodate a longer label.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer.loaded): Set up a loader and parser.

        (LeaksViewer.get filesLeftToParse):
        (LeaksViewer.set filesLeftToParse):
        Added these simple accessors.

        (LeaksViewer._didCountLeaksFiles): Callback from LeaksLoader. Stores the count.
        (LeaksViewer._didLoadLeaksFile): Callback from LeaksLoader. Passes the file contents off to
        the parser.
        (LeaksViewer._didParseLeaksFile): Callback from LeaksParser. If all files have been parsed,
        tell the ProfilerAgent and mark that we're done loading. (Code came from the old
        _loadLeaksFromURL function).
        (LeaksViewer._loadLeaksFromURL): Now just calls through to the loader.
        (LeaksViewer._loadingIndicatorText): Added. Returns the text that should show up in the
        loading indicator, including the number of files being loaded.
        (LeaksViewer._loadingStatusChanged): Update the loading indicator's label, too.
        (LeaksViewer._updateLoadingIndicatorLabel): Added. Just updates the label!
        (LeaksViewer._updateTitle): Moved code to compute the "Loading" text to
        _loadingIndicatorText.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Utilities.js: Added.
        (getResource): Moved here from LeaksViewer.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Worker.js: Subsumed by
        LeaksParserWorker.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Added new JS
        files, added a #loading-indicator-label element, and tweaked the prompt wording.

2011-03-11  Adam Roben  <aroben@apple.com>

        Don't trigger a build when build.webkit.org's HTML files are modified

        Fixes <http://webkit.org/b/56190> Windows bots shouldn't have built r80848/r80851, but did

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added build.webkit.org's public_html directory to the list of
        directories that shouldn't trigger builds. Re-sorted the list.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added a test to cover the above change.

2011-03-11  Adam Roben  <aroben@apple.com>

        Roll out r80848

        It was accidentally committed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._loadLeaksFromURL):

2011-03-11  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        kill hung lighttpd processes on the chromium win bot
        https://bugs.webkit.org/show_bug.cgi?id=56152

        Sometimes this process doesn't exit and it holds on to
        a log file that we can't delete or copy, causing the tests
        to go red.

        * BuildSlaveSupport/win/kill-old-processes:

2011-03-11  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] missing HTMLInputElement::setValueForUser() to tests
        https://bugs.webkit.org/show_bug.cgi?id=55854

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setValueForUser): Added.
        * DumpRenderTree/chromium/LayoutTestController.h:

2011-03-10  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Clean up some gross code in TestShellWin.cpp.  No functional change.
        https://bugs.webkit.org/show_bug.cgi?id=56048

        * DumpRenderTree/chromium/TestShellWin.cpp:
        (checkLayoutTestSystemDependencies):

2011-03-10  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Buildfix for platforms where X11 is not available (e.g. Symbian)

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts): Guard X11-specific code with Q_WS_X11.

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Make single backing store the default for EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=55753

        Set single backing store the default for EWebLauncher.

        * EWebLauncher/main.c:
        (main):

2011-03-10  Adam Roben  <aroben@apple.com>

        Ignore errors from files being held open when creating a test result archive

        Fixes <http://webkit.org/b/55581> Test results don't get uploaded if test-result-archive
        fails to delete the results directory

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults): Ignore errno 2 when deleting the results directory, since it can be
        thrown when a process is holding a file open.

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80701.
        http://trac.webkit.org/changeset/80701
        https://bugs.webkit.org/show_bug.cgi?id=56126

        fast/dom/Geolocation/window-close-crash.html fails on Snow
        Leopard release builds (Requested by mihaip on #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2011-03-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] run-gtk-tests doesn't fail if a test crashes
        https://bugs.webkit.org/show_bug.cgi?id=56089

        * Scripts/run-gtk-tests: gtester -k exits with a 0 exit status
        even if a test crashes. So run the tests individually and if a
        test fails remember its exit code so run-gtk-test fails too, if
        required.

2011-01-26  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        Extend the layout test controller to expose the number of pending
        geolocation requests, so that we can test that the requests have
        been cancelled on page close.

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfPendingGeolocationPermissionRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate numberOfPendingGeolocationPermissionRequests]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):


2011-03-09  Adam Roben  <aroben@apple.com>

        Hide Leaks Viewer's URL prompt by default

        We will show it as needed. I think I left it visible by default by accident after doing some
        testing.

        Fixes <http://webkit.org/b/56031> Leaks Viewer: URL prompt overlay shouldn't appear when a
        URL is passed as a query parameter, but does

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html:

2011-03-09  Adam Roben  <aroben@apple.com>

        Don't use Element.classList or box-shadow in Leaks Viewer

        They aren't supported by Safari 5. Luckily we have substitutes for them!

        Fixes <http://webkit.org/b/56035> Leaks viewer doesn't work in Safari 5

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css:
        (#url-prompt): Use -webkit-box-shadow instead of box-shadow.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer.urlPromptButtonClicked):
        (LeaksViewer._displayURLPrompt):
        (LeaksViewer._setLoadingIndicatorHidden):
        Use add/removeStyleClass (from utilities.js) instead of Element.classList.

2011-03-09  Adam Roben  <aroben@apple.com>

        Add a link to the Leaks Viewer tool on the build.webkit.org homepage

        Rubber-stamped by David Kilzer.

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

2011-03-09  Adam Roben  <aroben@apple.com>

        Add a Leaks Viewer tool to build.webkit.org

        This tool parses leaks from the files generated by the leaks bot and displays them in a
        view similar to the Web Inspector's Profiles pane (in fact, it uses the Web Inspector's
        code).

        The URL of the leaks file can be entered in a prompt when the tools is first shown, or can
        be passed to the tool via the "url" query parameter.

        Only one leaks file can be viewed at a time for now. Only the number of leaks, as opposed to
        the number of leaked bytes, is shown. And this tool has made apparent some bugs in the Web
        Inspector's Heavy profile view. But it's still pretty useful as-is.

        Fixes <http://webkit.org/b/56028> Would like a Shark-like tool for viewing leaks from leak bots

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.css: Added.
        (#url-prompt-container): This is the dark overlay that is shown behind the URL prompt.
        (#url-prompt): This is the prompt itself.

        (#loading-indicator):
        (#loading-indicator > img):
        These show a spinner in the bottom-right when we're loading a leaks file.

        (.percent-time-status-bar-item): Hide the Percent button since we never want to show leaks
        as percentages.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js: Added.
        (LeaksViewer.loaded): Initialize ourselves and start loading the leaks file (or prompt for a
        URL if one wasn't given to us as a query parameter).

        (LeaksViewer.get loading):
        (LeaksViewer.set loading):
        (LeaksViewer.get url):
        (LeaksViewer.set url):
        Pretty simple accessors.

        (LeaksViewer.urlPromptButtonClicked): Start loading the URL from the prompt and hide the
        prompt.
        (LeaksViewer._displayURLPrompt): Show the prompt and focus the URL input.
        (LeaksViewer._loadLeaksFromURL): Start fetching the leaks file. When we've retrieved the
        file, hand it off to a Web Worker that will parse it into a fake "profile", then hand off
        the profile to the Web Inspector code once it's been created.
        (LeaksViewer._loadingStatusChanged): Update our loading indicator and title.
        (LeaksViewer._setLoadingIndicatorHidden): Simply hide or show the indicator.
        (LeaksViewer._updateTitle): Set our title based on our URL and loading status.
        (getResource): Helper function to fetch a resource via XHR and pass it to a callback.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/WebInspectorShims.js: Added.
        (WebInspector.UIString): Just a simple implementation since this tool isn't localized.
        (ProfilerAgent.getProfile): Store the callback.
        (ProfilerAgent.profileReady): Call the callback.
        (monkeyPatchInspectorObjects): Fix up WebInspector.ProfileDataGridNode to show the self leak
        count and total leak counts as real values, not percentages or milliseconds.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/Worker.js: Added.
        (onmessage): Create a profile based on the leaks file and pass it back to our caller.
        (parseLeaks): Extract call stacks out of a leaks file.
        (createNode): Helper function to create a new empty profile node.
        (createProfile): Take the leak stacks and turn them into a fake "profile" for consumption by
        WebInspector.ProfileView.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/index.html: Added.

2011-03-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Combine multiple --ignore-tests values
        https://bugs.webkit.org/show_bug.cgi?id=56016

        * Scripts/old-run-webkit-tests:

2011-03-08  Kenji Imasaki  <imasaki@chromium.org>

        Reviewed by David Levin.

        Adding myself to the committer file.

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

2011-03-08  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Adam Roben.

        Fix two leaks I introduced into the API tests.

        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        (TestWebKitAPI::TEST):

2011-03-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        Crash in CFNetwork visiting google.com
        https://bugs.webkit.org/show_bug.cgi?id=55958

        Add a test for not trying to copy a null CFURLResponse.

        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2011-03-08  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        [NRWT] Renamed a FailureWithType class to a ComparisonTestFailure class.

        FailureWithType is a confusing naming because we have removed test_type/* classes in r79840.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:

2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add layoutTestController.setValueForUser() after r80412
        https://bugs.webkit.org/show_bug.cgi?id=55862

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setValueForUser): Implement setValueForUser()

2011-03-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Add script_shell_command to WebKitPort
        https://bugs.webkit.org/show_bug.cgi?id=55925

        Add a central place where we generate the shell command from the script name.
        This function will be used later to detect the correct script interpreter on Win32.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2011-03-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        add webkit-patch attach-to-bug for posting to bugzilla from the commandline
        https://bugs.webkit.org/show_bug.cgi?id=55749

        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/attachtobug.py: Added.
        * Scripts/webkitpy/tool/steps/options.py:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add support for DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=55115

        Enable data transfer items in DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):

2011-03-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [test dashboard] pull treemap files
        https://bugs.webkit.org/show_bug.cgi?id=55852

        * TestResultServer/handlers/dashboardhandler.py:

2011-03-03  Hayato Ito  <hayato@chromium.org>

        Reviewed by Mihai Parparita.

        [NRWT] Clear output image file used by DumpRenderTree to make sure the
        previous image should not be used in the ChromiumDriver.

        Also make sure that output image from the ChromiumDriver should be ''
        (empty string) if a test crashes for consistency with the WebKitDriver
        implementation.

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

        * Scripts/webkitpy/layout_tests/port/chromium.py:

2011-03-07  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] fast/js/navigator-language.html fails locally
        https://bugs.webkit.org/show_bug.cgi?id=55880

        Add LANG variable to the clean environment when running
        old-run-webkit-tests script.

        * Scripts/old-run-webkit-tests:

2011-03-07  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        [Chromium] Find .checksum files without .pngs and vice-versa
        https://bugs.webkit.org/show_bug.cgi?id=55236

        * Scripts/find-mismatched-layout-test-results: Added. A script for finding
            mismatched results.

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WK1 needs to use the ScrollView attachment for AXScrollArea, WK2 should not use this element.
        https://bugs.webkit.org/show_bug.cgi?id=55706

        The rootElement in DRT should point to the scroll view. In WK1, that will be the parent of the rootObject.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::focusedElement):
           Remove FIXME comment about caching the focusedElement. In fact, we shouldn't cache this 
           because it could change at any time.
        (AccessibilityController::rootElement):

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add unableToImplementPolicy callback for WebKit2 policy client
        <rdar://problem/9071902>
        https://bugs.webkit.org/show_bug.cgi?id=55884

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        Update policy client initialization struct for new member.

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForResponse):
        (-[BrowserWindowController awakeFromNib]):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForResponse):
        (TestWebKitAPI::TEST):
        Update tools for new name.

2011-03-06  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel and David Kilzer.

        Fix misspelled word in build-webkit's checkForJavaSDK() and sort forward declarations
        https://bugs.webkit.org/show_bug.cgi?id=55503

        Fix misspelled word "Dowloads" [sic] in the message printed to standard output
        in checkForJavaSDK().

        Also, remove extraneous space in function prototype for unlinkZeroFiles.

        * Scripts/build-webkit:

2011-03-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        Fix Web Process crashes caused by https://bugs.webkit.org/show_bug.cgi?id=53919.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Retain the WKURLRequestRef returned
            by willSendRequestForFrame. The API expects a retained reference to the URL request.

2011-03-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::setValue() should schedule change event when the element is focused
        In service of https://code.google.com/p/chromium/issues/detail?id=42716
        https://bugs.webkit.org/show_bug.cgi?id=53160

        * DumpRenderTree/LayoutTestController.cpp:
        (setValueForUserCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setValueForUser): Expose HTMLInputElement::setValueForUser() to tests
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setValueForUser): Stubbed out; need real implementation.

2011-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/9055252> DumpRenderTree is crashing with GuardMalloc

        GuardMalloc does not expect the memory containing its malloc_zone_t to ever be read-only.
        
        * DumpRenderTree/mac/CheckedMalloc.cpp:
        (protectionOfRegion): Retrieve the protection flags for the VM region containing the given address.
        (makeLargeMallocFailSilently): Save the initial protection flags, temporarily make the region writeable,
        and then restore the initial protection flags when we're done.

2011-03-04  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [gdb] pretty-print KURL in gdb
        https://bugs.webkit.org/show_bug.cgi?id=55788

        * gdb/webkit.py: extend the pretty-printers to print WTF::CString
        and KURLGooglePrivate.  As always, "p/r" can be used to sidestep
        pretty-printing.

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Update the tests that use WKPageRunJavaScriptInMainFrame use the WKSerializedScriptValueRef.

        Reviewed by Darin Adler.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::javaScriptCallback):
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        (TestWebKitAPI::didRunJavaScript):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::nullJavaScriptCallback):
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::didRunJavaScript):

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Make run-api-tests show failed if a test fails.

        https://webkit.org/b/55725

        Reviewed by Sam Weinig.

        * Scripts/run-api-tests:
        (runTest): Remove "my" from the nested $result assignment so the
        check outside the condition sees the real result.

2011-03-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium][DRT] WebTask should use webkit_support::TaskAdaptor
        https://bugs.webkit.org/show_bug.cgi?id=55434

        Changed WebTask to be a subclass of webkit_support::TaskAdaptor
        and passed the object webkit_support::PostDelayedTask directly.

        Note that the change keeps postTask() as is because it has a
        semantics taht webkit_support::PostDelayedTask() has; It jumps to
        the main thread.

        * DumpRenderTree/chromium/Task.cpp:
        (postDelayedTask):
        * DumpRenderTree/chromium/Task.h:
        (WebTask::Run):

2011-03-03  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [QT] Implement mock client-based geolocation for layout testing
        https://bugs.webkit.org/show_bug.cgi?id=54334

        Implement testing for Client-Based geolocation for QtWebkit.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setMockGeolocationPosition):

2011-03-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80237.
        http://trac.webkit.org/changeset/80237
        https://bugs.webkit.org/show_bug.cgi?id=55714

        Windows bots aren't ready to be core (Requested by aroben on
        #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-03-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT: AttributeError: TestRunner2 instance has no attribute '_cancel_workers'
        https://bugs.webkit.org/show_bug.cgi?id=55694
        
        Fixes for interruptions in NRWT:
        - Make TestRunInterruptedException be pickleable correctly (the base
          Exception class defines a __reduce__ that does not include the reason)
        - Fix ordering of returned arguments from TestRunner2._run_tests
          (interrupted and keyboard_interrupted were reversed)
        - Fix cancel_workers callsites (was using old name).
        - In handle_exception re-raise actual exception instance that was thrown

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-03-03  Qi Zhang  <qi.2.zhang@nokia.com>

        Unreviewed.

        Adding myself as a committer.

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

2011-03-03  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Mihai Parparita.

        Teach sheriffbot to answer whois commands
        https://bugs.webkit.org/show_bug.cgi?id=55687

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-03-03  Victoria Kirst  <vrk@google.com>

        Reviewed by Eric Carlson.

        Enable media tests in chromium-gpu/test_expectations
        https://bugs.webkit.org/show_bug.cgi?id=53608

        Add media folder to the list of GPU test paths.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-03-03  Adam Roben  <aroben@apple.com>

        Work around a bug in KURL's parsing of Windows-style absolute file: URLs

        Fixes <http://webkit.org/b/55674> Many tests fail in WebKit2 mode on Windows due to
        incorrect parsing of absolute Windows-style file: URLs

        Reviewed by Tim Hatcher.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL): Add a "localhost" host to file: URLs we create to work around
        <http://webkit.org/b/55683>.

2011-03-03  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Run kill-old-processes on the chromium-win bot too
        https://bugs.webkit.org/show_bug.cgi?id=55630

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/win/kill-old-processes: Add wdiff.exe to the kill list.

2011-03-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT needs implementation of EventSender.scheduleAsynchronousClick
        https://bugs.webkit.org/show_bug.cgi?id=53960

        * DumpRenderTree/gtk/EventSender.cpp:
        (sendClick):
        (scheduleAsynchronousClickCallback):

2011-03-03  Adam Roben  <aroben@apple.com>

        Look for Windows-style paths when checking whether a test is an Inspector test

        WTR part of <http://webkit.org/b/55672> <rdar://problem/9080867> All inspector tests time
        out or crash on Windows 7 Release (WebKit2 Tests)

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldOpenWebInspector): Also look for backslashes, since that's what we'll get on
        Windows.

2011-03-03  Adam Roben  <aroben@apple.com>

        Make Windows 7 Release (Tests) a core builder

        We can probably make Windows XP Debug (Tests) a core builder, too, but we should probably
        give it a few more days of greenness first.

        Fixes <http://webkit.org/b/55665> Windows 7 Release (Tests) should be a core builder

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot): Added a regexp to match Windows 7 Release (Tests).

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        (BuildBotTest): Updated the list of builders to match the current list on build.webkit.org.
        Updated the core regexps to match the buildbot module. Updated the expected results to match
        the current set of core builders.

2011-03-03  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Adding myself as a reviewer.

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

2011-03-03  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Xan Lopez.

        [GTK] Extended application cache database API and added unit tests file.
        https://bugs.webkit.org/show_bug.cgi?id=55335

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: removed external declaration
        of webkit_application_cache_set_maximum_size due to API exposal.

2011-03-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        make webkit-patch upload work for security bugs
        https://bugs.webkit.org/show_bug.cgi?id=55655

        The problem is that we shell out to prepare-ChangeLog,
        which does not authenticate with bugzilla. All it needs from
        bugzilla is the bug title though. We just pass it through from
        webkit-patch instead.

        * Scripts/prepare-ChangeLog:
        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2011-03-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [test-dashboard] make gtest JSON match layout-tests JSON
        https://bugs.webkit.org/show_bug.cgi?id=55556

        http://trac.webkit.org/changeset/80090 stopped converting time_ms to t.
        Make this code match.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2011-03-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        NRWT - implement Linux Hardy 64-bit port support. This involves
        adding support for non-'x86' architectures and updating the
        "deduplicate_tests" script to correctly understand that
        port.name() is not always equal to basename(port.baseline_path()).

        This change introduces two new port names: 'chromium-linux-x86'
        and 'chromium-linux-x86_64'. Using the prior 'chromium-linux'
        flag will cause the code to determine which one to use at
        runtime, just like we currently do with 'chromium-win'.

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

        * Scripts/webkitpy/common/system/executive_mock.py:
          Handle 'return_stderr' keyword arg to run_command()
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:

2011-03-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, make sure we put the wxWebKit dylib in the right directory and
        update symlinks accordingly.

        * wx/packaging/build-mac-installer.py:

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80139.
        http://trac.webkit.org/changeset/80139
        https://bugs.webkit.org/show_bug.cgi?id=55620

        failing and crashing tests on Snow Leopard bot (Requested by
        mihaip1 on #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2011-03-02  Adam Roben  <aroben@apple.com>

        Wait for force a paint in WebKitTestRunner until we're actually ready to dump the output

        This matches DumpRenderTree on Windows.

        Fixes <http://webkit.org/b/55469> <rdar://problem/9068539> REGRESSION (r79863): Lots of
        dom/html/level2/html/HTMLFrameElement*.html tests crashing in FrameView::paintOverhangAreas
        in WebKit2

        Reviewed by Beth Dakin.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump): Moved code to force a paint here...
        (WTR::InjectedBundlePage::didFinishLoadForFrame): ...from here.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Scripts/build-webkit:

2011-03-02  Adam Roben  <aroben@apple.com>

        Look in the new-to-SnowLeopard location for crash logs on SnowLeopard and newer

        ReportCrash saves logs to ~/Library/Logs/CrashReporter on Leopard, but to
        ~/Library/Logs/DiagnosticReports on SnowLeopard. old-run-webkit-tests was only looking in
        the former location, but was getting lucky on some SnowLeopard machines because symlinks
        were being created there pointing into DiagnosticReports. For machines without these
        symlinks, crash logs were not getting captured.

        Fixes <http://webkit.org/b/55607> old-run-webkit-tests doesn't capture crash logs on some
        SnowLeopard machines

        Reviewed by Eric Seidel.

        * Scripts/old-run-webkit-tests:
        (captureSavedCrashLog): Look in ~/Library/Logs/DiagnosticReports on SnowLeopard and newer.

2011-03-02  Adam Roben  <aroben@apple.com>

        Don't try to capture crash logs on platforms that haven't implemented that feature

        Fixes <http://webkit.org/b/55504> Use of uninitialized value in numeric lt (<) at
        Tools/Scripts/old-run-webkit-tests line 1778 seen on Qt bots after a crash

        Reviewed by Joseph Pecoraro.

        * Scripts/old-run-webkit-tests:
        (captureSavedCrashLog): Bail if we don't have a crash log glob.
        (findNewestFileMatchingGlob): Fix a buggy test for when no paths match the glob. This isn't
        strictly required to fix bug 55504, but seems worthwhile.

2011-01-26  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        Extend the layout test controller to expose the number of pending
        geolocation requests, so that we can test that the requests have
        been cancelled on page close.

        * DumpRenderTree/LayoutTestController.cpp:
        (numberOfPendingGeolocationPermissionRequestsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate numberOfPendingGeolocationPermissionRequests]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPendingGeolocationPermissionRequests):


2011-03-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Assertion fails when a form validation bubble appears
        https://bugs.webkit.org/show_bug.cgi?id=55550

        Test: fast/forms/interactive-validation-attach-assertion.html

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo): Enable the interactive validation feature by
          default. This matches to Chromium browser.

2011-03-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kent Tamura.

        Remove efl port style exception of Webcore/JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=55549

        WebCore and JavaScriptCore need to adhere WebKit coding style.

        * Scripts/webkitpy/style/checker.py:

2011-03-01  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] clean up temp files on chromium-mac builder too
        https://bugs.webkit.org/show_bug.cgi?id=55525

        * BuildSlaveSupport/chromium/remove-crash-logs:

2011-02-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        wrap json in a function call to afford cross-domain loading
        https://bugs.webkit.org/show_bug.cgi?id=55353

        Also delete the code that compacts the JSON. It turns out this
        breaks the rebaseline tool and is probably a premature optimization anyways.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80079.
        http://trac.webkit.org/changeset/80079
        https://bugs.webkit.org/show_bug.cgi?id=55547

        "Broke the Win debug build?" (Requested by dcheng on #webkit).

        * Scripts/build-webkit:

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Update verification scripts to handle WebKit2.

        * Scripts/check-for-global-initializers: Skip object files that use RefCountedLeakChecker.
        * Scripts/check-for-inappropriate-files-in-framework: Add some inappropriate file types for
        WebKit2.

2011-03-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Scripts/build-webkit:

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        All Console Messages should be passed to ChromeClients.
        https://bugs.webkit.org/show_bug.cgi?id=54926

        Update DumpRenderTree's UIDelegate to use the new console message delegate.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):

2011-03-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Tragically, we stopped running the python unit tests
        on Chromium Win just as I was getting them to be green.
        This patch turns them back on.

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

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

2011-03-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Disable
        webkitpy.common.system.executive_unittest.ExecutiveTest.\
           test_kill_all fails on win until it can be properly triaged.

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

        * Scripts/webkitpy/common/system/executive_unittest.py:

    2011-03-01  Helder Correia  <helder@sencha.com>

            Unreviewed. Add myself to committers.py.

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

2011-03-01  Adam Roben  <aroben@apple.com>

        Give up if a crash log for the web process is taking too long to be saved on Windows

        This should keep the bots from getting stuck while waiting for a crash log, if writing a
        crash log ever hangs or the UI process for some reason doesn't notice it's finished.

        Fixes <http://webkit.org/b/55499> WebKitTestRunner can hang forever waiting for a crash log
        to be saved for the web process

        Reviewed by Steve Falkenburg.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::runRunLoopUntil): Moved code to run the run loop here here from platformRunUntil.
        Generalized the code slightly to handle the optional object to wait on.
        (WTR::TestController::platformRunUntil): Use the new runRunLoopUntil function, and also use
        it (with a timeout) when waiting for a crash log for the web process to be saved. This will
        prevent us from waiting forever.

2011-03-01  Adam Roben  <aroben@apple.com>

        Give WebKitLauncherWin's PDB file a name different from WebKit's

        WebKitLauncherWin (which builds WebKit.exe) and WebKit (which builds WebKit.dll) were
        fighting over the same PDB file, meaning that one of them was going to lose and not have
        symbols. WebKitLauncherWin's PDB file is now named WebKitLauncherWin.pdb.

        Fixes <http://webkit.org/b/55495> Crashes in WebKit.dll have bad backtraces for some test
        runs (due to missing symbols)

        Reviewed by David Kilzer.

        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Use the project name,
        "WebKitLauncherWin", instead of the target name, "WebKit", when naming the PDB file.

2011-03-01  Adam Roben  <aroben@apple.com>

        Count web process crashes toward the --exit-after-n-crashes-or-timeouts limit

        Fixes <http://webkit.org/b/55492> Web process crashes aren't counted toward the
        --exit-after-n-crashes-or-timeouts limit

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (stopRunningTestsEarlyIfNeeded): Include web process crashes in the computation, and print
        the number of tests that caused the web process to crash when exiting early.

2011-03-01  Adam Roben  <aroben@apple.com>

        Save a crash log when the web process crashes

        On Windows, WebKitTestRunner now detects when the web process is crashing and waits to exit
        until it has finished crashing, which guarantees that the crash log will have had time to be
        saved, too. On Mac, we always wait until ReportCrash has exited before capturing the crash
        log, so all we have to do is choose the right crash log out of the CrashReporter directory.

        Fixes <http://webkit.org/b/44121> <rdar://problem/8320759> When the web process crashes and
        a crash log is being saved, WebKitTestRunner thinks the web process has become unresponsive

        Reviewed by Sam Weinig.

        * Scripts/old-run-webkit-tests:
        (testCrashedOrTimedOut): Don't kill WebKitTestRunner when the web process crashes. It will
        kill itself. On Windows, this will cause us to wait until the crash log has been saved. On
        Mac, it should have no effect. Capture saved crash logs for web process crashes, too.
        (captureSavedCrashLog): Added $webProcessCrashed argument. On Mac, look for
        WebProces_*.crash files when the web process crashes.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize): Added an initializationUserData argument. Updated for
        initializePlatformDefaults -> platformInitialize rename. Pass the initializationUserData
        along to platformInitialize.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: See above.

        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        (WKBundleInitialize): Pass along the initializationUserData to the InjectedBundle.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WTR::InjectedBundle::platformInitialize):
        Updated function signature.

        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp:
        (WTR::exceptionFilter): Added. Tells the UI process we're crashing by signaling the
        webProcessCrashingEvent, then lets the crash continue as normal.

        (WTR::InjectedBundle::platformInitialize): Hook up exceptionFilter. Retrieve the name of the
        event we should use to tell the UI process we're crashing from the initializationUserData,
        and get a handle to that event.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize new members.
        (WTR::TestController::processDidCrash): Removed unnecessary WKPageRef argument. Changed to
        only print the "#CRASHED - WebProcess" message once, since this can be called more than once
        when a crash log is being saved on Windows. Exit right away if specified. (This is the
        default.)

        * WebKitTestRunner/TestController.h: Added new members.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize): Set up the event the web process will use to tell
        us it's crashing.
        (WTR::TestController::platformRunUntil): Pass MWMO_INPUTAVAILABLE to
        ::MsgWaitForMultipleObjectsEx so we'll process messages that have already been seen by
        ::PeekMessage. (This is unrelated to the bug fix.) Notice when the webProcessCrashingEvent
        has been signaled. When this happens, print the "#CRASHED - WebProcess" message right away
        so the test harness will know the web process has crashed and not try to kill us, then wait
        for the web process to finish crashing so a crash log will have time to be saved.
        (WTR::toWK): Simple hepler function.
        (WTR::TestController::platformInitializeContext): Pass along the name of the event the web
        process should use to tell us it is crashing in the context's initialization user data.

2011-03-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Tony Gentilcore.

        Move the checks to exclude Python/Perl tests for Chromium Win build to the right place.
        https://bugs.webkit.org/show_bug.cgi?id=55476

        Chromium Win uses BuildAndTestFactory, not TestFactory.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Moved to the right place.

2011-03-01  Adam Roben  <aroben@apple.com>

        Test that the WebKit2 responsiveness timer doesn't fire too early

        Test for <http://webkit.org/b/55417> <rdar://problem/9065287> RunLoop::Timer fires 1000x too
        early on Windows

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/PlatformUtilities.h: Added sleep().

        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::processDidBecomeUnresponsive):
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::setPageLoaderClient):
        Simple helper functions.

        (TestWebKitAPI::TEST): Load an HTML file to make sure the web process is initialized. Then
        tell the web process to pause and press the spacebar key. The spacebar keypress should cause
        the responsiveness timer to start, but the web process should unpause before it has a chance
        to fire. Run until the web process has unpaused, and assert that the timer didn't fire.

        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly_Bundle.cpp: Added.
        (TestWebKitAPI::ResponsivenessTimerDoesntFireEarlyTest::ResponsivenessTimerDoesntFireEarlyTest):
        Call up to the base class.
        (TestWebKitAPI::ResponsivenessTimerDoesntFireEarlyTest::didReceiveMessage): When asked to
        pause, sleep for 0.5 seconds, then send back a message saying we paused.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::sleep): Added. Calls through to usleep.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::sleep): Added. Calls through to ::Sleep.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:
        Added new files.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        * WebKitTestRunner/qt/WebKitTestRunner.pro: Deduplicate.


2011-03-01  Adam Roben  <aroben@apple.com>

        Skip another multiprocessing test on Windows

        It is sometimes failing (and may be leaving child Python processes around).
        <http://webkit.org/b/55087> tracks the failure.

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        (FuncitonTests.test_get__processes): Skip this test on Windows.

2011-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: reduce inspector tests flakiness.
        https://bugs.webkit.org/show_bug.cgi?id=55401

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):

2011-02-28  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        NRWT should still upload results when it exits early due to too many failures
        https://bugs.webkit.org/show_bug.cgi?id=55432
        
        Only keyboard interrupts should prevent results from being uploaded.

        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        Test for https://bugs.webkit.org/show_bug.cgi?id=54898
        InjectedBundleNodeHandle dies too early in WKBundleHitTestResultGetNodeHandle.

        * TestWebKitAPI/InjectedBundleController.h:
        (TestWebKitAPI::InjectedBundleController::bundle):
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp: Added.
        (TestWebKitAPI::HitTestResultNodeHandleTest::HitTestResultNodeHandleTest):
        (TestWebKitAPI::HitTestResultNodeHandleTest::getContextMenuFromDefaultMenu):
        (TestWebKitAPI::HitTestResultNodeHandleTest::didCreatePage):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        
        Added files to:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj:

2011-02-28  Adam Roben  <aroben@apple.com>

        Start running InjectedBundle API tests on Windows

        A new project, TestWebKitAPIInjectedBundle, builds the injected bundle DLL.

        Fixes <http://webkit.org/b/55420> run-api-tests doesn't run injected bundle tests on Windows

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/TestWebKitAPIDebug.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebugAll.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIDebugCairoCFLite.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIRelease.vsprops: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPIReleaseCairoCFLite.vsprops: Added.
        These are just extracted from TestWebKitAPI.vcproj.

        * TestWebKitAPI/Configurations/TestWebKitAPIInjectedBundleCommon.vsprops: Added. Just sets
        up the DLL's filename.

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Fixed DLL name.
        (TestWebKitAPI::Util::createInjectedBundlePath): Changed to use kCFAllocatorNull instead of
        0 (== kCFAllocatorDefault) so that CF won't try to deallocate our C string.

        * TestWebKitAPI/win/TestWebKitAPI.sln: Added TestWebKitAPIInjectedBundle. Removed the bogus
        "all" configuration.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Changed to use the new .vsprops files. Added
        injected bundle tests. Let VS resort things.

        * TestWebKitAPI/win/TestWebKitAPIInjectedBundle.vcproj: Copied from Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj.

2011-02-28  Adam Roben  <aroben@apple.com>

        Add a test for the paint rect passed via WM_PAINT to windowless plugins

        Test for <http://webkit.org/b/55365> <rdar://problem/9031089> REGRESSION (r79040): WebKit2:
        Large portions of pages with plugins paint black

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_HandleEvent):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Added NPP_HandleEvent. Just returns 0 at this level.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowlessPaintRectCoordinates.cpp: Added.
        (WindowlessPaintRectCoordinates::WindowlessPaintRectCoordinates): Call up to the base class.
        (WindowlessPaintRectCoordinates::NPP_New): Mark ourselves as windowless.
        (WindowlessPaintRectCoordinates::NPP_HandleEvent): Check that the paint rect passed via
        WM_PAINT has the expected coordinates.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_HandleEvent): Give the PluginTest a chance to handle the event before doing anything
        else.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added new file, let VS
        resort things.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Added a call to WKBundlePageForceRepaint.
        This is roughly equivalent to the call to -[WebView displayIfNeeded] in -[FrameLoadDelegate
        webView:didFinishLoadForFrame:] in DumpRenderTree.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): Tell the WKView it's in a window so that plugins
        can start running.

2011-02-28  Adam Roben  <aroben@apple.com>

        Tell MiniBrowser's WKViews that they're in a window

        Fixes <http://webkit.org/b/55364> Plugins don't work in MiniBrowser on Windows

        Reviewed by Anders Carlsson.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Call WKViewSetIsInWindow after creating the view.

2011-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        The new QML tests require QML_IMPORT_PATH variable to be set in order to
        load the proper plugin.

        * Scripts/run-qtwebkit-tests:

2011-02-28  Joone Hur  <joone.hur@collabora.co.uk>

        Unreviewed, fix spelling mistake.

        hardware-accelated => hardware-accelerated.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-02-28  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        Made sure that the build-webkit --qmake argument is always respected.

        Previously, it would be respected during the build, but not during
        the early feature detection. The build would also fail if qmake was
        not in your path, even if you specified --qmake with a valid qmake
        binary.

        [Qt] WebKit patches required to work with a modularized version of Qt
        https://bugs.webkit.org/show_bug.cgi?id=53916

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2011-02-27  Ojan Vafai  <ojan@chromium.org>

        Fix failing tests from http://trac.webkit.org/changeset/79837.

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        This was just a mistake that would break if someone tried printing with this configuration.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        Method signature changed. Didn't notice that this method was being calling in a unittest.

2011-02-24  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        [NRWT] Remove test_types/* classes.

        This is the last patch in the series of efforts which tried to remove test_types classes.
        A single_test_runner module will take over responsibilities of test_type classes.

        From this patch, we won't display statistics per test_type even if a '--verbose' option is given.

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

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:
        * Scripts/webkitpy/layout_tests/test_types/__init__.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py: Removed.

2011-02-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        Change results.json format to the one used by unexpected_results.json
        https://bugs.webkit.org/show_bug.cgi?id=52267

        Also add runtimes in milliseconds to the JSON and make the output format more compact.
        Named the file full_results.json to avoid conflicting with the results.json
        file the test-results server currently serves up.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:

2011-02-27  Adam Roben  <aroben@apple.com>

        Followup fix to r79827

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Replaced call to urlSuitableForTestResult with
        lastPathComponent. This matches what we did here before r79827, and matches Mac.

2011-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Make bisect-builds print a trac link for the regression range
        https://bugs.webkit.org/show_bug.cgi?id=55331

        * Scripts/bisect-builds:

2011-02-27  Adam Roben  <aroben@apple.com>

        Use iswalpha instead of isalpha when dealing with wchar_ts in EditingDelegate

        Fixes <http://webkit.org/b/55062> <rdar://problem/9059907> Crash beneath
        EditingDelegate::checkSpellingOfString when running fast/forms/input-text-maxlength.html or
        fast/forms/input-text-paste-maxlength.html on Windows with full page heap enabled

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/EditingDelegate.cpp:
        (indexOfFirstWordCharacter):
        (wordLength):
        Use iswalpha instead of isalpha, since TCHAR is really just wchar_t.

2011-02-27  Adam Roben  <aroben@apple.com>

        Make ResourceLoadDelegate print URLs relative to the main resource on Windows

        This matches Mac. (In fact, the code was ported from Mac!)

        Fixes <http://webkit.org/b/55328> URLs printed by ResourceLoadDelegate on Windows don't
        match Mac

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (substringFromIndex): Added. Emulates -[NSString substringFromIndex:].
        (urlSuitableForTestResult): Ported code from -[NSURL(DRTExtras)
        _drt_descriptionSuitableForTestResult].
        (cfStringRefToWString): Moved here from LayoutTestControllerWin.cpp.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Added declaration of cfStringRefToWString.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Moved cfStringRefToWString to
        DumpRenderTree.cpp.

2011-02-27  Adam Roben  <aroben@apple.com>

        Change the order of Chang Shu's email addresses so the first one is their Bugzilla username

        This makes Bugzilla autocompletion work correctly.

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

2011-02-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] fast/loader/user-stylesheet-fast-path.html fails
        https://bugs.webkit.org/show_bug.cgi?id=50911

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setUserStyleSheetLocation):
        Use QUrl::fromEncoded since the passed string is already encoded.

2011-02-27  Adam Roben  <aroben@apple.com>

        Ensure $testResultsDirectory is an absolute path before setting up Windows crash log saving

        Windows 7 (and maybe Vista?) launches the post-mortem debugger with a working directory that
        is different from old-run-webkit-test's. Because of this, the path to the crash log file
        (which is relative to $testResultsDirectory) must be an absolute path. See the bug for more
        details.

        Fixes <http://webkit.org/b/55318> Crash logs aren't saved on Windows 7 when a relative
        --results-directory path is used (like on the test slaves)

        Reviewed by Dan Bernstein.

        * Scripts/old-run-webkit-tests: Moved the call to setUpWindowsCrashLogSaving after we've
        made $testResultsDirectory an absolute path.

2011-02-26  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Adam Barth.

        m_dumpAccessibilityNotifications should be initialized.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener() calls between tests.
        Some tests are using window.open() to change current window location.
        This changes window.opener property whose nullity is checked before
        showing xml viewer.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-26  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix the focus in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=55288

        Give focus to the web view when a load starts.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::urlChanged):

2011-02-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Adam Barth.

        [EFL] Add coding style exceptions for EFL port
        https://bugs.webkit.org/show_bug.cgi?id=54733

        The EFL APIs use EFL naming style, which includes both lower-cased and camel-cased,
        underscore-sparated values. But, style checking rule have found parameter_name errors
        in efl directories so far.

        * Scripts/webkitpy/style/checker.py: Add prameter_name rule's exception and efl directories.

2011-02-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        check-webkit-style should check for spaces after periods in comments
        https://bugs.webkit.org/show_bug.cgi?id=55253

        * Scripts/webkitpy/style/checkers/cpp.py: Added the check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests
          and fixed the name of one related test.

2011-02-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make it possible to test the targetdensity-dpi support
        https://bugs.webkit.org/show_bug.cgi?id=55142

        Test the viewport meta tag feature targetdensity-dpi by
        adding extra arguments to dumpConfigurationForViewport

        Add the new arguments to the shared header and all
        implementation.

        * DumpRenderTree/LayoutTestController.cpp:
        (dumpConfigurationForViewportCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by David Kilzer.

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

        Add a resource load delegate method to query if WebCore should paint the default broken image for failed images.

        Add a new resource load client method (shouldPaintBrokenImage).  WebKit client can decide if WebCore
        should paint the default broken image when an image fails to load or decode.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setShouldPaintBrokenImageCallback):
        (LayoutTestController::staticFunctions):
        (LayoutTestController::setShouldPaintBrokenImage):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::shouldPaintBrokenImage):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:shouldPaintBrokenImageForURL:]):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener() calls between tests.
        Some tests are using window.open() to change current window location.
        This changes window.opener property whose nullity is checked before
        showing xml viewer.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-25  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Added EWebLauncher command line option to turn on/off frame flattening
        https://bugs.webkit.org/show_bug.cgi?id=54809

        * EWebLauncher/main.c: Handling -f option added.
        (on_key_down):
        (browserCreate):
        (main):

2011-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79324.
        http://trac.webkit.org/changeset/79324
        https://bugs.webkit.org/show_bug.cgi?id=55260

        Leopard Debug is once again running out of address space while
        linking (Requested by aroben on #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-25  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        Clean up temp files left by crashing DRTs on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=55182

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * BuildSlaveSupport/chromium/remove-crash-logs: Added.

2011-02-25  Adam Roben  <aroben@apple.com>

        Double-check that modifying the registry worked

        On Windows Vista/7 with UAC enabled, regtool will fail to modify the registry, but it will
        still return a successful exit code. So we double-check here that the value we tried to
        write to the registry was really written.

        Fixes <http://webkit.org/b/55227> old-run-webkit-tests falsely claims to be saving crash
        logs on Windows Vista/7

        Reviewed by Darin Adler.

        * Scripts/old-run-webkit-tests:
        (writeRegistryString): After trying to write the string value, check that it was really
        written.

2011-02-25  Adam Roben  <aroben@apple.com>

        Set the 32-bit post-mortem debugger on 64-bit OSes

        The post-mortem debugger is controlled by some registry values in
        HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug. On 64-bit OSes, you can either
        set the values in that key, which will be used for 64-bit apps, or in the equivalent key
        under Wow6432Node, which will be used for 32-bit apps. Since DumpRenderTree and
        WebKitTestRunner are 32-bit, we want to use the latter location.

        Fixes <http://webkit.org/b/55225> old-run-webkit-tests sets the post-mortem debugger for
        64-bit apps, but should set it for 32-bit apps instead

        Reviewed by Darin Adler.

        * Scripts/old-run-webkit-tests:
        (readRegistryString):
        (writeRegistryString):
        Pass --wow32 to regtool so it will get/set values beneath Wow6432Node, which is where
        Windows looks for the post-mortem debugger values when a 32-bit app crashes on a 64-bit OS.
        Passing --wow32 on a 32-bit OS will not have any effect.

2011-02-25  Adam Roben  <aroben@apple.com>

        Clean up code to set up crash log saving on Windows

        Fixes <http://webkit.org/b/55224> old-run-webkit-test's Windows registry code is ugly

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (readRegistryString):
        (writeRegistryString):
        Moved code to read strings from and write strings to the registry here...

        (setUpWindowsCrashLogSaving): ...from here.

2011-02-25  Adam Roben  <aroben@apple.com>

        Work around Cygwin's crash-suppression behavior

        Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
        inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
        invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
        when our test apps launch to work around Cygwin's behavior.

        Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
        debugger) when launched from Cygwin 1.7

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * TestWebKitAPI/win/main.cpp:
        (main):
        * WebKitAPITest/main.cpp:
        (main):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize):
        Call ::SetErrorMode(0) to undo Cygwin's folly.

2011-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Revert the support for QNAM affined to a different thread.
        https://bugs.webkit.org/show_bug.cgi?id=55149

        Qt 4.8 will have QNAM use its own thread internally by default,
        no need to keep this complexity in WebKit.

        This mainly reverts:
        http://trac.webkit.org/changeset/73710
        http://trac.webkit.org/changeset/73712

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        * QtTestBrowser/webpage.h:

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a script for creating gypi files
        https://bugs.webkit.org/show_bug.cgi?id=55113

        This is a trivial script to create gypi files from the source code in
        the current directory.

        * Scripts/make-gypi: Added.

2011-02-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79628.
        http://trac.webkit.org/changeset/79628
        https://bugs.webkit.org/show_bug.cgi?id=55195

        "broke chromium win tests" (Requested by dpranke on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-02-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        rebaseline-chromium-webkit-tests can't handle GPU variants
        https://bugs.webkit.org/show_bug.cgi?id=55002

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-02-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        nrwt: log command used to start web server to --verbose

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

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Victoria Kirst  <vrk@google.com>

        Reviewed by Mihai Parparita.

        [chromium] Move media-file.js and video-test.js back to media/ for UILayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=55089

        This adds an alias into the media/ directory so that http/tests/media
        tests can access the media resources when running in an httpd process.

        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Mihai Parparita.

        nrwt: enable multiple processes by default on Chromium Win.

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

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:

2011-02-24  Sam Weinig  <sam@webkit.org>

        Attempt to fix Qt.

        * WebKitTestRunner/TestInvocation.cpp:

2011-02-24  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79598.
        http://trac.webkit.org/changeset/79598
        https://bugs.webkit.org/show_bug.cgi?id=55089

        Appears to be causing trouble with httpd on windows

        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add basic pixel testing support to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=55161

        * Scripts/old-run-webkit-tests:
        Don't print color space information when using WebKitTestRunner since
        we don't need to change the screen.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        Add call to initializePlatformDefaults.
        
        (WTR::InjectedBundle::done):
        Return a dictionary on completion with both the text output and pixel dump override.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        Add declaration for initializePlatformDefaults.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        (WTR::LayoutTestController::dumpAsText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpPixels):
        Make setting dumpAsText override the dump pixels preference.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm: Added.
        (WTR::InjectedBundle::initializePlatformDefaults):
        Set platform defaults matching DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp: Added.
        (WTR::InjectedBundle::initializePlatformDefaults):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Added.
        (WTR::InjectedBundle::initializePlatformDefaults):
        Add stubs for initializePlatformDefaults.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):
        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::run):
        Parse expected pixel results out of stdin and setup the invocation with it.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        Initialize new members.

        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::setIsPixelTest):
        (WTR::sizeWebViewForCurrentTest):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        Dump pixels in addition to text by calling dumpPixelsAndCompareWithExpected.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Use -[NSColorSpace genericRGBColorSpace] instead of the main screen color space.

        * WebKitTestRunner/mac/TestInvocationMac.mm: Added.
        (WTR::createCGContextFromPlatformView):
        (WTR::computeMD5HashStringForContext):
        (WTR::dumpBitmap):
        (WTR::forceRepaintFunction):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        Add mac specific pixel dumping support. Right now, we always pull pixels
        from the window server.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Add new files.

2011-02-24  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Launch MiniBrowser if the test run is WebKit2. 
        https://bugs.webkit.org/show_bug.cgi?id=55145

        * Scripts/old-run-webkit-tests:
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:

2011-02-24  Victoria Kirst  <vrk@google.com>

        Reviewed by Mihai Parparita.

        [chromium] Move media-file.js and video-test.js back to media/ for UILayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=55089

        This adds an alias into the media/ directory so that http/tests/media
        tests can access the media resources when running in an httpd process.

        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-24  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] add android 2.2 user agent to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=55085

        Credit to Forrest Hodgkins to find right user-agent which works for youtube.
        * QtTestBrowser/useragentlist.txt:

2011-02-24  Adam Roben  <aroben@apple.com>

        Change FrameLoadDelegate to support any number of delegates with delayed work to process

        This makes our behavior match Mac more closely, and allows us to remove an incorrect
        assertion that was firing during some tests. (The assertion was claiming that there was
        never more than one delegate with delayed work to process, but that was not the case.)

        Fixes <http://webkit.org/b/55146> Assertion failure in FrameLoadDelegate::locationChangeDone
        when running http/tests/navigation/back-twice-without-commit.html

        Reviewed by Eric Carlson.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (delegatesWithDelayedWork): Added. Returns all FrameLoadDelegates that have delayed work to
        process. A single delegate may appear in this Vector more than once (just as, on Mac, a
        single delegate may have multiple performSelector requests).
        (processWorkTimer): Pass the HWND to ::KillTimer, for pedantic brownie points. Added an
        assertion that the timer firing is the shared process work timer. Instead of using the
        single, global "delegate waiting for timer" delegate, give all delegates that have delayed
        work to process a chance to process their work.
        (FrameLoadDelegate::locationChangeDone): If we don't already have an active timer for
        processing delayed work, create one. Then add ourselves to the delegatesWithDelayedWork
        Vector so our processWork function will be called when the timer fires.

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener() calls between tests.
        Some tests are using window.open() to change current window location.
        This changes window.opener property whose nullity is checked before
        showing xml viewer.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2011-02-24  Adam Roben  <aroben@apple.com>

        Don't trigger Windows builds for changes to WebCore.exp.in or the top-level GNUmakefile.am

        Fixes <http://webkit.org/b/55144> Windows builders should not have built r79343 or r79440,
        but did

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Loosened the pattern for GNUmakefile.am to include the
        top-level GNUmakefile.am, and loosened the pattern for .exp files to include WebCore.exp.in.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added some more tests.

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-02-24  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Remove ARMv5 Release buildbot.

        Remove ARMv5 Release buildbot, because there is very little difference
        between ARMv5 and ARMv7 Release bots, and there is also very little
        interest in ARMv5 build slave (compared to ARMv7).

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        fix revision number finding when creating git patches
        https://bugs.webkit.org/show_bug.cgi?id=55024

        HEAD~n does not walk merge commits correctly. git log however does.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-02-23  Kenneth Russell  <kbr@google.com>

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

        Reapply the code changes from r79038 since they weren't the root
        cause of the test timeouts.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Make sure Symbian binary UIDs are unique

        * MiniBrowser/qt/MiniBrowser.pro: Resolve the UID collision with
        QtTestBrowser.pro by changing the UID.

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * DumpRenderTree/config.h:

2011-02-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt: turn on multiprocessing on chromium_linux, clean up unit tests for worker model defaults
        https://bugs.webkit.org/show_bug.cgi?id=55016

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-02-23  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] DumpRenderTree --check-layout-test-sys-deps leaks 4 temp dirs
        https://bugs.webkit.org/show_bug.cgi?id=55004

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (WebKitSupportTestEnvironment::WebKitSupportTestEnvironment):
        (WebKitSupportTestEnvironment::~WebKitSupportTestEnvironment):
        (main): Use a C++ object to ensure that TearDownTestEnvironment
            gets called when --check-layout-test-sys-deps is called

2011-02-23  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        Reviewed by Anders Carlsson.

        [Qt] [Qt] check webkit style fails in qt/tests
        https://bugs.webkit.org/show_bug.cgi?id=54998

        check-webkit-style was complaining about missing config.h in WebKit/qt/test/qdeclarativewebview. This patch was originally part of 50222. Reviewer suggested to split and create a separate patch for checker.

        * Scripts/webkitpy/style/checker.py:

2011-02-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should dump as text if test path contains "dumpAsText/"
        https://bugs.webkit.org/show_bug.cgi?id=54873

        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShouldDumpAsText):
        (LayoutTestController::setShouldGeneratePixelResults):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::runFileTest):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldDumpAsText):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldDumpAsText):
        (runTest):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::isDumpAsTextTest):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldDumpAsText):
        (runTest):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):

2011-02-22  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Many tests started timing out on the chrome mac canaries around r79035
        https://bugs.webkit.org/show_bug.cgi?id=54885

        Revert the code changes, but not the Chromium DEPS roll, from
        r79038 to see whether this clears up the timing-out tests. Was not
        able to reproduce the timeouts locally with a Release mode build
        of DRT (on Snow Leopard).

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2011-02-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        nrwt: --platform chromium-gpu doesn't work with --worker-model=processes
        https://bugs.webkit.org/show_bug.cgi?id=55009

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:

2011-02-18  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Default to 500 for --exit-after-n-failures
        https://bugs.webkit.org/show_bug.cgi?id=54773

        Make 500 the default value for --exit-after-n-failures (ORWT bots
        already default to this as of r75726). Similarly, change the default for
        --exit-after-n-crashes-or-timeouts to 20.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-02-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT needs an implementation of LayoutTestController.setSelectTrailingWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=53603

        Add support for LayoutTestController.setSelectTrailingWhitespace by calling through
        to DumpRenderTreeSupportGtk for this functionality.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Always call LayoutTestController.setSelectTrailingWhitespace to
        false when reseting values between tests.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSelectTrailingWhitespaceEnabled): Call LayoutTestController.setSelectTrailingWhitespace
        with the appropriate value.

2011-02-22  Adam Roben  <aroben@apple.com>

        Don't trigger a Windows build when the top-level ChangeLog changes

        r79320 is an example of a change that shouldn't have built on Windows, but did, because of
        this bug.

        Fixes <http://webkit.org/b/54957> Windows bots build when top-level ChangeLog changes, but
        shouldn't

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Modified the ChangeLog pattern to match the top-level
        ChangeLog, and re-sorted it in the list.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added a test that ChangeLogs don't trigger builds.

2011-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r78691.
        http://trac.webkit.org/changeset/78691
        https://bugs.webkit.org/show_bug.cgi?id=54956

        Leopard Debug is successfully building again (Requested by
        aroben on #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: flakyness of inspector tests.
        https://bugs.webkit.org/show_bug.cgi?id=54729

        As far as we have the protocol with sequence numbers we can simplify test harness support
        and drop out chomium specific methods.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::sendMessageToInspectorFrontend):
        (DRTDevToolsAgent::runtimePropertyChanged):
        (DRTDevToolsAgent::asyncCall):
        (DRTDevToolsAgent::call):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp: Removed.
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h: Removed.
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::sendMessageToBackend):
        (DRTDevToolsClient::asyncCall):
        (DRTDevToolsClient::call):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Remove superfluous includepaths.

2011-02-21  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Restored spatial navigation option in EWebLauncher since #18662 bug is closed
        https://bugs.webkit.org/show_bug.cgi?id=54806

        * EWebLauncher/main.c:
        (on_key_down): calling ewk_view_setting_spatial_navigation_set when "F12" pressed added.

2011-02-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kent Tamura.

        nrwt: revert behavior on 10.5 to "old-threads". It's possible
        that r79062 has introduced a bunch of flakiness, although I
        can't explain why right now. This change should restore the
        old behavior, and then we can look at the build logs to see
        if the tests stop timing out or being flaky.

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

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-02-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        nrwt: fix typo causing us to try and repeatedly shut down the servers
        https://bugs.webkit.org/show_bug.cgi?id=54904

        * Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:

2011-02-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Csaba Osztrogonác.

        REGRESSION(r79157):
        plugins/get-url-with-javascript-destroying-plugin.html make the
        next test crash
        https://bugs.webkit.org/show_bug.cgi?id=54863

        * GNUmakefile.am:

2011-02-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        test-webkitpy: stop skipping a bunch of tests on win32
        https://bugs.webkit.org/show_bug.cgi?id=54788

        * Scripts/webkitpy/common/net/testoutputset_unittest.py:
        * Scripts/webkitpy/test/main.py:

2011-02-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Fix various bugs related to handling of dir separators and real
        vs. fake filesystems that were causing test-webkitpy to fail
        tests on win32. These bugs have a variety of causes but are
        lumped together because they should be easy to review.

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

        * Scripts/webkitpy/common/net/testoutput.py:
          Here we were using os.path.sep but not escaping it prior to
          using in a regexp, which  caused bad things on win32.
        * Scripts/webkitpy/common/net/testoutput_unittest.py:
          Same here.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
          Here we were using the native filesystem instead of the mock
          filesystem, making some tests unnecessarily platform dependent.
          Also we weren't setting the default configuration for the
          TestChromiumWinPort.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py:
          Here we *shouldn't* use os.path.join(), just so the code becomes
          less platform dependent.
        * Scripts/webkitpy/style/checker.py:
          Here we should be using os.path.sep instead of "/"; the tests
          require the native filesystem.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
          Here the underlying code is using os.path.sep, so we probably
          should as well.
        * Scripts/webkitpy/style/test_expectations_unittest.py:
          Here we should be using the filesystem hanging of the port
          object (which is the mocked filesystem) rather than the native
          one.

2011-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash when a plug-in requests a javascript: url that destroys the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54837
        <rdar://problem/9005475>

        Add new plug-in test.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetURL):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetURLWithJavaScriptURLDestroyingPlugin.cpp: Added.
        (GetURLWithJavaScriptURLDestroyingPlugin::GetURLWithJavaScriptURLDestroyingPlugin):
        (GetURLWithJavaScriptURLDestroyingPlugin::NPP_New):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Make WinCE a core builder
        https://bugs.webkit.org/show_bug.cgi?id=54801

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-02-19  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Andreas Kling.

        Fixed problem with launching EWebLauncher with "run-launcher --efl". Incorrect path referring to non-existing .libs directory ws set.
        https://webkit.org/b/54778

        * Scripts/webkitdirs.pm:

2011-02-18  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: Misses brace style error when the line with the { has a } in it.
        https://bugs.webkit.org/show_bug.cgi?id=54769

        * Scripts/webkitpy/style/checkers/cpp.py: Fixed the check for the close brace
          to only look after the last open brace, so that the open brace in this line
          "} else {" will still be able to trigger the error.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added related unit tests.

2011-02-18  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] Re-enable meter tag support
        https://bugs.webkit.org/show_bug.cgi?id=54762

        Meter tag is supported on the Gtk port, enable it by default.

        * Scripts/build-webkit:

2011-02-18  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style falsely complains about WebKitGTK+ public headers
        https://bugs.webkit.org/show_bug.cgi?id=54650

        * Scripts/webkitpy/style/checker.py: Add some exceptions for the gtk files.
        * Scripts/webkitpy/style/checkers/cpp.py: Restrict the checks for WEBKIT_API
          to the chromium directory (and improved the checks slightly).
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added corresponding tests.

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests: enable multiple processes by default on
        mac. This change removes the artificial restrictions we placed
        on the # of child processes we used with the old threading
        model, and switches to the new message-based model and multiple
        processes, where available. If multiple processes are not
        available (Leopard / Python 2.5), then we use the 'inline' model
        instead of the 'old-threads' model on the 'mac' port or one
        process on the 'chromium-mac' port. We need additional testing
        to see if the new 'threads' model works reliably and is worth
        supporting, or if we should just live with things being slightly
        slow.

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

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-18  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79047.
        http://trac.webkit.org/changeset/79047
        https://bugs.webkit.org/show_bug.cgi?id=54596

        Broke canary bots - please watch the canaries the next time
        you land this

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-02-18  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Crash in EventHandler::sendContextMenuEventForKey
        https://bugs.webkit.org/show_bug.cgi?id=54495

        Add support for the context menu key (VK_APPS) to EventSender for
        platforms that support the key.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown):
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: enable multiple processes by default on mac
        https://bugs.webkit.org/show_bug.cgi?id=54596

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Skip pretty patch unit tests if ruby isn't installed.

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

        * Scripts/webkitpy/common/prettypatch_unittest.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Skip mac.test_skipped_file_paths() when running on win32; the
        test has hardcoded '/' directory separators and since it's a
        port-specific test and we have coverage on other ports it's not
        worth it to make the test more generic.

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

        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Fix webkitpy.layout_tests.port.config_unittest to work on Win32.

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

        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Change the default port we're mocking out on win32 when we
        run mock_drt_unittest. Normally we'd default to the
        port-specific default, but that would be "win", which doesn't
        currently work.

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

        * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:

2011-02-18  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Clean up initialization of minimum timer interval
        https://bugs.webkit.org/show_bug.cgi?id=54772

        Use new GetForegroundTabTimerInterval function in webkit_support
        to reset the minimum timer interval before each test.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        r78494 fixed the chromium_win unittest failing under win32,
        but not cygwin. This fixes cygwin as well.

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

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2011-02-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai, Mihai Parparita.

        new-run-webkit-tests: r78522 made it impossible to create a
        'chromium-win' or 'chromium-mac' port; they would always get the
        version tacked on to the end. It turns out that we actually need
        to be able to create these ports in order for
        rebaseline-chromium-webkit-tests to work correctly given the
        broken coverage of our layout bots. As soon as we get SL and
        Win 7 bots running reliably on the canaries, we can get rid of
        this change. Note that we only need to change the chromium_mac
        and win ports because linux doesn't yet use versions and that
        script doesn't work with non-chromium ports.

        Also, this change fixes a bug where we were using
        "platform/chromium-win-win7" and
        "platform/chromium-mac-snowleopard" as the baseline dirs for
        Win 7 and SL; we should've been using the generic directories
        instead since they are the newest versions of the os's.

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

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2011-02-16  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium][DRT] some PostDelayedTask() accesses possibly dangling this pointer.
        http://webkit.org/b/53899

        Replaced static invocation wrappers with MethodTask objects,
        which are removed on WebViewHost destructor.
        
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::requestCheckingOfText):
        (WebViewHost::scheduleAnimation):
        (WebViewHost::closeWidgetSoon):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::HostMethodTask::HostMethodTask):
        (WebViewHost::HostMethodTask::runIfValid):
        (WebViewHost::taskList):

2011-02-07  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ojan Vafai.

        Get rid of code which writes test results from test_type's
        compare_output() method.
        Writing test results now happens in single_test_runner, using
        newly introduced test_result_writer module.

        Subsequent patches will eliminate test_type/* classes.

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

        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Add blacklist of remaining webkitpy/* modules that fail on
        Win32, so that test-webkitpy will at least run cleanly.

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

        * Scripts/webkitpy/layout_tests/test/main.py:

2011-02-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Set a preference to ensure that scrollbars are in a predictable
        state for DRT.

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

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        test-webkitpy doesn't work with the multiprocessing module on win32
        or cygwin, so we skip it for now.

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

        * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/run_webkit_tests_unittest.py:

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Fix version, baseline_search_path for chromium-win-win7. Also
        fix chromium_win_unittests, and fix port_testcase.make_port()
        to correctly use the options passed into it and only set
        results_directory() if necessary.

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

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2011-02-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Fix a hang in new-run-webkit-tests when run with
        --dry-run --worker-model=processes

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

        * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-02-17  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMinimumTimerInterval):
        * wx/build/settings.py:

2011-02-17  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] ImageDiff sometimes hangs
        https://bugs.webkit.org/show_bug.cgi?id=54641

        * DumpRenderTree/qt/ImageDiff.cpp: Clear actualImage and baselineImage after all comparison.
        (main):

2011-02-17  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        The run-sunspider --v8-suite doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=54660

        * Scripts/run-sunspider:

2011-02-17  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [NRWT] Fix environment setup on Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=54549

        * Scripts/webkitpy/layout_tests/port/qt.py:

2011-02-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Enable tiled backing store by default in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=54581

        Instead of a flag to turn it on, a new flag is defined to turn
        tiled backing store off.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::handleUserOptions):
        * MiniBrowser/qt/MiniBrowserApplication.h:
        (WindowOptions::WindowOptions):

2011-02-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        flaky test archive uploads are always 22 bytes long
        https://bugs.webkit.org/show_bug.cgi?id=54593

        Speculative fix for the 22-bytes bug.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:

2011-02-16  Anna Cavender  <annacc@chromium.org>

        Reviewed by Mihai Parparita.

        http/tests/media should be served over HTTP (not from local file)
        https://bugs.webkit.org/show_bug.cgi?id=54028

        Removed special file:// treatment of http/tests/media

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:

2011-02-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        ChangeLog.parse_latest_entry_from_file does not handle rolled over ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=54609
        
        r78737 rolled over ChangeLogs, and webkit-patch complains when landing
        patches such as this one that are the first to add an entry to the
        ChangeLog (since they don't see a second date line to know where the
        entry ends).

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

== Rolled over to ChangeLog-2011-02-16 ==
