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