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