2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by David Levin.

        Add Tony Gentilcore as a reviewer
        https://bugs.webkit.org/show_bug.cgi?id=52480

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

2011-01-14  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: _FunctionState should keep track of where the function name starts.
        https://bugs.webkit.org/show_bug.cgi?id=52454

        * Scripts/webkitpy/style/checkers/cpp.py: Added function_name_start_position to
        _FunctionState and logic for setting it correctly.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests.

2011-01-14  Vincent Scheib  <scheib@chromium.org>

        Reviewed by David Levin.

        Add support to DumpRenderTree to use the GPU rather than software renderer
        https://bugs.webkit.org/show_bug.cgi?id=52333

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-01-14  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] update fonts.conf to fix 6 linux tests in drt
        https://bugs.webkit.org/show_bug.cgi?id=52411

        * DumpRenderTree/chromium/fonts.conf: Update to match the copy in
            chromium's src/webkit/tools/test_shell/resources/fonts.conf

2011-01-14  Eric Seidel  <eric@webkit.org>

        Original patch from Peter Gal  <galpater@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        Fix when running Tools/Scripts/check-webkit-style without arguments.
        https://bugs.webkit.org/show_bug.cgi?id=52261#c16

        * Scripts/webkitpy/common/checkout/scm.py: Handle None for changed_files argument better in Git.create_patch method.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2011-01-04  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by David Levin.

        Store the tempdir object in a variable so it doesn't get deleted too early.
        https://bugs.webkit.org/show_bug.cgi?id=51875

        * Scripts/update-webkit-auxiliary-libs:
        * Scripts/update-webkit-support-libs:

2011-01-14  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Make it work in python 2.5.

        webkit-patch suggest-reviewers dies when ChangeLogs are missing
        https://bugs.webkit.org/show_bug.cgi?id=49158

        * Scripts/webkitpy/common/checkout/api_unittest.py:

2011-01-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75774.
        http://trac.webkit.org/changeset/75774
        https://bugs.webkit.org/show_bug.cgi?id=52431

        gtk builds were broken (Requested by loislo2 on #webkit).

        * Scripts/webkitpy/common/checkout/scm.py:

2011-01-14  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style: _FunctionState should detect pure functions.
        https://bugs.webkit.org/show_bug.cgi?id=52428

        * Scripts/webkitpy/style/checkers/cpp.py: Added detection for if a function declaration
        is a pure virtual function.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests for verifying that pure
        virtual functions are correctly detected.

2011-01-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Just small fix for problem with check-webkit-style.
        It just didn't work for this patch.
        Old code can't concatenate a list of strings with None.

        * Scripts/webkitpy/common/checkout/scm.py:

2011-01-13  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style: _FunctionState should use Position to know where items are.
        https://bugs.webkit.org/show_bug.cgi?id=52424

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.*): Changed _FunctionState to use Position instead of line numbers.
        (detect_functions): Changed to pass Position's to _FunctionState.begin and
        did some minor clean-up.
        (*): Other changes are simply about converting to use the Position's in_FunctionState
        instead of line numbers.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Changed the test code
        to verify the positions stored in _FunctionState.

2011-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        webkit-patch suggest-reviewers dies when ChangeLogs are missing
        https://bugs.webkit.org/show_bug.cgi?id=49158

        This is not the most elegant, but it is a very safe fix to this bug.
        One advantage of catching ScriptError like this instead of adding a
        new added_or_modified_files or fixing all changed_files callers
        to use a more specific change_files variant, is that we catch
        all kinds of ScriptErrors which might cause our (non-essential)
        suggest-reviewers code to fail out.  This should make passing
        --suggest-reviewers to webkit-patch upload much more robust
        and may even make it possible for us to make it default.

        The root of the problem here is that SCM.changed_files includes
        deleted ChangeLog paths (from moves, etc) which then when we ask
        SVN/Git for the contents of the file at that revision, the command
        errors out and Executive.run_command raises a ScriptError.

        In the future we might fix this differently by making all current
        callers of chagned_files use a more specific method for requesting
        what types of changes they're interested in (adds, modifies, deletes, etc.)

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/api_unittest.py:

2011-01-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/8827065> REGRESSION (r71884): Cross-origin XHR fails if willSendRequest changes the URL
        https://bugs.webkit.org/show_bug.cgi?id=52419

        Allow to further control the behavior of the willSendRequest delegate callback by making it
        set a different URL in the new request.

        * DumpRenderTree/LayoutTestController.cpp:
        (addURLToRedirectCallback): Added.
        (LayoutTestController::staticFunctions): Added addURLToRedirect.
        (LayoutTestController::addURLToRedirect): Added. Adds the redirection to the map.
        (LayoutTestController::redirectionDestinationForURL): Added this getter.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]): Check
        if there is a redirection for the request’s URL, established by addURLToRedirect(), and if so,
        change the URL in the new request to the redirect destination.

2011-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        webkit-patch suggest-reviewers fails due to invalid utf8 in ChangeLog files
        https://bugs.webkit.org/show_bug.cgi?id=52416

        Example: webkit-patch suggest-reviewers -g ca3890fe74d94d85d6bfa48f9ea497b094d8e717 
        UnicodeDecodeError: 'utf8' codec can't decode bytes in position 536-538: invalid data

        I also added FIXMEs about the changed_files returning deleted files problem
        which is causing the other most common exception for suggest-reviewers
        (and is probably breaking sheriff-bots blame detection).

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/api_unittest.py:
        * Scripts/webkitpy/common/checkout/scm.py:

2011-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        results archives from commit-queue are too large to upload
        https://bugs.webkit.org/show_bug.cgi?id=52405

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-01-13  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [gtk] Zero-sized font does not yet work
        https://bugs.webkit.org/show_bug.cgi?id=49793

        Set minimum-font-size to 0 for the DRT.

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

2011-01-13  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Make old-run-webkit-tests more robust on buildbots
        https://bugs.webkit.org/show_bug.cgi?id=52364

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Pass --exit-after-n-failures 500 to old-run-webkit-tests script.

2011-01-13  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Make old-run-webkit-tests more robust on buildbots
        https://bugs.webkit.org/show_bug.cgi?id=52364

        * Scripts/old-run-webkit-tests: Ensure that testResultsDirectory is empty.

2011-01-13  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix plugins/plugin-javascript-access.html on Linux and Mac
        https://bugs.webkit.org/show_bug.cgi?id=52332

        Forked Info.plist is not longer needed.

        * DumpRenderTree/chromium/TestNetscapePlugIn/Info.plist: Removed.

2011-01-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Cleanup after r75613 -- make all UI-facing strings
        to be passed directly to WebInspector.UIString

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

        * Scripts/check-inspector-strings:

2011-01-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74881.
        http://trac.webkit.org/changeset/74881
        https://bugs.webkit.org/show_bug.cgi?id=52357

        The EFL builder has been red for days (Requested by abarth on
        #webkit).

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add beforeunload support to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=52353
        
        This makes a number of currently failing tests pass.

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

2011-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Detect, identify and recover from WebProcess crashes in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=52330

        * Scripts/old-run-webkit-tests: Detect when the regression test tool reports
        a web process crash.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Set up a processDidCrash
        callback.
        (WTR::TestController::processDidCrash): Report that the Web process
        crashed.
        * WebKitTestRunner/TestController.h:

2011-01-12  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style -- close_expression function doesn't work correctly.
        https://bugs.webkit.org/show_bug.cgi?id=52272

        * Scripts/webkitpy/style/checkers/cpp.py:
        (Position.__str__): Added a way to convert it to a string which is useful in tests.
        (Position.__cmp__): Added a way to compare Position which is useful in tests and
        generally useful (for upcoming code changes).
        (close_expression): Changed to use Position for input and output.
        Also, fixed many bugs such as only working correctly for parenthesis,
        not working correctly if given an offset in a line and not finding
        the real closing element if there were multiple closing elements in
        the same line.
        (detect_functions): Adjusted due to the change in arguments for
        close_expression.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.assert_positions_equal): Added a way to verify that
        two positions are the same.
        (CppStyleTest.test_position): Added tests for the __str_ and __cmp__ methods.
        (CppStyleTest.test_close_expression): Added tests to catch the issues
        that were fixed.

2011-01-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75576.
        http://trac.webkit.org/changeset/75576
        https://bugs.webkit.org/show_bug.cgi?id=52304

        broke rebaseline-chromium-webkit-test (Requested by thakis on
        #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2011-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Add a no-build option to run-webkit-tests, to avoid building DRT/WKTR
        https://bugs.webkit.org/show_bug.cgi?id=52307

        * Scripts/old-run-webkit-tests:

2011-01-12  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] WebKitGtk+ doesn't build on Mac OS X 10.6
        https://bugs.webkit.org/show_bug.cgi?id=50867

        Fixed library extention for Mac in webkitdirs.pm and type conflict in
        TestNetscapePlugin.cpp 

        * GNUmakefile.am: Don't use AppKit when compiling TestNetscapePlugin for GTK+
        * Scripts/webkitdirs.pm:

2011-01-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Add check-inspector-strings script.

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

        * Scripts/check-inspector-strings: Added.

2011-01-12  Adam Roben  <aroben@apple.com>

        Advertise the .testnetscape file extension on Windows

        Fixes <http://webkit.org/b/52298>
        plugins/no-mime-with-valid-extension.html fails on Windows

        Reviewed by Dan Bernstein.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Added a
        FileExtents field to map the .testnetscape file extension to the
        application/x-webkit-test-netscape MIME type, just as we do on Mac.

2011-01-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make webkit-patch support subdirectories for SVN checkouts
        https://bugs.webkit.org/show_bug.cgi?id=52261

        os.relpath does not exist on Python 2.5, so we need to call our version
        of the API.

        * Scripts/webkitpy/common/checkout/scm.py:

2011-01-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric Seidel.

        Close additional pages opened during a test once the test completes.
        https://bugs.webkit.org/show_bug.cgi?id=52276

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

2011-01-11  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Errors should be separated from the command line in bot messages.
        https://bugs.webkit.org/show_bug.cgi?id=52275

        * Scripts/webkitpy/common/system/executive.py:
        (ScriptError.message_with_output): Added a newline to separate the command
        line from the errors.
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ScriptErrorTest.test_message_with_output): Added tests for the various code
        paths in message_with_output.

2011-01-11  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        commit-queue should know how to upload archived results (for test flakes or general failures)
        https://bugs.webkit.org/show_bug.cgi?id=52048

        The zips are mostly empty due to forgetting -r.
        Expected diffs were not being pulled from the archive due
        to the archive having longer paths than I realized.

        * Scripts/webkitpy/common/system/workspace.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:

2011-01-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        The current modifier parsing code in test_expectations is
        fragile and hard-coded, so it's not easy to understand the logic
        or easily add new types of modifiers (like GPU vs. CPU testing
        for graphics tests, or 32-bit vs. 64-bit differences).

        This is the first of two patches that will add in more generic
        support and then eliminate the GPU-specific test expectations
        files for Chromium.

        This patch adds two standalone objects for handling modifiers. The
        rules for interpreting modifiers, precedence, and conflicts are
        given in the docstring to the ModifierMatcher class, which
        returns ModifierMatchResult objects.
        
        This patch also adds routines to the Port interface and a
        default set of values in the base object, in order to obtain the
        values needed on a given test run. These values are then passed
        to the expectation parser. This also allows us to clean up the
        logic used to lint all of the different configurations in a
        single test_expectations.txt file.

        The next patch will merge in the separate GPU expectations file.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2011-01-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Make webkit-patch support subdirectories for SVN checkouts
        https://bugs.webkit.org/show_bug.cgi?id=52261

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2011-01-11  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        commit-queue should know how to upload archived results (for test flakes or general failures)
        https://bugs.webkit.org/show_bug.cgi?id=52048

        I changed the API for archive_last_layout_test_results w/o updating the implementation.  Oops.
        This fixes an exception seen on the commit-queue when attempting to report flaky tests.

        * Scripts/webkitpy/common/system/workspace.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2011-01-11  Sam Weinig  <sam@webkit.org>

        Roll r75474 back in.

2011-01-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove uses of QFuture since it isn't supported on all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=51204

        * QtTestBrowser/webpage.h:
        (QtNAMThread::QtNAMThread):
        (QtNAMThread::networkAccessManager):
        (QtNAMThread::run):

2011-01-11  Peter Varga  <pvarga@webkit.org>

        Unreviewed.

        Add myself to committers' list.

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

2011-01-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should know how to upload archived results (for test flakes or general failures)
        https://bugs.webkit.org/show_bug.cgi?id=52048

        Now the queue will always upload results.  Either the entire zip, or just
        the diffs.txt in the case of text failures.

        This should make understanding flakes much easier, and paves the way
        for having the EWS run layout tests (and upload failures).

        In order to upload .zip files I had to teach bugzilla.py to autodetect
        mime types from the filename.  Since mimetypes.py doesn't include a mapping
        for .patch files, I have it add one before calling guess_type.

        We may find that always uploading the whole zip instead of just the -diffs.txt
        file is preferable, but for now I'm keeping the old behavior because it makes
        quickly understanding text failures easy.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/system/workspace.py: Added.
        * Scripts/webkitpy/common/system/workspace_unittest.py: Added.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-01-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75464.
        http://trac.webkit.org/changeset/75464
        https://bugs.webkit.org/show_bug.cgi?id=52193

        Followup rollout for 75474 (Requested by Ossy on #webkit).

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

2011-01-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Baseline qt_minimal configuration
        https://bugs.webkit.org/show_bug.cgi?id=51313

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting): Add
        QT_NO_UNDOSTACK guard.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome): Add QT_NO_SHORTCUT and QT_NO_PRINTER
        guards.
        (LauncherWindow::applyZoom): Add QT_NO_ANIMATION guard.
        (LauncherWindow::screenshot): Add QT_NO_FILEDIALOG guard.
        (LauncherWindow::selectElements): Add QT_NO_INPUTDIALOG guard.
        (LauncherWindow::showUserAgentDialog): Add QT_NO_COMBOBOX guard.

        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/locationedit.cpp: Add QT_NO_INPUTDIALOG guard.
        * QtTestBrowser/locationedit.h: Ditto.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI): Add QT_NO_INPUTDIALOG, QT_NO_SHORTCUT and
        QT_NO_UNDOSTACK guards.
        (MainWindow::setAddressUrl): Add QT_NO_INPUTDIALOG guard.
        (MainWindow::changeLocation): Ditto.
        (MainWindow::openFile): Add QT_NO_FILEDIALOG guard.
        (MainWindow::openLocation): Add QT_NO_INPUTDIALOG guard.

        * QtTestBrowser/webpage.cpp:
        (WebPage::openUrlInDefaultBrowser): Add QT_NO_DESKTOPSERVICES guard.
        (WebPage::authenticationRequired): Add QT_NO_LINEEDIT guard.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::animatedFlip): Add QT_NO_ANIMATION guard.
        (WebViewGraphicsBased::animatedYFlip): Ditto.

2011-01-10  Sam Weinig  <sam@webkit.org>

        Fix build.

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

2011-01-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        style-queue messages are way too long for big patches
        https://bugs.webkit.org/show_bug.cgi?id=52161

        We definitely could build much fancier list-to-string-with-limit functions
        but this should be sufficient for our needs at the moment.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:

2011-01-10  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r75398.
        http://trac.webkit.org/changeset/75398
        https://bugs.webkit.org/show_bug.cgi?id=52008

        Some layout tests are crashing on Chromium Win.

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

2011-01-10  Adam Roben  <aroben@apple.com>

        Roll out r75392

        It isn't needed now that r75289 has been rolled out.

        * Scripts/run-javascriptcore-tests:

2011-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        WebKitTestRunner uses crazy amounts of CPU, making layout tests slow and flaky
        https://bugs.webkit.org/show_bug.cgi?id=52160

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformRunUntil): Instead of busy-looping, wait for the timeout.
        Anything that can make runUntil() conditions turn true will happen on a run loop cycle
        anyway.

2011-01-10  Tony Chang  <tony@chromium.org>

        Reviewed by Mihai Parparita.

        [chromium] fix for animated gif layout tests
        https://bugs.webkit.org/show_bug.cgi?id=52008

        * DumpRenderTree/chromium/WebViewHost.cpp: Schedule a paint when we update the paint rect
            to trigger gif animations.
        (WebViewHostPaintTask::WebViewHostPaintTask):
        (WebViewHostPaintTask::runIfValid):
        (WebViewHost::updatePaintRect):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::taskList):

2011-01-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix gtk2 compilation for master
        https://bugs.webkit.org/show_bug.cgi?id=51885

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView): Replaced the old
        gdk_drawable_get_size with gdk_pixmap_get_size.

2011-01-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Laszlo Gombos.

        [WINCE] Reenable NPAPI after r75203
        https://bugs.webkit.org/show_bug.cgi?id=52109

        Remove the !isWinCE() check for ENABLE_NETSCAPE_PLUGIN_API and replace
        it with !isEfl(), because EFL port does not support NPAPI (yet).

        * Scripts/build-webkit:

2011-01-10  Adam Roben  <aroben@apple.com>

        Skip some asserting JS tests

        See <http://webkit.org/b/52156>.

        * Scripts/run-javascriptcore-tests:

2011-01-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] build-webkit disable Blob support via arguments passed to automake
        https://bugs.webkit.org/show_bug.cgi?id=52097

        * Scripts/build-webkit: Enable Blob support when building WebKitGTK+ via
        build-webkit.

2011-01-10  Adam Roben  <aroben@apple.com>

        Use the same name and description for TestNetscapePlugin on Windows and
        Mac

        Fixes <http://webkit.org/b/52151>
        fast/frames/iframe-reparenting-plugins.html fails on Windows

        Reviewed by Steve Falkenburg.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Copied
        the name and description from Mac's Info.plist.

2011-01-10  Siddharth Mathur <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][WK2] Guard gcc-specific syntax

        Non-gcc based compliers choke on the "-include"
        syntax for preinclude, place guard around it.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2011-01-10  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] [WK2] MiniBrowser does not load pages opened in new windows
        https://bugs.webkit.org/show_bug.cgi?id=52111

        When getting a createNewPage() callback from QWKPage, create the
        new page with the same QWKContext as the page that is passed to
        the callback.

        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (newPageFunction):
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h:

2011-01-10  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] MiniBrowser: Remove superfluous createNewPage() callback

        BrowserView set its own useless createNewPage() callback on QWKPage.
        This was immediately overridden by BrowserWindow anyway, so remove
        the BrowserView one.

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

2011-01-10  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        [Chromium] Remove non-client-based Geolocation code
        https://bugs.webkit.org/show_bug.cgi?id=50921

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationClientMock):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:

2011-01-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Commit bot tried to land r? cq+ patch
        https://bugs.webkit.org/show_bug.cgi?id=36638

        It should now be possible to post a patch with r? and cq+ and the
        commit-queue will correctly wait for the r+ before attempting to land the patch.
        (This was a feature requested by several users.)

        One caveat: We don't actually reject r-, cq+ patches from the queue
        (we just ignore them), but I think that's OK for now.

        I also noticed that setting r- once a commit-queue node had grabbed
        a patch would not properly cancel the landing.  That's fixed and
        tested in this patch.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:

2011-01-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtWebKit crashes when using XMLHttpRequest from the unload event
        https://bugs.webkit.org/show_bug.cgi?id=51934

        When accessing the network from the destructor of QWebPage, the network access manager
        was already deleted because the object WebPage was already destructed.

        This solve the problem by linking the lifetime of the network access manager to WebPage's QObject.
        The object is now destructed in the destructor of QObject.

        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::setQnamThreaded):
        * QtTestBrowser/webpage.h:
        (QtNAMThread::QtNAMThread):

2011-01-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        test_failures.py should not mention TestShell (long live DumpRenderTree!)
        https://bugs.webkit.org/show_bug.cgi?id=52067

        I ran test-webkitpy, but didn't bother adding a unit test for this string change.
        https://bugs.webkit.org/show_bug.cgi?id=51138#c3 is an example of why this is needed.

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:

2011-01-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        commit-queue hangs when the ChangeLog diff is bad
        https://bugs.webkit.org/show_bug.cgi?id=52072

        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:

2011-01-08  Adam Barth  <abarth@webkit.org>

        Teach svn-apply how to re-write WebCore to Source/WebCore.

        * Scripts/VCSUtils.pm:

2011-01-07  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=52050

        Update the tools to understand WebCore's new location.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/wscript:
        * GNUmakefile.am:
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/generate-qt-inspector-resource:
        * Scripts/prepare-ChangeLog:
        * Scripts/run-bindings-tests:
        * Scripts/update-iexploder-cssproperties:
        * Scripts/update-sources-list.py:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * iExploder/iexploder-1.7.2/tools/update_html_tags_from_sources.sh:
        * wx/browser/wscript:
        * wx/build/settings.py:

2011-01-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Make WebKitTestRunner rest between loads more robust to avoid test crashes
        https://bugs.webkit.org/show_bug.cgi?id=52086

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::notifyDone):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::run):

2011-01-07  James Robinson  <jamesr@chromium.org>

        Revert "Implement mozilla's animationTime property"
        https://bugs.webkit.org/show_bug.cgi?id=51952

        This approach isn't quite right.

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

2011-01-07  Adam Roben  <aroben@apple.com>

        Build master fix

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start): Don't try to concatenate a list and a string.

2011-01-07  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Csaba Osztrogonác.

        run-qtwebkit-tests should be able to kill a testsuite.

        Add new option in the script that can setup a timeout for a test.
        If the test execution takes more then specified time then the test
        would be terminated.

        [Qt] run-qtwebkit-tests needs timeout
        https://bugs.webkit.org/show_bug.cgi?id=51894

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-qtwebkit-tests:

2011-01-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r75233.

        Based on idea from Eric Seidel.

        Add remote zip file handling to webkitpy.
        https://bugs.webkit.org/show_bug.cgi?id=50901

        * Scripts/webkitpy/common/system/fileset.py: Make python 2.5 happy.

2011-01-07  Shane Stephens  <shanestephens@google.com>

        Reviewed by Eric Seidel.

        svn-apply: should support git binary delta diffs
        https://bugs.webkit.org/show_bug.cgi?id=38864

        * Scripts/VCSUtils.pm:
        * Scripts/svn-apply:

2011-01-06  Julie Parent  <jparent@chromium.org>

        Reviewed by Eric Seidel.

        Test Result Server not removing old results.
        https://bugs.webkit.org/show_bug.cgi?id=52012

        * TestResultServer/model/jsonresults.py:
        Fix off-by-one: Truncate if >= num_runs, not just >.
        * TestResultServer/model/jsonresults_unittest.py:
        Add unit test to test that merging in a new result with the same value
        as the last result causes previous result to fall off.

2011-01-06  James Kozianski  <koz@chromium.org>

        Reviewed by Mihai Parparita.

        Add classes to provide a consistent interface to a set of files.
        https://bugs.webkit.org/show_bug.cgi?id=50901

        These classes allow us to write code that is agnostic to whether a
        particular set of files resides in a local directory or in a zip file
        on a remote machine.

        * Scripts/webkitpy/common/system/directoryfileset.py: Added.
        * Scripts/webkitpy/common/system/directoryfileset_unittest.py: Added.
        * Scripts/webkitpy/common/system/fileset.py: Added.
        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/common/system/zipfileset.py: Added.
        * Scripts/webkitpy/common/system/zipfileset_unittest.py: Added.

2011-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        NetworkTransaction should log the url it is retrying
        https://bugs.webkit.org/show_bug.cgi?id=52043

        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:

2011-01-06  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Import os before using it.

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

2011-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        StyleQueue fails to report errors when patches have many files
        https://bugs.webkit.org/show_bug.cgi?id=52042

        This is one of at least two errors preventing style error reporting at the moment.
        When we moved to passing the list of files to check explicitly,
        we started to exceed the 500 character TEXT field limit for our AppEngine model object.
        We could change the type of the QueueStatus.message type, or we could
        just teach statusserver.py how to clamp values (and warn when it does).
        I chose the latter path.

        * Scripts/webkitpy/common/net/statusserver.py:

2011-01-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Stephanie Lewis.
        
        Fix syntax error in script.

        Windows bots need to archive/unarchive builds to/from configuration-specific directories
        https://bugs.webkit.org/show_bug.cgi?id=51996

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

2011-01-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, fixing WinCE build after r75196.

        WinCE port does not (yet) support NPAPI.

        * Scripts/build-webkit:

2011-01-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Darin Adler.

        File::Spec->rel2abs in sunspider-compare-results mangles parameters
        https://bugs.webkit.org/show_bug.cgi?id=52015

        * Scripts/sunspider-compare-results: call rel2abs on our arguments
        after the platform has been detected, otherwise the script will
        mangle things like '--gtk' into '/a/path/--gtk', breaking the
        detection.

2011-01-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Add ENABLE_NETSCAPE_PLUGIN_API, ENABLE_ORIENTATION_EVENTS and ENABLE_TOUCH_EVENTS flags to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=51346

        * Scripts/build-webkit:

2011-01-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows bots need to archive/unarchive builds to/from configuration-specific directories
        https://bugs.webkit.org/show_bug.cgi?id=51996
        
        After the configuration directory change, we were archiving the incorrect directory for
        build product, so we were running tests on the wrong binaries.
        
        This change archives the correct directory, and also unarchives it into a configuration-
        specific directory.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Use a configuration-specific directory on Windows.
        * BuildSlaveSupport/built-product-archive: Unarchive/archive to/from proper directory.

2011-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Mihai Parparita.

        commit-queue mentions "Text diff mismatch" 4 times instead of once per failure
        https://bugs.webkit.org/show_bug.cgi?id=52002

        See an example of this here:
        https://bugs.webkit.org/show_bug.cgi?id=51314#c2

        It's due to the fact that we pass around TestFailure() instance
        objects and yet expect them to all compare to be the same.

        This is bad.  We should either have shared instances of these values
        or we should just pass around the class names.  There are already hacks
        in place to make TestFailure objects pass equality tests, I just added
        a __hash__ implementation so they can be used in sets as expected.

        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:

2011-01-06  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [gdb] handle inaccessible memory and UChar*
        https://bugs.webkit.org/show_bug.cgi?id=52003

        To pretty-print a UChar*, we just grope around in the memory
        looking for a terminating NUL.  We need to handle the exception
        that can occur when we poke into an invalid location.

        Additionally, the logic for choosing which pretty-printer would
        early return before hitting the point where we'd use the UChar*
        printer.  (Did this ever work?  How did it regress?)

        * gdb/webkit.py:

2011-01-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Ada Chan.

        WebKit2: Should be able to call into injected bundle to ask if we should allow resource loads
        https://bugs.webkit.org/show_bug.cgi?id=51969
        
        Add shouldLoadResourceForFrame to WTR::InjectedBundlePage.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::shouldLoadResourceForFrame): Stub implementation.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2011-01-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Chromium DRT support for webkitAnimationTime.

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

2011-01-06  Julie Parent  <jparent@chromium.org>

        Reviewed by Tony Chang.

        Test Result Server always truncates number of results to JSON_RESULTS_MAX_BUILDS
        https://bugs.webkit.org/show_bug.cgi?id=51217

        * TestResultServer/model/jsonresults.py:
        Pass num_runs through to _remove_items_over_max_number_of_builds, and use the value.
        Adds missing documentation.
        * TestResultServer/model/jsonresults_unittest.py:
        Add unit test to test that truncation happens at smaller value than JSON_RESULTS_MAX_BUILDS.
        Update test_merge to take a number of builds to truncate at.

2011-01-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The EWS should log outside of the working directory
        https://bugs.webkit.org/show_bug.cgi?id=51986

        This patch prepare us for using git clean -x -d -f in the EWS wrapper
        script, which will actually clean the working copy back to a pristine
        state instead of leaving untracked directories and ignored files.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-01-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Back out attempted change to built-product-archive.

        * BuildSlaveSupport/built-product-archive:

2011-01-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Include configuration name when unpacking a build archive.

        Needed, since we split Windows build results into configuration-specific directories
        under WebKitOutputDir.

        * BuildSlaveSupport/built-product-archive:

2011-01-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Debug and Release builds on Windows clobber each other
        https://bugs.webkit.org/show_bug.cgi?id=49185

        Changes the structure of WebKitBuild build products directory so we
        completely separate each build configuration into independent directories.
        
        Although we previously had per-configuration directories for obj, this change adds
        per-configuration directories for bin, lib, obj, and include. Each configuration's
        build products are stored within a directory inside of WebKitBuild.
        
        Most use of $(WebKitOutputDir) in the build files has been replaced by $(ConfigurationBuildDir),
        defined in common.vsprops to be $(WebKitOutputDir)\$(ConfigurationName).

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPostBuild.cmd:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPreBuild.cmd:
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:
        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd:
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd:
        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        * DumpRenderTree/win/ImageDiffPostBuild.cmd:
        * DumpRenderTree/win/ImageDiffPreBuild.cmd:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops:
        * MiniBrowser/MiniBrowserPostBuild.cmd:
        * MiniBrowser/MiniBrowserPreBuild.cmd:
        * Scripts/webkitdirs.pm:
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/win/TestWebKitAPIGeneratedCommon.vsprops:
        * TestWebKitAPI/win/TestWebKitAPIPostBuild.cmd:
        * TestWebKitAPI/win/TestWebKitAPIPreBuild.cmd:
        * TestWebKitAPI/win/copy-resources.cmd:
        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WebKitAPITest/WebKitAPITestPostBuild.cmd:
        * WebKitAPITest/WebKitAPITestPreBuild.cmd:
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleGeneratedCommon.vsprops:
        * WebKitTestRunner/win/InjectedBundlePostBuild.cmd:
        * WebKitTestRunner/win/InjectedBundlePreBuild.cmd:
        * WebKitTestRunner/win/WebKitTestRunnerPostBuild.cmd:
        * WebKitTestRunner/win/WebKitTestRunnerPreBuild.cmd:
        * WinLauncher/WinLauncherCommon.vsprops:
        * WinLauncher/WinLauncherPostBuild.cmd:
        * WinLauncher/WinLauncherPreBuild.cmd:

2011-01-05  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] TestNetscapePlugin doesn't link on OS X
        https://bugs.webkit.org/show_bug.cgi?id=51948

        Only add a dependency on libX11 on X11 systems

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2011-01-05  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        check-webkit-style should allow unnecessary parameter names in WebKit2 APIs because we're matching CF's header style
        https://bugs.webkit.org/show_bug.cgi?id=51970

        * Scripts/webkitpy/style/checker.py:
        Add -readability/naming for WebKit2 C API directories.

2011-01-05  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing one more log error from my previous python patch.

        Move LayoutTestResults over to new-run-webkit-tests TestResult architecture
        https://bugs.webkit.org/show_bug.cgi?id=51802

        webkit-patch failure-reason was logging about parsing errors
        due to my misunderstanding of how BeautifulSoup.findAll worked.

        Fixed, and added a unit test.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:

2011-01-05  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Add the possibility to open window from the WebProcess in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=51951

        Set a function to QWKPage::setCreateNewPageFunction() in Minibrowser so there is a way
        to create new window from WebKit.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (newPageFunction):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::page): Added to avoid the indirect access to QWKPage spread in the class
        (BrowserWindow::newWindow):
        (BrowserWindow::updateUserAgentList):
        (BrowserWindow::showUserAgentDialog):
        * MiniBrowser/qt/BrowserWindow.h: Add the global variable backingStoreTypeForNewWindow to
        define the type of the backing store used for new windows.
        * MiniBrowser/qt/main.cpp:
        (main):

2011-01-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        commit-queue should report failure type when reporting flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=51900

        This patch was a ridiculous amount of plumbing.  In the end I like
        the NRWT-style TestResult class even less.  But now we're passing
        a list of TestResult objects from the queue to the FlakyTestReporter.
        Thus the FlakyTestReporter can more easily report what type of failure
        occurred.

        In the process, I found that I was not alone in finding TestResult
        cumbersome to use.  A bunch of code was trying to create a TestResult
        object with default values.  However since the constructor didn't make
        this easy, some places were getting it wrong (including the TestResult unit test)!
        I've fixed the TestResult constructor to have default values for non-essential
        arguments.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.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/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2011-01-05  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Move LayoutTestResults over to new-run-webkit-tests TestResult architecture
        https://bugs.webkit.org/show_bug.cgi?id=51802

        Add another unit test to cover a previously missing import.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:

2011-01-05  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by David Levin.

        Add mihaip@chromium.org as a reviewer
        https://bugs.webkit.org/show_bug.cgi?id=51966
        
        Add myself as a reviewer.

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

2011-01-05  James Simonsen  <simonjam@chromium.org>

        Unreviewed. Adding myself to the list of committers.

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

2011-01-05  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Move LayoutTestResults over to new-run-webkit-tests TestResult architecture
        https://bugs.webkit.org/show_bug.cgi?id=51802

        Fix two exceptions seen on the bots after my original commit.

        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:

2011-01-05  Kundu Suchismita  <suchi.kundu@nokia.com>

        Reviewed by Andreas Kling.

        [Qt]Add local storage settings to QtTestBrowser command line arguments 
        https://bugs.webkit.org/show_bug.cgi?id=51750

        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
         Local storage settings can be enable form command line arguments for
         QtTestBrowser.

2011-01-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Martin Robinson.

        GTK: AX: DRT needs to use correct root object method.
        https://bugs.webkit.org/show_bug.cgi?id=51911

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::rootElement):

2011-01-05  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Rubber-stamped by Csaba Osztrogonác.

        Based on idea from Péter Gál.

        * Scripts/webkitpy/tool/bot/sheriff.py: Remove unnecessary apostrophes around revision numbers.

2011-01-05  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        sheriff-bot should be able to do multi-revision rollouts
        https://bugs.webkit.org/show_bug.cgi?id=51176

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2011-01-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org should have per-bot status pages
        https://bugs.webkit.org/show_bug.cgi?id=51906

        Just adds a /queue-status/QUEUE_NAME/bots/BOT_ID page to show
        statuses from a single queue.  Now that we have many bots servicing
        some queues (commit-queue, win-ews, etc.) its easy to have the messages
        you care about scroll off the end of the 15-message limit on the main page.

        Eventually we should probably rename /queue-status to /queue or /queues,
        but that's fodder for another patch.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/main.py:
        * QueueStatusServer/templates/includes/singlequeuestatus.html:
         - This probably should use a custom filter instead of hard-coding
           the URL scheme here, but I couldn't figure out how to easily
           create such a filter.  Most filters work with "strings" so we can't
           pass the status object.  We could add a method to the status
           object and call that, but that seemed a bit strange too.
        * QueueStatusServer/templates/queuestatus.html:

2011-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Adding myself to the list of committers.

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

2011-01-04  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by David Levin.

        check-webkit-style treated some macros with parentheses after #elif as function calls
        https://bugs.webkit.org/show_bug.cgi?id=51695

        Ingore function call space checking in any preprocessor directives
        (things starting with #). Change search() to match() because 
        preprocessor directives are supposed to be in the beginning of lines.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: make sure there is no false positives for #elif cases

2011-01-04  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Tony Chang.

        Change the --multi-load test option to --stress-opt
        https://bugs.webkit.org/show_bug.cgi?id=50751

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::stressOpt):
        (TestShell::setStressOpt):
        (TestShell::stressDeopt):
        (TestShell::setStressDeopt):
        (TestShell::javaScriptFlags):
        (TestShell::setJavaScriptFlags):
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        Use rootObject() method to get top of accessibility tree.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):

2011-01-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Darin Adler.

        Remove the last non-GObject usage of PlatformRefPtr and move the code to GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=51846

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp: Change usage of PlatformRefPtr
        back to GRefPtr.

2011-01-04  Zhe Su  <suzhe@chromium.org>

        Reviewed by Kenneth Russell.

        Fix insertText, setMarkedText and unmarkText methods of
        TextInputController to call corresponding methods of WebKit::WebView
        rather than WebKit::WebFrame. This change matches the behavior of
        chromium browser.
        insertText corresponds to WebView::confirmComposition(text)
        setMarkedText corresponds to WebView::setComposition(...)
        unmarkText corresponds to WebView::confirmComposition()
        https://bugs.webkit.org/show_bug.cgi?id=51693

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::insertText):
        (TextInputController::setMarkedText):
        (TextInputController::unmarkText):

2011-01-04  Dihan Wickremasuriya  <dihan.wickremasuriya@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [Symbian] Do not remove 0 byte sized files from productDir

        On Symbian productDir points to the source directory. Removing all the
        empty files from the productDir directory corrupts the svn repository.

        * Scripts/build-webkit:

2011-01-03  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Add SelectAll option to the context menu for the editor
        https://bugs.webkit.org/show_bug.cgi?id=50049

        Set shortcut for the SelectAll action.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):

2011-01-03  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style shouldn't consider "value" automatically to be a meaningless name.
        https://bugs.webkit.org/show_bug.cgi?id=51842

        * Scripts/webkitpy/style/checkers/cpp.py: Remove the check for value.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Remove the test for value.

2011-01-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        [WINCE] Adds a build slave.
        https://bugs.webkit.org/show_bug.cgi?id=50523

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add an
        entry for a release build of the WinCE port.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add platform
        flag to build the WinCE port.

2011-01-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Add WinCE support to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=51642

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:

2011-01-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move LayoutTestResults over to new-run-webkit-tests TestResult architecture
        https://bugs.webkit.org/show_bug.cgi?id=51802

        I'm not the biggest fan of the test_failures or test_results classes,
        but it's better to have one shared set of classes, than separate ones
        for new vs. old run-webkit-test result handling.

        This moves the ORWT results class "LayoutTestResults" over to using
        TestResult and TestFailure classes, making it easy for us to
        make all our sheriff-bot and other webkitpy code NRWT ready.

        This also makes it a trivial patch to generate results.json information
        from ORWT results.html files (for flaky test analysis, etc.) as well
        as making it a one-liner to report test failure types when the
        commit-queue sees flaky tests.

        This patch tried not to add new functionality, but only to replace
        the guts of LayoutTestResults, while adding unit tests and hoping
        not to break anything.

        I also moved callers which assumed User.prompt* were static/class methods
        to using them as instance methods (since we'll eventually want to make them such).

        In the process of re-writing things, I broke the rebaseline command, so I wrote
        a unit test to catch my breakage were I do do so again in the future.

        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

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

        Reviewed by Simon Fraser.

        webkit-patch shouldn't waste time cleaning a working directory that's already clean
        https://bugs.webkit.org/show_bug.cgi?id=51840

        * Scripts/webkitpy/common/checkout/scm.py:

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

        Reviewed by Simon Fraser.

        webkit-patch should only hide update output if --quiet
        https://bugs.webkit.org/show_bug.cgi?id=51838

        As requested by smfr.

        * Scripts/webkitpy/tool/steps/update.py:

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

        Reviewed by David Levin.

        commit-queue shouldn't reject patches twice if two bots process the same patch
        https://bugs.webkit.org/show_bug.cgi?id=51805

        Before raising an error, we first check whether the patch is still in
        the commit-queue.  This check is still racy, of course, but the time
        window is much smaller.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:

2011-01-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make run-api-tests less chatty.
        https://bugs.webkit.org/show_bug.cgi?id=51831

        - Make script quiet by default and add --verbose option (replacing --quiet).
        - When not verbose, pipe stdout and stderr to devnull.

        * Scripts/run-api-tests:

2011-01-03  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Adding myself to committers.py.

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

2011-01-03  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Xan Lopez.

        "Tool/Scripts/run-launcher --gtk" stopped working after 74855
        https://bugs.webkit.org/show_bug.cgi?id=51806

        Originally, the $libraryName is 'JavaScriptCore'. When building release 
        one, the $libraryDir was 'WebKitBuild/Release/JavaScriptCore/../.libs/'
        which doesn't exist anymore ('WebKitBuild/Release/JavaScriptCore'
        is 'WebKitBuild/Release/Source/JavaScriptCore' now), and 
        'WebKitBuild/Release/Source/JavaScriptCore/../../.libs' looks weird,
        so make it 'WebKitBuild/Release/.libs'

        * Scripts/webkitdirs.pm: 

2011-01-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Make EFL a core builder
        https://bugs.webkit.org/show_bug.cgi?id=51804

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:

2011-01-02  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed fix after r74855 and r74875.

        * BuildSlaveSupport/built-product-archive:
         - Create directories explicitly.
         - Pass shell=True to subprocess.call().

2011-01-02  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed fix after r74855.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        * BuildSlaveSupport/built-product-archive: JavaScriptCore -> Source/JavaScriptCore

2011-01-02  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed run-javasriptcore-tests fix after r74855.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        * Scripts/webkitdirs.pm:

2011-01-02  Robert Hogan  <robert@webkit.org>

        Unreviewed, build fix.

        [Qt] Fix DRT build after 74855

        * DumpRenderTree/qt/DumpRenderTree.pro:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Remove the assumption from the Qt and Gtk builds that every project is
        in the root directory.

        * Scripts/build-webkit:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach svn-apply how to apply patches even though JavaScriptCore has moved
        https://bugs.webkit.org/show_bug.cgi?id=51796

        After this change, svn-apply will magically apply patches to
        JavaScriptCore/foo to Source/JavaScriptCore/foo.

        * Scripts/VCSUtils.pm:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        Update references to JavaScriptCore to point to the new location.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/wscript:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/run-javascriptcore-tests:
        * Scripts/update-javascriptcore-test-results:
        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:
        * wx/build/settings.py:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move Sources to Source
        https://bugs.webkit.org/show_bug.cgi?id=51794

        Update scripts to point to the new location.

        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:

2010-12-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [DRT/Chromium] Enable mock spell checker on non-OSX
        https://bugs.webkit.org/show_bug.cgi?id=51401

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

2010-12-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Ariya Hidayat.

        Remove Tools/Scripts/wkstyle
        https://bugs.webkit.org/show_bug.cgi?id=51774

        This script appears to not have been touched in a while and seems to
        have been replaced by check-webkit-style.

        * Scripts/wkstyle: Removed.

2010-12-31  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Coding style fix.

        * DumpRenderTree/chromium/TestShell.h:

2010-12-31  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Inspector's tests are very slow on Win(Dbg).

        It was a problem with Chromium DRT. DevToolsAgent object instance was
        attached not only to the inspected page but to the DevTools window too.
        As result all the inspector files were interpreted as a content of inspected page
        and were transfered to the DevTools scripts panel for debugging etc.

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

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::bindJSObjectsToWindow):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move PageLoadTests to PerformanceTests/PageLoad
        https://bugs.webkit.org/show_bug.cgi?id=51771

        Update references to PageLoadTests to point to the new location.

        * Scripts/run-pageloadtest:
        * Scripts/webkitpy/common/config/build.py:

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move SunSpider into PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=51769

        Update these scripts to point to the new location.

        * Scripts/run-sunspider:
        * Scripts/sunspider-compare-results:

2010-12-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Add WebThemeEngineDRTMac so that Chromium DRT scrollbar rendering can match the Mac port's
        https://bugs.webkit.org/show_bug.cgi?id=51728
        
        Add implementation of the Mac WebThemeEngine that uses an NSScroller
        to render top-level scrollbars. This makes them match the Mac port's
        use of an NSScrollView, which means that we'll be able to share more
        pixel baselines.
        
        The new rendering code will not be activated until the 
        USE_WEB_THEME_ENGINE_TO_PAINT_THUMB #define is fliped in
        ScrollbarThemeChromiumMac.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h: Added.
        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm: Added.
        (+[FakeActiveWindow alwaysActiveWindow]):
        (+[FakeActiveWindow alwaysInactiveWindow]):
        (-[FakeActiveWindow initWithActiveControls:]):
        (-[FakeActiveWindow _hasActiveControls]):
        (WebThemeEngineDRTMac::paintScrollbarThumb):
        (stateToHIEnableState):
        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):
        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):

2010-12-30  Konstantin Tokarev  <annulen@yandex.ru>

        Reviewed by David Kilzer.

        [Qt] Don't build wtf/TCSystemAlloc.cpp if --system-malloc option is
        used
        https://bugs.webkit.org/show_bug.cgi?id=51672

        * DumpRenderTree/qt/DumpRenderTree.pro: Replaced USE_SYSTEM_MALLOC
        with USE_SYSTEM_MALLOC=1
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Replaced USE_SYSTEM_MALLOC
        with USE_SYSTEM_MALLOC=1

2010-12-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Kilzer.

        [Qt] [Symbian] Fix build-webkit script for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=51509

        Set the OUTPUT_DIR for Symbian to be the same as the source
        directory.

        * Scripts/webkitdirs.pm:

2010-12-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Darin Adler.

        check-webkit-style should ignore NULL usage in calls to gtk_widget_style_get
        https://bugs.webkit.org/show_bug.cgi?id=51758

        Add a check-webkit-style exception for gtk_widget_style_get and NULL usage.

        * Scripts/webkitpy/style/checkers/cpp.py: Add the exception.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Add some tests for this.

2010-12-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE buildfix.

        * WinCELauncher/main.cpp: Add missing include.

2010-12-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        svn-apply updates date of wrong change log entry for a change log diff that
        contains two consecutive entries with the same author and date
        https://bugs.webkit.org/show_bug.cgi?id=46061

        Fixes an issue where the date of the wrong change log entry may be modified.
        Moreover, changes fixChangeLogPatch() to move entries inserted earlier
        in a ChangeLog file to the top of the file.

        Currently, fixChangeLogPatch() explicitly bails out and returns an unchanged
        diff when it detects that the diff inserts a change log entry earlier in a
        ChangeLog. It is unusual to land a patch that has such a deliberate ChangeLog
        change. With the advent of the commit-queue this functionality of bailing out
        and hence landing the patch as-is is harmful to the accuracy of the ChangeLog.
        Instead, we should always move the change log entry to the top of the ChangeLog file.

        A side-effect of this change is that setChangeLogDateAndReviewer() now updates
        the date line of the correct change log entry in a ChangeLog diff.

        * Scripts/VCSUtils.pm: Modified fixChangeLogPatch() to move entries inserted earlier to the top.

        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl:
          Updated the following unit tests now that we move entries inserted earlier to the top:
          - "fixChangeLogPatch: New entry inserted in middle."
            (formerly named "fixChangeLogPatch: [no change] New entry inserted in middle.")

          - "fixChangeLogPatch: New entry inserted earlier in the file, but after an entry with the same author and date."
            (formerly named "fixChangeLogPatch: [no change] New entry inserted earlier in the file, but after an entry with the same author and date.")

        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatchThenSetChangeLogDateAndReviewer.pl: Added.

2010-12-29  Konstantin Tokarev  <annulen@yandex.ru>

        Reviewed by Eric Seidel.

        [Qt] Fixed compatibility with gold linker on X11 platforms
        https://bugs.webkit.org/show_bug.cgi?id=51700

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        Linked TestNetscapePlugin with libX11 on Unix platforms

2010-12-29  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Darin Adler.

        Circular dependency in webkitpy.common.checkout.changelog module
        https://bugs.webkit.org/show_bug.cgi?id=50475

        Remove automatic import of api.Checkout module when any checkout/
        submodule is imported (e.g.: when checkout.scm.Git is imported).

        * Scripts/webkitpy/common/checkout/__init__.py:

2010-12-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ojan Vafai.

        prepare-ChangeLog should support the -g option for specifying the git-commit
        https://bugs.webkit.org/show_bug.cgi?id=51708

        Add a -g shortcut for the --git-commit prepare-ChangeLog option. This matches
        webkit-patch, though the exact meaning of the two options remain different.

        * Scripts/prepare-ChangeLog: Add -g.

2010-12-29  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with Qt in namespace
        https://bugs.webkit.org/show_bug.cgi?id=51701

        * QtTestBrowser/webview.h:

2010-12-28  Daniel Bates  <dbates@rim.com>

        Reviewed by Sam Weinig.

        Substitute // MARK: for compiler-specific #pragma mark
        https://bugs.webkit.org/show_bug.cgi?id=51657

        Fix future compilation warnings about "#pragma mark" on GTK+ bots by
        substituting  "// MARK:" for "#pragma mark", which provides
        analogous code-bookmarking functionality under Xcode.

        Also, for consistency, we should substitute "// MARK:" for compiler-
        specific "#pragma mark" in the source files for the Mac port.

        * DumpRenderTree/AccessibilityTextMarker.cpp:
        * DumpRenderTree/cf/WebArchiveDumpSupport.h:
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:
        * DumpRenderTree/mac/ObjCController.m:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/BrowserWindowController.m:

2010-12-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Eric Seidel.

        Add --no-build option to run-sunspider
        https://bugs.webkit.org/show_bug.cgi?id=51658

        * Scripts/run-sunspider: add --no-build flag to skip building
        phase.

2010-12-27  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Martin Robinson.

        Append the directory Tools/DumpRenderTree to the list of directories that
        do-webcore-rename should search so that it can rename DRT files and
        source code.

        * Scripts/do-webcore-rename:

2010-12-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        build-webkit should detect missing Java SDK and explain how to install it
        https://bugs.webkit.org/show_bug.cgi?id=51651

        * Scripts/build-webkit:

2010-12-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] Add support for build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=51625

        Add GTK+ support to build-jsc now that building the jsc executable as
        a standalone target is easy.

        * Scripts/build-jsc: Call buildGtkProject for the GTK+ case now.
        * Scripts/build-webkit: Pass in the proper target name to buildGtkProject.
        * Scripts/webkitdirs.pm: Actually process the project parameter in buildGtkProject
        and pass it along to buildAutotoolsProject.

2010-12-27  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style check for meaningless variable names in function declarations.
        https://bugs.webkit.org/show_bug.cgi?id=51523

        * Scripts/webkitpy/style/checker.py: Exempted JavaScriptCore/jit/JITStubs.cpp
        from the new check and whitespace/parens because the syntax is unusual and
        produced a fair number of positives for these checks.
        * Scripts/webkitpy/style/checkers/cpp.py:
        (_convert_to_lower_with_underscores): Used as a canonical form for type names
        and parameter names when determining if the parameter name is useless.
        (_create_acronym): Used to check for redundant variable names in cases like "ExceptionCode ec"
        (Parameter.lower_with_underscores_name): Gives back the parameter name in a lower_with_underscore
        format.
        (_check_parameter_name_against_text):  Checks to see if the parameter name is in the
        text or an acronym of it.
        (check_function_definition): Checks function definitions for meaningless variable names.
        (process_line): Added call to check_function_definition.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppFunctionsTest.test_convert_to_lower_with_underscores): Test for _convert_to_lower_with_underscores.
        (CppFunctionsTest.test_create_acronym): Test for _create_acronym.
        (CppFunctionsTest.test_check_parameter_against_text): Test for _check_parameter_against_text.
        (CppStyleTestBase.perform_single_line_lint): Removed the parameter name check
        because when only checking a snippet, there are a lot of bogus functions.
        (CppStyleTestBase.perform_multi_line_lint): Ditto and removed a bogus filter
        that I put there previously and just noticed.
        (WebKitStyleTest.test_parameter_names): Tests for the functionality -- both
        check_function_definition and process_line.

2010-12-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Disable flash plugin in GtkLauncher when using gtk3
        https://bugs.webkit.org/show_bug.cgi?id=51591

        Flash plugin uses gtk2 that is incompatible with gtk3 making
        webkit crash when it's built with gtk3.

        * GtkLauncher/main.c:
        (main):

2010-12-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move ANGLE to Sources/ThirdParty
        https://bugs.webkit.org/show_bug.cgi?id=51605

        * Scripts/build-webkit:
          - Point to the new ANGLE location.

2010-12-26  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style should be able to parse function declaration parameters.
        https://bugs.webkit.org/show_bug.cgi?id=51451

        * Scripts/webkitpy/style/checkers/cpp.py:
        (Position.__init__): Holds simple position information (row, column).
        (Parameter.__init__): Holds information about a parameter.
        (SingleLineView.__init): Converts multiple lines into a single line for simpler searches.
        (SingleLineView.convert_column_to_row): Returns the original row given a column.
        (create_skeleton_parameters): Simplifies a parameter list for easier searching.
        (find_parameter_name_index): Finds where the parameter name is.
        (parameter_list): Generates the list of parameters for a function.
        (_FunctionState.begin): Added information to allow determining the parameters
        on demand.
        (_FunctionState.get_parameter_list): Returns a tuple of function parameters.
        (detect_functions): Improve function detection for operator functions and
        determine where the parameters end and pass that to _FunctionState.begin.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppFunctionsTest.test_parameter): Verifies Parameter functionality.
        (CppFunctionsTest.test_single_line_view): Verifies SingleLineView functionality.
        (CppFunctionsTest.test_create_skeleton_parameters): Verifies create_skeleton_parameters.
        (CppFunctionsTest.test_find_parameter_name_index): Verifies find_parameter_name_index.
        (CppFunctionsTest.test_parameter_list): Does some minimal verification for parameter list.
        Much more thorough verification is done as part of FunctionDetectionTest.test_parameter_list.
        (FunctionDetectionTest.perform_function_detection): Added support for verifying
        the parameters found.
        (FunctionDetectionTest.test_function_declaration_detection): Added more function
        detection test to verify that we catch the operator functions.
        (FunctionDetectionTest.test_ignore_macros): Verify that function detection ignores macros.
        (FunctionDetectionTest.test_parameter_list): Added tests to verify the parameter parsing.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_for_bad_test_doesnt_break): Removed
        because the error. The test is about the bad function name. Fixing the name makes the test exactly like
        test_function_length_check_definition_severity1_for_test.

2010-12-25  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE buildfix after r74334.

        * CMakeListsWinCE.txt:

2010-12-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74632.
        http://trac.webkit.org/changeset/74632
        https://bugs.webkit.org/show_bug.cgi?id=51600

        makes test-webkitpy hang forever on GTK (Requested by philn-tp
        on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:

2010-12-24  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Screen doesn't be rendered when changing size of EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=43528

        Remove on_resize because ewk_view_fixed_layout_size_set should not be
        called on callback of EVAS_CALLBACK_RESIZE. As it change size of
        FrameView, rendering was ignored when _ewk_view_smart_calculate was
        called.

        * EWebLauncher/main.c:
        (browserCreate):

2010-12-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch (or a pre-commit hook) needs to prevent bad ChangeLog changes
        https://bugs.webkit.org/show_bug.cgi?id=28291

        This is a start.  At least now webkit-patch will prompt when your ChangeLog looks questionable.
        We could do more advanced things, like parsing the ChangeLog (with changelog.py) and comparing that
        to strings with find in the diff.
        Since non-interactive always returns the default, this should cause patches with bad changelogs to fail on the commit-queue.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/diff_parser.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py: Copied from Tools/Scripts/webkitpy/tool/steps/validatereviewer.py.
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py: Copied from Tools/Scripts/webkitpy/tool/steps/cleanworkingdirectory.py.
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2010-12-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kenneth Russell.

        Modify new-run-webkit-tests to shut up and exit when all the threads
        are wedged so that test runs complete faster and we don't end up
        w/ enormous log files.

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

        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:

2010-12-24  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        commit-queue should better explain how it will re-open bugs and follow duplicate chains
        https://bugs.webkit.org/show_bug.cgi?id=51549

        I've had multiple people ask me about the commit-queue's behavior
        regarding reporting flaky tests.  I figured it would be best to just
        have the queue explain itself in the bugs it files.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:

2010-12-24  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: should ignore "wrong" namings in JavaScriptCore/qt
        https://bugs.webkit.org/show_bug.cgi?id=51467

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2010-12-23  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move JavaScriptGlue into Sources
        https://bugs.webkit.org/show_bug.cgi?id=51583

        These tools refer to JavaScriptGlue and need to be updated to its new
        location.

        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:

2010-12-23  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Eric Seidel.

        Bug 51539 - update iexploder scripts to point to new location

        * Scripts/run-iexploder-tests:
        * Scripts/update-iexploder-cssproperties:

2010-12-23  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        [chromium] LayoutTestController warning in float->int conversion
        https://bugs.webkit.org/show_bug.cgi?id=51553

        Rather than reading an int, converting to a float, then getting a compiler
        warning on passing the float to something that expects an int, instead
        just pass around ints.

        No tests, fixes a compiler warning.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (parsePageSizeParameters):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):

2010-12-23  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Darin Adler.

        Bug 51537 - iexploder needs cleanup
        
        * iExploder/htdocs: Removed.
        * iExploder/htdocs/config.rb: Removed.
        * iExploder/htdocs/cssproperties.in: Removed.
        * iExploder/htdocs/cssvalues.in: Removed.
        * iExploder/htdocs/htmlattrs.in: Removed.
        * iExploder/htdocs/htmltags.in: Removed.
        * iExploder/htdocs/htmlvalues.in: Removed.
        * iExploder/htdocs/iexploder.cgi: Removed.
        * iExploder/htdocs/iexploder.rb: Removed.
        * iExploder/htdocs/index.html: Removed.
        * iExploder/htdocs/webserver.rb: Removed.
        * iExploder/iexploder-1.7.2/output: Removed.
        * iExploder/tools: Removed.
        * iExploder/tools/lasthit.rb: Removed.
        * iExploder/tools/osx_last_crash.rb: Removed.
        * iExploder/tools/showtest.rb: Removed.

2010-12-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Make 'single' the default backing store in EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=51534

        'single' is the simplest backing store and the one intended to be the
        default in the test browser. By mistake the tiled backing store was
        left as default in r72617.

        * EWebLauncher/main.c:
        (browserCreate): ditto.

2010-12-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Subject: [webkit 4/4] [EFL] Remove non-sense workaround
        https://bugs.webkit.org/show_bug.cgi?id=51533

        There's no point in concatenating env("HOME") with "blah", so remove
        option from EWebLauncher.

        * EWebLauncher/main.c:
        (main): ditto.

2010-12-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Eric Seidel.

        Web Inspector: chromium: inspector's tests are quite slow especially at windows(Debug).

        Almost all inspector's tests become flaky on chromium Win(dbg) after switching to DRT.
        I just discovered that we have two additional GC runs per each WebViewHost.
        Test_shell had no such calls.
        These gc runs eat 15% of cpu time.

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

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

2010-12-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        This change splits out the TestRunner class into its own file.
        When we fork the code for message passing, we will create a new
        TestRunner, and this change will allow that to be more modular.

        While we're at it, split out TestInput and ResultSummary into
        their own files, to reduce the size of run_webkit_tests to
        something more managable.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/result_summary.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_runner_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_input.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

 2010-12-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt multiprocessing - start over, prepare to fork the code
 
        This code cleans up the signatures and implementation of the
        TestRunner class so we can easily fork it to run either the
        stable implementation or the new, unstable message-passing
        implementation. The two variants will have different
        implementations of the run_tests() method. We will switch
        between the two based on the setting for the '--worker-model'
        switch. We rename the two currently valid values to 'old-inline'
        and 'old-threads'.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-22  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Update chromium archive test result url in rebaseline script.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-12-22  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/8633222> record-memory-win needs to record memory used by the webprocess.
        Verified on Chrome, Safari, and IE.
        With this change, we will record memory from a parent browser window and all child processes.

        * record-memory-win/main.cpp:
        (ProcessArgs):
        (PrintUsage):
        (getMemoryInfo):
        (printProcessInfo):
        (evalProcesses):
        (UseImage):
        (QueryContinuously):
        (ElapsedTime):

2010-12-22  Lucas Forschler  <lforschler@apple.com>

        Unreviewed rollout r74489, because it was missing changelog.

        * record-memory-win/main.cpp:
        
2010-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        Adding myself as a reviewer.

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

2010-12-22  Andrew Scherkus  <scherkus@chromium.org>

        Unreviewed.  Adding myself to committers.py.

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

2010-12-22  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        TestNetscapePlugIn should use #if defined
        https://bugs.webkit.org/show_bug.cgi?id=51471

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize):
        (NPP_New):

2010-12-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [chromium] DRT inspector layout tests are flaky in debug.

        DevTools window should be closed explicitly because it has custom deinitialization code.

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

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

2010-12-22  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style shouldn't complaint about underscores in variables in objective C files.
        https://bugs.webkit.org/show_bug.cgi?id=51452

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FileState.__init__): Added the information to determine if a file is C or Objective C.
        Using the file extension if possible but falling back to the file contents if we have a header file.
        (_FileState.is_objective_c): Determine if we have an Objective C by examining the file contents if needed.
        (_FileState.is_c_or_objective_c):
        (check_using_std): Changed to using _FileState to determine the file type.
        (check_max_min_macros): Ditto.
        (check_for_null): Ditto.
        (check_style): Changed the parameters to various calls since they now need _FileState
        to determine the file type.
        (check_language): Added the file_state parameter so it could be passed
        to check_identifier_name_in_declaration.
        (check_identifier_name_in_declaration): Don't warn about underscores in variables if
        this is an Objective C file.
        (_process_lines): Added information for the _FileState constructor (and moved the
        call to a place that had the information).
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppFunctionsTest.test_is_c_or_objective_c): Changed the tests to use FileState and exercise
        its functionality.
        (WebKitStyleTest.test_names): Add tests for underscores in Objective C files.

2010-12-21  Andy Estes  <aestes@apple.com>

        Reviewed by Mark Rowe.

        Do not build non-Intel architectures for WebKit2-related projects.
        https://bugs.webkit.org/show_bug.cgi?id=51440

        * MiniBrowser/Configurations/Base.xcconfig: Only build for i386 and x86_64.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2010-12-21  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Rename WebThemeEngine/ControlDRT to WebThemeEngine/ControlDRTWin
        https://bugs.webkit.org/show_bug.cgi?id=51406 
        
        Rename WebThemeControlDRT to WebThemeControlDRTWin and WebThemeEngineDRT
        to WebThemeEngineDRTWin and update references everywhere.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShellWin.cpp:
        * DumpRenderTree/chromium/WebThemeControlDRTWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRT.cpp.
        * DumpRenderTree/chromium/WebThemeControlDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeControlDRT.h.
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp.
        * DumpRenderTree/chromium/WebThemeEngineDRTWin.h: Renamed from Tools/DumpRenderTree/chromium/WebThemeEngineDRT.h.

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Clicking missing plug-in text does not show a sheet
        https://bugs.webkit.org/show_bug.cgi?id=51403

        Update for changes to the WebPageUIClient.

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

2010-12-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue will report constant failures as flaky if other tests flake
        https://bugs.webkit.org/show_bug.cgi?id=51272

        This patch just removes functionality and adds testing.
        Previously we attempted to report flaky tests when we had
        two different tests fail in a row.  However, since we stop
        running the tests at the first failure, our code was wrong in
        trying to determine flakiness from the incomplete runs.

        Originally I posted an alternate patch:
        https://bug-51272-attachments.webkit.org/attachment.cgi?id=77078
        which fixed our flaky logic in this case, however it was decided
        that that patch would be too difficult to maintain, so now
        I'm just removing the broken logic.

        This will dramatically cut-down on our flaky-test false positives
        at the (small) cost of the queues being unable to report
        any flakiness if the tree is very flaky.  (With at least one test
        flaking on every run, we'll never report failures anymore.)  I think
        this is a tradeoff worth making.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2010-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue wrongly rejects patches when it can't update itself
        https://bugs.webkit.org/show_bug.cgi?id=46636

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-12-20  Adam Barth  <abarth@webkit.org>

        Move web sites to Websites directory
        https://bugs.webkit.org/show_bug.cgi?id=51323

        Update references to BugsSite to point to the new location.

        This patch was never officially reviewed (because it was too large to
        upload to bugs.webkit.org), but it was discussed on webkit-dev and Mark
        Rowe gave me the green light.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/common/config/build.py:
        * Scripts/webkitpy/common/config/build_unittest.py:
        * Scripts/webkitpy/common/prettypatch.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/style/main.py:

2010-12-20  Adrienne Walker  <enne@google.com>

        Unreviewed. Adding myself to the list of committers.

        * webkitpy/common/config/committers.py:

2010-12-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8757601> Don't install header files in to the Resources directory.

        * Scripts/check-for-inappropriate-files-in-framework: Don't allow .h files in the
        Resources directory.

2010-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should include bot id when attaching failure diffs
        https://bugs.webkit.org/show_bug.cgi?id=51280

        This is a tiny change to include the bot id in the name of the attachment.
        Most of this diff is just changing the unit test expectations
        now that I hid the comment printing when the comment is None.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-20  Jeff Miller  <jeffm@apple.com>

        Reviewed by Dan Bernstein.

        Tools/vcbin/midl.exe needs to be rebuilt
        https://bugs.webkit.org/show_bug.cgi?id=51347

        * vcbin/midl.exe: Rebuilt.

2010-12-20  David Levin  <levin@chromium.org>

        Reviewed by Ariya Hidayat.

        .gitignore and webkit-tools-completion.sh have references to WebKitTools that should be Tools.
        https://bugs.webkit.org/show_bug.cgi?id=51343

        Follow up from the WebKitTools -> Tools rename.

        * Scripts/webkit-tools-completion.sh:

2010-12-20  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests ignores trailing EOL differences in text tests
        https://bugs.webkit.org/show_bug.cgi?id=36983

        Changed the handling of new-line characters within new-run-webkit-tests
        to match old-run-webkit-tests.  Differences in leading and trailing empty
        lines in text expectation files are no longer ignored.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        Added unit tests.  Removed old duplicate unit test entries.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-20  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style should detect function declarations (and trivial functions).
        https://bugs.webkit.org/show_bug.cgi?id=51303

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.begin): Add is_declaration and changed the line count
        start to begin at -1 (which will keep the results consistent, since
        the starting line number passed in is one less in this change).
        (detect_functions): changed function detection to now catch trivial
        functions and declarations.
        (check_pass_ptr_usage): Don't check for Pass*Ptr on the first line
        of the function as this may look at return values (when processing
        a declaration).
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (FunctionDetectionTest.perform_function_detection): Basic mechanics
        of testing the function detection.
        (FunctionDetectionTest.test_basic_function_detection): Test a simple
        function.
        (FunctionDetectionTest.test_function_declaration_detection): Test a
        declaration.
        (FunctionDetectionTest.test_non_functions): A test case for a case
        that caused the code to fail due to the { being in quotes.
        (PassPtrTest.test_pass_ref_ptr_return_value): Added some more test
        cases to help catch false alarms for return values.
        (PassPtrTest.test_pass_ref_ptr_member_variable): Ensure that
        we don't get false alarms for member variables either.

2010-12-20  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [CMAKE] Rename WEBKITTOOLS_DIR to TOOLS_DIR
        https://bugs.webkit.org/show_bug.cgi?id=51319

        * CMakeListsEfl.txt:

2010-12-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Move WebKitExamplePlugins to Examples
        https://bugs.webkit.org/show_bug.cgi?id=51291

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

2010-12-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r74301.

        Rename WebKitTools to Tools
        https://bugs.webkit.org/show_bug.cgi?id=49861

        * MiniBrowser/DerivedSources.pro:
        * MiniBrowser/qt/MiniBrowser.pro:

2010-12-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Rename WebKitTools to Tools
        https://bugs.webkit.org/show_bug.cgi?id=49861

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * CodeCoverage/README:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::initializeFonts):
        * EWSTools/start-commit-queue.sh:
        * EWSTools/start-queue.sh:
        * GNUmakefile.am:
        * MIDLWrapper/MIDLWrapper.cpp:
        (wmain):
        * MiniBrowser/qt/MiniBrowser.pro:
        * Scripts/build-api-tests:
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/generate-coverage-data:
        * Scripts/old-run-webkit-tests:
        * Scripts/run-api-tests:
        * Scripts/run-iexploder-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-mangleme-tests:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-websocketserver:
        * Scripts/sunspider-compare-results:
        * Scripts/test-webkitperl:
        * Scripts/test-webkitpy:
        * Scripts/update-iexploder-cssproperties:
        * Scripts/update-webkit:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        * Scripts/webkitpy/common/system/ospath_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * WebKitTestRunner/DerivedSources.pro:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * wx/build/build_utils.py:

2010-12-16  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        Settings::editingBehaviorType() incorrectly returns mac for the gtk build when running tests
        https://bugs.webkit.org/show_bug.cgi?id=51163

        Since GTK+'s default editing behavior was changed to UNIX in r70975 (see webkitwebsettings.cpp),
        GTK+'s DRT should also reset to UNIX after each test execution.

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

2010-12-17  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style should understand WTF #include guards
        https://bugs.webkit.org/show_bug.cgi?id=44911

        * Scripts/webkitpy/style/checkers/cpp.py:
        (get_header_guard_cpp_variable): modify to suggest the WTF style
        of header guard when appropriate.
        (check_for_header_guard): handle multiple return values from
        get_header_guard_cpp_variable
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_build_header_guard): Added tests for the WTF
        header style.

2010-12-16  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        test-webkitpy: unittest for the xml.py checker displays a decprecation warning.
        https://bugs.webkit.org/show_bug.cgi?id=51210

        The error only shows up when using python 2.6 or later.

        * Scripts/webkitpy/style/checkers/xml.py: Replace the usage of
        the decprecated field error,message with something equivalent.

2010-12-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Add --exit-after-n-failures/crashes to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=51160
        
        Abort test run (in a similar way to how control-C is handled) when
        --exit-after-n-failures/crashes-or-timeouts are passed and we've reached
        that number of unexpected failures/crashes/timeouts.

        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-16  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style unit tests has some duplicate boilerplate code.
        https://bugs.webkit.org/show_bug.cgi?id=49519

        * Scripts/webkitpy/style/checkers/cpp.py:
        (update_include_state): Replaced the "io" parameter with the global
        configuration _unit_test_config. This allowed not calling into
        functions at a low level and also not plumbing through the injection
        information through many levels of code.
        (check_for_include_what_you_use): Ditto.
        (process_file_data): Added the ability to set up the unit test config
        to allow for injection.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (ErrorCollector.__init__): Added support for having a filter for errors.
        (ErrorCollector.__call__): Ditto.
        (CppStyleTestBase.process_file_data): Added the ability to set unit_test_config.
        (CppStyleTestBase.perform_lint): Consolidated logic for the perform functions.
        (CppStyleTestBase.perform_single_line_lint): Replace specific calls to
        functions in the cpp.py with generic processing and a filter that
        indicates what errors should be kept.
        (CppStyleTestBase.perform_multi_line_lint): Ditto.
        (CppStyleTestBase.perform_language_rules_check): Ditto.
        (CppStyleTestBase.perform_function_lengths_check): Ditto.
        (CppStyleTestBase.perform_pass_ptr_check): Ditto.
        (CppStyleTestBase.perform_include_what_you_use): Ditto.
        (CppStyleTest.test_multi_line_comments): Added another
        error message which applies to the test case.
        (CppStyleTest.test_spacing_for_binary_ops): Fixed test
        to not have config.h, since it is processed as a header file.
        (CppStyleTest.test_static_or_global_stlstrings): Fixed variable name
        style and indentation in checked code.
        (OrderOfIncludesTest.test_check_preprocessor_in_include_section):
        Fixed line number.
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_with_error):
        Ditto.

2010-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74136.
        http://trac.webkit.org/changeset/74136
        https://bugs.webkit.org/show_bug.cgi?id=51135

        r74136 breaks chromium canary bots because some tests are not
        rebaselined correctly to resolve EOL differences (Requested by
        jianli on #webkit).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-15  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style to check .vcproj and .vsprops files for XML
        syntax errors

        Fixes <http://webkit.org/b/51103> check-webkit-style should check for
        XML syntax errors in .vcproj/.vsprops files

        Reviewed by Dave Levin.

        * Scripts/webkitpy/style/checker.py: Added lists of file extensions
        that should be treated as XML and that should be allowed to contain
        carriage returns. (These lists happen to be identical currently.)
        (FileType): Added a new XML type.
        (CheckerDispatcher.should_check_and_strip_carriage_returns): Added.
        Just does a simple file extension check.
        (CheckerDispatcher._file_type): Added a case for XML files.
        (CheckerDispatcher._create_checker): Ditto. We use XMLChecker for XML
        files (surprise!).
        (StyleProcessor.process): Ask the dispatcher whether we should pass the
        lines through the carriage checker.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherCarriageReturnTest.test_should_check_and_strip_carriage_returns):
        Added. Checks a few file names to see if carriage returns are allowed
        or not.
        (CheckerDispatcherDispatchTest.assert_checker_xml): Added. Similar to
        other assert_checker_* functions.
        (CheckerDispatcherDispatchTest.test_xml_paths): Added. Similar to other
        test_*_paths functions.
        (CheckerDispatcherDispatchTest.test_xml_paths): Added. Similar to other
        test_*_paths functions.
        (CheckerDispatcherDispatchTest.test_none_paths): Removed the vcproj
        file from this test case, as vcproj files now have a type.
        (StyleProcessor_CodeCoverageTest.MockDispatcher.should_check_and_strip_carriage_returns):
        Added. Similar to the other should_* functions.
        (StyleProcessor_CodeCoverageTest.test_process__carriage_returns_not_stripped):
        Added. Checks that carriage returns aren't checked for or stripped for
        allowed files.

        * Scripts/webkitpy/style/checkers/xml.py: Added.
        (XMLChecker.__init__): Simple init method.
        (XMLChecker.check): Pass each line through the expat parser, and record
        a style error for any errors thrown by the parser.

        * Scripts/webkitpy/style/checkers/xml_unittest.py: Added.
        (XMLCheckerTest.assert_no_error): Checks that the given XML does not
        produce a style error.
        (XMLCheckerTest.assert_error): Checks that the given XML produces an
        error of the given category on the given line.
        (XMLCheckerTest.mock_handle_style_error): Does nothing. Used for
        checking that the XMLChecker constructor works properly.
        (XMLCheckerTest.test_conflict_marker): Tests that conflict markers
        cause a style error (see, e.g., r73887).
        (XMLCheckerTest.test_extra_closing_tag): Tests that extra closing tags
        cause a style error (see, e.g., r73773).
        (XMLCheckerTest.test_init): Tests that the XMLChecker constructor works
        properly.
        (XMLCheckerTest.test_missing_closing_tag): Tests that missing closing
        tags cause a style error (see, e.g., r72795).
        (XMLCheckerTest.test_no_error): Tests that valid XML does not cause a
        style error.

2010-12-15  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        https://bugs.webkit.org/show_bug.cgi?id=51117
        Add a new leopard test bot
        really really commit to trunk this time.

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

2010-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Can't add files to an <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=51087

        * MiniBrowser/mac/BrowserWindowController.m:
        (runOpenPanel):
        (-[BrowserWindowController awakeFromNib]):
        Add simple implementation of runOpenPanel callback.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):
        Stub out runOpenPanel callback. 

2010-12-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should upload failure diffs when tests flake
        https://bugs.webkit.org/show_bug.cgi?id=51051

        To make this testable I needed to pipe FileSystem down onto tool.
        We've wanted it there for a long time anyway.

        This patch is kinda a big hack.  But we don't have a nice
        way to read results.html files.  I think this will need further
        revision before this code actually feels clean.

        As part of testing this change, I had to make MockBugzilla.create_bug
        actually return an id (like it should) which required updating
        a few other unit test results (for the better).

        The results_matching_keys change in layouttestresults/rebasline
        was an alternate path which I decided not to use in the end, but
        I left the change as it seemed an improvement.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-15  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests ignores trailing EOL differences in text tests
        https://bugs.webkit.org/show_bug.cgi?id=36983

        Changed the handling of new-line characters within new-run-webkit-tests
        to match old-run-webkit-tests.  Differences in leading and trailing empty
        lines in text expectation files are no longer ignored.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        Added unit tests.  Removed old duplicate unit test entries.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        make status-bubble white-space:nowrap so we can measure it's width without wrapping
        https://bugs.webkit.org/show_bug.cgi?id=51149

        * QueueStatusServer/templates/statusbubble.html:

2010-12-15  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        have the statusbubble postMessage it's metrics so that embedders can properly size the iframe
        https://bugs.webkit.org/show_bug.cgi?id=51125

        * QueueStatusServer/templates/statusbubble.html:

2010-12-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitpy/common/net/buildbot: Added property svn:ignore.

2010-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74117.
        http://trac.webkit.org/changeset/74117
        https://bugs.webkit.org/show_bug.cgi?id=51113

        This broke the GTK1 build. (Requested by mrobinson on
        #webkit).

        * Scripts/webkitdirs.pm:

2010-12-15  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Change generate-forwarding-headers.pl for GTK port usage 
        (https://bugs.webkit.org/show_bug.cgi?id=37369)

        * Scripts/webkitdirs.pm: Added changes to build webkit2 for GTK port using build-webkit script.

2010-12-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Jian Li.

        [DRT/Chromium] Remove another unnecessary error message
        https://bugs.webkit.org/show_bug.cgi?id=51083

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

2010-12-14  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Add a new Leopard Debug Test WK2 Bot

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

2010-12-14  Ojan Vafai  <ojan@chromium.org>

        Fix python unittests after http://trac.webkit.org/changeset/74070.

        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-12-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Jian Li.

        [DRT/Chromium] Remove a unnecessary error message
        https://bugs.webkit.org/show_bug.cgi?id=51069

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

2010-12-14  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        Using BUG/BUGWK in test_expectations is error prone, should use BUGCR/BUGWK
        https://bugs.webkit.org/show_bug.cgi?id=48926

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        Add presubmit check that BUG isn't used, either BUGCR/BUGWK/BUGV8_.

2010-12-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] [Symbian] Do not use pkg-config on Symbian as it is not supported
        https://bugs.webkit.org/show_bug.cgi?id=50231

        Guard CONFIG+=link_pkgconfig with !symbian.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-12-14  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Ojan Vafai.

        [new-run-webkit-tests] expectations parsing is slow
        https://bugs.webkit.org/show_bug.cgi?id=50635

        Avoid expensive iteration of all the tests when checking if a test
        file is to be skipped or not.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:

2010-12-14  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement STATE_FOCUSED, STATE_FOCUSABLE, and corresponding events for text objects
        https://bugs.webkit.org/show_bug.cgi?id=27048

        Add support in DRT for checking whether an accessibility UI
        element is focusable and/or focused. Implemented for GTK.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsFocusedCallback): New.
        (getIsFocusableCallback): New.
        (AccessibilityUIElement::getJSClass): Add the new available
        callbacks for isFocused and isFocusable.
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isFocused): New, implemented by checking
        whether the related AtkState value is in the object's state set.
        (AccessibilityUIElement::isFocusable): Ditto.
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isFocused): New, dummy implementation.
        (AccessibilityUIElement::isFocusable): Ditto.
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isFocused): Ditto.
        (AccessibilityUIElement::isFocusable): Ditto.

2010-12-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        webkit-patch should warn users when they're using a 32-bit git on a 64-bit system
        https://bugs.webkit.org/show_bug.cgi?id=50715

        This patch makes webkit-patch print the following:

        Warning: This machine is 64-bit, but the git binary (/usr/local/git/bin/git) does not support 64-bit.
        Install a 64-bit git for better performance, see:
        https://lists.webkit.org/pipermail/webkit-dev/2010-December/015249.html

        I wrote this mostly because I have approximately 8 machines that I use
        and making sure each one is using a good Git install seemed folly.
        webkit-patch makes a lot of git calls, so using a fast git can shave
        several seconds in every invocation.  See the webkit-dev thread for more info.

        This message will print twice during 'webkit-patch upload',
        once from webkit-patch and once from check-webkit-style.

        Unfortunately there is no good way to test this due to how machine-dependent
        the code is.  I considered writing a test for the log message, but it seemed not worth it.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-12-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        FlakyTestReporter doesn't understand bots running from multiple email addresses
        https://bugs.webkit.org/show_bug.cgi?id=50960

        This explains at least one of the dupes of:
        https://bugs.webkit.org/show_bug.cgi?id=50863
        that we saw filed by the commit-queue this morning.
        I think the other one was explained by my previous fix to result counting code.

        Since this is really hard to test with a unit test, instead I
        create a new (possibly useful in the future) command
        which given a layout test path will return you
        the one bug which our tools would assume it the flaky test bug.
        If some other script wants to use bug-for-test we'll
        need to extend it with some options like --create-if-missing or similar.

        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/bugfortest.py: Added.

2010-12-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        Add option to build-webkit to not build WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50988
        
        Add support for a --no-webkit2 option to build-webkit. It seems to save
        ~1 minute from clean builds and ~10 seconds from no-op builds.

        * Scripts/build-webkit:

2010-12-13  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Dave Kilzer.

        Update iexploder from 1.3.2 to 1.7.2
        Move 1.3.2 into its own subdir
        Add 1.7.2 into its own subdir
        update scripts to point to new 1.3.2 location (avoid breaking existing scripts)

        * Scripts/run-iexploder-tests:
        * Scripts/update-iexploder-cssproperties:
        * iExploder/CHANGELOG.txt: Removed.
        * iExploder/LICENSE.txt: Removed.
        * iExploder/README.txt: Removed.
        * iExploder/htdocs: Removed.
        * iExploder/iexploder-1.3.2: Added.
        * iExploder/iexploder-1.3.2/CHANGELOG.txt: Copied from iExploder/CHANGELOG.txt.
        * iExploder/iexploder-1.3.2/LICENSE.txt: Copied from iExploder/LICENSE.txt.
        * iExploder/iexploder-1.3.2/README.txt: Copied from iExploder/README.txt.
        * iExploder/iexploder-1.3.2/htdocs: Added.
        * iExploder/iexploder-1.3.2/htdocs/config.rb: Copied from iExploder/htdocs/config.rb.
        * iExploder/iexploder-1.3.2/htdocs/cssproperties.in: Copied from iExploder/htdocs/cssproperties.in.
        * iExploder/iexploder-1.3.2/htdocs/cssvalues.in: Copied from iExploder/htdocs/cssvalues.in.
        * iExploder/iexploder-1.3.2/htdocs/htmlattrs.in: Copied from iExploder/htdocs/htmlattrs.in.
        * iExploder/iexploder-1.3.2/htdocs/htmltags.in: Copied from iExploder/htdocs/htmltags.in.
        * iExploder/iexploder-1.3.2/htdocs/htmlvalues.in: Copied from iExploder/htdocs/htmlvalues.in.
        * iExploder/iexploder-1.3.2/htdocs/iexploder.cgi: Copied from iExploder/htdocs/iexploder.cgi.
        * iExploder/iexploder-1.3.2/htdocs/iexploder.rb: Copied from iExploder/htdocs/iexploder.rb.
        * iExploder/iexploder-1.3.2/htdocs/index.html: Copied from iExploder/htdocs/index.html.
        * iExploder/iexploder-1.3.2/htdocs/webserver.rb: Copied from iExploder/htdocs/webserver.rb.
        * iExploder/iexploder-1.3.2/tools: Added.
        * iExploder/iexploder-1.3.2/tools/lasthit.rb: Copied from iExploder/tools/lasthit.rb.
        * iExploder/iexploder-1.3.2/tools/osx_last_crash.rb: Copied from iExploder/tools/osx_last_crash.rb.
        * iExploder/iexploder-1.3.2/tools/showtest.rb: Copied from iExploder/tools/showtest.rb.
        * iExploder/iexploder-1.7.2: Added.
        * iExploder/iexploder-1.7.2/ChangeLog.txt: Added.
        * iExploder/iexploder-1.7.2/LICENSE.txt: Added.
        * iExploder/iexploder-1.7.2/README.txt: Added.
        * iExploder/iexploder-1.7.2/output: Added.
        * iExploder/iexploder-1.7.2/src: Added.
        * iExploder/iexploder-1.7.2/src/browser_harness.rb: Added.
        * iExploder/iexploder-1.7.2/src/config.yaml: Added.
        * iExploder/iexploder-1.7.2/src/css-atrules: Added.
        * iExploder/iexploder-1.7.2/src/css-atrules/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-atrules/webkit: Added.
        * iExploder/iexploder-1.7.2/src/css-properties: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/dillo: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/internet_explorer6: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-properties/webkit: Added.
        * iExploder/iexploder-1.7.2/src/css-pseudo: Added.
        * iExploder/iexploder-1.7.2/src/css-pseudo/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-pseudo/webkit: Added.
        * iExploder/iexploder-1.7.2/src/css-values: Added.
        * iExploder/iexploder-1.7.2/src/css-values/dillo: Added.
        * iExploder/iexploder-1.7.2/src/css-values/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/css-values/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/css-values/other: Added.
        * iExploder/iexploder-1.7.2/src/css-values/webkit: Added.
        * iExploder/iexploder-1.7.2/src/headers: Added.
        * iExploder/iexploder-1.7.2/src/headers/dillo: Added.
        * iExploder/iexploder-1.7.2/src/headers/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/headers/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/headers/webkit: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/dillo: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/internet_explorer6: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/other: Added.
        * iExploder/iexploder-1.7.2/src/html-attrs/webkit: Added.
        * iExploder/iexploder-1.7.2/src/html-tags: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/dillo: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/other: Added.
        * iExploder/iexploder-1.7.2/src/html-tags/webkit: Added.
        * iExploder/iexploder-1.7.2/src/html-values: Added.
        * iExploder/iexploder-1.7.2/src/html-values/dillo: Added.
        * iExploder/iexploder-1.7.2/src/html-values/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/html-values/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/html-values/other: Added.
        * iExploder/iexploder-1.7.2/src/html-values/webkit: Added.
        * iExploder/iexploder-1.7.2/src/iexploder.cgi: Added.
        * iExploder/iexploder-1.7.2/src/iexploder.rb: Added.
        * iExploder/iexploder-1.7.2/src/index.html: Added.
        * iExploder/iexploder-1.7.2/src/media: Added.
        * iExploder/iexploder-1.7.2/src/media/blank.ogg: Added.
        * iExploder/iexploder-1.7.2/src/media/blank.snd: Added.
        * iExploder/iexploder-1.7.2/src/media/blank.wav: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.bmp: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.gif: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.ico: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.jng: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.jpg: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.png: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.svg: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.tiff: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.xbm: Added.
        * iExploder/iexploder-1.7.2/src/media/bug.xpm: Added.
        * iExploder/iexploder-1.7.2/src/mime-types: Added.
        * iExploder/iexploder-1.7.2/src/mime-types/dillo: Added.
        * iExploder/iexploder-1.7.2/src/mime-types/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/mime-types/webkit: Added.
        * iExploder/iexploder-1.7.2/src/protocols: Added.
        * iExploder/iexploder-1.7.2/src/protocols/dillo: Added.
        * iExploder/iexploder-1.7.2/src/protocols/gtkhtml: Added.
        * iExploder/iexploder-1.7.2/src/protocols/mozilla: Added.
        * iExploder/iexploder-1.7.2/src/protocols/webkit: Added.
        * iExploder/iexploder-1.7.2/src/scanner.rb: Added.
        * iExploder/iexploder-1.7.2/src/version.rb: Added.
        * iExploder/iexploder-1.7.2/src/webserver.rb: Added.
        * iExploder/iexploder-1.7.2/testcases: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-Linux_x86_64_rv2.0b6pre_Gecko-20100904_Firefox-4.0b6pre-TEST-8375-1_59.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-Opera-9.80_Linux_x86_64_en_Presto-2.6.30_Version-10.61-16704-3_108,3.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Intel_Mac_OS_X_10_6_4_en-US_AppleWebKit-534.8_Chrome-7.0.529.0-TEST-611-3_36,9.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Intel_Mac_OS_X_10_6_4_en-US_AppleWebKit-534.8_hrome-7.0.529.0-TEST-55313622206-3_6,0.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.6_Chrome-7.0.503.1-TEST-120813-8_72,56,24,8,0.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.6_Chrome-7.0.503.1-TEST-121240-3_81,3.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.7_Chrome-7.0.513.0-4800-5_80,65,15.html: Added.
        * iExploder/iexploder-1.7.2/testcases/testcase-U_Linux_x86_64_en-US_AppleWebKit-534.7_Chrome-7.0.513.0-TEST-23583190347-3_15,12.html: Added.
        * iExploder/iexploder-1.7.2/tools: Added.
        * iExploder/iexploder-1.7.2/tools/lasthit.rb: Added.
        * iExploder/iexploder-1.7.2/tools/osx_last_crash.rb: Added.
        * iExploder/iexploder-1.7.2/tools/release_src.sh: Added.
        * iExploder/iexploder-1.7.2/tools/update_html_tags_from_sources.sh: Added.
        * iExploder/tools: Removed.

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove associated page concept from WKView constructor
        https://bugs.webkit.org/show_bug.cgi?id=50983

        Step 1: Remove associate page constructors from WKView and make
        all views use the shared namespace for the context.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change the WebKit2 public API so there is no explicit WKPageNamespace object
        https://bugs.webkit.org/show_bug.cgi?id=50898

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        * MiniBrowser/win/BrowserView.cpp:
        Convert MiniBrowser to not use PageNamespaces.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        Convert TestWebKitAPI to not use PageNamespaces.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        Convert WebKitTestRunner to not use PageNamespaces.

2010-12-13  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        webkit-patch rollout should be able to do multi-revision rollouts
        https://bugs.webkit.org/show_bug.cgi?id=33336

        Make it possible to pass more than one revision to webkit-patch.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/revertrevision.py:

2010-12-13  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Teach webkit-patch how to search bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=50500

        webkit-patch bug-search fails when there is only one result.
        Turns out we needed a bit more logic in our result count parsing code.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

2010-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add setSerializeHTTPLoads function to allow testing resource load order on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50758

        * DumpRenderTree/LayoutTestController.cpp:
        (setSerializeHTTPLoadsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSerializeHTTPLoads):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSerializeHTTPLoads):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setSerializeHTTPLoads):

2010-12-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        Remove "use-drt" option from test step command line, since the option was removed in r73748.
        https://bugs.webkit.org/show_bug.cgi?id=50936

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Removed the option.

2010-12-13  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Add revlink to BuildBot status
        https://bugs.webkit.org/show_bug.cgi?id=50914

        This adds a hyperlink to trac changeset on the revision numbers. 

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

2010-12-13  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Fix build if WebKitTools are not available
        https://bugs.webkit.org/show_bug.cgi?id=50242

        * MiniBrowser/qt/MiniBrowser.pro: Correct the comment.
        * Scripts/webkitdirs.pm: Added WebKitTools/MiniBrowser to $subdirs.
        * MiniBrowser/DerivedSources.pro: Added.

2010-12-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS Queues should remove orpahned pyc files before starting
        https://bugs.webkit.org/show_bug.cgi?id=50904

        A previous check added a platform.py which caused
        EWS bots on some platforms to hit an import exception.
        The platform.py file was removed in a subsequent commit, but
        the EWS bots in question stayed stuck.  This change will
        fix those bots once restarted (and prevent this in the future).

        I also went ahead and unified start-queue and start-commit-queue
        since they were nearly identical.  I also added bot_id support
        to both force all EWSes to have bot ids as well as get rid of the one
        remaining reason why I had my own copies of these scripts.
        Hopefully this will be enough to get all the other bot admins
        (ahem, Adam, ahem) to move to using these checked in copies as well.

        * EWSTools/start-commit-queue.sh: Removed.
        * EWSTools/start-queue.sh:

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Added LayoutTestController::setAsynchronousSpellCheckingEnabled()
        to control the setting.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAsynchronousSpellCheckingEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAsynchronousSpellCheckingEnabled):

2010-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix failing API test. It turns out that a pop-state event
        is sent before every fragment navigation, so we have to test
        for it in addition in PageLoadDidChangeLocationWithinPageForFrame.

        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::didSameDocumentNavigationForFrame):

2010-12-12  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Add new-run-webkit-tests support to gtk
        https://bugs.webkit.org/show_bug.cgi?id=50681

        Adding the basic support to run the new-run-webkit-tests.

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

2010-10-11  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mock DeviceOrientation client for DRT
        https://bugs.webkit.org/show_bug.cgi?id=47490

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):

2010-12-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] launcher: disable the Mozilla-style fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=50874

        Disabling the fullscreen API until its implementation for GTK is
        mature enough. The webview setting for it is already FALSE by
        default.

        * GtkLauncher/main.c:
        (createWindow):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue flaky test messages show cryptic version information for mac os x
        https://bugs.webkit.org/show_bug.cgi?id=50864

        Turns out platform.platform() returns kernel version information
        which isn't helpful, and just plain confusing on Mac
        (OS X 10.6.5 uses Darwin Kernel 10.5.0).

        So I've updated PlatformInfo.display_name() to special case
        mac.  I also found a bad use of sys.platform in the process
        and fixed that.  (sys.platform always returns 'darwin' on mac).

        * Scripts/webkitpy/common/system/platforminfo.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Exception seen while reporting flaky test with commit-queue.
        Just a missing include.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:

2010-12-10  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Remove old JSONResultsGenerator script that existed for backward-compatibility
        https://bugs.webkit.org/show_bug.cgi?id=50796

        Also updating the test code to use JSONResultsGeneratorBase and
        to improve test coverage for incremental cases.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:

2010-12-10  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        prepare-ChangeLog --help doesn't mention --bug shorthand -b
        https://bugs.webkit.org/show_bug.cgi?id=50835

        * Scripts/prepare-ChangeLog: be more explicit about -b and match file style.

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Bugs created by the commit-queue should all block on a master bug
        https://bugs.webkit.org/show_bug.cgi?id=50857

        This makes all bugs created by the commit-queue block on:
        https://bugs.webkit.org/show_bug.cgi?id=50856

        In the process of testing this, I found that the existing
        create_bug code was wrong.  I also found that existing
        unit tests for create-rollout used invalid values
        for options.blocks.  I fixed both issues and tested.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach webkitpy how to follow duplicate chains when posting comments on flake bugs
        https://bugs.webkit.org/show_bug.cgi?id=50853

        I also discovered when doing this that the code was posting
        the comment on the wrong bug, but that's fixed here too.

        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Make WKContextGetStatistics gather global statistics
        https://bugs.webkit.org/show_bug.cgi?id=50850

        Remove the code that gets the statistics and fills in the per context
        statistics information for now.

        * MiniBrowser/mac/BrowserStatisticsWindowController.m:
        (-[BrowserStatisticsWindowController refreshStatistics:]):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        commit-queue should report port/platform information when commenting on flaky test bugs
        https://bugs.webkit.org/show_bug.cgi?id=50839

        Renamed platform.py to platforminfo.py.  This broke import platform in executive.py
        which was only used by new run webkit tests (and clearly not unit tested).

        * Scripts/webkitpy/common/system/platforminfo.py: Renamed from WebKitTools/Scripts/webkitpy/common/system/platform.py.
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        commit-queue should report port/platform information when commenting on flaky test bugs
        https://bugs.webkit.org/show_bug.cgi?id=50839

        This was a suggestion from Tony Chang this morning.
        I added a platform.py class so I could easily mock the platform call,
        but that may not be the final solution for this mocking.
        We'll try it and see.

        * Scripts/webkitpy/common/system/platform.py: Added.
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-10  Krithigassree Sambamurthy  <krithigassree.sambamurthy@nokia.com>

        Reviewed by Joseph Pecoraro.

        Bug 43455 - [Qt]: Implement Application Cache Quotas
        https://bugs.webkit.org/show_bug.cgi?id=43455

        Introduce functions to allow new appcache layout test origin-quota.html
        to work correctly under Qt.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::dumpApplicationCacheQuota):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

        Introduce functions to allow new appcache layout test origin-quota.html
        to be successful under qt. Changes required because LayoutTestControllerQt
        does not inherit from LayoutController.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::shouldDumpApplicationCacheDelegateCallbacks):
        (LayoutTestController::dumpApplicationCacheDelegateCallbacks):

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move buildbot.py into its own module so we can split it out into one-file-per-class
        https://bugs.webkit.org/show_bug.cgi?id=50806

        We're adding more buildbot logic these days, so it makes sense
        to give buildbot its own module.

        * Scripts/webkitpy/common/net/buildbot/__init__.py: Added.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/buildbot.py.
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py.
        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2010-12-10  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Use FileSystem::remove when cleaning up http lock files
        https://bugs.webkit.org/show_bug.cgi?id=50830

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

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Martin Robinson.

        [GTK] DRT needs layoutTestController.setCacheModel
        https://bugs.webkit.org/show_bug.cgi?id=50705
        
        webkit_set_cache_mode() is called to set the cache model.
        
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCacheModel): Set the cache model. 

2010-12-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] remove --use-drt and add --use-test-shell
        https://bugs.webkit.org/show_bug.cgi?id=50701

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-12-10  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        [Chromium] Implement mocks for client-based geolocation
        https://bugs.webkit.org/show_bug.cgi?id=46895

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationClient):
        (WebViewHost::geolocationClientMock):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-12-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add hasSpellingMarker support to the DRT
        https://bugs.webkit.org/show_bug.cgi?id=50739

        Implemented the hasSpellingMarker to support spelling tests.

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

2010-12-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        webkit-patch: not possible to use build-and-test with local commits
        https://bugs.webkit.org/show_bug.cgi?id=33378

        Make --no-clean not even check if we have local commits.
        It's unclear to me why the code was originally written this way.
        I was unable to dig up a reason from svn history.

        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory_unittest.py: Copied from WebKitTools/Scripts/webkitpy/tool/steps/cleanworkingdirectory.py.

2010-12-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] AX: implement isEnabled in DRT
        https://bugs.webkit.org/show_bug.cgi?id=50814

        Implement AccessibilityUIElement::isEnabled() for GTK.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (checkElementState): New function to refactor common code.
        (AccessibilityUIElement::isEnabled): Implement this by checking
        the current state of the AtkObject.
        (AccessibilityUIElement::isSelected): Use the new
        checkElementState function.

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add the QWKContext API class to wrap the WebContext.
        https://bugs.webkit.org/show_bug.cgi?id=50750

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView):
        * MiniBrowser/qt/BrowserView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::WebView):

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Xan Lopez.

        [GTK] Unskipping some test cases in userscripts dependent on addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=50808

        Unskipping the following test cases:
        userscripts/mixed-case-stylesheet.html
        userscripts/simple-stylesheet.html
        userscripts/user-style-all-frames.html

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

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Eric Seidel.

        [GTK] Add DRT support for pageProperty, isPageBoxVisible, pageSizeAndMarginsInPixels, and addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=50783

        This patch allows to unskip the following test cases:
        printing/page-rule-selection.html
        printing/page-format-data.html

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageProperty): Added.
        (LayoutTestController::isPageBoxVisible): Ditto.
        (LayoutTestController::pageSizeAndMarginsInPixels): Ditto.
        (LayoutTestController::addUserStyleSheet): Ditto.

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make QtTestBrowser spawn QNAM in a secondary thread.

        A menu allows to switch QNAM back to the same thread.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleThreadedQnam):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::setQnamThreaded):
        * QtTestBrowser/webpage.h:
        (QnamThread::QnamThread):
        (QnamThread::~QnamThread):
        (QnamThread::networkAccessManager):
        (QnamThread::run):

2010-12-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] style="font-family: courier" makes text disappear
        https://bugs.webkit.org/show_bug.cgi?id=47452

        Add a test that verifies that fonts without valid charmaps are
        never selected.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Initialize DRT with our font (derived from Ahem)
        that has no valid charmap.
        * DumpRenderTree/gtk/fonts/FontWithNoValidEncoding.fon: Added.
        * DumpRenderTree/gtk/fonts/fonts.conf: Updated settings to override users'
        settings which may disable selection of bitmap fonts.

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        The commit-queue should file bugs about flaky tests it encounters
        https://bugs.webkit.org/show_bug.cgi?id=50803

        create_bug_for_flaky_test was insufficiently tested, thus buggy.
        Now it's tested.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:

2010-12-10  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Somehow this last-minute edit didn't quite get committed.

        The commit-queue should file bugs about flaky tests it encounters
        https://bugs.webkit.org/show_bug.cgi?id=50803

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:

2010-12-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The commit-queue should file bugs about flaky tests it encounters
        https://bugs.webkit.org/show_bug.cgi?id=50803

        This change got a bit big.  I also added a new config.urls file
        because I needed to share the view_source_url code with committervalidator.py.

        This adds a new class FlakyTestReporter which holds all the logic about
        reporting flaky tests to bugzilla.

        Right now this code knows how to look up bugs for flaky tests.
        If it can't find a bug filed from the commit-queue, it will open a new
        one, ccing the relevant people and adding information about the failure.

        It is not yet smart enough to chase down duplicate chains, or to include
        the actual failure diff.  But those can be added in later iterations.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/common/config/committervalidator.py:
        * Scripts/webkitpy/common/config/urls.py: Copied from WebKitTools/Scripts/webkitpy/tool/comments.py.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py: Added.
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py: Copied from WebKitTools/Scripts/webkitpy/tool/comments.py.
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/comments.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2010-12-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach webkit-patch how to search bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=50500

        This is a step towards teaching webkitpy how to file
        new bugs for flaky tests and update them when new flakes occur.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/bugsearch.py: Added.

2010-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        commit-queue errors out due to local commits
        https://bugs.webkit.org/show_bug.cgi?id=50766

        We seem to be tripping over having local commits in the working copy a
        lot recently.  I don't quite fully understand what the issue is, but
        this patch attempts to solve the problem by adding an explicit clean
        step before processing a patch.  Previously, we did the cleaning as
        part of the apply-attachment step, so this might not actually fix the
        problem.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-12-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Make new-run-webkit-tests --lint-test-files log slightly better
        messages and return -1 if lint fails. Remove the
        'suppress_errors' keyword param to the TestExpectationsFile
        class, and clean up logging and exception raising for error
        handling. Also add more unit tests and clean up the unit test code a bit.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-12-09  Tony Chang  <tony@chromium.org>

        Unreviewed, fix for windows code.  We were catching the wrong
        exception in Windows.

        * Scripts/webkitpy/common/system/filesystem.py:

2010-12-09  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (part IV)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Adjust call sites of webkit_thread_count to use the DumpRenderTreeSupportGtk version now.

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

2010-12-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Support the Mozilla-style Fullscreen Javascript API
        https://bugs.webkit.org/show_bug.cgi?id=50572

        Enable the Javascript Fullscreen support in the GtkLauncher. Also
        make DRT update the Chrome when the WebView settings have been
        reset to consistent values.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * GtkLauncher/main.c:
        (create_window):
        * Scripts/build-webkit:

2010-12-09  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Tor Arne Vestbø

        [Qt] run-launcher doesn't start the browser on Mac OS X 10.6
        https://bugs.webkit.org/show_bug.cgi?id=50742

        check not only QtWebKit.framework/QtWebKit but also libQtWebKit.dylib

        * Scripts/webkitdirs.pm:

2010-12-09  Joone Hur  <joone@kldp.org>

         Reviewed by Martin Robinson.

         [GTK] Support for viewport meta tag
         https://bugs.webkit.org/show_bug.cgi?id=45443

         Add support for testing the viewport properties for WebKitGtk.

         * DumpRenderTree/LayoutTestController.cpp:
         (dumpConfigurationForViewportCallback): Added this JS callback to set the size of the visible viewport.
         (LayoutTestController::staticFunctions):
         * DumpRenderTree/LayoutTestController.h:
         * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Added this function to test the viewport properties.
         * DumpRenderTree/mac/LayoutTestControllerMac.mm:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.
         * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.
         * DumpRenderTree/win/LayoutTestControllerWin.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.
         * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
         (LayoutTestController::dumpConfigurationForViewport): Ditto.

2010-12-08  William Siegrist <wsiegrist@apple.com>

        Reviewed by Eric Seidel.

        Migrate buildbot.py from xmlrpc to json.
        https://bugs.webkit.org/show_bug.cgi?id=50647

        * Scripts/webkitpy/common/net/buildbot.py:

2010-12-08  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        make starting the websocket server more reliable on windows
        https://bugs.webkit.org/show_bug.cgi?id=50712

        * Scripts/webkitpy/common/system/filesystem.py:
        (remove): Substitute method for os.remove to retry on error on Windows
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py: Use FileSystem.remove

2010-12-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement WebChromeClient::exceededDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=50656

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        Indicate that exceededDatabaseQuota is not implemented.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        Ditto.
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        Ditto.
        (WTR::TestController::initialize):
        Ditto.

2010-12-08  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (part III)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved the following methods from webkitprivate.h to DumpRenderTreeSupportGtk.cpp|h:
        * webkit_gc_collect_javascript_objects;
        * webkit_gc_collect_javascript_objects_on_alternate_thread;
        * webkit_gc_count_javascript_objects;
        * webkit_web_frame_layout.

        These were all only used by GTK+ DRT.

        * DumpRenderTree/gtk/EventSender.cpp:
        (dispatchEvent):
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):

2010-12-07  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] force NRWT to use DRT
        https://bugs.webkit.org/show_bug.cgi?id=50359

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-12-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Generalize didChangeLocationWithinPageForFrame for all same document navigations
        https://bugs.webkit.org/show_bug.cgi?id=50584

        * MiniBrowser/mac/BrowserWindowController.m:
        (didSameDocumentNavigationForFrame):
        (-[BrowserWindowController awakeFromNib]):
        (-[BrowserWindowController didSameDocumentNavigationForFrame:]):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didSameDocumentNavigationForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-12-06  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Make TestResultsServer return 404 for non-existing results files.
        https://bugs.webkit.org/show_bug.cgi?id=50581

        * TestResultServer/handlers/testfilehandler.py:

2010-12-06  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] fix an assert hit in DRT
        https://bugs.webkit.org/show_bug.cgi?id=50575

        This class uses WTF's RefPtr, but expects chrome's base::RefPtr
        semantics.

        Otherwise, we hit ASSERTION FAILED: !m_adoptionIsRequired
        (third_party/WebKit/JavaScriptCore/wtf/RefCounted.h:37 void
        WTF::RefCountedBase::ref()).

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::TestWebWorker):

2010-12-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        make webkit-patch command work when the git branch is not synced to the remote svn branch
        https://bugs.webkit.org/show_bug.cgi?id=50424

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-12-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Add build system
        https://bugs.webkit.org/show_bug.cgi?id=50522

        * CMakeListsWinCE.txt: Added.

2010-12-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Allow the Chromium port to have Leopard-specific baselines
        https://bugs.webkit.org/show_bug.cgi?id=50506

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

2010-12-03  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix 2 bugs with inspector tests in DRT
        https://bugs.webkit.org/show_bug.cgi?id=50492

        Tasks can outlive the tasklist (even when canceled) so this was
        causing a crash when ~WebTask() ran.  Avoid this by unregistering
        when a task is canceled.

        Also fix an assert when closing devtool windows by copying some
        logic from test_shell.

        * DumpRenderTree/chromium/Task.cpp:
        (WebTask::~WebTask):
        (TaskList::revokeAll):
        * DumpRenderTree/chromium/Task.h: Canceling a task now removes it from
            the tasklist (since the task can outlive the tasklist).
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::devToolsWebView):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::~WebViewHost): Don't load about:blank when closing
            a window if the window has devtools loaded.  This avoids an
            ASSERT and matches test_shell.

2010-12-06  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix GtkLauncher.c style, use webkit style
        https://bugs.webkit.org/show_bug.cgi?id=50542

        * GtkLauncher/main.c:
        (activateUriEntryCb):
        (updateTitle):
        (linkHoverCb):
        (notifyTitleCb):
        (notifyLoadStatusCb):
        (notifyProgressCb):
        (destroyCb):
        (goBackCb):
        (goForwardCb):
        (create_webViewCb):
        (webViewReadyCb):
        (closeWebViewCb):
        (createBrowser):
        (createStatusbar):
        (createToolbar):
        (createWindow):
        (main):

2010-12-04  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (Part II)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved more private method declared with WEBKIT_API to
        DumpRenderTreeSupportGtk, since they were only being used by DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        (LayoutTestController::execCommand):
        (LayoutTestController::isCommandEnabled):

2010-12-04  Antonio Gomes  <agomes@rim.com>

        Reviewed by Andreas Kling.

        Removed extern webkit_web_view_set_group_name from gtk/DumpRenderTree.cpp

        Method was removed by http://trac.webkit.org/changeset/71604

        * DumpRenderTree/gtk/DumpRenderTree.cpp:

2010-12-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix compilation warnings reported by clang
        https://bugs.webkit.org/show_bug.cgi?id=50252

        * GtkLauncher/main.c:
        (create_window): The create_statusbar function does not have
        parameters.

2010-12-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Zero-sized font does not yet work

        Fix fast/text/font-size-zero.html

        Copy other ports by setting minimumFontSize to 0 for DRT runs.

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

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

2010-12-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        WebKit2: Need client functions to notify app when the url changes due to a fragment navigation
        https://bugs.webkit.org/show_bug.cgi?id=50511

        Update tools for new didChangeLocationWithinPageForFrame client function (and changed bundle
        signature) and added a test for the functionality (PageLoadDidChangeLocationWithinPageForFrame.cpp)

        * MiniBrowser/mac/BrowserWindowController.m:
        (didChangeLocationWithinPageForFrame):
        (-[BrowserWindowController awakeFromNib]):
        (-[BrowserWindowController didChangeLocationWithinPageForFrame:]):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::toWK):
        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::adoptWK):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didChangeLocationWithinPageForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/file-with-anchor.html: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didChangeLocationWithinPageForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-11-08  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Made the previous calls to webkit_web_frame* functions defined as private
        APIs in webkitprivate.h go through DRTSupportGtk.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::focusedElement):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (resetDefaultsToConsistentValues):
        (dump):
        (webViewDocumentLoadFinished):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        (LayoutTestController::markerTextForListItem):

2010-12-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: use pretty text diff output
        https://bugs.webkit.org/show_bug.cgi?id=50484
        
        Serve *-pretty-diff.html for text diff output.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73302.
        http://trac.webkit.org/changeset/73302
        https://bugs.webkit.org/show_bug.cgi?id=50499

        Causes crashes in debug LayoutTests (Requested by xan_ on
        #webkit).

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Enable <a ping> for Mac/Windows/WebKit2 builds
        <rdar://problem/8504473>
        https://bugs.webkit.org/show_bug.cgi?id=50488

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST): Test that the default value of
        WKPreferencesGetHyperlinkAuditingEnabled is true.

2010-12-03  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Include the FrameView widget of a RenderWidget in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=49106

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        (AccessibilityUIElement::isEqualCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (CppBoundClass::getFromCppVariant):
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-12-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: organize tests by state, add dry run mode
        https://bugs.webkit.org/show_bug.cgi?id=50473
        
        Group tests in the menu by state, so that it's easier to see after
        processing the queue which failed.
        
        Add support for the --dry-run flag so that it's easier to test changes
        such as this (stubs out filesystem and SCM operations).

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Groundwork for <rdar://problem/7660733> and https://bugs.webkit.org/show_bug.cgi?id=50191
        WebKit2 Authentication Support

        Keep these builds working:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

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

2010-12-02  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: move existing baselines
        https://bugs.webkit.org/show_bug.cgi?id=50421
        
        Implement moving of existing baselines: move all files that are about
        to be overwriten by update baselines.
        
        Also fix a typo in the UI JS.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73211.
        http://trac.webkit.org/changeset/73211
        https://bugs.webkit.org/show_bug.cgi?id=50450

        Broke Chromium's "Webkit Win (dbg)(2)" bot. (Requested by
        yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73222.
        http://trac.webkit.org/changeset/73222
        https://bugs.webkit.org/show_bug.cgi?id=50449

        r73211 seemed to break Chromium's "Webkit Win (dbg)(2)" bot.
        (Requested by yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73228.
        http://trac.webkit.org/changeset/73228
        https://bugs.webkit.org/show_bug.cgi?id=50448

        r73211 seemed to break Chromium's "Webkit Win (dbg)(2)" bot.
        (Requested by yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * 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/test_type_base_unittest.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73231.
        http://trac.webkit.org/changeset/73231
        https://bugs.webkit.org/show_bug.cgi?id=50443

        r73211 seemed to broke Chromium's "Webkit Win (dbg)(2)" bot.
        (Requested by yutak on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-03  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style: false positive reported for #if macro
        https://bugs.webkit.org/show_bug.cgi?id=48242

        * Scripts/webkitpy/style/checkers/cpp.py: Adjusted check to avoid
          all preprocessor commands.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added test.

2010-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update the EWSTools scripts to use modern-style git repos
        https://bugs.webkit.org/show_bug.cgi?id=50402

        * EWSTools/create-webkit-git:
        * EWSTools/start-commit-queue.sh:
        * EWSTools/start-queue.sh:

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Fix Chromium Linux plugin tests by not logging
        unconditionally from the event handling code.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):

2010-12-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt multiprocessing - move logic back into run_webkit_tests

        This change moves a bunch of logic that I had put into
        message_broker back into run_webkit_tests, in a slightly
        different format. WorkerMessageBroker needed to become less aware of
        the logic the TestRunner class uses, and more generic.
        Eventually the MessageBroker will only do generic messaging and
        thread/process-pooling, and (almost) all of the
        run-webkit-tests-specific logic will be moved to
        run_webkit_tests.py and dump_render_tree_thread.py.
        
        The biggest changes are that the Broker can now start a single
        worker, but the responsibility for starting all of them is pushed
        back to the TestRunner (Manager), and the logic for checking if
        the threads are done or wedged is moved back to TestRunner. We
        also remove WorkerMessageBroker.cleanup (not needed) and
        cancel_workers (they have to be cancelled individually).
        
        The  message_broker is now encapsulated inside
        TestRunner._run_tests(); it only needs to exist while actually
        running the tests.

        Also, delete a bunch of tests in message_broker_unittest that no
        longer make much sense.

        This patch depends on bug 50372.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-02  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        Refactor test_types's compare_output() method so that it takes a
        TestInput object.

        compare_output() will need additional information included in a TestInput
        object to support reftests. This change is a pre-requirement of that.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * 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/test_type_base_unittest.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Add the ability to run script on 'new' and 'paint' in the test plugin
        https://bugs.webkit.org/show_bug.cgi?id=50425
        
        Add "onnew" and "onpaintevent" attributes to the test plugin,
        so that tests can run JS at these times.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (handleEventCarbon):
        (handleEventCocoa):
        (NPP_HandleEvent):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

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

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 Preferences should be held off the PageGroup, not the Context
        https://bugs.webkit.org/show_bug.cgi?id=50414

        Update for API changes.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2010-12-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: minor cleanup for multiprocessing work

        This change:
        * moves worker naming into TestShellThread, eliminating a
          parameter to the constructor and putting the responsibility in
          the correct place.
        * eliminates the _WorkerState() class in message_broker, because
          it turns out that state really needs to be in run_webkit_tests
        * renames the Broker classes to be module-private.
        * fixes a bunch of minor commenting and whitespace issues to
          make subsequent patches a bit clearer.
        * Adds a Port hook for default_worker_model() so that we can
          accomodate the potential for different worker models on
          different ports.
        * merge in the fix from 50420 for the brokenness introduced in
          bug 50367.

        This patch depends on bug 50367.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This change is a bunch of cleanup / refactoring of the file
        below. It moves a bunch of free functions to methods on the
        TestShellThread class, and restructures other methods to be
        closer to the structure we'll need for the multiprocessing
        rewrite.

        It also makes the logic of --run-singly a *lot* easier to follow
        by nestling all of the separate-thread logic into a single
        routine.

        There should be no semantic changes in this patch, just cleanup.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-12-02  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r73164.
        http://trac.webkit.org/changeset/73164
        https://bugs.webkit.org/show_bug.cgi?id=50359

        broke debugger tests on win

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: add updating of baselines
        https://bugs.webkit.org/show_bug.cgi?id=50305
        
        Implements updating of baselines, where we copy -actual.* files over
        the current -expected.* files. To do this, we need a
        _get_actual_result_files method to get test results files and a
        _rebaseline_test method to actually do the file copy and SCM operation.
        _rebaseline_test logs output into a buffer, this is useful for both
        showing result in the UI and for unit tests.
        
        To make passing around of the various test environment properties
        (results directory, filesystem, SCM, etc) easier, add a TestConfig
        class for them.
        
        Moving of existing baselines is not implemented yet, this patch is big
        enough as it is.

        * Scripts/webkitpy/common/system/filesystem.py:
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-12-02  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after vcproj updates.

        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Make sure
        that WIN_CAIRO is defined for this build.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Update file
        to reflect new 'Debug_Cairo_CFLite' and 'Release_Cairo_CFLite'
        (these were previously 'Debug_Cairo' and 'Release_Cairo'

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs API to turn on popup blocking
        https://bugs.webkit.org/show_bug.cgi?id=50407

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2010-12-01  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] force NRWT to use DRT
        https://bugs.webkit.org/show_bug.cgi?id=50359

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-12-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DumpRenderTree has two copies of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=49877

        * GNUmakefile.am: Remove the second copy of JavaScriptCore from the
        LDADD list for DumpRenderTree.

2010-12-02  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed: Added myself to list of Committers.

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

2010-12-01  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        build-webkit --chromium always updates DEPS and re-generates project files
        https://bugs.webkit.org/show_bug.cgi?id=50340
        
        Make build-webkit --chromium invoke update-webkit-chromium only when
        --update-chromium is passed in, so that we don't add 20 seconds to all
        builds.
        
        Making all invocations update was added with r61883, with the goal of
        making EWS bots always update. The bots will switch to using this flag
        (as will all other webkit-patch build steps) so nothing should change
        for them.

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2010-12-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: add a --dry-run / -n flag
        https://bugs.webkit.org/show_bug.cgi?id=50045

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinCairo build should not use link-time code generation (LTCG)
        https://bugs.webkit.org/show_bug.cgi?id=50353

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:

2010-12-01  Martin Robinson  <mrobinson@igalia.com>

        Touch GetUserAgentWithNullNPPFromNPPNew.cpp in an effort to force
        a rebuild of TestNetscapePlugin.la on GTK+. It seems that simply
        adding the file to the sources list was not enough to force the rebuild.

        * DumpRenderTree/TestNetscapePlugIn/Tests/GetUserAgentWithNullNPPFromNPPNew.cpp:
        Remove an empty line at the end of this file to force a rebuild.

2010-12-01  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2010-12-01  Martin Robinson  <mrobinson@igalia.com>

        Add missing file to the TestNetscapePlugin sources list after r73057.

        * GNUmakefile.am: Add missing file.

2010-12-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add PageGrouping to WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=50332

        - Update testing harnesses to deal with new PageGroup API.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (WKBundleInitialize):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        (TestWebKitAPI::InjectedBundleController::didInitializePageGroup):
        (TestWebKitAPI::InjectedBundleController::initializeTestNamed):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleTest.h:
        (TestWebKitAPI::InjectedBundleTest::initialize):
        (TestWebKitAPI::InjectedBundleTest::didInitializePageGroup):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didInitializePageGroup):
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::pageGroup):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::addUserScript):
        (WTR::LayoutTestController::addUserStyleSheet):
        (WTR::LayoutTestController::setXSSAuditorEnabled):
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * CLWrapper/CLWrapper.sln: Modified property svn:eol-style.
        * CLWrapper/CLWrapper.vcproj: Modified property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.sln: Modified property svn:eol-style.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Modified property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Added property svn:eol-style.
        * DumpRenderTree/win/ImageDiff.vcproj: Modified property svn:eol-style.
        * DumpRenderTree/win/ImageDiffCommon.vsprops: Added property svn:eol-style.
        * FindSafari/FindSafari.vcproj: Modified property svn:eol-style.
        * FindSafari/FindSafariCommon.vsprops: Added property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.sln: Modified property svn:eol-style.
        * MIDLWrapper/MIDLWrapper.vcproj: Modified property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserCFLite.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Added property svn:eol-style.
        * MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops: Added property svn:eol-style.
        * MiniBrowser/MiniBrowser.vcproj: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICFLite.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/Configurations/TestWebKitAPICoreFoundation.vsprops: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPI.sln: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Added property svn:eol-style.
        * TestWebKitAPI/win/TestWebKitAPIGeneratedCommon.vsprops: Added property svn:eol-style.
        * WebKitAPITest/WebKitAPITest.vcproj: Added property svn:eol-style.
        * WebKitAPITest/WebKitAPITestCommon.vsprops: Added property svn:eol-style.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj: Modified property svn:eol-style.
        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreFoundation.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/WebKitTestRunner.sln: Added property svn:eol-style.
        * WebKitTestRunner/win/InjectedBundle.vcproj: Added property svn:eol-style.
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj: Added property svn:eol-style.
        * WebKitTestRunner/win/InjectedBundleGeneratedCommon.vsprops: Added property svn:eol-style.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Added property svn:eol-style.
        * WinLauncher/WinLauncher.vcproj: Modified property svn:eol-style.
        * WinLauncher/WinLauncherCommon.vsprops: Added property svn:eol-style.
        * record-memory-win/record-memory-win-common.vsprops: Added property svn:eol-style.
        * record-memory-win/record-memory-win.vcproj: Modified property svn:eol-style.

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Return a correct user agent if NPN_UserAgent is called with a null NPP from NPP_New.
        https://bugs.webkit.org/show_bug.cgi?id=50336

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add new test.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_New):
        Add default implementation/

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetUserAgentWithNullNPPFromNPPNew.cpp: Added.
        (GetUserAgentWithNullNPPFromNPPNew::GetUserAgentWithNullNPPFromNPPNew):
        (GetUserAgentWithNullNPPFromNPPNew::NPP_New):
        Get the user agent.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        Call PluginTest::NPP_New.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        Add new files.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        Call PluginTest::NPP_New.

2010-12-01  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent trunk changes.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::findString):
        * wx/build/settings.py:

2010-12-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50238

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added findString().
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::findString): Updated signature for autogenerated bindings.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Ditto.

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Try using svn:eol-style native on a vcproj file.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Modified property svn:eol-style.

2010-12-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Add WinCELauncher
        https://bugs.webkit.org/show_bug.cgi?id=50217

        * WinCELauncher/main.cpp: Added.

2010-11-30  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50236

        Add the missing function to the LayoutTestController.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::findString):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-11-30  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] fix get-int-identifier-special-values.html using TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=49036

        * DumpRenderTree/chromium/LayoutTestController.cpp: Use IsNumber instead of IsInt32
            for CppVariants.
        (LayoutTestController::cppVariantToBool):
        (LayoutTestController::cppVariantToInt32):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::evaluateInWebInspector):
        (LayoutTestController::setMockGeolocationError):

2010-11-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        update-webkit should call git fetch before git svn rebase
        https://bugs.webkit.org/show_bug.cgi?id=50273

        After discussion on webkit-dev, we've decided to move the "default"
        git setup to pulling updates from git.webkit.org in preference
        to rebuilding the local svn index using git svn fetch every time.

        This change should have no effect on people using the "old" git setup
        and should dramatically increase the speed of updates for those using
        the "new" git setup along with update-webkit.  I'm about to move the
        EWS and other queues over to this setup once this lands.

        * Scripts/update-webkit:

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        GTK: AX: implement press in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36146

        Implement AccessibilityUIElement::press() for GTK.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::press): Implemented.

2010-11-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        config.webkit_base_dir returns a path with a trailing slash
        https://bugs.webkit.org/show_bug.cgi?id=50197
        
        config.webkit_base_dir() should return a path without a trailing slash,
        like all the other methods that return paths.
        
        Undoes MockFileSytem changes by r72640, since they're no longer
        necessary for GetBaselinesTest to pass.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: baseline display tweaks
        https://bugs.webkit.org/show_bug.cgi?id=50207
        
        Determine which baselines were used when running the tests and highlight
        them in the UI. Sort platform names alphabetically.
        
        Also makes the server URL be launched in the user's browser
        automatically.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py:

2010-11-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8710645> WebKitTestRunner needs layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50238

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::findString): Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        All projects on Windows should use cmd files for build events
        https://bugs.webkit.org/show_bug.cgi?id=50213

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPostBuild.cmd: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPreBuild.cmd: Added.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:
        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd: Added.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Added.
        * DumpRenderTree/win/ImageDiffCommon.vsprops:
        * DumpRenderTree/win/ImageDiffPostBuild.cmd: Added.
        * DumpRenderTree/win/ImageDiffPreBuild.cmd: Added.
        * MiniBrowser/Configurations/MiniBrowserCFLite.vsprops:
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops:
        * MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops:
        * MiniBrowser/MiniBrowserPostBuild.cmd: Added.
        * MiniBrowser/MiniBrowserPreBuild.cmd: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:
        * TestWebKitAPI/win/TestWebKitAPIPostBuild.cmd: Added.
        * TestWebKitAPI/win/TestWebKitAPIPreBuild.cmd: Added.
        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WebKitAPITest/WebKitAPITestPostBuild.cmd: Added.
        * WebKitAPITest/WebKitAPITestPreBuild.cmd: Added.
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops:
        * WebKitTestRunner/win/InjectedBundlePostBuild.cmd: Added.
        * WebKitTestRunner/win/InjectedBundlePreBuild.cmd: Added.
        * WebKitTestRunner/win/WebKitTestRunnerPostBuild.cmd: Added.
        * WebKitTestRunner/win/WebKitTestRunnerPreBuild.cmd: Added.
        * WinLauncher/WinLauncherCommon.vsprops:
        * WinLauncher/WinLauncherPostBuild.cmd: Added.
        * WinLauncher/WinLauncherPreBuild.cmd: Added.

2010-11-29  Dan Bernstein  <mitz@apple.com>

        GTK DumpRenderTree build fix after r72887.

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

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Windows DumpRenderTree build fix after r72887.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::findString): Added empty implementation.

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        DumpRenderTree changes for testing the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038

        * DumpRenderTree/LayoutTestController.cpp:
        (findStringCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::findString):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController find:]):

2010-11-29  Johnny Ding  <jnd@chromium.org>

        Unreviewed: Add myself to the list of Committers.

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

2010-11-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8694997> DumpRenderTree fails to build.

        * DumpRenderTree/mac/PerlSupport/Makefile: Skip generating wrappers.

2010-11-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8694997> DumpRenderTree fails to build.

        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Renamed from WebKitTools/DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportTiger.pm.
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Renamed from WebKitTools/DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport_wrapTiger.c.
        * DumpRenderTree/mac/PerlSupport/Makefile:

2010-11-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Null-check needed in DRT's AccessibilityUIElement::allAtributes()
        https://bugs.webkit.org/show_bug.cgi?id=50154

        Added missing checks to allAttributes().

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::allAttributes): Added missing checks.

2010-11-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow pre-generation for package builds for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50139

        Use a build variable for the generated directory path and set the
        value based on CONFIG just like for WebKit1.

        For non-package builds use a relative base path for the
        genrated directory just like for WebKit1.

        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-11-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move some build logic from Qt to platform independent code
        https://bugs.webkit.org/show_bug.cgi?id=50134

        Create target directories inside generate-forwarding-headers.pl.

        * Scripts/generate-forwarding-headers.pl:

2010-11-24  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Windowless plugins gets broken key input
        https://bugs.webkit.org/show_bug.cgi?id=49927

        Convert the XEvent::keycode to ASCII before printing it. Not
        doing this was causing false positive in 
        plugins/keyboard-events.html.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (keycode_to_char):
        (webkit_test_plugin_handle_event):

2010-11-24  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] Html autofocus not working with QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=43169

        Tell the scene to set the webview item as the currently
        focused item. This makes the input field with autofocus get
        focus as it should.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):

2010-11-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt - clean up create_driver interface and print out the
        command line used for DumpRenderTree/TestShell.

        This patch adds a driver_cmd_line() call to the Port class in
        order to retrive the command line to print it out (as part of
        --print config).

        In addition, this patch cleans up the Port.create_driver()
        signature and the Driver constructor interface to take a worker
        number and no longer require the image_path argument (Chromium's
        drivers now synthesize the image_path from the worker number
        internally).

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] improve memory usage for test results server and store fewer runs
        https://bugs.webkit.org/show_bug.cgi?id=50035

        Store fewer runs and don't pass full files around when we only need bools.
        Greatly improves error rates on test-results.appspot.com.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/model/dashboardfile.py:
        * TestResultServer/model/jsonresults.py:

2010-11-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch implements the first part of the manager side of the
        Broker objects - it handles creating threads, waiting for them
        to complete, and running a single-threaded loop as well.

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

        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by David Levin.

        DRT should not generate pixel output for text/plain tests
        https://bugs.webkit.org/show_bug.cgi?id=50002
        
        Modify Mac, Windows and GTK DRT implementations to disable pixel output
        when encountering a text/plain response (the Chromium one already does
        this, and none of the other ports special-case text/plain output in
        the first place).

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Unreviewed.

        Add my other email address to committers.py.

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

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Make build-webkit --minimal build with ENABLE_INSPECTOR=0
        https://bugs.webkit.org/show_bug.cgi?id=49975

        * Scripts/build-webkit: Add ENABLE_INSPECTOR define to features,
        to enable the script to define it 0 in case of a minimal build.

2010-11-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The WebKitWebView should expose a set of signals encapsulating the behavior of the EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=49143

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView): Call the new connectEditingCallbacks function.
        * DumpRenderTree/gtk/EditingCallbacks.cpp: Added.
        (dumpNodePath):
        (dumpRange):
        (insertActionString):
        (selectionAffinityString):
        (shouldBeginEditing):
        (shouldEndEditing):
        (shouldInsertNode):
        (shouldInsertText):
        (shouldDeleteRange):
        (shouldShowDeleteInterfaceForElement):
        (shouldChangeSelectedRange):
        (shouldApplyStyle):
        (editingBegan):
        (userChangedContents):
        (editingEnded):
        (selectionChanged):
        (connectEditingCallbacks):
        * DumpRenderTree/gtk/EditingCallbacks.h: Added.
        * GNUmakefile.am: Added EditingCallbacks.{h,cpp} to the source list.

2010-11-24  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Make QtTestBrowser remember the selected user agent
        https://bugs.webkit.org/show_bug.cgi?id=50021

        Set user agent for a new page by using the old page's

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::setPage):

2010-11-24 Patrick Gansterer <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove Bakefile build system files
        https://bugs.webkit.org/show_bug.cgi?id=49983

        r53757 only removed the content, but not the files.
        This patch removes that empty files.

        * DumpRenderTree/wx/DumpRenderTree.bkl: Removed.
        * wx/browser/browser.bkl: Removed.
        * wx/build-wxwebkit: Removed.

2010-11-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        This patch cleans up the logic used to shard tests into groups a
        bit and adds the --worker-model flag to NRWT. The flag is only
        used at the moment to control whether to run single-threaded or
        not, but eventually will also allow toggling between threads and
        processes.

        Also add a minor cleanup with _test_is_slow(), which just
        eliminates some repetition and gives slightly better encapsulation.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-23  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: list current baselines and platforms
        https://bugs.webkit.org/show_bug.cgi?id=49991
        
        List existing baselines (with Trac links) for tests.
        
        Add dropdowns for choosing with platform baselines to target (and what
        to do with existing ones).

        Also fix MockFileSystem.join to behave more like os.path.join (unit
        test was ending up with two consecutive slashes in a layout test
        path).        

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver_unittest.py: Added.

2010-11-23  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        remove timeout argument to urlopen
        https://bugs.webkit.org/show_bug.cgi?id=49995

        Apparently the version of python we have on the bots doesn't accept a timeout argument.

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2010-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72628.
        http://trac.webkit.org/changeset/72628
        https://bugs.webkit.org/show_bug.cgi?id=49994

        This patch is causing layout-test failtures on GTK Linux
        64-bit Debug (Requested by ctguil on #webkit).

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-11-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        speculative fix for upload errors: stop using mechanize to upload to test-results.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=49944

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py:

2010-11-23  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Dimitri Glazkov.

        Include the FrameView widget of a RenderWidget in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=49106

        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::parentElementCallback):
        (AccessibilityUIElement::isEqualCallback):
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        (CppBoundClass::getFromCppVariant):
        * DumpRenderTree/chromium/CppBoundClass.h:

2010-11-23  Alex Grilo  <abgrilo@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Add tiled backing store to EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=45777

        Allow EWebLauncher to choose between single and tiled backing store

        * EWebLauncher/main.c:
        (on_key_down):
        (browserCreate):
        (main):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Renamed requestPermissionFromUser to featurePermissionRequested
        and cancelRequestsForPermission to featurePermissionRequestCanceled.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::featurePermissionRequestCanceled):
        * QtTestBrowser/webpage.h:

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Rename setUserPermission to setFeaturePermission

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::permissionSet):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        * QtTestBrowser/webpage.cpp:
        (WebPage::requestPermission):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Rename PermissionDomain to Feature, NotificationsPermissionDomain to Notifications
        and GeolocationPermissionDomain to Geolocation.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::cancelPermission):
        (WebCore::WebPage::permissionSet):
        (WebCore::DumpRenderTree::geolocationPermissionSet):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::requestPermission):
        (WebPage::cancelRequestsForPermission):
        * QtTestBrowser/webpage.h:

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Add a ByUser suffix to PermissionGranted/Denied. In the future
        we can add PermissionGrantedByDefault.


        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::permissionSet):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission):
        * QtTestBrowser/webpage.cpp:
        (WebPage::requestPermission):

2010-11-18  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        For speech input event, send an event object containing all the recognition results and metadata.
        https://bugs.webkit.org/show_bug.cgi?id=49736

        Updated DRT by renaming the mock result method on all platforms to the new signature.

        * DumpRenderTree/LayoutTestController.cpp:
        (addMockSpeechInputResultCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::addMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::addMockSpeechInputResult):

2010-11-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Fix some spacing issues with log messages with
        new-run-webkit-tests --verbose.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2010-11-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        update scm to work with different remote branches
        https://bugs.webkit.org/show_bug.cgi?id=49949

        This works if there are multiple svn tracking branches
        and/or if the tracking branch is refs/remots/origin/master
        instead of refs/remotes/trunk which is the direction we're trying
        to head since that makes fetches faster.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-11-22  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Ignore reference files which will be used by reftests when collecting
        test cases.
        https://bugs.webkit.org/show_bug.cgi?id=49835

        * Scripts/webkitpy/layout_tests/port/test_files.py:
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:

2010-11-22  Adam Roben  <aroben@apple.com>

        Use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops files

        Apple's Windows build allows placing header files and import libraries for WebKit's
        dependencies (CoreGraphics, CFNetwork, SQLite, etc.) outside the source tree via the
        $WebKitLibrariesDir environment variable. This is both required for production builds and
        convenient for Apple-internal developer builds. Apple's production builds also require that
        WebKit's shared .vsprops files be accessed relative to $WebKitLibrariesDir. In production
        builds, the files are copied into that directory tree by the
        WebKitLibraries/win/tools/WinTools.make file. In Apple-internal developer builds, the
        copying is done by
        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.

        This .vsprops copying is problematic in one very important case: when a developer updates
        their source tree and then tries to build. Visual Studio only reads .vsprops files when a
        project is first loaded. So, when Visual Studio is first opened after the .vsprops files are
        updated, it reads in the old files that were already residing in $WebKitLibrariesDir. When a
        build is started, JavaScriptCoreGenerated.make copies the new .vsprops files into
        $WebKitLibrariesDir, but Visual Studio will not pick up the changes.  The rest of the build
        will proceed with out-of-date .vsprops files, which will likely result in a build failure.

        To fix this, we now use normal relative paths to access the .vsprops files in the source
        tree rather than in $WebKitLibrariesDir, but prefix those paths with a new environment
        variable, $WebKitVSPropsRedirectionDir. In developer builds, this environment variable is
        unset, so the normal relative paths are used to read the .vsprops files out of the source
        tree directly. In production builds, this environment variable is set to a fake directory
        that will cause the .vsprops files in $WebKitLibrariesDir to be found when the relative path
        is resolved.
        
        For example, JavaScriptCore.vcproj uses this path for FeatureDefines.vsprops:

        $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        In developer builds, where $WebKitVSPropsRedirectionDir is unset, this will point to the
        files in WebKitLibraries\win\tools\vsprops in the source tree. In production builds,
        JavaScriptCore.make sets $WebKitVSPropsRedirectionDir to
        "$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\", so the full path for
        FeatureDefines.vsprops becomes:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        which resolves to:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        (We rely on the fact that Windows doesn't care whether the directories "1", "2", and "3"
        actually exist since they are matched by an equal number of ".." path components.)

        Note that Visual Studio still won't pick up changes made to .vsprops files while Visual
        Studio is open, but that problem hasn't seemed to cause developers many headaches so far.

        Fixes <http://webkit.org/b/49181> Windows build fails mysteriously when .vsprops files are
        updated

        Reviewed by Dave Hyatt.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:
        Changed to use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops
        files.

2010-11-22  Adam Roben  <aroben@apple.com>

        Make it possible to run tests on Windows without Visual Studio or VC++
        Express installed

        webkitdir.pm::setupCygwinEnv dies when Visual Studio and VC++ Express
        are not installed. But this function doesn't need to be called when we
        already have a build available and are just trying to run the tests.

        Fixes <http://webkit.org/b/49932> New Windows 7 bot can't run tests
        because Visual Studio/VC++ Express aren't installed

        Reviewed by Dave Hyatt.

        * Scripts/webkitdirs.pm:
        (determineConfigurationForVisualStudio): Don't call setupCygwinEnv, as
        it is not needed by this function. Also added a FIXME.

        (usingVisualStudioExpress): Call setupCygwinEnv directly rather than
        relying on determineConfigurationForVisualStudio doing it.

2010-11-19  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Simplify Driver.run_test() so that it takes only one parameter, TestInput.

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

        * Scripts/webkitpy/layout_tests/driver_test.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-22  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        [NRWT] Retry a few times in reading a png image to avoid a race condition.

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

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

2010-11-22  João Paulo Rechi Vita  <jprvita@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Fix EWebLauncher zoom discretization
        https://bugs.webkit.org/show_bug.cgi?id=49810

        * EWebLauncher/main.c:
        (nearest_zoom_level_get):
        (zoom_level_set):
        (on_load_finished):
        (on_key_down):

2010-11-21  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Fix ~300 WebKit2 tests by enabling developer extras preference.

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

2010-11-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Textareas should be resizable by default
        https://bugs.webkit.org/show_bug.cgi?id=49892

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp: Added.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        Add preferences test.

2010-11-19  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: checksum-only differences and prefetching
        https://bugs.webkit.org/show_bug.cgi?id=49841
        
        Add support for image test results where the only difference is in the
        checksum.
        
        Add prefetching of the image results from the next test.
        
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:

2010-11-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        nrwt multiprocessing - add 'worker number' concept, move stuff to worker thread

        Add the 'worker number' and 'worker name' concepts to the 
        TestShellThread objects, and move test_types and test_args from
        the TestRunner to the TestShellThread.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        Do some minor cleanup and bug fixing.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        nrwt - config.build_directory() is busted

        Fixes a typo that was causing us to usually return the top level
        directory WebKitBuild instead of WebKitBuild/{Debug,Release}. The
        bug was hidden by test stubs that were too simplistic :(.

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

        * Scripts/webkitpy/common/system/executive_mock.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add Debug_Cairo_CFLite and Release_Cairo_CFLite configurations for all vcproj files
        https://bugs.webkit.org/show_bug.cgi?id=49819

        * DumpRenderTree/DumpRenderTree.sln:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:

2010-11-19  Adam Roben  <aroben@apple.com>

        Add some more Windows slaves

        This is probably more than we will be using in the immediate future,
        but having some extra slave names makes experimenting with different
        configurations easier.

        Reviewed by Jon Honeycutt.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added 5 more
        Windows slaves and distributed them among the three different Test
        builders.

2010-11-19  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] REGRESSION: Record actual test results in the JSON result summary for non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49702

        Re-landing r72357 with a test fix.

        * 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:

2010-11-19  Avi Drissman  <avi@google.com>

        Reviewed by Antonio Gomes.

        Complete support for Unix editing mode
        https://bugs.webkit.org/show_bug.cgi?id=49757

        * DumpRenderTree/LayoutTestController.cpp:
        (setEditingBehaviorCallback):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setEditingBehavior):

2010-11-19  Adam Roben  <aroben@apple.com>

        Fix run-javascriptcore-tests when there's a space in the path to
        testapi

        Reviewed by Sam Weinig.

        * Scripts/run-javascriptcore-tests: Use an indirect object when calling
        system() to force it to interpret spaces in the path correctly.

2010-11-19  Adam Roben  <aroben@apple.com>

        Update scripts for .exe name changes after r72327

        As of r72327, the "_debug" suffix is only used in Debug_All builds.

        Reviewed by Sam Weinig.

        * Scripts/run-javascriptcore-tests:
        (testapiPath):

        * Scripts/sunspider-compare-results:
        (pathToBuiltJSC):

        * Scripts/webkitdirs.pm:
        (jscPath):
        (safariPath):

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Normalize Cairo/CFLite project/solution configuration names
        https://bugs.webkit.org/show_bug.cgi?id=49818

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * Scripts/webkitdirs.pm: Updated cairo build configs.

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows vcproj configuration names should be normalized across projects
        https://bugs.webkit.org/show_bug.cgi?id=49776

        * DumpRenderTree/DumpRenderTree.sln:
        * FindSafari/FindSafari.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.sln:
        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj:
        * TestWebKitAPI/win/TestWebKitAPIGeneratedCommon.vsprops: Added.
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/WebKitTestRunner.sln:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj:
        * WebKitTestRunner/win/InjectedBundleGeneratedCommon.vsprops: Added.
        * record-memory-win/record-memory-win.vcproj:

2010-11-18  Gavin Barraclough  <barraclough@apple.com>

        Build fix - as per DRT-mac, always enabled developer extras,
        in win/qt/gtk DRT.

        This is necessary to enable rich exception messages to be generated
        following https://bugs.webkit.org/show_bug.cgi?id=49708.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldEnableDeveloperExtras):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::shouldEnableDeveloperExtras):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldEnableDeveloperExtras):

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72357.
        http://trac.webkit.org/changeset/72357
        https://bugs.webkit.org/show_bug.cgi?id=49784

        It broke test-webkitpy tests since the patch didn't have the
        corresponding test update (Requested by kinuko on #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-11-18  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: add rebaseline queue
        https://bugs.webkit.org/show_bug.cgi?id=49763
        
        Add a UI queue (a multi-item <select>) where tests to be baselined
        can be enqueued (also supports basic removal). A queue is used instead
        of immediately doing rebaselines since SCM operations can take a while.
        It's better to go through lots of tests quickly to mark them as
        needing rebaselining and then batch the SCM operations.
        
        Also adds a simple log where results can be displayed.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 49708 - Stop recompiling functions to regenerate exception info.

        Instead only hold info as necessary – keep divot info is the inspector
        is enabled, line number info is debugging or profiling, and handler
        info for functions with try/catch.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldEnableDeveloperExtras):
            - always enable the developer tools from DRT, to ensure we
              produce rich error messages on JavaScript exceptions.

2010-11-18  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] REGRESSION: Record actual test results in the JSON result summary for non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49702

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-11-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: create first part of 'message_broker' class for multiprocessing fixes

        Create the first version of the 'message_broker' package. This
        class will encapsulate all of the threading/multiprocessing and
        message-sending details for the communication between the
        'manager' object and the 'worker' objects. For the moment, it
        just holds some routines and tests for logging thread stacks.

        There should be no functional changes in this patch, just moving stuff
        around.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove leftover Windows Debug_Internal configurations
        https://bugs.webkit.org/show_bug.cgi?id=49758

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:

2010-11-18  Adam Roben  <aroben@apple.com>

        Add three new Windows XP build slaves

        Reviewed by Steve Falkenburg.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added three
        new slaves, and added them to the Windows XP Debug (Tests) builder.

2010-11-18  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        update-webkit-support-libs should fall back to existing
        WebKitSupportLibrary version if there is no internet connectivity
        https://bugs.webkit.org/show_bug.cgi?id=49503

        Fall back to existing support libraries (if present) when there is
        no internet connection.

        Currently, update-webkit-support-libs dies with an "out-of-date"
        error when there is no internet connection because it cannot
        retrieve versioning information from developer.apple.com. Because
        update-webkit-support-libs fails, build-webkit fails. Instead,
        if there is no internet connection and the support libraries are
        present then we should warn the user and exit() with success so
        that build-webkit can work without an internet connection.

        * Scripts/update-webkit-support-libs:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Debug_Internal Windows configuration is unnecessary, should be removed
        https://bugs.webkit.org/show_bug.cgi?id=49753

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * MiniBrowser/win/stdafx.h:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        * WebKitTestRunner/win/TestControllerWin.cpp:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Clean up vcproj errors
        https://bugs.webkit.org/show_bug.cgi?id=49741

        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2010-11-18  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [NRWT] Fix a break of '--new-baseline' feature in pixel_test
        which is caused by r72249.

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

        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:

2010-11-18  Adam Roben  <aroben@apple.com>

        Implement layoutTestController.waitForPolicyDelegate on Windows

        Fixes <http://webkit.org/b/25038> <rdar://problem/6790213>.

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::waitForPolicyDelegate): Implemented by porting
        code from LayoutTestControllerMac.mm.

2010-11-18  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [NRWT] Fix a break of '--new-baseline' feature which is caused by r72249.

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

        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-11-18  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/refcount-leaks.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49485

        Add PluginObject.testObjectCount which returns the number of allocated
        TestObjects. Add PluginObject.testCreateTestObject which allocates
        and returns a TestObject.

        Add TestObject.refCount which returns the number of refs on the
        TestObject.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginGetProperty):
        (pluginInvoke):
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        (getTestObjectCount):
        (testAllocate):
        (testDeallocate):
        (testGetProperty):
        (testScriptObjectInvoke): Release a ref to a plugin object that was
            previously leaked.
        * DumpRenderTree/TestNetscapePlugIn/TestObject.h:

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKitTools projects (WebKitTestRunner, record-memory-win) should use vsprops for common build settings
        https://bugs.webkit.org/show_bug.cgi?id=49711

        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreFoundation.vsprops: Added.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * record-memory-win/record-memory-win-common.vsprops: Added.
        * record-memory-win/record-memory-win.vcproj:

2010-11-18  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Only add user agent strings to the list which aren't listed yet.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::updateUserAgentList):

2010-11-17  Adam Roben  <aroben@apple.com>

        Don't trigger Windows builds when chromium-win test results change

        Reviewed by Mark Rowe.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Changed the regular expression used to
        search for directory names to only consider full directory names,
        rather than matching directory names where the string we care about is
        a suffix of the name.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest): Added a test.

2010-11-17  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Remove a uri member from TestInput class.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-17  Adam Roben  <aroben@apple.com>

        Move FindSafari's settings into a vsprops file

        Fixes <http://webkit.org/b/49699> FindSafari should use a vsprops file

        Reviewed by Steve Falkenburg.

        * FindSafari/FindSafari.vcproj:
        * FindSafari/FindSafariCommon.vsprops: Added.

2010-11-17  Adam Roben  <aroben@apple.com>

        Use a minimum font size of 0 in DRT on Windows

        This is the Windows equivalent of r72164.

        Rubber-stamped by Dave Hyatt.

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

2010-11-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Andreas Kling.

        webkit-patch pretty-diff shouldn't need to be run from a checkout root in git
        https://bugs.webkit.org/show_bug.cgi?id=49639

        * Scripts/webkitpy/common/checkout/scm.py:

2010-11-17  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: add loupe for image diffs
        https://bugs.webkit.org/show_bug.cgi?id=49692
        
        Add a loupe (magnifiying glass) for inspecting image diffs. Shows an
        enlarged area of the expected, actual and diff images side by side.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKitLauncherWin should use vsprops for shared build settings
        https://bugs.webkit.org/show_bug.cgi?id=49696

        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Added.

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinLauncher should use vsprops for shared build settings
        https://bugs.webkit.org/show_bug.cgi?id=49695

        * WinLauncher/WinLauncher.cpp:
        (_tWinMain):
        (PrintView):
        (WndProc):
        (MyEditProc):
        * WinLauncher/WinLauncher.vcproj:
        * WinLauncher/WinLauncherCommon.vsprops: Added.

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Delete unused file unintentionally added in last change.

        * DumpRenderTree/win/DumpRenderTreeCURL.vsprops: Removed.

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        DumpRenderTree on Windows should use a vsprops file for shared project settings
        https://bugs.webkit.org/show_bug.cgi?id=49690

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCURL.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Added.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Added.
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/ImageDiffCommon.vsprops: Added.

2010-11-17  Hayato Ito  <hayato@chromium.org>

        Refactor TestTypeBase.compare_output().

        Introduce a TestOutput class and update compare_output() of each test
        types so that they can take both actual and expected TestOutput objects.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_output.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * 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:

2010-11-17  Adam Roben  <aroben@apple.com>

        Make each Windows Test builder use the same OS for all its slaves

        Currently each WebKit1 Windows Test builder has one Windows XP slave
        and one Windows 7 slave. Having different OSes in a single builder
        meant that the builders would alternate between red and green when
        there were OS-specific failures.

        Fixes <http://webkit.org/b/49688> Windows Test builders alternate
        between red and green because of multiple OS versions

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Renamed
        "Windows Release (Tests)" to "Windows 7 Release (Tests)", "Windows
        Debug (Tests)" to "Windows XP Debug (Tests)", and "Windows Release
        (WebKit2 Tests)" to "Windows 7 Release (WebKit2 Tests)". Updated the
        builders for the two WebKit1 builders so that they would all use the
        appropriate OS.

2010-11-17  James Robinson  <jamesr@chromium.org>

        Reviewed by Dan Bernstein.

        [chromium] Set minimum font size to 0 for DRT
        https://bugs.webkit.org/show_bug.cgi?id=49677

        Followup for http://trac.webkit.org/changeset/72141.

        Test: http/tests/misc/acid3.html

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):

2010-11-17  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Add missing file I forgot in r72220.

        * MiniBrowser/MiniBrowser.qrc: Added.

2010-11-17  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Make it possible to set custom user agent strings in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=49627

        Add a user agent dialog and a resource file for useragentlist.txt to MiniBrowser.

        * MiniBrowser/MiniBrowser.qrc: Added.
        Add it here to prevent qmake from detecting it
        since it needs to be copied to the build directory.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::updateUserAgentList):
        (BrowserWindow::showUserAgentDialog):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:

2010-11-17  Adam Roben  <aroben@apple.com>

        Make changes to the Mac WebKit2 Skipped file trigger Windows builds

        We use that file on Windows!

        Fixes <http://webkit.org/b/49643> Changes to
        LayoutTests/platform/mac-wk2 should trigger a Windows build, but don't

        Reviewed by Steve Falkenburg.

        * Scripts/webkitpy/common/config/build.py:
        (_should_file_trigger_build): Added the mac-wk2 directory and make it
        trigger builds on SnowLeopard and Windows.

        * Scripts/webkitpy/common/config/build_unittest.py:
        (ShouldBuildTest.test_should_build): Added a test.

2010-11-17  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Clear the speech input mock explicitly before each test.
        https://bugs.webkit.org/show_bug.cgi?id=49660

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController):
        (WebViewHost::reset): Invoke speech input mock's clearResults method.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::speechInputControllerMock): Moved mock from LayoutTestController.

2010-11-17  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, specify IRC nickname in committers.py.

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

2010-11-17  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Make http locking similar to perl implementation
        https://bugs.webkit.org/show_bug.cgi?id=49187

        * Scripts/webkitpy/common/system/file_lock.py: Added.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-17  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium][DRT] EventSender.contextClick() should aware spellchecking
        https://bugs.webkit.org/show_bug.cgi?id=49366

        - EvenSender: Checked WebContextMenuData.misspelledWord and added extra context menu entries
          according to the spellchecker suggestion
        - MockSpellCheck: add fillSuggestionList to provide fake suggestions.

        test_expectations.txt will be changed after this change is ported to test_shell.
        
        * DumpRenderTree/chromium/EventSender.cpp:
        (makeMenuItemStringsFor):
        (EventSender::contextClick):
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::fillSuggestionList):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/MockSpellCheck.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::mockSpellCheck):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Make sure the pref for minimum font size is just explicitly set to 0 every time,
        since the bots have 1 stuck in their plist otherwise.

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

2010-11-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: compute diffs client-side
        https://bugs.webkit.org/show_bug.cgi?id=49640
        
        The image diff output from the DRT is pretty bad on some ports (at
        least the Mac one), so it's better to compute diffs on the client by
        using <canvas>.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:

2010-11-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: display test results
        https://bugs.webkit.org/show_bug.cgi?id=49626
        
        Adds basic result display to the rebaseline server. On the Python side
        this involves:
        - Parsing the unexpected_results.json into a dictionary.
        - Serving it as JSON under /results.json.
        (the JSON -> dict -> JSON transform isn't strictly necessary right now,
        but I'll need to have access to the parsed results on the Python side
        for follow-up changes).
        
        On the web UI side this adds:
        - Markup for display image and text results (expected, actual, diff),
          and JS for populating it.
        - Markup for breaking down test results by failure type and directory,
          and JS for populating it.

        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js: Added.
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        See Chromium issue http://codereview.chromium.org/5133001/ - we
        are modifying the build bots to pass in the builder name with
        the "GPU" string appended instead of appending it in the code.

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

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

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
        https://bugs.webkit.org/show_bug.cgi?id=49632

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * MiniBrowser/MiniBrowser.vcproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * record-memory-win/record-memory-win.vcproj:

2010-11-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: rename TestInfo to TestInput, move image hash to work thread

        Rename the TestInfo class to TestInput to be clearer about its
        function, and move the checksum-reading code into dump_render_tree_thread
        to avoid cross-thread access.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Fix bustage. Remove the minimum font size pref setting in DumpRenderTree.

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

2010-11-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/8624267> Leak creating offscreen webview running fast/dom tests

        Use shared DeviceOrientationProviderMock. The old allocation method created a new WebDeviceOrientationProviderMock 
        for every WebView, and the WebKit API doesn't support that ownership model.

        I also fixed a leak in setMockDeviceOrientation by adding a missing release.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):

2010-11-16  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: log the process id in --verbose mode

        As part of the switch to multi-process mode, we should log the
        process id when running w/ --verbose.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:

2010-11-16  Adam Roben  <aroben@apple.com>

        Only trigger Windows builds when files that we actually use on Windows
        are changed

        A new Scheduler subclass, PlatformSpecificScheduler, has been added.
        It uses the new webkitpy.common.config.build module to determine
        whether a particular change should trigger a build on a particular
        platform. The Windows builders have been switched to use a
        PlatformSpecificScheduler.

        The logic to determine whether or not a particular change should
        trigger a build on a given platform has only been implemented/tested
        for Windows. I tried to make it easy to add more platforms in the
        future, but I don't have enough familiarity with all platforms to be
        able to implement it for them.

        Fixes <http://webkit.org/b/49407> Windows builders kick off builds for
        lots irrelevant changes (e.g., rebaselining Chromium test results)

        Reviewed by Eric Seidel.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Use a
        PlatformSpecificScheduler for the Windows builders.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (PlatformSpecificScheduler.__init__): Added. Stores our platform, sets
        up a ChangeFilter that filters to our branch and will call through to
        our filter method, and calls up to our base class.
        (PlatformSpecificScheduler.filter): Calls through to
        build.should_build to find out whether we should trigger a build for
        this change.

        * Scripts/webkitpy/common/net/build.py: Added.
        (_should_file_trigger_build): Uses a set of directories and regexp
        patterns to determine whether the given file should trigger a build on
        the given platform. As mentioned earlier, this has only been
        implemented for Windows, though I did try to make some guesses about
        other platforms.
        (should_build): Returns true if any of the files should trigger a
        build on the given platform.

        * Scripts/webkitpy/common/net/build_unittest.py: Added.
        (ShouldBuildTest.test_should_build): Does some basic testing to make
        sure we're triggering builds for the right files. It only tests
        Windows for now, though I tried to make some guesses about other
        platforms.

2010-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove synchronous QWebPage::checkPermissions signal
        https://bugs.webkit.org/show_bug.cgi?id=46810

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::grantDesktopNotificationPermission): When granting
        permission, grant it directly on the QWebPage/Frame, that will remember it.
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        * QtTestBrowser/webpage.h:


2010-11-16  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add isPrinting and setPrinting methods to DRT's LayoutTestController.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::isPrinting):
        (LayoutTestController::setPrinting):

2010-11-16  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Add a way to turn on tiled backing store in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=49587

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView): Added BackingStoreType
        argument to ctor. Propagating it to the QGraphicsWKView.
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow): Create the new BrowserWindow
        with the same BackingStoreType that this instance has.
        * MiniBrowser/qt/BrowserWindow.h: Added BackingStoreType member.
        * MiniBrowser/qt/main.cpp:
        (main): Use tiled backing store if got -tiled command line argument.
        Avoid redundant copy of command line args.

2010-11-16  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Move DeviceOrientationClientMock from LayoutTestController to WebViewHost.
        https://bugs.webkit.org/show_bug.cgi?id=48506

        This ensures that there is one mock per page WebView / WebViewHost. This is a
        design constraint of the DeviceOrientationClientMock because the m_controller
        field can only store a pointer to a single instance of the corresponding
        DeviceOrientationController.

        Test: fast/dom/DeviceOrientation/no-page-cache.html

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::deviceOrientationClientMock):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::deviceOrientationClientMock):
        (WebViewHost::deviceOrientationClient):
        (WebViewHost::reset):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-15  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Avoid polling in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=49542

        Make the WK2 testing session about 10-15% faster and decrease random flakiness
        resulting from timing skew by removing the millisecond polling from TestControllerQt.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::notifyDone): Add method stub.
        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestControllerRunLoop::instance):
        (WTR::TestControllerRunLoop::start):
        (WTR::TestControllerRunLoop::stop):
        (WTR::TestControllerRunLoop::TestControllerRunLoop):
        (WTR::TestControllerRunLoop::timerEvent):
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::notifyDone): Add method stub.

2010-11-15  Darin Adler  <darin@apple.com>

        * Scripts/webkitpy/common/net/bugzilla: Added property svn:ignore.

2010-11-15  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Add Ctrl+L shortcut to Qt Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=49544

        Add the shortcut to BrowserWindow.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::openLocation):
        * MiniBrowser/qt/BrowserWindow.h:

2010-11-14  David Levin  <levin@chromium.org>

        Reviewed by Daniel Bates.

        check-webkit-style should detect PassRefPtr usage in functions.
        https://bugs.webkit.org/show_bug.cgi?id=49513

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_function_lengths): Revert a comment change that I
         accidentally made in r71986.
        (check_pass_ptr_usage): Added the code to do the check.
        (process_line): Added the call to check_pass_ptr_usage.
        (CppChecker): Added the new error category.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase::perform_pass_ptr_check): Runs the new check for
         testing purposes.
        (PassPtrTest::*): The class/functions to unit test the new
         functionality.

2010-11-14  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection and the line count style checks should be separate.
        https://bugs.webkit.org/show_bug.cgi?id=49512

        * Scripts/webkitpy/style/checkers/cpp.py: Do the separation.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Adjust the test to
          call the detection function and fix line counts in two places now that
          the code really only counts the lines in the body of the function.

2010-11-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        http/tests/plugins tests print "Unhandled variable" to stderr under Qt
        https://bugs.webkit.org/show_bug.cgi?id=33438

        Stifle "Unhandled variable" warning to match what the other
        TestNetscapePlugin does (NPP_GetValue in TestNetscapePlugIn/main.cpp
        simply returns NPERR_GENERIC_ERROR for unhandled variables.)

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):

2010-11-13  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style function detection crashes on functions in templates.
        https://bugs.webkit.org/show_bug.cgi?id=49504

        For example "template <bool shouldClose(const Element*)>".

        * Scripts/webkitpy/style/checkers/cpp.py: If not function is detected, bail out.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Modified the complex
          function detection test to expose this issue.

2010-11-12  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection doesn't detect indented functions declaractions.
        https://bugs.webkit.org/show_bug.cgi?id=49446

        Indented function declarations occur inside class definitions, so
        they are a pretty common (and worth detecting).

        * Scripts/webkitpy/style/checkers/cpp.py:
          Changed regex to allow indentation.
          Changed the function start detection to only happen when not in a
          function.
          Changed function end detection to work based on matching braces
          instead of finding a close brace at the beginning of the line.
          Fixed close_expression to do what it says when it doesn't find
          the close.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Indented function test.

2010-11-12  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Nikolas Zimmermann.

        Make do-file-rename rename files in the directory WebKit2.

        This also makes the list of searched directories in do-file-rename
        consistent with the list of searched directories in the script do-webcore-rename.

        * Scripts/do-file-rename:

2010-11-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        Attempt yet again to land the fix for bug 49360 (respecting
        set-webkit-configuration). We need to handle the cases where
        trying to run webkit-build-directory to find out where the
        default configuration might be fails (that shows up on some
        Chromium bots that apparently don't have perl installed).

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

        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_standalone.py: Added.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-12  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        webkit-patch land logs commit message twice
        https://bugs.webkit.org/show_bug.cgi?id=49482
        
        Don't log the comment that's used by bugzilla.close_bug_as_fixed, since
        that's just the commit message, which we now output following the
        actual commit.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:

2010-11-12  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/script-object-invoke.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49280

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testScriptObjectInvoke):
        (pluginInvoke):

2010-11-12  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        webkit-patch land-cowboy (and other commands) should display the committed SVN revision after landing a patch
        https://bugs.webkit.org/show_bug.cgi?id=49471

        Right now there's no indication of a successful commit.
        
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2010-11-12  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Include detailed test modifiers in results.json and enable incremental uploading for non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49354

        Also moved/integrated the upload method from run_webkit_tests.py to json_results_generator.py.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-12  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Load a blank page when closing DRT WebViewHosts
        https://bugs.webkit.org/show_bug.cgi?id=49417

        In test_shell, when we close a window, we first load about:blank
        and run GC to fire the destruction logic of the page.  In test_shell,
        this happens in ~TestShell.  In DRT, we manage virtual windows as
        WebViewHosts, so we need to replicate this logic in ~WebViewHost.

        Managing focus is a bit trickier, since normally you would get window
        events to reset the focus to the right window.  We do it manually
        instead.

        This fixes 2 plugin tests on DRT.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::~TestShell): Move window close logic to ~WebViewHost.
        (TestShell::closeWindow): Move widget close() to WVH destructor and
            manage focus manually.
        (TestShell::closeRemainingWindows): Comment typo.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::closeWidget):
        (invokeCloseWidget):
        (WebViewHost::closeWidgetSoon): Close the window asynchronously (matches
            test_shell).
        (WebViewHost::~WebViewHost):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-12  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        cpp.py needs some tidying.
        https://bugs.webkit.org/show_bug.cgi?id=49443

        * Scripts/webkitpy/style/checkers/cpp.py:
          Fix parameter ordering for iteratively_replace_matches_with_char
          to mirror other similar functions (and improved comments, etc.)
          Also, use a python-ism (for/else) to get rid of a variable that
          was there to determine if something had been found in the loop.

2010-11-12  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by James Robinson.

        [Chromium/DRT] Make EventSendingController send complete touch events.
        https://bugs.webkit.org/show_bug.cgi?id=49285

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::sendCurrentTouchEvent):

2010-11-12  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed rollout of r71858.

        Rollout out r71858 since it breaks new-run-webkit-httpd as used by the
        NaCl tests.

        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_standalone.py: Removed.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] TestController::runUntil doesn't honor the timeout parameter
        https://bugs.webkit.org/show_bug.cgi?id=48941

        Implement the missing timeout of WebKitTestRunner for Qt.

        A QElapsedTimer has been added to RunUntilConditionLoop in order
        to measure how long the loop has been running. When the timer
        is bigger or equal than the timeout, the loop ends even if the
        condition is not met.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::RunUntilConditionLoop::start):
        (WTR::RunUntilConditionLoop::run):
        (WTR::RunUntilConditionLoop::timerEvent):
        (WTR::TestController::platformRunUntil):

2010-11-11  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection doesn't handle templates with spaces.
        https://bugs.webkit.org/show_bug.cgi?id=49427

        * Scripts/webkitpy/style/checkers/cpp.py: Stripped out templates when
          finding the function name.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Made the test have a
          template with a space.

2010-11-11  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Shinichiro Hamaji.

        Enable check-webkit-style on Qt files
        https://bugs.webkit.org/show_bug.cgi?id=48322

        Adding exception for _q_... private slots and
        ..._data() methods in tests

        * Scripts/webkitpy/style/checker.py: enable Qt dirs, add exceptions
        * Scripts/webkitpy/style/checker_unittest.py: improve unittests

2010-11-11  David Levin  <levin@chromium.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style function detection doesn't work for templates and destructors.
        https://bugs.webkit.org/show_bug.cgi?id=49425

        * Scripts/webkitpy/style/checkers/cpp.py: Changed regex for templates and destructors.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Made the test hit this issue.

2010-11-11  Joone Hur  <joone@kldp.org>

        Reviewed by Antonio Gomes.

        [GTK][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46598

        Support nodesFromRect in DRT

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

2010-11-11  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        editing/selection/context-menu-on-text.html fails on chromium
        https://bugs.webkit.org/show_bug.cgi?id=45898

        Enhance Chromium's EventSender::contextClick() to return
        array of menu strings. The implementation incomplete because
        Although actual context menu is implemented by the browser,
        it reflects editability of underlying context thus makes
        context-menu-on-text.html passed.
        
        * DumpRenderTree/chromium/EventSender.cpp:
        (makeMenuItemStringsFor): Added.
        (EventSender::contextClick): Now returns array of menu strings.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::showContextMenu): Now storing given WebContextMenuData object.
        (WebViewHost::clearContextMenuData): Added.
        (WebViewHost::lastContextMenuData): Added.
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-11  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        fix build breakage caused by fix for bug 49380 (r71858).

        config_standalone needs to ensure that the packages it needs are
        in sys.path.

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

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

2010-11-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Roben.

        Fix NRWT to respect set-webkit-configuration again :(

        This change fixes a typo in config.py that was causing the wrong
        value to be read initially and us never actually looking into
        the filesystem to get the default configuration.
        
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_standalone.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:

2010-11-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out Bug, Attachment and CommitterValidator from bugzilla.py
        https://bugs.webkit.org/show_bug.cgi?id=49403

        CommitterValidator really had nothing to do with bugzilla.py.
        I've put it next to committers.py for now since its rather tied to that file.

        * Scripts/webkitpy/common/config/committervalidator.py: Added.
        * Scripts/webkitpy/common/config/committervalidator_unittest.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla/attachment.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bug.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2010-11-11  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        fix missing 'pid' argument for http lockfile checking on win32
        https://bugs.webkit.org/show_bug.cgi?id=49363

        * Scripts/webkitpy/common/system/executive.py:

2010-11-11  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Move bugzilla.py into its own module in preparation for splitting one-file-per-class
        https://bugs.webkit.org/show_bug.cgi?id=49402

        * Scripts/webkitpy/common/net/bugzilla/__init__.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla.py.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py.

2010-11-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Use IAccessibleComparable to compare accessibility objects.
        https://bugs.webkit.org/show_bug.cgi?id=49118

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::isEqual):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (comparableObject):
        (AccessibilityUIElement::isEqual):

2010-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Scripts/build-webkit:

2010-11-10  Adam Roben  <aroben@apple.com>

        Print VC++ Express build logs in the same order that the projects are
        built

        Fixes <http://webkit.org/b/49326> print-vse-failure-logs prints logs
        in an unhelpful order

        Reviewed by Eric Seidel.

        * Scripts/print-vse-failure-logs:
        (PrintVisualStudioExpressLogs._build_order): Added. Uses
        print-msvc-project-dependencies to figure out the order in which
        projects are built.
        (PrintVisualStudioExpressLogs._sort_buildlogs): Added. Sorts the logs
        based on their build order and project name.
        (PrintVisualStudioExpressLogs._obj_directory): Moved code to find the
        scripts directory from here...
        (PrintVisualStudioExpressLogs._scripts_directory): ...to here.
        (PrintVisualStudioExpressLogs.main): Sort the logs before printing
        them.

2010-11-10  Adam Roben  <aroben@apple.com>

        Only print the interesting text from VC++ Express build logs

        Fixes <http://webkit.org/b/49325> It's hard to find the interesting
        output from print-vse-failure-logs

        Reviewed by Eric Seidel.

        * Scripts/print-vse-failure-logs: Removed unnecessary os.path import,
        added newly-required imports. Removed a comment that was essentially a
        FIXME, and is now fixed.
        (PrintVisualStudioExpressLogs._relevant_text): Added. Uses
        BeautifulSoup to extract the relevant text from the build log.
        (PrintVisualStudioExpressLogs.main): Only print the relevant text.

2010-11-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] http/tests/security/XFrameOptions fail with Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=49286
        
        The tests in http/tests/security/XFrameOptions started to fail after
        r71297, since it changed the WebViewHost::assignIdentifierToRequest
        logic to always assign identifiers to requests, even if we're not going
        to be dumping resource load callbacks at that point. These tests
        only call LayoutTestController.dumpResourceLoadCallbacks after the
        request is started, thus their expectations have "<unknown>" as the
        identifier. Change WebViewHost to the previous behavior, which also
        match the other ports'.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::assignIdentifierToRequest):
        (WebViewHost::removeIdentifierForRequest):

2010-11-08  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/return-npobject.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49103

        This tests that we can get an NPObject returned through a method on
        an NPAPI Object.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testCallbackReturn):
        (pluginInvoke):

2010-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71672.
        http://trac.webkit.org/changeset/71672
        https://bugs.webkit.org/show_bug.cgi?id=49276

        It doesn't work on Chromium Windows bot (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/common/system/file_lock.py: Removed.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-09  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Make http locking similar to perl implementation
        https://bugs.webkit.org/show_bug.cgi?id=49187

        * Scripts/webkitpy/common/system/file_lock.py: Added.
        * Scripts/webkitpy/common/system/file_lock_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-09  James Kozianski  <koz@chromium.org>

        Reviewed by Eric Seidel.

        Clean up imports for webkit-patch.
        https://bugs.webkit.org/show_bug.cgi?id=49083

        Move some imports from commands into main.py where they are used.
        Move command imports into the __init__ of the commands module.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/main.py:

2010-11-09  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][QtTestBrowser] Don't erase incorrect url in the Url Bar
        https://bugs.webkit.org/show_bug.cgi?id=49047

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::setAddressUrl):

2010-11-09  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Improve old-run-webkit-tests --verbose to show DumpTool opening/closing
        https://bugs.webkit.org/show_bug.cgi?id=49252

        * Scripts/old-run-webkit-tests:

2010-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Output of old-run-webkit-tests is buggy in verbose mode
        https://bugs.webkit.org/show_bug.cgi?id=49249

        * Scripts/old-run-webkit-tests: Redundant outputs removed.

2010-11-08  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Link with target name set does not work
        https://bugs.webkit.org/show_bug.cgi?id=48865

        When a new page is created with a name (target=myFrame), the new
        mainFrame could not be found because they where not stored in the
        same PageGroup. As PageGroup are not exposed externally so the
        simpliest solution is to use a global page group name. This also fixes
        issue with visited link coloration across pages. After this change the
        private function webkit_web_view_set_group_name() was no longer used
        so it was removed completly.

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

2010-11-08  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Kent Tamura.

        WebViewHost::reset() uses placement new.
        https://bugs.webkit.org/show_bug.cgi?id=49069

        WebViewHost is using placement destruction / new to simulate a fresh
        WebViewHost object at the same address. This is because the WebView remains
        open across tests and maintains a pointer to the WebViewHost.
        This change resets member variables explictly instead of the placement new dance.

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

2010-11-08  Dirk Pranke <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Fix the webkit_base_dir logic in webkitpy/layout_tests/port/config.py. 
        It turns out that NRWT can't use the code in scm.find_checkout_root()
        because the Chromium bots don't do full checkouts of the WebKit
        tree; they only check out subdirectories like WebKitTools/Scripts.
        Until we can figure out a better approach for this, I've
        restored the base_dir-detecting code from NRWT, which works in
        any directory tree, scm or no.

        This also restores the files modified in r71475 and r71474.

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

        * WebKitTools/Scripts/webkitpy/layout_tests/port/config.py
        * WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py

2010-11-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch failure-reason explodes if a build is missing
        https://bugs.webkit.org/show_bug.cgi?id=49195

        This is likely a recent regression.  Adding a unit test for this case.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Ignore the system scrollbar setting.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Set the scrollbar default.

2010-11-05  Adam Roben  <aroben@apple.com>

        Make webkitpy.common.system.executive_unittest pass when running under
        Win32 Python

        Fixes <http://webkit.org/b/49033>.

        Reviewed by Dave Levin and Eric Seidel.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output): Pass the arguments through
        encode_argument_if_needed rather than using Cygwin-specific code here.
        (Executive.run_and_throw_if_fail): Use child_process_encoding to decode
        the output.
        (Executive.run_command): Use encode_argument_if_needed to encode the
        arguments and child_process_encoding to decode the output.
        (Executive._child_process_encoding): Returns the encoding that should be
        used when communicating with child processes. On Windows we use mbcs,
        which maps to the current code page. On all other platforms we use
        UTF-8.
        (Executive._should_encode_child_process_arguments): Returns True if
        arguments to child processes need to be encoded. This is currently
        only needed on Cygwin and Win32 Python 2.x.
        (Executive._encode_argument_if_needed): Encode the argument using
        child_process_encoding if we need to encode arguments to child
        processes on this platform.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (never_ending_command): Added. Returns arguments to run a command that
        will not quit until we kill it. On Windows we use wmic, on other
        platforms we use yes.
        (ExecutiveTest.test_run_command_with_unicode): Changed to expect the
        mbcs encoding to be used and for output from the child processes to
        have been roundtripped through encode/decode on Win32 Python. When
        UTF-8 is the encoding the roundtripping is undetectable, but with mbcs
        it's possible that some characters will not be able to be converted
        and will be replaced by question marks; the round-tripping allows us
        to expect this result.

        (ExecutiveTest.test_kill_process):
        (ExecutiveTest.test_kill_all):
        Use never_ending_command instead of invoking "yes" directly. Expect an
        exit code of 1 when using Win32 Python, as that's what seems to happen.

2010-11-08  Adam Roben  <aroben@apple.com>

        Roll out r71532

        It broke the build for Cygwin 1.7 installs. Cygwin 1.7's default
        .bashrc unsets %TEMP%, which broke copy-tools.cmd.

        * Scripts/webkitdirs.pm:

2010-11-08  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        run platform/chromium/plugins/nested-plugin-objects.html on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49094

        This tests that objects created by plugins are proplery cleaned up.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testPassTestObject):
        (pluginInvoke):
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        (testAllocate):
        (testDeallocate):
        (testGetProperty):
        (testConstruct):

2010-11-08  Adam Roben  <aroben@apple.com>

        Mark Windows builds triggered from Perl as being non-interactive

        This affects whether some of our scripts will show alerts vs. printing
        to the build log.

        Fixes <http://webkit.org/b/49181> Windows build fail mysteriously when
        .vsprops files are updated

        Reviewed by Steve Falkenburg.

        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject): Set WEBKIT_NONINTERACTIVE_BUILD to 1.

2010-11-08  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-08  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] If the http lock fails we shouldn't do any locking
        https://bugs.webkit.org/show_bug.cgi?id=49164

        If something goes wrong with the locking, the test should keep going.

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

2010-11-08  Adam Roben  <aroben@apple.com>

        Switch back to using kCGImageAlphaPremultipliedFirst when generating
        pixel dumps on Windows

        I changed this behavior in r71418 thinking that it was required for
        getting plugins to show up in pixel dumps. But it doesn't seem to be
        necessary, and was making it impossible to compare new Windows pixel
        dumps with existing Windows or Mac pixel dumps (because ImageDiff won't
        compare an image with alpha to an image without alpha).

        Fixes <http://webkit.org/b/49172> REGRESION (r71418): Can't compare
        new Windows pixel results to existing Windows or Mac results

        Reviewed by Antti Koivisto.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Replaced kCGImageAlphaNoneSkipFirst
        with kCGImageAlphaPremultipliedFirst.

2010-11-08  Csaba Osztrogonac  <ossy@webkit.org>

        Unreviewed, rolling out r71466.
        http://trac.webkit.org/changeset/71466
        https://bugs.webkit.org/show_bug.cgi?id=48865

        It broke layout tests on GTK bots.

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

2010-11-08  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Enable running of Qt API tests on BuildBot
        https://bugs.webkit.org/show_bug.cgi?id=49004

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

2010-11-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add clean-review-queue command to remove closed bugs from the webkit.org/pending-review
        https://bugs.webkit.org/show_bug.cgi?id=49160

        Bugzilla doesn't automatically remove r? when a bug gets closed.
        This script takes care of that for webkit.org.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/commands/upload.py:

2010-11-07  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed, rolling out r71474.
        http://trac.webkit.org/changeset/71474
        https://bugs.webkit.org/show_bug.cgi?id=48280

        breaks chromium webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=49151

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-11-07  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed, rolling out r71475.
        http://trac.webkit.org/changeset/71475
 
        breaks chromium webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=49151

        * Scripts/webkitpy/common/newstringio.py: Removed.
        * Scripts/webkitpy/common/newstringio_unittest.py: Removed.
        * Scripts/webkitpy/common/system/executive_mock.py: Removed.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Removed.
        * Scripts/webkitpy/layout_tests/port/config_mock.py: Removed.

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add files inexplicably not committed in r71474 as part of the
        fix for bug 48280.

        * Scripts/webkitpy/common/newstringio.py: Added.
        * Scripts/webkitpy/common/newstringio_unittest.py: Added.
        * Scripts/webkitpy/common/system/executive_mock.py: Added.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added.
        * Scripts/webkitpy/layout_tests/port/config_mock.py: Added.

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        new-run-webkit-tests: update port/base and port/webkit to use the
        new FileSystem and Config abstractions, pulling more logic out of
        the base Port classes into separate, mockable objects.

        Also create a MockFileSystem object, a MockConfig object, move
        MockExecutive into common/system to be next to executive, and
        update the config object to use a FileSystem.

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

        * Scripts/webkitpy/common/newstringio.py: Added.
        * Scripts/webkitpy/common/newstringio_unittest.py: Added.
        * Scripts/webkitpy/common/system/executive_mock.py: Added.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/config.py:
        * Scripts/webkitpy/layout_tests/port/config_mock.py:
        * Scripts/webkitpy/layout_tests/port/config_unittest.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build breakage.

        Apparently I uploaded the wrong version of the file to fix 49122
        and neither Eric or I noticed - it was missing a dirname() call.
        Fixing ...

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

        * Scripts/webkitpy/common/checkout/scm.py:

2010-11-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy/tool/* unittests change cwd and don't clean up properly

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

        * Scripts/webkitpy/common/checkout/scm.py:

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        suspendAnimations/resumeAnimations not present in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49109

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::suspendAnimations):
        (WTR::LayoutTestController::resumeAnimations):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-11-05  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        cleanup style in TestNetscapePlugIn/PluginObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=49044

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (getPluginClass):
        (pluginGetProperty):
        (pluginSetProperty):
        (variantToIdentifier):
        (testCallback):
        (getURL):
        (getURLNotify):
        (testInvokeDefault):
        (testGetProperty):
        (testDocumentOpen):
        (testWindowOpen):
        (pluginInvoke):
        (handleCallback):
        (notifyStream):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:

2010-11-05  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Add QueueStatusServer/__init__.py so others can run the QueueStatusServer tests
        https://bugs.webkit.org/show_bug.cgi?id=49032

        I wrote this file as part of bug 47847, but I forgot to commit it.
        No one else noticed it missing because test-webkitpy knows how
        to recover in the case where it can't import QueueStatusServer
        (which generally occurs due to not having installed the AppEngine SDK).

        * QueueStatusServer/__init__.py: Added.
        * QueueStatusServer/model/workitems_unittest.py:
         - Remove a test which fails.  This was probably landed (by me)
           from my other machine, which since this __init__.py was missing
           I never noticed the failure and landed this invalid test.
           Sadly we can't really test remove_work_item as it depends
           on .key() working.  .key() will throw unless the object
           has already been saved it seems.
           This may be a mis-design in our remove_work_item implementation,
           but for now, just removing the test.

2010-11-04  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style about TestNetscapePlugIn

        Fixes <http://webkit.org/b/49030> check-webkit-style is ignorant of
        TestNetscapePlugIn's coding conventions

        Reviewed by John Sullivan.

        * Scripts/webkitpy/style/checker.py: Lump TestNetscapePlugIn in with
        WebKitAPITest and TestWebKitAPI in having different include order and
        naming conventions than WebCore. Added some comments about why the
        exceptions exist.

2010-11-04  Adam Roben  <aroben@apple.com>

        Add a test that shows that windowed plugins are able to paint

        Somehow we never had a test for this before.

        Fixes <http://webkit.org/b/49029> Should add a test that shows
        windowed plugins can paint

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/DrawsGradient.cpp: Added.
        (DrawsGradient::DrawsGradient):
        (DrawsGradient::wndProc): We handle the WM_PAINT and WM_PRINTCLIENT messages.

        (DrawsGradient::onPaint):
        (DrawsGradient::onPrintClient):
        These both just call through to paint.

        (DrawsGradient::paint): Fills our client area with some gradients.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Link
        against Msimg32.lib for ::GradientFill and added DrawsGradient.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Use WM_PRINT instead of
        WM_PRINTCLIENT so that ::DefWindowProc will send
        WM_PRINT/WM_PRINTCLIENT messages to the WebView's child windows.
        Replaced kCGImageAlphaPremultipledFirst with kCGImageAlphaNoneSkipFirst
        because GDI doesn't support alpha and kCGImageBitmapOrder32Little with
        kCGImageBitmapOrder32Host because, who knows, maybe someday Windows
        will run on a big-endian platform.

2010-11-04  Adam Roben  <aroben@apple.com>

        Extract much of NPNInvalidateRectInvalidatesWindow's code into a
        WindowedPluginTest base class

        The base class takes care of subclassing the plugin's window so that a
        custom WNDPROC is called. This will make it easier to write tests that
        need to handle window messages.

        Fixes <http://webkit.org/b/49028> It's hard to write a PluginTest with
        a custom WNDPROC

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/NPNInvalidateRectInvalidatesWindow.cpp:
        (NPNInvalidateRectInvalidatesWindow::NPNInvalidateRectInvalidatesWindow):
        (NPNInvalidateRectInvalidatesWindow::NPP_SetWindow):
        (NPNInvalidateRectInvalidatesWindow::wndProc):
        (NPNInvalidateRectInvalidatesWindow::testInvalidateRect):
        Moved code from here to WindowedPluginTest. Changed to use window()
        instead of m_window.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added WindowedPluginTest and added TestNetscapePlugIn/win to the
        include path. Also reordered the include path to make a little more
        sense and simplified the entry that added TestNetscapePlugIn itself to
        the include path.

        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.cpp: Added.
        (WindowedPluginTest::WindowedPluginTest):
        (WindowedPluginTest::NPP_SetWindow):
        (WindowedPluginTest::staticWndProc):
        * DumpRenderTree/TestNetscapePlugIn/win/WindowedPluginTest.h: Added.
        (WindowedPluginTest::window):
        Code came from NPNInvalidateRectInvalidatesWindow.

2010-11-04  Adam Roben  <aroben@apple.com>

        Add a plugin test to show that windowed plugins are clipped correctly

        Fixes <http://webkit.org/b/49024> <rdar://problem/8487847> Windowed
        plugins aren't clipped in WebKit2 on Windows

        Reviewed by Jon Honeycutt.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowRegionIsSetToClipRect.cpp: Added.
        (WindowRegionIsSetToClipRect::WindowRegionIsSetToClipRect): Initialize members.
        (WindowRegionIsSetToClipRect::NPP_SetWindow): Check that our window
        region matches the clip rect we know we should have based on
        window-region-is-set-to-clip-rect.html, and check that our window class
        doesn't have the CS_PARENTDC style.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added WindowRegionIsSetToClipRect.

2010-11-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Avoid font hinting in the DRT
        https://bugs.webkit.org/show_bug.cgi?id=48548

        Change the settings to avoid font hinting, it was causing
        different results depending on the distribution.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings):
        * DumpRenderTree/gtk/fonts/fonts.conf:

2010-11-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        build-webkit spams system.log by repeatedly checking for PBXProductDirectory in com.apple.Xcode
        https://bugs.webkit.org/show_bug.cgi?id=49051

        This is a speculative fix.  The unit tests cover these methods, however
        I don't know if this will fully stop the system.log spam.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-11-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic support for showing bot id on /queue-status/ pages
        https://bugs.webkit.org/show_bug.cgi?id=49037

        This support is really simple.  Eventually we'll want to
        show the bot id in the lock table too, but we don't have
        that information stored in the server yet.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/queuestatus_unittest.py: Added.
        * QueueStatusServer/templates/includes/singlequeuestatus.html:

2010-11-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Create a filesystem wrapper that we can use to enforce
        particular conventions and use for mocking and dependency
        injection down the line.

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

        * Scripts/webkitpy/common/system/filesystem.py: Added.
        * Scripts/webkitpy/common/system/filesystem_unittest.py: Added.

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        run_webkit_tests_unittest fails under Python 2.5
        https://bugs.webkit.org/show_bug.cgi?id=49043
        
        Switch from itertools.chain.from_iterable (which was added in 2.6)
        to using itertools.chain directly.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed fix to webkit-patch rebaseline-server so that it runs under
        Python 2.5 (it needs an import to use the with statement).

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:

2010-11-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests: split out webkit-specific configuration stuff into a new module

        The current NRWT code has webkit-specific configuration code (like
        _script_path, default configuration, etc.) mixed in with
        layout-test-specific stuff in port/base. The configuration code
        should be split out into a separate module for easier mocking,
        testing, and isolation.

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

        * Scripts/webkitpy/layout_tests/port/config.py: Added.
        * Scripts/webkitpy/layout_tests/port/config_unittest.py: Added.

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Rebaseline server: initial framework
        https://bugs.webkit.org/show_bug.cgi?id=48892
        
        Adds the basic framework for the rebaseline server (details at 
        http://webkit.org/b/47761). Includes the rebaseline-server webkit-patch
        command, which starts an HTTP server that can serve static files or
        invoke handler methods on a class.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css: Added.
        * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js: Added.
        * Scripts/webkitpy/tool/commands/rebaselineserver.py: Added.

2010-11-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests wasn't using DRT by default for
        --platform chromium-gpu

        The default value was set to False instead of None, which meant
        that the platform specific logic wasn't firing to change the
        value to True (b/c we were afraid we'd be overriding the user
        preference).

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-04  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        make platform/chromium/plugins/multiple-plugins.html pass on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49026

        Have the testObject.bar property return the string "bar".  This lets
        us run and pass platform/chromium/plugins/multiple-plugins.html on all
        platforms.

        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        (testGetProperty):

2010-11-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT doesn't have good test coverage for --run-chunk, --batch-size, --run-part, etc.
        https://bugs.webkit.org/show_bug.cgi?id=48878
        
        Add get_tests_run so that it's easy to see which tests get run (and with
        what batching) for a given flag combination. Flesh out the various
        test cases that have FIXMEs.
        
        Also fixes an off-by-one error (batch sizes were one larger than 
        expected) and makes --run-part also have wraparound behavior, like
        --run-chunk.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-11-04  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support box-sizing without the vendor prefix
        https://bugs.webkit.org/show_bug.cgi?id=36713

        Based on patch by Peter Beverloo <peter@lvp-media.com>

        * iExploder/htdocs/cssproperties.in: Change -webkit-box-sizing to box-sizing.

2010-11-04  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r71340, because it broke Chromium Windows bot.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [NRWT] Clear invalid http locks on Windows platform as well
        https://bugs.webkit.org/show_bug.cgi?id=48515

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py:

2010-11-02  Adam Roben  <aroben@apple.com>

        Reduce our dependence on coreutils when running Python tests

        This patch introduces versions of the standard echo and cat utilities
        implemented in Python. They are probably missing features of their
        coreutils equivalents, but they can do what's necessary for our Python
        tests. This is useful on Windows, where these utilities typically
        aren't available.

        Fixes <http://webkit.org/b/48883> executive_unittest relies on echo
        and cat utilities from coreutils, which are not present on Windows

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/executive_unittest.py: Changed to use
        our Python-based echo and cat.

        * Scripts/webkitpy/common/system/fileutils.py: Added.
        (make_stdout_binary): On Windows, puts sys.stdout into binary mode so
        that \n won't be translated into \r\n. I couldn't think of a good way
        to test this directly without touching the filesystem, but it is tested
        indirectly by echo_unittest.

        * Scripts/webkitpy/test/cat.py: Added.
        (command_arguments): Returns a list for invoking cat with the given arguments.
        (main): Acts like a simplified version of the coreutils cat utility.

        * Scripts/webkitpy/test/cat_unittest.py: Added.
        (CatTest.assert_cat): Runs cat with the given input and ensures the
        output matches the input.
        (CatTest.test_basic): Performs a simple test of cat.
        (CatTest.test_no_newline): Tests what happens when the input string
        doesn't have a trailing newline.
        (CatTest.test_unicode): Tests passing a unicode string to cat.
        (CatTest.test_as_command): Tests running cat as a separate command.

        * Scripts/webkitpy/test/echo.py: Added.
        (command_arguments): Returns a list for invoking echo with the given arguments.
        (main): Acts like a simplified version of the coreutils echo utility.

        * Scripts/webkitpy/test/echo_unittest.py: Added.
        (EchoTest.test_basic): Performs a simple test of echo.
        (EchoTest.test_no_newline): Tests passing -n to echo to suppress the
        trailing newline.
        (EchoTest.test_unicode): Tests passing unicode and non-unicode strings
        to echo.
        (EchoTest.test_argument_order): Tests what happens when -n is not the
        first argument.
        (EchoTest.test_empty_arguments): Tests what happens when you pass [] to
        echo.main.
        (EchoTest.test_no_arguments): Tests what happens when you call
        echo.main with no arguments.
        (EchoTest.test_as_command): Tests running echo as a separate command.

2010-11-04  Renata Hodovan  <reni@inf.u-szeged.hu>

        Unreviewed: Add myself to the list of Committers.

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

2010-11-04  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Hook into QWebPage::scrollRequested for resizes-to-contents mode

        In RTC mode the QGraphicsWebView item is the size of the contents,
        scrolling works a bit differently  (we need to react to scrollRequested.)

        Normally QGraphicsView will replay the last mouse event when scrolling,
        so to prevent WebKit from getting confused by this we temporarily make
        the QGraphicsView non-interactive.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setPage):
        (WebViewGraphicsBased::scrollRequested):
        * QtTestBrowser/webview.h:

2010-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Andreas Kling.

        Use OS(MAC_OS_X) rather than PLATFORM(MAC) in TestControllerQt

        PLATFORM(MAC) is not defined for the Qt port, as it refers to
        the Mac-port, not the Mac OS X operating system.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::isExistingLibrary):

2010-11-04  Leonid Ebril  <leonid.ebril@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Adding iphone user agent string the user agent list for QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=48869

        * QtTestBrowser/useragentlist.txt:

2010-11-03  Adam Roben  <aroben@apple.com>

        Always use uppercase drive names in strings returned by abspath_to_uri

        Some versions of cygpath use lowercase drive letters while others use
        uppercase, which makes it hard to test the output of code that uses
        cygpath.

        Fixes <http://webkit.org/b/48914> webkitpy.common.system.path_unittest
        fails with Cygwin 1.5

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/system/path.py:
        (cygpath): Updated the docstring to indicate that only absolute paths
        should be passed for now (though relative paths will work fine).
        (_Cygpath.convert): Upper-case the first letter of the converted Windows path.

2010-11-03  George Guo  <George.Guo@Nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser : set mmp rule pageddata in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=48767
    
        Paging is needd on Symbian devices to support benchmarks tests like
        dromaeo.com and Celtic Kane that need a lot of memory to run  

        * QtTestBrowser/QtTestBrowser.pro:

2010-11-03  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Chromium: Update resource tracking when moving a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=48363

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::assignIdentifierToRequest):
        Always put resource id in map so we can make assumptions about its
        presence.
        (WebViewHost::removeIdentifierForRequest):
        Added.
        (WebViewHost::didFinishResourceLoad):
        (WebViewHost::didFailResourceLoad):
        Check existence of resource id before removing from map.
        * DumpRenderTree/chromium/WebViewHost.h:

2010-11-03  Victor Wang  <victorw@chromium.org>

        Reviewed by Adam Barth.

        [Chromium] update buildbot names in chromium rebaseline tool.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-11-03  Darin Adler  <darin@apple.com>

        Updated Xcode projects by opening them with Xcode 3.2.4.
        Updated svn:ignore for Xcode projects.

        * MiniBrowser/MiniBrowser.xcodeproj: Added property svn:ignore.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Added property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj: Modified property svn:ignore.
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj: Updated with Xcode 3.2.4.

2010-11-03  Adam Roben  <aroben@apple.com>

        Stop waiting for messages from the web process after a timeout elapses

        TestController::runUntil now takes a timeout parameter that specifies
        how long to wait for the condition to become true. WebKitTestRunner
        takes a --timeout flag that specifies how long the timeout should be.
        run-webkit-tests passes this flag to WebKitTestRunner so its timeout
        will be similar to run-webkit-tests.

        Fixes <http://webkit.org/b/43047> <rdar://problem/8365833>
        WebKitTestRunner waits forever if the web process crashes

        Reviewed by Darin Adler and Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (top level): Moved the GuardMalloc timeout adjustment here from
        readFromDumpToolWithTimer.
        (openDumpTool): Make WTR use a timeout similar to but slightly shorter
        than the one that was specified on the command line.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController): Initialize our timeout values.
        (WTR::TestController::initialize): Parse the --timeout flag and use it
        to modify our timeout values.
        (WTR::TestController::resetStateToConsistentValues): Changed to use a
        short timeout while waiting for the web process to reset and to return
        a boolean indicating whether we were able to reset the web process.
        Uses a 5-second timeout while waiting for the process to be reset.
        (WTR::TestController::runTest): Changed to return a boolean indicating
        whether we were able to reset the web process (and thus run the test).
        (WTR::TestController::runUntil): Call through to platformRunUntil.

        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::run):
        Changed to bail if any test can't be run. This will cause the process
        to exit. (Unfortunately this will make run-webkit-tests think we
        crashed; see <http://webkit.org/b/48943>.)

        * WebKitTestRunner/TestController.h: Added platformRunUntil,
        m_longTimeout, and m_shortTimeout.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke): Use a short timeout when waiting for the
        initial response and a long timeout when waiting for the test to
        complete. Check whether runUntil timed out and print an error message
        if so.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformRunUntil): Renamed from runUntil. Pass
        [NSDate distantPast] to -[NSRunLoop runMode:beforeDate:] so that we
        won't block waiting for the run loop. Only loop until the timeout
        elapses.

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::platformRunUntil): Renamed from runUntil. Added a
        FIXME about honoring the timeout.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformRunUntil): Renamed from runUntil. Use
        ::MsgWaitForMultipleObjectsEx to implement the timeout. Changed to use
        ::PeekMessageW so that we don't block waiting for messages to become
        available.

2010-11-03  Adam Roben  <aroben@apple.com>

        Add a plugin test that evaluates JS after removing the plugin element
        from the document

        This test replaces platform/win/plugins/plugin-delayed-destroy.html.
        That test was made to prevent a crash very similar to this one, but
        unfortunately tested only the mechanism that prevented the crash and
        not whether the crash itself was prevented. Since WebKit2 uses a
        different mechanism to prevent the crash, the test was failing even
        though WebKit2 was not vulnerable to the crash. This new test crashes
        if there is no mechanism in place to prevent it and passes in both
        WebKit1 and WebKit2.

        Fixes <http://webkit.org/b/46711> <rdar://problem/8485903>
        platform/win/plugins/plugin-delayed-destroy.html fails in WebKit2

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Added new file.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginDeallocate): Make sure we delete the PluginTest object. This
        prevents a leak and also allows us to test the crash.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::executeScript): Made this into a non-static member
        function.

        (PluginTest::waitUntilDone):
        (PluginTest::notifyDone):
        Updated for changes to executeScript.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added executeScript.

        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSAfterRemovingPluginElement.cpp: Added.
        (EvaluateJSAfterRemovingPluginElement::EvaluateJSAfterRemovingPluginElement):
        Initialize ourselves and tell the test harness to wait.
        (EvaluateJSAfterRemovingPluginElement::NPP_DestroyStream): Remove our
        plugin element from the document, then execute some JavaScript. If
        WebKit does not have appropriate mechanisms in place, we'll be
        destroyed inside the first call to executeScript and crash on the
        second call.

2010-11-02  Stephen White  <senorblanco@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Fix LayoutTestController UMRs.
        https://bugs.webkit.org/show_bug.cgi?id=48872

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

2010-11-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION: rebaseline-chromium-webkit-tests uses non-zero tolerance for
        image dup detection
        https://bugs.webkit.org/show_bug.cgi?id=48744

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
         - Make a function for option parsing for ease of test
         - Set 0 to options.tolerance
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
         - Add a test for this change

2010-11-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed: Add myself to the list of Committers.

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

2010-11-02  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):

2010-11-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add a way to send startup messages on the context which can be posted when a process launches
        <rdar://problem/8617928>
        https://bugs.webkit.org/show_bug.cgi?id=48838

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (WKBundleInitialize):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        (TestWebKitAPI::InjectedBundleController::didReceiveMessage):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        (WKBundleInitialize):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        (WKBundleInitialize):
        Update implementations of WKBundleInitialize to take an initial userData
        argument.  Change TestWebKitAPI to use the new initial userData to initialize
        each test's bundle.

2010-11-02  Benjamin Kalman  <kalman@google.com>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests doesn't strip "LayoutTests/" from prefix, unlike old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=48794

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Strip the "LayoutTests/" prefix from test argument paths.

2010-11-02  Adam Roben  <aroben@apple.com>

        Skip webkitpy.layout_tests.run_webkit_tests_unittest.MainTest on Cygwin
        Python 2.5.x

        It is known to hang on that version of Python. See
        <http://webkit.org/b/48614>.

        Reviewed by Adam Barth.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py: Use
        skip_if to skip MainTest on Cygwin Python 2.5.x.

        * Scripts/webkitpy/test/skip.py: Added.
        (skip_if): If the passed-in condition is false, find all the test_*
        methods of the given class and replace them with a function that just
        logs that we're skipping these tests. This is loosely based on the
        unittest.skip_if decorator added in Python 3.1.
        (_skipped_method): Returns a function that just logs that the tests are
        being skipped. This is used in place of the actual test_* functions.

        * Scripts/webkitpy/test/skip_unittest.py: Added.
        (SkipTest.setUp): Create a logger for ourselves and give it a handler
        that logs to a private stream.
        (SkipTest.tearDown): Reset the logger.
        (SkipTest.create_fixture_class): Returns a class that we use to test
        skip_if. It has a single test_* method, test_foo, that just calls
        through to a callback.
        (SkipTest.foo_callback): Record that test_foo was called.
        (SkipTest.test_skip_if_false): Pass skip_if a False condition and test
        that test_foo does get called.
        (SkipTest.test_skip_if_true): Pass skip_if a True condition and test
        that test_foo does not get called and the appropriate message gets
        logged.

2010-11-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch should tell check-webkit-style which files were changed so
        check-webkit-style doesn't have to stat the whole working copy again
        https://bugs.webkit.org/show_bug.cgi?id=48792

        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:

2010-11-02  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by James Robinson.

        [Chromium/DRT] Make EventSendingController honour leapForward for touch events.
        https://bugs.webkit.org/show_bug.cgi?id=48777

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::sendCurrentTouchEvent):

2010-11-02  Adam Roben  <aroben@apple.com>

        Only track resource identifiers in DRT when dumpResourceLoadCallbacks
        is on

        This reverts Windows to our pre-r71097 behavior. That patch made us
        track all resource identifiers, including the main resource, so the
        main resource's URL started appearing in test output instead of
        "<unknown>". Arguably having the main resource's URL is better, but all
        other platforms print "<unknown>" and we want to match.

        Fixes <http://webkit.org/b/48837> <rdar://problem/8620351> REGRESSION
        (r71097): Many http tests failing on Windows

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest): Don't add the
        identifier to the URL map if we're not supposed to dump resource load
        callbacks.
        (ResourceLoadDelegate::removeIdentifierForRequest): Always remove the
        identifier from the URL map even if we're already "done". There's no
        point in keeping out-of-date identifiers around.

2010-11-01  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Adam Roben.

        Windows: Update resource tracking when moving a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=48364

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):
        (main):
        Give each WebView its own ResourceLoadDelegate instance in order to
        make assertions about resource ids on a particular WebView.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest):
        Always add id to the map.
        (ResourceLoadDelegate::removeIdentifierForRequest):
        Added.
        (ResourceLoadDelegate::willSendRequest):
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        (ResourceLoadDelegate::didReceiveResponse):
        (ResourceLoadDelegate::didFinishLoadingFromDataSource):
        (ResourceLoadDelegate::didFailLoadingWithError):
        (ResourceLoadDelegate::descriptionSuitableForTestResult):
        Replace static descriptionSuitableForTestResult with static member function to access identifier map.
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        (ResourceLoadDelegate::urlMap):
        Moved within class so that each WebView has its own id map.

2010-11-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dimitri Glazkov.

        remove debug code from run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=48800

        Remove temporary debug code and make --master-name required
        if --test-results-server is set now that all clients set
        --master-name.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-11-01  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        add plugin event logging for linux
        https://bugs.webkit.org/show_bug.cgi?id=48779

        This is taken from Chromium's fork of the layout test plugin:
        http://git.chromium.org/gitweb/?p=chromium.git/.git;a=blob;f=webkit/tools/npapi_layout_test_plugin/main.cpp;h=3ebdada2f049b3624756438cff852364f86a2ede;hb=HEAD#l348

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventX11):
        (NPP_HandleEvent):

2010-11-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by James Robinson.

        new-run-webkit-tests: use DRT, child-processes=1 for GPU tests by default
        https://bugs.webkit.org/show_bug.cgi?id=48790

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-11-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach check-webkit-style how to accept a list of files to diff on the
        command line
        https://bugs.webkit.org/show_bug.cgi?id=48784

        In a future patch, webkit-patch will use this option to improve
        performance.  I'm landing this in two pieces to avoid causing a version
        skew problem for the style-bot.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/optparser.py:
        * Scripts/webkitpy/style/optparser_unittest.py:
        * Scripts/webkitpy/style_references.py:

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Tear down the related WebProcessProxy when a WebContext is deallocated
        https://bugs.webkit.org/show_bug.cgi?id=48769

        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        We don't support empty URLs anymore, update test to expect a null URL instead.

2010-11-01  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Andreas Kling.

        Fix warning when compiling the chromium port of DumpRenderShell
        with clang.
        https://bugs.webkit.org/show_bug.cgi?id=48414

        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::javaScriptFlagsForLoad):

2010-11-01  Adam Roben  <aroben@apple.com>

        Fix typo from r71022

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

2010-11-01  Adam Roben  <aroben@apple.com>

        Trigger the Windows Release WebKit2 tests when a Release build
        finishes, not when a Debug build finishes

        Fixes <http://webkit.org/b/48754> Windows Release WebKit2 tests are
        triggered at the wrong time

        Reviewed by Sam Weinig.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Fixed
        triggerable name and trigger.

2010-11-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed. Adding my IRC nickname to the list of committers.

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

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] [Gtk] Plug-ins having upper case in mime type are failing to load

        Qt and Gtk are case-sensitive when storing the declared mime-type
        of plugins. Since plugin mime-types are lowercased prior to searching
        for them in the plugin database, ensure they are loaded with the
        mime-type in lower case too.

        Change the test netscape plugin to declare its mimetype in sentence
        case so that the correct behaviour is enforced.

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

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_GetMIMEDescription):

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support nodesFromRect in DRT

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::nodesFromRect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-10-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] QtTestBrowser: Switching view type moves the embedded inspector
        https://bugs.webkit.org/show_bug.cgi?id=48705

        Reinsert the embedded inspector into the splitter after changing
        between QWebView/QGraphicsWebView.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::initializeView):
        * QtTestBrowser/webinspector.h:
        (WebInspector::WebInspector):

2010-10-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        Needs a "LinuxEditingBehavior", perhaps with a better name
        https://bugs.webkit.org/show_bug.cgi?id=36627

        Adding support to Mac's, GTK+'s, Windows' and Chromium's LayoutTestController class to test the newly introduced Unix editing behavior.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setEditingBehavior):

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser: Add keyboard shortcut to toggle full screen (F11)
        https://bugs.webkit.org/show_bug.cgi?id=48695

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser: Fix uninitialized read in FpsTimer
        https://bugs.webkit.org/show_bug.cgi?id=48675

        FpsTimer::m_timer was never initialized and passed to QObject::killTimer()
        on startup with in -graphicsbased mode.

        * QtTestBrowser/fpstimer.cpp:
        (FpsTimer::FpsTimer):
        (FpsTimer::numFrames):
        (FpsTimer::stop):
        (FpsTimer::timerEvent):
        * QtTestBrowser/fpstimer.h:

2010-10-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: change TestResults to be serializable

        In preparation for changing new-run-webkit-tests from
        multithreaded to multiprocess, we need to make sure the data
        going between the threads is easily serialized over a socket.

        This change adds serialization/pickling for the TestResults and
        TestFailure objects (using cPickle).

        The TestFailure objects included a "has_wdiff" flag for Text
        results, but the flag wasn't being used, so I've removed it,
        simplifying the state to basically a set of enum objects with
        associated methods.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_results.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_results_unittest.py:Added. 
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-10-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: need to provide separate dashboard results for GPU tests
        https://bugs.webkit.org/show_bug.cgi?id=48687

        Modify the steps to upload the JSON files to the dashboards so
        that the GPU tests don't conflict with the regular tests on a
        port. We do this by modifying the --builder-name parameter to
        append " - GPU", which should cause the app to treat the results
        as a completely new builder. This is a little non-obvious, but
        keeps us from having to restructure the app.

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-29  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] add debug logging to help diagnose flakiness dashboard issues
        https://bugs.webkit.org/show_bug.cgi?id=48657

        The appengine app thinks it's getting empty files uploaded. Add some logging
        to see if new-run-webkit-tests agrees.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium/DRT] Add master-name flag to new-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=48649

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added flag.

2010-10-29  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        Enable popup window in GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=48335

        The GtkLauncher application does not support opening new window when
        a link with "target=_blank" is clicked or similar call to
        window.open(). Instead, GtkLauncher does nothing which breaks
        navigation of some websites.

        * GtkLauncher/main.c:
        (activate_uri_entry_cb):
        (update_title):
        (link_hover_cb):
        (notify_title_cb):
        (notify_load_status_cb):
        (notify_progress_cb):
        (destroy_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_web_view_cb):
        (web_view_ready_cb):
        (close_web_view_cb):
        (create_browser):
        (create_statusbar):
        (create_toolbar):
        (create_window):
        (main):

2010-10-29  Adam Roben  <aroben@apple.com>

        Teach check-webkit-style about WebKit2's idiosyncracies

        Fixes <http://webkit.org/b/48638> Style bot complains about a number
        of WebKit2 conventions

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checker.py: Excluded some rules for various
        WebKit2-related files. Also updated the excluded rules for
        WebKitAPITest to match the current code.

2010-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben and David Kilzer.

        Fix and cleanup of build systems
        https://bugs.webkit.org/show_bug.cgi?id=48342

        * Scripts/build-webkit:
         - Remove unnecessary ENABLE_SANDBOX option.
         - Add ENABLE_FULLSCREEN_API option.

2010-10-28  Adam Roben  <aroben@apple.com>

        Switch the Windows WebKit2 bot to the Release configuration

        We only have one machine testing WebKit2 on Windows right now, and
        Debug is just too slow for it to keep up.

        Fixes (hopefully!) <http://webkit.org/b/48615> Windows WebKit2 bot is
        always way behind

        Reviewed by Jon Honeycutt.

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

2010-10-29  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-10-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] add a result-small.json file for the test dashboard
        https://bugs.webkit.org/show_bug.cgi?id=48547

        Output both a results.json file and a results-small.json file.
        The dashboard will load results-small.json by default so it loads faster.

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:
        Added a bunch of sys.path hackery. Unforunately, this uses hardcoded
        paths. That obviously needs to be fixed, but at least this way it
        clearly documents what paths are necessary.

2010-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch upload calls changed_files more often than it should
        https://bugs.webkit.org/show_bug.cgi?id=48567

        Passing changed_files around everywhere isn't a very elegant solution
        but it's the one we have for the moment.  I think keeping an explicit
        cache on Checkout (or making StepState() a real class) is a better
        long-term option.

        Previously bug_id_for_this_commit was calling changed_files and the
        result was never getting cached on the state.  Now we're explicitly
        caching the result on the state and passing that to the bug_id_for_this_commit call.

        I looked into building unit tests for this.  Doing so would require
        using a real Checkout object with a MockSCM and overriding the appropriate
        calls on SCM to count how often we're stating the file system.
        That's a useful set of tests to build for a separate change.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make suggest-reviewers slightly faster
        https://bugs.webkit.org/show_bug.cgi?id=48562

        Add @memoized to one more common call.

        * Scripts/webkitpy/common/checkout/api.py:

2010-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch suggest-reviewers -g 260550a6e30b7bf34f16bdb4a5396cf26264fc1c is still very slow
        https://bugs.webkit.org/show_bug.cgi?id=48536

        This patch makes it about 40 seconds faster, but it still
        takes 1:40.  This will require more refinement.

        The suggested reviewers list appears to be the same.

        I think the next step may be to have it stop the search after
        5 reviewers are found.  We never want to suggest 30 people.

        * Scripts/webkitpy/common/checkout/scm.py:
         - Using --remove-empty to theoretically stop lookups past
           when a file is removed.  I'm not entirely clear that the option
           does what it says it does.  Example:
           git log --pretty=format:%H -5 --remove-empty -- /Projects/WebKit/WebCore/platform/wx/SearchPopupMenuWx.h
           returns only one commit
           vs.
           git log --pretty=format:%H -5 -- /Projects/WebKit/WebCore/platform/wx/SearchPopupMenuWx.h
           which returns 5.  I was not aware that wx files were ever removed from the repository?

2010-10-28  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        [Chromium] Support FileSystem in chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=47643

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::openFileSystem): Added.
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::openFileSystem): Added.

2010-10-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WKURLRefs should be allowed to be null
        <rdar://problem/8575621>
        https://bugs.webkit.org/show_bug.cgi?id=48535

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::didStartProvisionalLoadForFrame):
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::didFinishLoadForFrame):
        Test that URLs are null pointers when unset.

2010-10-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        AX: multi select group option does not handle setting of AXSelectedChildren correctly
        https://bugs.webkit.org/show_bug.cgi?id=48464

        Add support for querying information about selected children to DRT, including:
           selectedChildAtIndex
           selectedChildrenCount
           setSelectedChild

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (selectedChildAtIndexCallback):
        (setSelectedChildCallback):
        (selectedChildrenCountCallback):
        (AccessibilityUIElement::setSelectedChild):
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::setSelectedChild):

2010-10-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 API for window feature getter/setters
        <rdar://problem/8590373>
        https://bugs.webkit.org/show_bug.cgi?id=48496

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

2010-10-28  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Tony Chang.

        Added support for the DumpRenderTree flags --multiple-loads and --js-flags to the Python test runner.
        https://bugs.webkit.org/show_bug.cgi?id=48236

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WebKitWebFrame's load-status is not properly notified to the tests
        https://bugs.webkit.org/show_bug.cgi?id=48048

        DRT now listens to WebKitWebFrame load-status signals for each
        created frame instead of the load-status signal of the
        WebKitWebView that only notifies about changes in the main frame.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadFinished):
        (webFrameLoadStatusNotified):
        (frameCreatedCallback):
        (createWebView):
        (main):

2010-10-28  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix textInputController.{selectedRange,markedRange}
        https://bugs.webkit.org/show_bug.cgi?id=48487

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::markedRange): Return arrays of ints, rather than a string
        (TextInputController::selectedRange): Ditto.

2010-10-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] add a master-name flag to new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=48488

        The test results server now allows adding a master name to
        the uploaded files. This lets us distinguish bots that have
        the same name, but are on different masters.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-28  Adam Roben  <aroben@apple.com>

        Don't append a newline to the test output if the frame has no document
        element in WebKitTestRunner

        Fixes <http://webkit.org/b/48526> Extra trailing newline when running
        plugins/document-open.html in WebKitTestRunner

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::toJS): Added. Turns a UTF-8 C string into a JSStringRef.
        (WTR::hasDocumentElement): Added. Uses the JSC API to figure out
        whether the frame has a document element.
        (WTR::dumpFrameText): Match DRT by bailing (rather than appending an
        empty string and a newline) if the frame has no document element.

2010-10-28  Adam Roben  <aroben@apple.com>

        Skip npn-invalidate-rect-invalidates-window.html on headless XP
        machines

        TestNetscapePlugIn never receives a WM_PAINT message on headless XP
        machines, so this test times out. Fixing the test is covered by
        <http://webkit.org/b/48333>.

        * Scripts/old-run-webkit-tests: Skip
        npn-invalidate-rect-invalidates-window.html on Windows if accelerated
        compositing support is disabled, which likely means we're on a headless
        XP machine.

2010-10-28  Kimmo Kinnunen  <kimmok@iki.fi>

        Adding myself as a committer.

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

2010-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch suggest-reviewers -g 260550a6e30b7bf34f16bdb4a5396cf26264fc1c is very slow
        https://bugs.webkit.org/show_bug.cgi?id=48500

        This doesn't fix the problem, but it makes things slightly better.
        Each git svn find-rev call takes about .25 seconds on my desktop.
        This patch uses a new memoized class to avoid those calls when possible.

        The real slowness is still git log on some files, like:
        git log --pretty=format:%H -5 -- /Projects/WebKit/WebCore/platform/wx/SearchPopupMenuWx.h
        I'm not yet sure how to make the pathological git logs better.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/memoized.py: Added.
        * Scripts/webkitpy/common/memoized_unittest.py: Added.

2010-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        EWS bots should not use --quiet when running build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48482

        --quiet is only correct when the sub-process does the error reporting.
        In the case of _can_build() the parent process is reporting the error.
        We'd like the full build log at queues.webkit.org so someone can look
        at the log and understand why the EWS is failing to build trunk.

        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-27  Brian Weinstein  <bweinstein@apple.com>

        More Windows build fixage. Rename a variable that was named string.

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

2010-10-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Make the test results server store which master the bot is on
        https://bugs.webkit.org/show_bug.cgi?id=48478

        The chromium bots recently changed so that there are multiple slaves with
        the same name on different masters. Up till now, the test results server
        assumed slave names were unique. Adds a master field to the file in order
        to distinguish.

        Also, for files that currently lack a master or testtype, set them appropriately.

        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/index.yaml:
        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/testfile.py:
        * TestResultServer/templates/showfilelist.html:
        * TestResultServer/templates/uploadform.html:

2010-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42322
        rdar://problem/8193631

        WebKitTestRunner needs to support layoutTestController.clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42333
        rdar://problem/8193643

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        Renamed the product to WebKitTestRunnerInjectedBundle to avoid
        name conflicts in the build directory.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpBackForwardList and clearBackForwardList.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle): Removed initialization of m_mainPage.
        (WTR::InjectedBundle::didCreatePage): Removed unneeded underscore.
        (WTR::InjectedBundle::willDestroyPage): Ditto.
        (WTR::InjectedBundle::didReceiveMessage): Ditto.
        (WTR::InjectedBundle::initialize): Ditto.
        (WTR::InjectedBundle::didCreatePage): Changed code to use m_pages
        instead of m_mainPage and m_otherPages.
        (WTR::InjectedBundle::willDestroyPage): Ditto.
        (WTR::InjectedBundle::page): Ditto.
        (WTR::InjectedBundle::beginTesting): Ditto.
        (WTR::InjectedBundle::done): Ditto.
        (WTR::InjectedBundle::closeOtherPages): Ditto.
        (WTR::InjectedBundle::dumpBackForwardListsForAllPages): Added.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Changed
        page function to longer be inline, and pageCount function
        to use m_pages. Added dumpBackForwardListsForAllPages, and
        removed some underscores. Replaced m_mainPage and m_otherPageas
        with m_pages.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::adoptWK): Added.
        (WTR::hasPrefix): Added.
        (WTR::InjectedBundlePage::reset): Added code to set up
        m_previousTestBackForwardListItem.
        (WTR::InjectedBundlePage::dump): Added code to call
        dumpBackForwardListsForAllPages.
        (WTR::compareByTargetName): Added.
        (WTR::dumpBackForwardListItem): Added.
        (WTR::InjectedBundlePage::dumpBackForwardList): Added.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added
        dumpBackForwardList and m_previousTestBackForwardListItem.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize
        m_shouldDumpBackForwardListsForAllWindows to false.
        (WTR::LayoutTestController::clearBackForwardList): Added.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added dumpBackForwardList, clearBackForwardList,
        shouldDumpBackForwardListsForAllWindows, and
        m_shouldDumpBackForwardListsForAllWindows.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Set up
        didReceiveSynchronousMessageFromInjectedBundle.
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        Added.
        * WebKitTestRunner/TestController.h: Ditto.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Added.
        * WebKitTestRunner/TestInvocation.h: Ditto.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Renamed bundle to WebKitTestRunnerInjectedBundle (see above).
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::initializeInjectedBundlePath): Ditto.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        Add ENABLE_WEB_AUDIO feature enable flag (initially disabled) to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48279

        * Scripts/build-webkit:

2010-10-27  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        build-webkit should collect Visual Studio Express logs and display them
        https://bugs.webkit.org/show_bug.cgi?id=39199

        It turns out my previous patch wasn't actually working on the win-ews
        machine.  So I've fixed my mistakes from before.

        * Scripts/build-webkit:
         - Windows VSE builds change the CWD while building.  Why?  Who knows.
        * Scripts/print-vse-failure-logs:
         - windows VSE builds don't use Debug/Release as I expected, so I've
           moved off of --configuration to --top-level and added the /obj
           optimization while I was there.

2010-10-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r70674.
        http://trac.webkit.org/changeset/70674
        https://bugs.webkit.org/show_bug.cgi?id=48053

        Broke Chromium Windows build.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-25  Tony Chang  <tony@chromium.org>

        Reviewed by Anders Carlsson.

        compile TestNetscapePlugIn on chromium linux
        https://bugs.webkit.org/show_bug.cgi?id=48274

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize): On Linux, plugin funcs are set in initialize.
        (NPP_New): Mark the plugin as windowless.
        (NPP_GetValue): Handle mime type values.
        (NP_GetMIMEDescription):
        (NP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: define TRUE and FALSE, which are in webkit's npapi.h.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Pull in npapi.h to get TRUE/FALSE (matches webkit's npfunctions.h)

2010-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Anders Carlsson.

        Remove contentSizeChanged callbacks as it is no longer
        part of the public UIClient.

        Make WKPageContentsSizeChangedCallback be a private API
        https://bugs.webkit.org/show_bug.cgi?id=48409

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

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Fix http lock on Windows platform
        https://bugs.webkit.org/show_bug.cgi?id=48321

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

2010-10-27  Satish Sampath  <satish@chromium.org>

        Unreviewed, rolling out r70665.
        http://trac.webkit.org/changeset/70665
        https://bugs.webkit.org/show_bug.cgi?id=47089

        Need to address Alexey's review comments.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-27  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-10-27  Adam Roben  <aroben@apple.com>

        Reset TestNetscapePlugIn's NPP_GetValue pointer when
        NullNPPGetValuePointer finishes running

        Fixes <http://webkit.org/b/48435> REGRESSION (r70655): Many plugins
        tests are failing on Qt

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_Destroy):
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Added a do-nothing NPP_Destroy implementation.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NullNPPGetValuePointer.cpp:
        (NullNPPGetValuePointer::NullNPPGetValuePointer): Save the original
        NPP_GetValue pointer in m_originalNPPGetValuePointer so we can restore
        it later.
        (NullNPPGetValuePointer::NPP_Destroy): Added. Restores the original
        NPP_GetValue pointer so it can be used in other tests.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_Destroy):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_destroy_instance):
        Call through to the PluginTest when NPP_Destroy is called.

2010-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2 shouldn't try to send an empty user agent
        https://bugs.webkit.org/show_bug.cgi?id=48397
        
        Add a test that when we set our custom user agent to an empty string, we don't send
        an empty user agent.

        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp: Added.
        (TestWebKitAPI::didRunJavaScript): Make sure that the result of navigator.userAgent isn't empty.
        (TestWebKitAPI::TEST): Set our custom user agent to the empty string, and run navigator.userAgent.
        
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add the new file.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Ditto.

2010-10-27  Adam Roben  <aroben@apple.com>

        Check in file I forgot in r70653

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_Initialize): Save the NPPluginFuncs struct the browser passed to us
        so we can be naughty and modify it later.

2010-10-27  Adam Roben  <aroben@apple.com>

        Test that WebKit doesn't crash if the plugin passes 0 for its
        NPP_GetValue pointer

        Test for <http://webkit.org/b/48433> Crash in
        NetscapePlugin::shouldLoadSrcURL when using Shockwave Director 10.3 in
        WebKit2 on Windows

        Reviewed by Eric Carlson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Added NullNPPGetValuePointer.cpp.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        Set up a place to store the NPPluginFuncs struct the browser passed to us.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NullNPPGetValuePointer.cpp: Added.
        (NullNPPGetValuePointer::NullNPPGetValuePointer): Null out the
        NPP_GetValue pointer we passed to the browser to simulate a plugin that
        doesn't implement NPP_GetValue.
        (NullNPPGetValuePointer::NPP_GetValue): Print an error message. If this
        function is called, it means that WebKit has changed in a way that
        makes this test invalid.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetEntryPoints): Save the NPPluginFuncs struct the browser passed
        to us so we can be naughty and modify it later.

2010-10-27  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        Remove references to ancient QGVLauncher and QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=48430

        QtTestBrowser substitutes both and has checks enabled.

        * Scripts/webkitpy/style/checker.py: remove references
        * Scripts/webkitpy/style/checker_unittest.py: ditto

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        [NRWT] Don't use image hash when it's no need in single test mode.
        https://bugs.webkit.org/show_bug.cgi?id=48326

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-10-27  David Kilzer  <ddkilzer@apple.com>

        Fix leak of CFMutableDictionaryRef in createXMLStringFromWebArchiveData()

        Reviewed by Adam Roben.

        Follow-up fix for: <https://bugs.webkit.org/show_bug.cgi?id=48278>

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (createXMLStringFromWebArchiveData): Use RetainPtr<> to fix a
        leak introduced in r70613.

2010-10-27  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] Add platform specific baseline search paths for Qt port
        https://bugs.webkit.org/show_bug.cgi?id=48428

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

2010-10-27  Adam Roben  <aroben@apple.com>

        Catch exceptions when checking if we're inside a git working directory

        Fixes <http://webkit.org/b/48420> REGRESSION (r70562): test-webkitpy
        fails on systems without git installed

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._credentials_from_git): Put the call to
        Git.in_working_directory inside the try/except since it, too, attempts
        to execute git and thus will throw on systems that don't have git
        installed.

2010-10-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by David Kilzer.

        Convert DumpRenderTree webarchive code to CoreFoundation
        https://bugs.webkit.org/show_bug.cgi?id=48278

        CFPropertyListCreateWithData and CFPropertyListCreateData are only available in 10.6+.
        Replace CFPropertyListCreateWithData by a combination of CFReadStreamCreateWithBytesNoCopy and CFPropertyListCreateFromStream.
        Replace CFPropertyListCreateData by CFPropertyListCreateXMLData.

        These changes are wrapped in BUILDING_ON_LEOPARD, as the methods are deprecated on 10.6+.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (createXMLStringFromWebArchiveData):

2010-10-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        Remove the absolute path used to include DumpRenderTreeSupportGtk.h from LayoutTestController.h

        It turns out this is rather unneeded since WebKitTools/GNUMakefile.am has WebKit/gtk/ in its include
        path, and then we can just do #include "WebCoreSupport/DumpRenderTreeSupportGtk.h"

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Rename WebArchiveDumpSupport.mm to WebArchiveDumpSupport.cpp

        Reviewed by Adam Roben.

        Part 4 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Updated for file moves and renames.
        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp: Renamed from DumpRenderTree/mac/WebArchiveDumpSupport.mm.
        * DumpRenderTree/cf/WebArchiveDumpSupport.h: Renamed from DumpRenderTree/mac/WebArchiveDumpSupport.h.

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Convert WebArchiveDumpSupport.mm from NS objects to CF types

        Reviewed by Adam Roben.

        Part 3 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        In order to share WebArchive code between the Mac and Windows
        ports, the code in WebArchiveDumpSupport.mm was converted from
        Cocoa to C++ using CoreFoundation (CF) types.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Renamed serializeWebArchiveToXML() to
        createXMLStringFromWebArchiveData() and added HardAutorelease()
        to prevent leaks.
        * DumpRenderTree/mac/WebArchiveDumpSupport.h:
        (createXMLStringFromWebArchiveData): Renamed from
        serializeWebArchiveToXML().  Changed to use CF types.
        (createCFURLResponseFromResponseData): Renamed from
        unarchiveNSURLResponseFromResponseData().  Changed to use CF
        types for its parameter and return type.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm: Replaced use of
        NS objects with CF types.  It will be renamed to *.cpp in a
        future commit.
        (convertMIMEType): Changed to use case-insensitive string
        comparisons.
        (convertWebResourceDataToString):
        (normalizeHTTPResponseHeaderFields):
        (normalizeWebResourceURL):
        (convertWebResourceResponseToDictionary):
        (compareResourceURLs):
        (createXMLStringFromWebArchiveData):
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:
        (createCFURLResponseFromResponseData): Renamed from
        unarchiveNSURLResponseFromResponseData().  Changed to use CF
        types for its parameter and return type.

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Extract use of NSKeyedUnarchiver from WebArchiveDumpSupport.mm

        Reviewed by Adam Roben.

        Part 2 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        There is no equivalent to NSKeyedUnarchiver in CoreFoundation,
        so extract it into a platform-specific source file.

        * DumpRenderTree/mac/WebArchiveDumpSupport.h:
        (unarchiveNSURLResponseFromResponseData): Added declaration.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm:
        (convertWebResourceResponseToDictionary): Extracted code to
        unarchiveNSURLResponseFromResponseData() in
        WebArchiveDumpSupportMac.mm.  Updated logic to return early if
        nil is returned from unarchiveNSURLResponseFromResponseData().
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:
        (unarchiveNSURLResponseFromResponseData): Added.  Extracted
        code from convertWebResourceResponseToDictionary() in
        WebArchiveDumpSupport.mm.

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        Extract call to -[WebHTMLRepresentation supportedNonImageMIMETypes] from WebArchiveDumpSupport.mm

        Reviewed by Adam Roben.

        Part 1 of 4: <http://webkit.org/b/48278> Convert DumpRenderTree webarchive code to CoreFoundation

        The call to -[WebHTMLRepresentation supportedNonImageMIMETypes]
        is not cross-platform between Mac and Windows, so extract it
        into a platform-specific source file.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added
        WebArchiveDumpSupportMac.mm to the project.
        * DumpRenderTree/mac/WebArchiveDumpSupport.h:
        (supportedNonImageMIMETypes): Added declaration.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm:
        (convertWebResourceDataToString): Replaced call to
        -[WebHTMLRepresentation supportedNonImageMIMETypes] with
        supportedNonImageMIMETypes().
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm: Added.
        (supportedNonImageMIMETypes): Added.  Extracted from
        WebArchiveDumpSupport.mm.

2010-10-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [GTK] Implement DumpRenderTreeSupportGtk (similarly to DumpRenderTreeSupportQt idea)
        https://bugs.webkit.org/show_bug.cgi?id=48199

        Implements support to WebKitTabToLinksPreferenceKey through LayoutTestController::overridePreference.
        The corresponding DumpRenderTreeSupportGtk method is called in the DRT context only.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        (createWebView):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference):

2010-10-26  Ariya Hidayat  <ariya@sencha.com>

        Unreviewed, change the order of my emails for bugzilla autocompletion.

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

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        build-webkit should collect Visual Studio Express logs and display them
        https://bugs.webkit.org/show_bug.cgi?id=39199

        * Scripts/build-webkit:
        * Scripts/print-vse-failure-logs: Added.
        * Scripts/webkitdirs.pm:

2010-10-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48224> build-webkit: add support for --meter-tag switch

        Reviewed by Csaba Osztrogonác.

        * Scripts/build-webkit: Added support for --meter-tag switch.
        It should have been added with r60820.

2010-10-26  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Dumitru Daniliuc.

        check-webkit-style fails on operator+=, operator-=, ... methods
        https://bugs.webkit.org/show_bug.cgi?id=48258

        * Scripts/webkitpy/style/checkers/cpp.py: Added exceptions
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added unit-tests

2010-10-26  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        remove DEFER support from new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=48387

        DEFER was needed when we were trying to ship Chrome beta.
        Now it's just extra complication.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-10-26  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Adding import with_statement to fix python 2.5.

        Teach webkit-patch how to read credentials from the environment
        https://bugs.webkit.org/show_bug.cgi?id=48275

        * Scripts/webkitpy/common/net/credentials_unittest.py:
         - import with_statement to fix python 2.5.

2010-10-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48375
        <rdar://problem/8392724> Need delegate calls in PageLoaderClient to indicate if we have
        loaded insecure content

        Updated for WebKit2 changes.

        * MiniBrowser/mac/BrowserWindowController.m:
        (didDisplayInsecureContentForFrame):
        (didRunInsecureContentForFrame):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didDisplayInsecureContentForFrame):
        (WTR::InjectedBundlePage::didRunInsecureContentForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-10-26  Adam Roben  <aroben@apple.com>

        Clear up confusion between "3D rendering" and "accelerated compositing"

        WebKit has no software-based 3D rendering implementation, so 3D
        rendering can only be enabled when accelerated compositing is. But DRT
        was falsely reporting that 3D rendering was available on machines that
        don't support accelerated compositing, leading to much confusion.

        Reviewed by Darin Adler.

        Fixes <http://webkit.org/b/48370> REGRESSION (r70540): Many
        transforms/3d tests are failing on the XP bots

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main): When ENABLE(3D_RENDERING) is turned on, only report that 3D
        rendering is available when acclerated compositing is also available.

        * Scripts/old-run-webkit-tests: Skip tests that use the
        -webkit-transform-3d media query when 3D rendering is disabled,
        rather than when accelerated compositing is disabled.

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Ojan Vafai.

        Remove rietveld code now that it's unused
        https://bugs.webkit.org/show_bug.cgi?id=48359

        Was cool that we added this support, but now that it's
        not used it makes little sense to keep it around.
        We can always restore this code from SVN if we need it.

        * Scripts/webkitpy/common/config/__init__.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/rietveld.py: Removed.
        * Scripts/webkitpy/common/net/rietveld_unittest.py: Removed.
        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py: Removed.

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        pageDidScroll callback should be on the UI process client rather than (or in addition to) the web process client
        https://bugs.webkit.org/show_bug.cgi?id=48366
        <rdar://problem/8595202>

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

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tony Chang.

        Teach webkit-patch how to read credentials from the environment
        https://bugs.webkit.org/show_bug.cgi?id=48275

        This makes it possible for svn users to have their bugzilla credentials
        stored in their environment instead of typing them every time.

        We need this for making it easy to run the win-ews bot (which currently
        uses svn instead of git).

        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:

2010-10-26  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Input Method inserts conversion candidates unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=46868

        Adds setComposition() to TextInputController to make DRT emulate
        an input method behavior.

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::setComposition): Added.
        * DumpRenderTree/chromium/TextInputController.h:

2010-10-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Support layoutTestController.layerTreeAsText in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42145
        
        Implement layerTreeAsText() in WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::layerTreeAsText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-10-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch rollout produces incorrect patch when using svn move
        https://bugs.webkit.org/show_bug.cgi?id=48244

        We need to flush our caches when we modify the working copy.

        * Scripts/webkitpy/tool/steps/revertrevision.py:

2010-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue flaky test message can list the same author more than once
        https://bugs.webkit.org/show_bug.cgi?id=48268

        tonikitoo reported to me over IRC this morning that he's seen
        the commit-queue report flaky tests with author lists like:
        "adam, adam and adam", suggesting we're not uniquing authors
        before writing the message.

        I fixed the uniquing and added a bunch more unit testing.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-26  Adam Roben  <aroben@apple.com>

        Pull in the FeatureDefines*.vsprops files when building DRT

        This ensures that various ENABLE() macros will get set correctly.
        (Prior to r70320 we were picking up the ENABLE(3D_RENDERING) flag
        through wtf/Platform.h.)

        Fixes <http://webkit.org/b/48343> REGRESSION (r70320): DumpRenderTree
        says 3D_RENDERING is disabled even when it is enabled

        Reviewed by Ada Chan.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Added
        FeaturesDefines*.vsprops to all configurations.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Touched to force a rebuild.

2010-10-26  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added options --multiple-loads and --js-flags to chromium DumpRenderTree. The option --multiple-loads=X
        is used to have DumpRenderTree load each test it runs X times. To be able to have more fine-grained control
        of how the JavaScript engine behaves for each load the flag --js-flags can specify a list of flag-sets like this

          --js-flags="--xxx,--noxxx --yyy,--noyyy"

        First load will run with --xxx, the second with --yyy and the third without any (the 'no' prefix is handled by
        V8 to turn off the flag).

        The changes to the Python test runner will be in a separate change.


        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest):
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::testFinished):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::loadCount):
        (TestShell::setLoadCount):
        (TestShell::javaScriptFlagsForLoad):
        (TestShell::setJavaScriptFlags):
        (TestShell::setDumpWhenFinished):

2010-10-26  Adam Roben  <aroben@apple.com>

        Skip more tests that depend on accelerated compositing when accelerated
        compositing is disabled

        Fixes <http://webkit.org/b/48329> Some tests fail when accelerated
        compositing is disabled

        Reviewed by John Sullivan.

        * Scripts/old-run-webkit-tests: Added more tests to skip when
        accelerated compositing is disable. The tests all have output that
        changes depending on whether accelerated compositing is enabled.

2010-10-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch should clean up svn locks when passed --force-clean
        https://bugs.webkit.org/show_bug.cgi?id=48269

        * Scripts/webkitpy/common/checkout/scm.py:

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a pageDidScroll BundleUIClient callback
        https://bugs.webkit.org/show_bug.cgi?id=48260
        <rdar://problem/8531159>

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

2010-10-25  Johnny Ding  <jnd@chromium.org>

        Reviewed by Tony Chang.

        Dump the gesture status of frame in frame load callbacks in DumpRenderTree
        by adding a new method dumpUserGestureInFrameLoadCallbacks.
        Now only dump the gesture status in "DidStartProvisionalLoad" callback.
        https://bugs.webkit.org/show_bug.cgi?id=47849

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpUserGestureInFrameLoadCallbacksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpUserGestureInFrameLoadCallbacks):
        (LayoutTestController::setDumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpUserGestureInFrameLoadCallbacks):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpUserGestureInFrameLoadCallbacks):
        (LayoutTestController::setShouldDumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didStartProvisionalLoad):
        (WebViewHost::printFrameUserGestureStatus):
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[WebFrame _drt_printFrameUserGestureStatus]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[FrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        (-[FrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpUserGestureInFrameLoadCallbacks):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70442.
        http://trac.webkit.org/changeset/70442
        https://bugs.webkit.org/show_bug.cgi?id=48248

        http locking doesn't work on Windows (Requested by Ossy on
        #webkit).

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-25  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        Make http locking default in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=48053

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-25  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48185> build-webkit: add support for --progress-tag switch
        (Re-landing r70413 after Qt minimal buildfix: r70440.)

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit: Added support for --progress-tag switch.
        It should have been added with r57051.

2010-10-24  Adam Barth  <abarth@webkit.org>

        Reviewed by David Kilzer.

        webkit-patch upload fails when the patch removes a file
        https://bugs.webkit.org/show_bug.cgi?id=48187

        We need to use "--" to separate file names from the rest of the
        command.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-10-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70413.
        http://trac.webkit.org/changeset/70413
        https://bugs.webkit.org/show_bug.cgi?id=48210

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

        * Scripts/build-webkit:

2010-10-24  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][QtTestBrowser] Toggle use of QGraphicsView messes up the menu
        https://bugs.webkit.org/show_bug.cgi?id=48141

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::initializeView):
        (LauncherWindow::toggleWebView):

2010-10-24  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Fix Perl uninitialized warnings in VCSUtils::svnStatus()
        and VCSUtils::removeEOL().
        https://bugs.webkit.org/show_bug.cgi?id=48196

        VCSUtils::svnStatus() concatenates the output of svn status with
        a new line character and svn status may return no output (say for
        a file that has not been added, deleted, or modified). We should
        only concatenate the output of svn status if there is some.

        Also, VCSUtils::removeEOL() should ensure that its argument
        is initialized before performing a string substitution.

        * Scripts/VCSUtils.pm:
          - Modified removeEOL() to return "" if its argument is undefined.
          - Exported removeEOL() so that it can be tested. 
        * Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl: Added.

2010-10-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48185> build-webkit: add support for --progress-tag switch

        Reviewed by Kenneth Rohde Christiansen.

        * Scripts/build-webkit: Added support for --progress-tag switch.
        It should have been added with r57051.

2010-10-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48184> build-webkit: reformat support variables for better maintainability

        Reviewed by Daniel Bates.

        * Scripts/build-webkit: Alphabetized the @features array based
        on the name of the feature.  Reformatted the list of support
        variables so that they match the order of @features, and so that
        each has its own line.  This makes it easy to add new variables
        in the correct order.

2010-10-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS never removes invalid patch ids
        https://bugs.webkit.org/show_bug.cgi?id=48173

        This is just sticking another finger in the dam.
        However this adds more unit testing which will help
        us make sure we're always releasing patches once we
        redesign the release_patch API and call these from
        a more central place.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
         - Added the ability to request invalid patches.
           Log a warning message to make sure we don't ever have
           tests use invalid patch fetches by mistake.

2010-10-23  Dan Bernstein  <mitz@apple.com>

        Build fix. Add stub implementations for required NSDraggingInfo methods.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo draggingFormation]):
        (-[DumpRenderTreeDraggingInfo setDraggingFormation:]):
        (-[DumpRenderTreeDraggingInfo animatesToDestination]):
        (-[DumpRenderTreeDraggingInfo setAnimatesToDestination:]):
        (-[DumpRenderTreeDraggingInfo numberOfValidItemsForDrop]):
        (-[DumpRenderTreeDraggingInfo setNumberOfValidItemsForDrop:]):
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):

2010-10-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48186> Remove unneeded WebHTMLRepresentationInternal.h header

        Reviewed by Sam Weinig.

        The only method defined in WebHTMLRepresentationInternal.h is
        also defined in WebHTMLRepresentation.h, so use that instead.

        * DumpRenderTree/mac/InternalHeaders/WebKit/WebHTMLRepresentationInternal.h: Removed.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm: Switched to use
        WebHTMLRepresentation.h.

2010-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70367.
        http://trac.webkit.org/changeset/70367
        https://bugs.webkit.org/show_bug.cgi?id=48176

        It made 8-10 tests crash on Qt bot (Requested by Ossy on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setCustomPolicyDelegateCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (-[PolicyDelegate setPermissive:]):
        (-[PolicyDelegate setControllerToNotifyDone:]):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setCustomPolicyDelegate):

2010-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS never releases patches which fail to apply
        https://bugs.webkit.org/show_bug.cgi?id=48171

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2010-10-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Make the EWS queues restart themselves more often.
        This matches the commit-queue.

        * EWSTools/start-queue.sh:

2010-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should not pass --quiet to subcommands now that the parent command does the reporting
        https://bugs.webkit.org/show_bug.cgi?id=48165

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Adding myself as a committer.

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

2010-10-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Barth and Darin Adler.

        Using the decidePolicyForMIMEType delegate message in an asynchronous manner does not work
        https://bugs.webkit.org/show_bug.cgi?id=48014
        <rdar://problem/8202716>
        
        * DumpRenderTree/LayoutTestController.cpp:
        (setCustomPolicyDelegateCallback):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (-[PolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        If _callIgnoreInDecidePolicyForMIMETypeAfterOneSecond is true, call [listener ignore] after one second.

        (-[PolicyDelegate setCallIgnoreInDecidePolicyForMIMETypeAfterOneSecond:]):
        Update _callIgnoreInDecidePolicyForMIMETypeAfterOneSecond.
        
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        Add callIgnoreInDecidePolicyForMIMETypeAfterOneSecond argument.

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename the InjectedBundle for TestWebKitAPI to InjectedBundleTestWebKitAPI.bundle

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::createInjectedBundlePath):

2010-10-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        test-webkitpy fails when passed -v (or any other option)

        Fix port/base_unittest to pass an explicit list of arguments
        rather than accidentally picking up sys.argv.

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

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

2010-10-22  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Update the createNewPage callback to account for the new
        arguments.

        * MiniBrowser/win/BrowserView.cpp:
        (createNewPage):

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        * MiniBrowser/mac/BrowserWindowController.m:
        (createNewPage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage):
        Update for new signature for the WKPageCreateNewPageCallback.

2010-10-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just adding a test case.

        The style-queue was not recognizing new patches.  It turns
        out I had fixed this in an earlier change, but just not
        deployed to queues.webkit.org.  As part of investigating why it
        was broken, I wrote a test for my previous change which I'm now landing.

        * QueueStatusServer/model/queues_unittest.py:

2010-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS does not need to process obsolete patches
        https://bugs.webkit.org/show_bug.cgi?id=48093

        This was an easy change, but to test it I had to pipe
        real Attachment objects into the queue testing system.
        Doing so revealed a whole bunch of bugs in our unit tests,
        which I fixed as part of this patch.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
         - This is the actual code change.  This will not reduce the
           backlog in the EWS queues much, but it will make rejections
           much quicker for obsolete patches or closed bugs.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
         - Test my new code.
         - Used a real attachment object and got rid of MockPatch
         - Shared code between the mac-ews and cr-mac-ews tests.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Can't use MockPatch anymore.
         - Removing MockPatch found more bugs here!
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
         - MockBugzilla should not be a "Mock" object.  Right now tool.bugs()
           is allowed, but wrong.  Making it not a Mock will make tool.bugs() correctly fail.

2010-10-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70301.
        http://trac.webkit.org/changeset/70301
        https://bugs.webkit.org/show_bug.cgi?id=48126

        "Lang attribute layout tests failing" (Requested by satish on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-22  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-21  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Win][DRT] should have LayoutTestController.hasSpellingMarker()
        https://bugs.webkit.org/show_bug.cgi?id=47885

        - Implemented LayoutTestController.hasSpellingMarker(),
        - Added fake spellcheck implementation.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/win/EditingDelegate.cpp:
        (indexOfFirstWordCharacter):
        (wordLength):
        (EditingDelegate::checkSpellingOfString):
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::hasSpellingMarker):

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed. Re-enable test that was mistakenly disabled by r67974.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed fix for rebaseline-chromium-webkit-tests.

        Port.diff_image no longer has a tolerance parameter. Also, use
        get_option('tolerance') which is safer if the options object doesn't
        define a tolerance attribute (it doesn't for the one used in
        rebaseline_chromium_webkit_tests).

        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        Add support for --tolerance in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=47959
        
        Add support for the --tolerance flag in NRWT. The Port.diff_image
        signature shouldn't need a tolerance parameter (it's not set per test),
        just have ports that use it (currently only WebKitPort) read it from 
        the options object.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add --suggest-reviewers option to upload to auto-suggest reviewers for your patch
        https://bugs.webkit.org/show_bug.cgi?id=48088

        This is a first-pass.  Works, but we'll eventually
        turn this on by default, refine the suggestion algorithm
        and possibly move it to a different place in the upload step order.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-10-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Segfault while testing accessibility/iframe-bastardization.html
        https://bugs.webkit.org/show_bug.cgi?id=30123

        Check m_element before actually using it to get the parent.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::parentElement): Add an extra check to
        make sure m_element points to a valid value before actually using
        it to get the parent. Also, assert ATK_IS_OBJECT(m_element).

2010-10-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Crash evaluating JavaScript string that throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=48092
        <rdar://problem/8487657>

        Add a test that evaluates a JavaScript string that throws an exception and check that 
        the callback is called.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp: Added.
        (TestWebKitAPI::didRunJavaScript):
        (TestWebKitAPI::WebKit2_EvaluateJavaScript):
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2010-10-21  Adam Roben  <aroben@apple.com>

        Test that the plugin's HWND is invalidated when NPN_InvalidateRect is
        called

        Test for <http://webkit.org/b/48086> <rdar://problem/8482944>
        Silverlight doesn't repaint in WebKit2

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_InvalidateRect): Added. Calls through to the browser.
        (executeScript): Added. Asks the browser to evaluate the script.

        (PluginTest::waitUntilDone):
        (PluginTest::notifyDone):
        Added. Calls through to layoutTestController.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added
        * NPN_InvalidateRect and waitUntilDone/notifyDone.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/NPNInvalidateRectInvalidatesWindow.cpp: Added.
        (TemporaryWindowMover::moveSucceeded):
        (TemporaryWindowMover::TemporaryWindowMover):
        (TemporaryWindowMover::~TemporaryWindowMover):
        This class moves a window on-screen and shows it, then moves it back and hides it.

        (NPNInvalidateRectInvalidatesWindow::NPNInvalidateRectInvalidatesWindow):
        Initialize our members.
        (NPNInvalidateRectInvalidatesWindow::~NPNInvalidateRectInvalidatesWindow):
        Delete our window mover if it hasn't been deleted already.
        (NPNInvalidateRectInvalidatesWindow::NPP_SetWindow): Subclass the
        plugin HWND and move the test harness window on screen.
        (NPNInvalidateRectInvalidatesWindow::wndProc): Call through to onPaint
        when we get a WM_PAINT message.
        (NPNInvalidateRectInvalidatesWindow::onPaint): Do the test and tell
        LayoutTestController we're done.
        (NPNInvalidateRectInvalidatesWindow::testInvalidateRect): Validate
        ourselves, invalidate our lower-right quadrant via NPN_InvalidateRect,
        then check that our HWND's invalid region is the rect that we
        invalidated.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * Added NPNInvalidateRectInvalidatesWindow.

2010-10-21  Daniel Bates  <dbates@rim.com>

        Add Git-support to do-file-rename
        https://bugs.webkit.org/show_bug.cgi?id=48015

        Fix tools. Export function scmMoveOrRenameFile so that it can be called from
        do-file-rename and do-webcore-rename. I inadvertently left this out of the patch.

        * Scripts/VCSUtils.pm:

2010-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        mac-ews is not properly releasing patches
        https://bugs.webkit.org/show_bug.cgi?id=48076

        mac-ews overrides process_work_item, so it was not calling
        release_work_item like the default process_work_item would.
        To fix this I made all the status-reporting methods just
        release the patch.  I expect we'll iterate on this design further.

        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] mathml flaky tests after adding SystemFonts to the theme
        https://bugs.webkit.org/show_bug.cgi?id=47727

        The Fontconfig setup in the GTK+ now specifically checks for and
        loads the STIX fonts for MathML tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Add hooks for loading the STIX fonts specifically.

2010-10-20  Adam Roben  <aroben@apple.com>

        Test that the UI client gets notified when WKView receives a WM_CLOSE
        message

        Test for <http://webkit.org/b/48044> <rdar://problem/8488446> Pressing
        Ctrl+W when viewing a full-page PDF destroys the WKView but doesn't
        close its parent window

        Reviewed by Jon Honeycutt.

        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp: Added.
        (TestWebKitAPI::close): Record that this function was called.
        (TestWebKitAPI::WebKit2_WMCloseCallsUIClientClose): Create a WKView,
        send it a WM_CLOSE message, and test that the UI client's close
        callback got called. Note that this will hang if the bug is
        reintroduced; <http://webkit.org/b/48043> covers making TestWebKitAPI
        able to handle hangs.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added the new test.

2010-10-20  Adam Roben  <aroben@apple.com>

        Make prepare-ChangeLog much faster when using git

        This change also seems to make it detect renames better in some cases.

        Fixes <http://webkit.org/b/48040> prepare-ChangeLog is slow when using
        git

        Reviewed by David Kilzer.

        * Scripts/prepare-ChangeLog:
        (statusCommand):
        (createPatchCommand):
        Use "-M -C" instead of "-C -C -M" to tell git-diff to detect renames
        and copies. The two "-C"s were making it read many more files than were
        necessary.

2010-10-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Null frame passed when running alert from UserScript run at document start
        <rdar://problem/8573809>
        https://bugs.webkit.org/show_bug.cgi?id=48036

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::didReceiveMessage):
        (TestWebKitAPI::InjectedBundleController::initializeTestNamed):
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleTest.h:
        (TestWebKitAPI::InjectedBundleTest::initialize):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp: Added.
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::DocumentStartUserScriptAlertCrashTest):
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):
        Add test for invoking an alert during a UserScript run at document start.

2010-10-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Adam Roben.

        TestNetscapePlugIn: Actually call NPP_SetWindow on Unix

        We were just returning NPERR_NO_ERROR previously.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_set_window):

2010-10-21  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48051> Move macros from DumpRenderTreeMac.h to config.h

        Reviewed by Adam Roben.

        * DumpRenderTree/config.h: Moved macros to here...
        * DumpRenderTree/mac/DumpRenderTreeMac.h: ...from here.
        Addresses a FIXME comment from r28419.

2010-10-21  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48047> Fix warnings found by check-Xcode-source-file-types

        Reviewed by Adam Roben.

        Fixes the following warnings:

            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'PixelDumpSupport.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'LayoutTestController.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'WorkQueue.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'cg/PixelDumpSupportCG.cpp'.
            WARNING: Incorrect file type 'sourcecode.cpp.objcpp' for file 'GCController.cpp'.
            5 issues found for WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Removed explicit file type for *.cpp files above to make them
        match other C++ source files.  This exposed the fact that
        DumpRenderTreeMac.h was not safe to include in C++ source, which
        caused PixelDumpSupport.cpp and PixelDumpSupportCG.cpp to fail
        to build.
        * DumpRenderTree/PixelDumpSupport.cpp: Adjusted header order.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Made safe to include
        in C++ source files.  Included CoreFoundation/CoreFoundation.h
        to make sure all CF types were defined.  Removed CFStringRef
        typedef.

2010-10-21  Adam Roben  <aroben@apple.com>

        Attempt to fix plugins/pass-different-npp-struct.html on GTK.

        See <http://webkit.org/b/47690>.

        * GNUmakefile.am: Added PassDifferentNPPStruct.cpp.

2010-10-21  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [NRWT] Set ImageDiff path on Qt port
        https://bugs.webkit.org/show_bug.cgi?id=48052

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

2010-10-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't CC authors of flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=48038

        Some authors found this too annoying.  We'll look for another way to
        close the flaky test loop.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should run run-webkit-tests with --no-new-test-results
        https://bugs.webkit.org/show_bug.cgi?id=47998

        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2010-10-21  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        [NRWT] Get child process number from an environment variable
        https://bugs.webkit.org/show_bug.cgi?id=47981

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-20  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/47754> New script to verify explicit source file types in Xcode project files

        Reviewed by Darin Adler.

        The script parses an Xcode project file and makes sure the file
        extension matches the explicit file type set for all source
        files.  Note that the majority of source files will have their
        type set by Xcode, so the script doesn't check them since there
        is no need to second-guess Xcode.

        * Scripts/check-Xcode-source-file-types: Added.  Code borrowed
        heavily from sort-Xcode-project-file.

2010-10-20  Adam Roben  <aroben@apple.com>
        
        Windows build fix

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Added missing #include.

2010-10-20  Adam Roben  <aroben@apple.com>

        Qt test fix

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Added
        PassDifferentNPPStruct.cpp.

2010-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add ability to test injected bundle API using TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=48027

        * TestWebKitAPI/InjectedBundleController.cpp: Added.
        * TestWebKitAPI/InjectedBundleController.h: Added.
        Shared main object for bundle functionality.

        * TestWebKitAPI/InjectedBundleMain.cpp: Added.
        Bundle entry point.

        * TestWebKitAPI/InjectedBundleTest.h: Added.
        Base class for which the bundle portion of a test derives from. 

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformUtilities.cpp: Added.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        Add helper to create a context with the shared injected bundle,
        and send the initial message to set up the test.

        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig: Added.
        * TestWebKitAPI/InjectedBundle-Info.plist: Added.
        Add mac configuration files.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the new files.

        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp: Added.
        Add a simple initial bundle test.

2010-10-20  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing /release-patch url used by the EWS bots.

        EWS should test patches with r+
        https://bugs.webkit.org/show_bug.cgi?id=35460

        * Scripts/webkitpy/common/net/statusserver.py:
         - I changed the URL during development, and 404s are
         intentionally silenced during release_patch.

2010-10-14  Adam Roben  <aroben@apple.com>

        Test that passing a different NPP struct back to the browser doesn't
        cause an assertion failure

        Test for <http://webkit.org/b/47690> <rdar://problem/8553020>
        Assertion failure in NetscapePlugin::fromNPP when using Shockwave in
        WebKit2

        Reviewed by John Sullivan.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp: Copied from WebKitTools/DumpRenderTree/TestNetscapePlugIn/Tests/win/GetValueNetscapeWindow.cpp.
        (PassDifferentNPPStruct::PassDifferentNPPStruct): Initialize our
        members.
        (PassDifferentNPPStruct::NPP_SetWindow): Pass a different NPP to the
        browser than the one it gave us in NPP_New and see if it works.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added PassDifferentNPPStruct.

2010-10-19  Adam Roben  <aroben@apple.com>

        Gently nudge old-run-webkit-tests toward working with Win32 Perl

        This makes old-run-webkit-tests able to build DRT and find all the
        tests to run. It even invokes DRT and passes it the list of tests. But
        DRT ends up hung blocking on I/O.

        Fixes <http://webkit.org/b/47961> Get old-run-webkit-tests mostly
        working with Win32 Perl

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
          - Use File::Spec instead of manually concatenating paths
          - Use dirname instead of manually stripping off the base name
          - Use isCygwin/isWindows/isAppleWinWebKit more judiciously
          - Explicitly invoke Perl when running Perl scripts
          - Quote paths when using them in regular expressions to allow them
            to include characters that have special meanings in regular
            expressions

        * Scripts/run-webkit-tests: Use File::Spec instead of manually
        concatenating paths.

        * Scripts/webkitdirs.pm:
          - Remove the unused $windowsTmpPath variable
          - Use isCygwin/isWindows/isAppleWinWebKit more judiciously
          - Only pass paths to cygpath when using Cygwin Perl
          - Only use pdevenv when using Cygwin Perl, for now

2010-10-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Add Git-support to do-file-rename
        https://bugs.webkit.org/show_bug.cgi?id=48015

        Also, abstracts the SCM move/rename functionality in do-file-rename and
        do-webcore-rename into a common function VCSUtils::scmMoveOrRenameFile().

        Currently, do-file-rename is hard coded to assume the SCM is Subversion.
        Instead, we should abstract the rename logic to be SCM-independent. This
        will allow us to add Git support as well move such functionality into
        our SCM library VCSUtils, where it can be shared by do-webcore-rename.

        * Scripts/VCSUtils.pm:
          - Added function scmMoveOrRenameFile.
        * Scripts/do-file-rename: Modified to call VCSUtils::scmMoveOrRenameFile().
        * Scripts/do-webcore-rename: Ditto.

2010-10-20  Adam Roben  <aroben@apple.com>

        Fix old-run-webkit-tests when there's a space in the path to DRT

        Reviewed by Jon Honeycutt.

        * Scripts/old-run-webkit-tests: Quote the path to DRT before executing
        it.

2010-10-20  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Regression in chromium_gpu_unittests after r70175
        https://bugs.webkit.org/show_bug.cgi?id=48008

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

2010-10-20  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        chromium_gpu port of new-run-webkit-tests must do Linux -> Win expectations fallback
        https://bugs.webkit.org/show_bug.cgi?id=48005

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

2010-10-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch doesn't get along with git rm
        https://bugs.webkit.org/show_bug.cgi?id=47940

        Turns out we need to pass "--" to tell git this is a path.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-10-20  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix layoutTestController.getJsObjectCount

        Qt Bridge doesn't know size_t so pass result as unsigned int.

        Unskip fast/dom/gc-10.html

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

        * DumpRenderTree/qt/GCControllerQt.cpp:
        (GCController::getJSObjectCount):
        * DumpRenderTree/qt/GCControllerQt.h:

2010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70149.
        http://trac.webkit.org/changeset/70149
        https://bugs.webkit.org/show_bug.cgi?id=47989

        "Build breaks in mac and win" (Requested by satish on
        #webkit).

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-20  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Added a second parameter to setMockSpeechInputResult for
        the language used in speech input.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult):

2010-10-19  Adam Roben  <aroben@apple.com>

        Teach update-webkit-support-libs about the new versioning of
        WebKitSupportLibrary

        Fixes <http://webkit.org/b/47915> update-webkit-support-libs should
        check version numbers instead of modification times

        Reviewed by Sam Weinig.

        * Scripts/update-webkit-support-libs: Fetch the expected version
        number from developer.apple.com, then compare with the version number
        of the extracted library and of the zipped library to see if anything
        needs to be done. Removed code that tracked the modified timestamp of
        the library, as it is no longer needed.

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS should test patches with r+
        https://bugs.webkit.org/show_bug.cgi?id=35460

        * QueueStatusServer/handlers/submittoews.py:
        * QueueStatusServer/model/queues.py:
        * Scripts/webkitpy/tool/bot/patchcollection.py: Removed.
        * Scripts/webkitpy/tool/bot/patchcollection_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/queues.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach feeder-queue how to feed the EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=47943

        queues.webkit.org already knew how to accept EWS submissions
        via /submit-to-ews.  This teaches the feeder queue how to post
        to that page with any new r? patches it sees.

        * QueueStatusServer/model/activeworkitems_unitest.py: Added.
         - More unit testing is always a good thing.
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing test-webkitpy.  I'm really on a roll today.

        commit-queue gets stuck when release-patch returns 404
        https://bugs.webkit.org/show_bug.cgi?id=47935

        Fix test-webkitpy and unittest NetworkTransaction.

        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        commit-queue gets stuck when release-patch returns 404
        https://bugs.webkit.org/show_bug.cgi?id=47935

        Turns out ClientForm gets upset if passed an int() instead of a string type.
        Yay for untestable code.

        * Scripts/webkitpy/common/net/statusserver.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Will get Adam's commentary after his meeting
        for now this gets the commit-cluster back running.

        commit-queue gets stuck when release-patch returns 404
        https://bugs.webkit.org/show_bug.cgi?id=47935

        I taught NetworkTransaction the basics of 404 handling.
        We'll want to go back and teach it how to handle urllib2 404's too
        and then deploy it to the places that want it.

        * QueueStatusServer/handlers/releasepatch.py:
        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/statusserver.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing typos in my previous commit.

        Make patch release explicit and not a magic part of "retry" status
        https://bugs.webkit.org/show_bug.cgi?id=47909

        All of these typos again due to our inability to unit
        test much of this code.  I added one unit test where
        possible.  activeworkitems_unittest.py will be in a separate patch.

        * QueueStatusServer/handlers/releasepatch.py:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/model/workitems.py:
        * QueueStatusServer/model/workitems_unittest.py:
        * QueueStatusServer/templates/releasepatch.html:
        * Scripts/webkitpy/common/net/statusserver.py:

2010-10-19  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Use webkit's TestNetscapePlugIn in DRT mac
        https://bugs.webkit.org/show_bug.cgi?id=47850

        * DumpRenderTree/chromium/TestNetscapePlugIn/Info.plist: Added. Forked
            because we're going to name our plugin WebKitTestNetscapePlugIn
            temporarily until the chromium forked plugin goes away.

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make patch release explicit and not a magic part of "retry" status
        https://bugs.webkit.org/show_bug.cgi?id=47909

        This moves us another step closer to running r+ patches on the EWS bots.
        Currently all bots just spam /update-work-items with their list of current
        work items.  queues.webkit.org uses that data for display.  As part of making
        the EWS run r+ patches, we're moving the official list of patches-to-process
        into the server, and feeding them out to bots one at a time.  We need to be
        able to remove patches from the queues one at a time instead of just spamming
        /update-work-items with a new complete list.  That's what this patch adds.

        * QueueStatusServer/handlers/nextpatch.py:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/releasepatch.py: Added.
        * QueueStatusServer/handlers/statusbubble_unittest.py:
         - Fix a typo causing test failure.  This was not caught by the bots
           because they don't have AppEngineLauncher installed and thus don't run
           the QueueStatusServer tests.
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/templates/releasepatch.html: Added.
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        cr-mac bubble has caused status bubbles to wrap
        https://bugs.webkit.org/show_bug.cgi?id=47928

        We now have too many EWSes to fit in the bugs.webkit.org
        status-bubble iframe when more than a couple EWS builds are pending.
        To fix this I've reduced the space taken up by queue position,
        and also moved cr-mac to the end of the list (since it's going to be
        triple-digits for a while).

        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/statusbubble.html:

2010-10-19  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        chromium_gpu port of new-run-webkit-tests must search chromium-gpu directory for expectations
        https://bugs.webkit.org/show_bug.cgi?id=47874

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-10-19  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] DumpRenderTree shouldn't put '.' in include path
        https://bugs.webkit.org/show_bug.cgi?id=47877

        Fix include paths.

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
        * DumpRenderTree/chromium/AccessibilityUIElement.h:
        * DumpRenderTree/chromium/CppBoundClass.cpp:
        * DumpRenderTree/chromium/CppVariant.cpp:
        * DumpRenderTree/chromium/CppVariant.h:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/PlainTextController.cpp:
        * DumpRenderTree/chromium/Task.cpp:
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        * DumpRenderTree/chromium/TestWebWorker.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebPreferences.cpp:
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
        * DumpRenderTree/chromium/WebThemeEngineDRT.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2010-10-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need to include WKErrorRef in the WKPageDidFail... functions
        https://bugs.webkit.org/show_bug.cgi?id=47871

        Update tools for new parameter in failure callbacks.

        * MiniBrowser/mac/BrowserWindowController.m:
        (didFailProvisionalLoadWithErrorForFrame):
        (didFailLoadWithErrorForFrame):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-10-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] WebKit2 MacOS build fix
        https://bugs.webkit.org/show_bug.cgi?id=47897

        Qt WebKit2 MacOS build fix.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/TestControllerQt.cpp:

2010-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch stats the filesystem too many times
        https://bugs.webkit.org/show_bug.cgi?id=47883

        This patch attempts to cache the list of changed files more agressively
        and to use that list to compute the diff instead of stating the file
        system again.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2010-10-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/47741> Make sort-Xcode-project-file a little more friendly

        Reviewed by Darin Adler.

        * Scripts/sort-Xcode-project-file:
        - Don't print an error message about missing arguments when
          -h|--help is used.
        - Allow Xcode project files to be specified as Project.xcodeproj
          instead of Project.xcodeproj/project.pbxproj.

2010-10-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser: Prevent calling load() directly from loadFinished() in robot mode.
        https://bugs.webkit.org/show_bug.cgi?id=47809

        Connecting a call to load from the loadFinished signal can cause
        re-entrance crashes in WebCore. This patch uses a timer to do so,
        also giving some time to subsequent frames to finish loading.

        * QtTestBrowser/urlloader.cpp:
        (UrlLoader::UrlLoader):
        (UrlLoader::loadNext):
        (UrlLoader::checkIfFinished):
        (UrlLoader::frameLoadStarted):
        (UrlLoader::frameLoadFinished):
        * QtTestBrowser/urlloader.h:

2010-10-19  Sergio Villar Senín  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/history tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=36173

        Clear the history each time a test is run. Return the actual
        history item count when calling
        LayoutTestController::webHistoryItemCount

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::webHistoryItemCount):

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Chromium Mac EWS to the list of queues at queues.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=47878

        * QueueStatusServer/model/queues.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org/next_patch is always 404
        https://bugs.webkit.org/show_bug.cgi?id=47881

        With the addition of the Queue class, I changed most of the
        code to lookup WorkItems using get_or_insert with a key_name
        instead of WorkItems.all().filter(queue_name=).
        Because the new get_or_insert code uses an explicit key_name
        (which is obviously different from the previously autogenerated
        ones), there were new WorkItem records created for each queue.
        However, some parts of the code still use WorkItems.all().filter,
        thus some parts were getting the new record and some parts the old record.

        The same basic bug was occurring with ActiveWorkItems, because I
        changed the key_name for that class as well.

        To fix this I've moved more of the code over to using Queue.*work_items.
        I've also enabled the datastore_admin (new in GAE 1.3.8) so that
        we can go delete the old WorkItems records.
        I also changed remote_api to use the new builtin: syntax (also added in GAE 1.3.8).

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/handlers/updateworkitems.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Correct a bunch of typos in QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=47880

        These are all due to our complete lack of unit testing in QueueStatusServer.
        I added a couple unit tests to cover a few of these fixes, but most of these
        are still only caught by actually running the application.

        * QueueStatusServer/handlers/nextpatch.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/statusbubble_unittest.py: Added.
        * QueueStatusServer/handlers/updateworkitems.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queuepropertymixin.py:
        * QueueStatusServer/model/queuepropertymixin_unittest.py:
        * QueueStatusServer/model/workitems.py:
        * QueueStatusServer/model/workitems_unittest.py: Added.

2010-10-18  Adam Barth  <abarth@webkit.org>

        Disable this test because it's failing on the bots and the authors
        aren't around to fix it.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CC authors of flaky tests when the commit-queue hits a flaky test
        https://bugs.webkit.org/show_bug.cgi?id=47872

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/net/layouttestresults.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to run a chromium-mac-ews builder
        https://bugs.webkit.org/show_bug.cgi?id=47876

        Since we can't run Mac OS X in a VM, we need to only run committer patches.
        There was a multiple inheritance problem which was holding this patch back,
        but I decided to just ignore the problem and go with a functional hack for now.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2010-10-18  Kenneth Russell  <kbr@google.com>

        Reviewed by Tony Chang.

        Regression in run_webkit_tests_unittest from r70017
        https://bugs.webkit.org/show_bug.cgi?id=47875

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement webkit-patch suggest-reviewers
        https://bugs.webkit.org/show_bug.cgi?id=47866

        * Scripts/webkitpy/common/checkout/api.py:
            - The main logic.  We look at the last five changes to each
              modified (non-ChangeLog) file and collect up the reviewers of
              those changes as well as the authors of those changes who are
              reviewers.
        * Scripts/webkitpy/common/checkout/api_unittest.py:
            - Test the logic with some fun mocks.
        * Scripts/webkitpy/common/checkout/scm.py:
            - Fix a bug when you have local git commits.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
            - Test that the bug is fixed.
        * Scripts/webkitpy/tool/commands/queries.py:
            - Add the query.

2010-10-18  Kenneth Russell  <kbr@google.com>

        Reviewed by Eric Seidel.

        new-run-webkit-tests produces corrupt PNG baselines on Windows
        https://bugs.webkit.org/show_bug.cgi?id=47867

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

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to submit patches to the EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=47869

        * QueueStatusServer/handlers/nextpatch.py:
         - Move more logic into Queue, so that it can be shared with SubmitToEWS.
        * QueueStatusServer/handlers/queuestatus.py:
         - Fix two typos from a previous commit.
        * QueueStatusServer/handlers/submittoews.py: Added.
        * QueueStatusServer/handlers/updatestatus.py:
         - Use the new is_retry_request method to share this (hacky) code with SubmitToEWS
        * QueueStatusServer/main.py:
         - Add /submit-to-ews
        * QueueStatusServer/model/queuepropertymixin.py:
         - Fix circular imports caused by adding Queue.work_items()
        * QueueStatusServer/model/queues.py:
         - Add work_items() and active_work_items()
        * QueueStatusServer/model/queuestatus.py:
        * QueueStatusServer/model/workitems.py:
         - Add transaction-safe add/remove methods.
        * QueueStatusServer/templates/submittoews.html: Added.

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Deploy Queue class in more places throughout QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=47855

        I also caught two typos from the previous change.  Unfortunately
        I don't yet know how to unittest request handlers yet.

        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/updateworkitems.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queuepropertymixin.py: Added.
        * QueueStatusServer/model/queuepropertymixin_unittest.py: Added.
        * QueueStatusServer/model/queuestatus.py:
        * QueueStatusServer/model/workitems.py:

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        scm.py should be able tell us what revisions made changes to a given file
        https://bugs.webkit.org/show_bug.cgi?id=47863

        Look again, your SCM.py can now log files.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-10-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        new-run-webkit-tests: clean up the options-parsing code in the port
        classes.
        
        This change modifies the Port interface to have a get_option() and
        set_option_default() method for accessing the options argument
        passed to the constructor. If the constructor is not passed an
        options argument, we default to a MockOptions() argument from
        mocktool, which has the same semantics we want.

        Note that there is a disadvantage to port.get_option('foo') over
        port._options.foo, which is that you lose some of the checking
        for whether 'foo' is set (typos result in the default value, not
        an exception being raised. This is desired in this case, since the
        Port class is not allowed to assume that options does have any
        particular values set, and so this change ensures that all of
        the subclasses are following the same, intended, logic.

        Arguably this is the wrong semantics to have, and the Port
        classes should be able to assume a default set of
        attributes/arguments, but that change will need to wait for a
        different CL where we can modify new-run-webkit-tests to pull a
        list of arguments from the port factory routines.

        Also, add unit tests for webkitpy.tool.mocktool.MockOptions .

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/mocktool_unittest.py: Added.

2010-10-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Re-submit a revised version of r69638 - enabling new-run-webkit-tests
        under cygwin. The initial version had a bug in base:uri_to_test_name
        that was causing tests to fail. This version corrects that bug, but
        also makes the code safer by calling cygpath more reliably, and
        leaving a long-running cygpath process open.

        This patch also corrects a couple of minor bugs in http_lock_unittest,
        chromium_unittest, and dedpulicate_tests_unittest that showed up
        while testing this.

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

        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/common/system/path_unittest.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Queue class and add minimal unittesting of QueueStatusServer code
        https://bugs.webkit.org/show_bug.cgi?id=47847

        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/updateworkitems.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/model/queues_unittest.py: Added.
        * QueueStatusServer/model/svnrevision.py:
        * Scripts/test-webkitpy:
        * Scripts/webkitpy/test/main.py:

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon):

2010-10-18  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Eric Seidel.

        Switch to using the new Carbon NPAPI event declarations, and remove
        the old ones.

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

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon):

2010-10-18  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style should treat the GObject binding directory like other GTK directories.
        https://bugs.webkit.org/show_bug.cgi?id=47796

        * Scripts/webkitpy/style/checker.py: Added the GObject binding directory
        with the other gtk directories (and fixed typo).

2010-10-18  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        check-webkit-style needs to ignore underscores in opcode names and vm_throw
        https://bugs.webkit.org/show_bug.cgi?id=47789

        * Scripts/webkitpy/style/checker.py: Added the exception for the assembler directory.
        * Scripts/webkitpy/style/checkers/cpp.py: Added special cased names.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added unit tests for the special cases.

2010-10-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        TextInputController.hasSpellingMarkers() should be owned by LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=47659
        
        Moved hasSpellingMarkers() from TextInputController to
        LayoutTestController.  Currently the implementation is available
        only for Mac and for Chromium.

        * DumpRenderTree/LayoutTestController.cpp:
        (hasSpellingMarkerCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::makeAttributedString):
        * DumpRenderTree/chromium/TextInputController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/mac/TextInputController.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::hasSpellingMarker):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::hasSpellingMarker):

2010-10-18  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        commit-queue's flaky test notice is very Pythony
        https://bugs.webkit.org/show_bug.cgi?id=47790

        This patch make the list of tests delimted by \n instead of just
        converting the array to a string.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-14  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson and Xan Lopez.

        [Gtk]: DRT does not support frame flattening testing
        https://bugs.webkit.org/show_bug.cgi?id=38650

        Implement DRT's support for toggling on/off frame flattening
        support.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setFrameFlatteningEnabled):

2010-10-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        mocktool.MockOptions is inheriting from Mock, which has the side
        effect of defaulting any attribute to another MockObject. So,
        MockOptions().foo would always evaluate to true. This was
        covering over bugs in the unit tests, and is probably the wrong
        default behavior for anything attempting to mock out the options
        argument returned from optparse.parse_args().

        This patch changes the default behavior. The new MockOptions()
        class takes an optional list of keyword parameters to set; this
        patch doesn't use that feature but the fix for bug 47510 will.

        Also, this patch just fills in the default values necessary to
        get all of the tests to pass; I didn't stare at each test by
        hand to determine the "right" values. We can either fix that in
        subsequent patches or let me know if we want to do that now (and
        give me some guidance on what those values might want to be).

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

        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:

2010-10-15  Simon Fraser  <simon.fraser@apple.com>

        Fix the build; need to add new slot to PageUIClient callbacks.

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

2010-10-15  Simon Fraser  <simon.fraser@apple.com>

        Add Matt Delaney to committers.py.

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

2010-10-15  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] compile TestNetscapePlugIn on Chromium mac
        https://bugs.webkit.org/show_bug.cgi?id=47633

        * DumpRenderTree/DumpRenderTree.gypi: files to compile
        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Use ifdef because gcc was complaining
        (NP_GetEntryPoints):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        (NPP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Added.

2010-10-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        build-webkit: Should die when make fails when build a CMake project
        https://bugs.webkit.org/show_bug.cgi?id=47726

        * Scripts/webkitdirs.pm: If make fails, die immediately.

2010-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69809.
        http://trac.webkit.org/changeset/69809
        https://bugs.webkit.org/show_bug.cgi?id=47725

        Broke chromium mac compile (Requested by japhet on #webkit).

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_GetEntryPoints):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        (NPP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Removed.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Removed.

2010-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy fails on Linux
        https://bugs.webkit.org/show_bug.cgi?id=47713

        The old code failed on Linux because the MacPort tries to read
        something out of platform that doesn't make sense on Linux.

        * Scripts/webkitpy/tool/mocktool.py:

2010-10-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WTR is sloooow
        https://bugs.webkit.org/show_bug.cgi?id=47695

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        Change the timer interval of RunUntilConditionLoop from
        50 milliseconds to 1 to avoid wasting time after the 
        test had been finished.

2010-10-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing an exception seen on the commit-queue.

        I should have unit tested this function before.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should not fail patches due to flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=47647

        This patch makes it so that the *same* flaky test has to fail
        twice in a row to have a false negative from a flaky test.

        If different flaky tests fail (or if a test fails and then passes
        in a second run) then we will warn in the bug that we encountered
        a flaky test.

        This patch grew to include moving port off of steps onto tool
        (which Adam wrote and then I integrated), as well as removing the
        use of tool from CommitQueueTask.

        * Scripts/webkitpy/common/config/ports.py:
         - Added a layout_test_results_path method.  This covers old-run-webkit-tests
           but doesn't cover NRWT.  This is probably not the long term solution, but
           putting this knowledge on port makes more sense than in LayoutTestResults.
        * Scripts/webkitpy/common/net/buildbot.py:
         - LayoutTestResults shouldn't know how to fetch from the network, make
           the Build code do that instead.
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
         - Code style fix.
        * Scripts/webkitpy/common/net/layouttestresults.py:
         - Remove code for reading from the network.
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
         - Test the new entrypoint.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
         - Make the delegate interface explicit.
         - Remove the _tool member, since using the delegate for
           everything is cleaner.
         - Teach the testing logic how to deal with flaky tests.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
         - Update to match the CommitQueueTask changes.
        * Scripts/webkitpy/tool/commands/queues.py:
         - Use the new CommitQueueTaskDelegate interface.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Fix the SecondThoughtsCommitQueue test which was broken.
         - Add a new test to make sure the flaky test reporting works.
        * Scripts/webkitpy/tool/main.py:
         - Store the port on the tool object.
        * Scripts/webkitpy/tool/mocktool.py:
         - Add a port() accessor to MockTool
        * Scripts/webkitpy/tool/steps/abstractstep.py:
         - Move port() off of Step and onto Tool.
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Two tests with the same name!  only the latter was being run.
        * Scripts/webkitpy/tool/steps/update.py:

2010-10-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests will now handle missing Ruby installs (or
        missing PrettyPatch scripts) more cleanly - previously this
        would be detected when we actually tried to create the diff, and
        the error message was obscure. Now we'll log a warning up front
        and otherwise be silent.

        This change also refactors some global variables to be class or
        instance variables to be slightly more testable and more
        modular. There are no cases where we create lots of port objects
        and can't afford to test for configurations repeatedly, so
        there's no performance concern here.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-10-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Form controls do not respect GTK+ font size
        https://bugs.webkit.org/show_bug.cgi?id=47134

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Initialize the font control size when running
        DumpRenderTree to a standard value.

2010-10-14  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] compile TestNetscapePlugIn on Chromium mac
        https://bugs.webkit.org/show_bug.cgi?id=47633

        * DumpRenderTree/DumpRenderTree.gypi: files to compile
        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Use ifdef because gcc was complaining
        (NP_GetEntryPoints):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        (NPP_GetValue):
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h: Added.
        * DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h: Added.

2010-10-14  Victor Wang  <victorw@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] Fix rebaseline_chromium_webkit_tests to use 0 tolerance image diff.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-10-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        test-webkitpy spews Delegate terminated queue messages
        https://bugs.webkit.org/show_bug.cgi?id=47678

        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:

2010-10-14  Adam Roben  <aroben@apple.com>

        Test that pressing the Alt key generates a WM_SYSCOMMAND message

        Test for <http://webkit.org/b/47671> <rdar://problem/8435594> Pressing
        the Alt key when MiniBrowser's WKView is focused doesn't send focus to
        the menu bar

        Reviewed by Steve Falkenburg.

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Added
        TestWebKitAPI/win to the include path so that WindowMessageObserver
        can be found.

        * TestWebKitAPI/PlatformWebView.h: Added simulateAltKeyPress and
        Windows-specific members.
        (TestWebKitAPI::PlatformWebView::setParentWindowMessageObserver):
        Added this simple setter.

        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp: Added.
        (TestWebKitAPI::WMSysCommandObserver::WMSysCommandObserver):
        Initialize our lone data member.
        (TestWebKitAPI::WMSysCommandObserver::windowDidReceiveWMSysCommand):
        Simple getter.
        (TestWebKitAPI::WMSysCommandObserver::windowReceivedMessage): Record
        when a WM_SYSCOMMAND message is received.
        (TestWebKitAPI::didNotHandleKeyEventCallback): Record when a
        WM_SYSKEYUP message is not handled.
        (TestWebKitAPI::WebKit2_AltKeyGeneratesWMSysCommand): Simulate
        pressing the Alt key and check that a WM_SYSCOMMAND message got sent
        to the WKView's parent window.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::registerWindowClass): Made this a
        member function so it could access PlatformWebView::wndProc. Use
        PlatformWebView::wndProc as the WNDPROC.
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Initialize our new
        data member and pass the this pointer to CreateWindowEx so we can
        store it on the HWND.
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Moved some
        constants from here to the top of the file.
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress): Added. Sends
        the same messages that Notepad receives when you press the Alt key.
        (TestWebKitAPI::PlatformWebView::wndProc): Added.
          - When WM_CREATE is received, we set the PlatformWebView instance
            pointer as a property on the HWND so we can access it later.
          - For other messages, we try to get the PlatformWebView instance
            pointer from the HWND property.
          - When WM_NCDESTROY is received (which is the last message we will
            receive), we remove the PlatformWebView instance property.
          - Pass messages to the parent window's message observer, if there is
            one.
          - Pass all messages through to ::DefWindowProcW.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added WindowMessageObserver
        and AltKeyGeneratesWMSysCommand.

        * TestWebKitAPI/win/WindowMessageObserver.h: Added. This class can be
        used to observe messages sent to one or more windows.

2010-10-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Holger Freyther.

        [GTK] REGRESSION: FreeType backend does not respect XSettings font settings after r68558
        https://bugs.webkit.org/show_bug.cgi?id=47033

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeGtkFontSettings): Added this method which initializes XSettings
        font settings to consistent values before running a test. For the one test
        in which we need subpixel aliasing turned on, do that.
        (initializeFonts): Accepts a testURL parameter now and delegates to initializeGtkFontSettings.
        (runTest): Pass the testURL to initializeFonts.

2010-10-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ChromiumXVFBPort.run_webkit_tests_command has infinite recursion
        https://bugs.webkit.org/show_bug.cgi?id=47655

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

2010-10-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        beat diff_parser with the ugly stick
        https://bugs.webkit.org/show_bug.cgi?id=47626

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        * Scripts/webkitpy/style/patchreader.py:
        * Scripts/webkitpy/style/patchreader_unittest.py:

2010-10-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Break LayoutTestResults out into its own file
        https://bugs.webkit.org/show_bug.cgi?id=47637

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults.py: Added.
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py: Added.

2010-10-13  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Chromium port can't run JavaScriptCore tests
        https://bugs.webkit.org/show_bug.cgi?id=47654

        This lets webkit-patch build-and-test work on Chromium.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make --port a global option and pass the port information to the commit-queue subprocess
        https://bugs.webkit.org/show_bug.cgi?id=47650

        This patch paves the way to run the commit-queue on a non-Mac port.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/update.py:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Introduce the ChromiumXVFBPort for running commit-queue on EC2
        https://bugs.webkit.org/show_bug.cgi?id=47653

        I'm not entirely sure this is the best way to do this, but we need to
        run the tests under XVFB on EC2 because the EC2 instances don't have a
        real monitor hooked up.  This patch adds a ChromiumXVFBPort that runs
        that way.  The idea is that XVFB is like a platform for the Chromium
        port, but we don't have a real notion of platform separate from port.

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

2010-10-13  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        Add include paths for the new soup HTTP cache code.

        * GNUmakefile.am: Add paths for the new soup HTTP cache code.

2010-10-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] QtTestBrowser shows two Url input fields
        https://bugs.webkit.org/show_bug.cgi?id=47613

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::buildUI):

2010-10-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Tony Chang.

        [gdb] Add pretty-print supports for UString, Identifier and JSString
        https://bugs.webkit.org/show_bug.cgi?id=47601

        * gdb/webkit.py:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add list of Ubuntu packages needed by the EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=47628

        I've been copy/pasting this list between bots, but it's better to have
        this checked in.

        * EWSTools/ubuntu-ews-packages: Added.

2010-10-13  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Csaba Osztrogonác.

        [EFL] Adds a build slave.
        https://bugs.webkit.org/show_bug.cgi?id=47290

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add an
        entry for a release build of the EFL port.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add platform
        flag to build the EFL port.

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Csaba Osztrogonác.

        webkit-patch build shouldn't need --build to actually build!
        https://bugs.webkit.org/show_bug.cgi?id=47438

        Yeah, requiring --build for the build command is really dumb.  We did
        this originally because the build step is usually optional in other
        commands.  We don't have a good way of reversing the default for an
        option in one command.  This approach is slightly hacky since --build
        still shows up as an option on the help page, but at least it makes
        progress.  Passing --build is harmless, so the EWS bots shouldn't
        explode because of this change.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-10-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69638.
        http://trac.webkit.org/changeset/69638
        https://bugs.webkit.org/show_bug.cgi?id=47595

        "Broke win and chromium-win bots" (Requested by dglazkov on
        #webkit).

        * Scripts/webkitpy/common/system/path.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-13  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        First step towards client-based Geolocation in Chromium. Build
        fixes for CLIENT_BASED_GEOLOCATION preprocessor feature define.
        https://bugs.webkit.org/show_bug.cgi?id=47586

        * DumpRenderTree/chromium/WebViewHost.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:

2010-10-13  Adam Roben  <aroben@apple.com>

        Test that pressing the spacebar in a text field does not scroll the
        document

        Test for <http://webkit.org/b/47544> <rdar://problem/8540645>
        REGRESSION: Pressing spacebar in a text field in WebKit2 does not
        insert a space, scrolls the page instead

        Reviewed by Sam Weinig.

        * TestWebKitAPI/PlatformUtilities.h: Added isKeyDown.

        * TestWebKitAPI/PlatformWebView.h: Added simulateSpacebarKeyPress.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:
        * TestWebKitAPI/win/copy-resources.cmd:
        Added new files.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp: Added.
        (TestWebKitAPI::JavaScriptCallbackContext::JavaScriptCallbackContext):
        We use this to track what the result of calling into JavaScript was.
        (TestWebKitAPI::didFinishLoadForFrame): Records when the page
        finishes loading.
        (TestWebKitAPI::didNotHandleKeyEventCallback): Records when a key down
        event is not handled.
        (TestWebKitAPI::javaScriptCallback): Records that JavaScript finished
        executing and whether the result matched our expectation.
        (TestWebKitAPI::wk): Turns a UTF-8 C string into a WKStringRef.
        (TestWebKitAPI::runJSTest): Calls into JS, waits for the call to
        complete, and returns whether we got back the expected result.
        (TestWebKitAPI::WebKit2_SpacebarScrolling): Tests that pressing
        spacebar inside a text field does not scroll the document and that
        pressing it outside the text field does scroll the document.

        * TestWebKitAPI/Tests/WebKit2/spacebar-scrolling.html: Added.

        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::isKeyDown): Checks the event's type.

        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Copied
        code from DRT's EventSendingController.

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::isKeyDown): Checks the message's type.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress): Send the
        same messages that get sent when you press spacebar in Notepad.

2010-10-13  Adam Roben  <aroben@apple.com>

        Fix a couple of issues with the TestWebKitAPI build

        * TestWebKitAPI/Configurations/TestWebKitAPICFLite.vsprops:
        * TestWebKitAPI/Configurations/TestWebKitAPICoreFoundation.vsprops:
        Fixed a typo.

        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Use common.vsprops
        to set our output and intermediate directories so that we don't spew
        files into the source tree.

2010-10-13  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        WTR should accept relative paths
        https://bugs.webkit.org/show_bug.cgi?id=47486

        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL): Moved from StringFunctions.h since it is
        used only here. Extend relative paths to absolute.

2010-10-12  Adam Roben  <aroben@apple.com>

        Make TestWebKitAPI work on Windows

        Fixes <http://webkit.org/b/47552> <rdar://problem/8541708>.

        Reviewed by Sam Weinig.

        * Scripts/build-api-tests: Build TestWebKitAPI.sln on Windows.

        * Scripts/run-api-tests: Fix the PATH so that TestWebKitAPI can be
        run on Windows.
        (runTest): Added code to run TestWebKitAPI.exe on Windows and to die
        on unsupported platforms.
        (populateTests): Added code to run TestWebKitAPI.exe on Windows and to
        die on other platforms. Extracted some formerly-Mac-specific code to
        be cross-platform and made it handle any style of line-endings.

        * TestWebKitAPI/Configurations/TestWebKitAPICFLite.vsprops: Added.
        Links against CFLite.

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Added.
        Contains most properties for the project.

        * TestWebKitAPI/Configurations/TestWebKitAPICoreFoundation.vsprops:
        Added. Links against CoreFoundation.

        * TestWebKitAPI/TestWebKitAPIPrefix.h: Added a Windows-specific
        section and moved the cross-platform section after the
        platform-specific parts.

        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Added.
        (TestWebKitAPI::Util::run): Runs a normal message pump until we're
        done.
        (TestWebKitAPI::Util::cf): Turns a UTF-8 C string into a CFString.
        (TestWebKitAPI::Util::createURLForResource): Uses CFBundle to get the
        resource path.
        (TestWebKitAPI::Util::URLForNonExistentResource): Creates a bogus
        WKURL.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp: Added.
        (TestWebKitAPI::registerWindowClass):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page):
        This was mostly copied from WebKitTestRunner's PlatformWebView.

        * TestWebKitAPI/win/TestWebKitAPI.sln: Added. Builds both
        TestWebKitAPI and TestWebKitAPIGeneratd. This is used by the
        build-api-tests script.

        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added. Builds
        TestWebKitAPI.exe.

        * TestWebKitAPI/win/TestWebKitAPIGenerated.vcproj: Added. Just calls
        through to copy-resources.cmd.

        * TestWebKitAPI/win/copy-resources.cmd: Added. Copies resources into
        or deletes resources from TestWebKitAPI.resources.

        * TestWebKitAPI/win/main.cpp: Added.
        (main): Calls through to TestsController.

2010-10-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Support viewport configuration and add new arguments for WebKit EFL
        https://bugs.webkit.org/show_bug.cgi?id=47084

        Opera spec regarding to viewport meta tag was adjusted to WebCore. So, EFL port
        needs to be modified according to the changes.

        * EWebLauncher/main.c:
        (on_viewport_changed):

2010-10-12  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        This patch enables new-run-webkit-tests (in particular the
        chromium-win port) to run under Cygwin as well as Win32. Mostly
        this just required some conversions from cygwin paths to Win32
        paths when we spawn off Win32 binaries like test_shell.

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

        * Scripts/webkitpy/common/system/path.py:
        - Expose the cygpath() function for path conversion

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        - shift filename->uri conversion in the TestInfo objects to the
          dump_render_tree thread

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        - use cygpath()

2010-10-12  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed. Add Yuta Kitamura (yutak) to the committers list.

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

2010-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        When a provisional load fails, the provisional URL returned
        from WKFrameCopyProvisionalURL should be empty
        <rdar://problem/8540878>
        https://bugs.webkit.org/show_bug.cgi?id=47546

        Add test.

        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start fleshing out find page overlays
        https://bugs.webkit.org/show_bug.cgi?id=47559

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController find:]):
        Pass kWKFindOptionsShowOverlay to WKPageFindString.

2010-10-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] editing/input/emacs-ctrl-o.html

        ctrl-o is bound to a sequence of commands on Mac, namely:
        insertParagraphSeparator then moveLeft. In the DRT, we just interpret
        ctrl-o in EventSenderQt as '\n', i.e. insertParagraphSeparator. As a
        result we only issue one command, so don't generate the change in caret
        position that results in the extra editing delegate messages.

        So for the sake of not managing suspicious-looking differences, just
        make DRT issue the appropriate edit commands to pass the test.

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

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown):

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a simple Find UI to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=47553

        * MiniBrowser/mac/BrowserWindow.xib:
        Add Find panel.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController performFindPanelAction:]):
        Show the find panel.

        (-[BrowserWindowController find:]):
        Tell the WKPageRef to find the given string.

2010-10-12  Tony Chang  <tony@chromium.org>

        Unreviewed, fixing DRT compile on Windows after r69586.

        * DumpRenderTree/chromium/WebThemeEngineDRT.h:

2010-10-12  Tony Chang  <tony@chromium.org>

        Unreviewed, trying to fix NRWT on Windows.

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

2010-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WTR] Checking the path of the injected bundle is bogus
        https://bugs.webkit.org/show_bug.cgi?id=47541

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::isExistingLibrary): Added (static helper).
        Extend the path with the appropriate suffix(es) on the
        platform and check that the file exists.
        (WTR::TestController::initializeInjectedBundlePath):
        There were two bugs with the path checking:
            - the condition should have been inverted
            - QLibrary::fileName does not give back the filename
              with the library suffix so we cannot check
              that existance of the file this way.

2010-10-12  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        Implement http locking in NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=47072

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/http_lock.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_lock_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit WebKit2 build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (getWindowFrame): Use NSRect rather than CGRect since that's what -frame returns.
        (setWindowFrame): Use NSMakeRect rather than CGRectMake since that's what -setFrame:display: expects.

2010-10-11  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        change the order of mrobinson's email addresses so bugs.webkit.org suggests the right one
        https://bugs.webkit.org/show_bug.cgi?id=47513

        bugs.webkit.org suggests mrobinson@igalia.com as an autocomplete,
        which doesn't actually work.

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

2010-10-11  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by Dmitry Titov.

        Added support for showModalDialog on chromium port.

        Implement showModalDialog for Layout tests for chromium port
        https://bugs.webkit.org/show_bug.cgi?id=46759

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::closeWidgetSoon): Quit current message loop if in a modal loop.
        (WebViewHost::runModal):  Start a nested message loop and remember that.
        (WebViewHost::WebViewHost):  Initialize m_inModalLoop.
        * DumpRenderTree/chromium/WebViewHost.h:  Add m_inModalLoop.

2010-10-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Cleanup font selection code for the Freetype backend
        https://bugs.webkit.org/show_bug.cgi?id=47503

        Update DRT to set values for the cursive and fantasy font families, so
        that we can generate consistent results for tests that use these families.
        Add some missing information to fonts.conf.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Always set the fantasy and cursive font
        family names.
        * DumpRenderTree/gtk/fonts/fonts.conf: Add aliases for cursive and fantasy fonts
        to our default serif font. Eventually we may want to import or require some "real"
        fonts, but this should at least ensure consistent rendering during test runs. Also
        add aliases for some other commonly used fonts in tests (Arial and Lucida Grande).
        Finally, add a missing oblique specification for DejaVu Serif, which was resulting
        in some incorrect baselines for the synthetic oblique test.

2010-10-11  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix sheriffbot not to crash when there are failing tests.  It turns out
        Python sets don't support the + operator.  We need to use union
        instead.  There's a more elegant way to do this in Python 2.6, but we
        need this code to work in 2.5.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:

2010-10-10  Robert Hogan  <robert@webkit.org>

        Unreviewed, fix failing test from r69468.

        [Qt] Put all DRT-created pages in a page group

        Fix on r69468.

        Because we don't delete closed pages immediately in DRT we need
        to remove them from the page group explicitly instead.

        Fixes failure of fast/events/popup-blocked-from-fake-user-gesture.html

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::windowCloseRequested):

2010-10-10  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Barth.

        commit-queue: Add EFL-EWS status bubble to Bugzilla, now that the
        EFL-EWS bot is up and running.
        https://bugs.webkit.org/show_bug.cgi?id=47277

        * QueueStatusServer/handlers/statusbubble.py:

2010-10-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Put all DRT-created pages in a page group

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WKFrameGetFrameLoadState() returns kWKFrameLoadStateCommitted after the load has been stopped
        <rdar://problem/8173667>
        https://bugs.webkit.org/show_bug.cgi?id=47461

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Test.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp: Added.
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::URLForNonExistentResource):
        Adds a test for the frame load state after a failed provisional load. I wanted to test
        the frame load state after a committed load failed, but I don't believe that is possible
        to do without hooking up the http server to serve a long loading page.

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add WebKit2 version of runBeforeUnloadConfirmPanelWithMessage
        <rdar://problem/8447690>
        https://bugs.webkit.org/show_bug.cgi?id=47459

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

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need implementation of ChromeClient windowRect related functions.
        <rdar://problem/8469476>
        https://bugs.webkit.org/show_bug.cgi?id=47386

        * MiniBrowser/mac/BrowserWindowController.m:
        (getWindowFrame):
        (setWindowFrame):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):

2010-10-08  Adam Barth  <abarth@webkit.org>

        Unreviewed (Eric is on vacation in this change is trivial).

        Add a "clean" command to webkit-patch to clean the working directory
        https://bugs.webkit.org/show_bug.cgi?id=47436

        This command is useful when using SVN because "svn revert" leaves
        unversioned files behind.

        * Scripts/webkitpy/tool/commands/download.py:

2010-10-08  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Add missing limits.h include since the Qt version currently
        ran on the bot does need that.

        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:

2010-10-08  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Turn on building WTR
        https://bugs.webkit.org/show_bug.cgi?id=47349

        * Scripts/webkitdirs.pm:

2010-10-08  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] TestController needs its platform dependent methods
        https://bugs.webkit.org/show_bug.cgi?id=47413

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        If the WTR_INJECTEDBUNDLE_PATH environmental variable is
        set then use that otherwise use the path where the bundle
        lives in a normal trunk build.
        (WTR::TestController::initializeTestPluginDirectory):
        Set the bundle's value. It is not used currently.
        (WTR::TestController::platformInitializeContext):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WTR: Prevent sending the Done message twice on test timeout.
        https://bugs.webkit.org/show_bug.cgi?id=47410

        When InjectedBundle::done() calls stopLoading, this may trigger
        InjectedBundlePage::didFailLoadWithErrorForFrame which calls
        InjectedBundle::done() itself later in the stack.
        This would output the timeout failure message twice and confuse
        the run-webkit-tests script.

        This patch adds a third state, Stopping, which prevents WebCore
        errors to trigger done() when testing is over.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

2010-10-08  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add an activateFonts() implementation similar to DRT's initializeFonts().
        Original code by Simon Hausmann.
        https://bugs.webkit.org/show_bug.cgi?id=47402

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

2010-10-08  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add support for Qt's WebKitTestRunner to old-run-webkit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=47401

        * Scripts/build-webkittestrunner:
        * Scripts/old-run-webkit-tests:

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WTR first compile: fix compile issues.
        https://bugs.webkit.org/show_bug.cgi?id=47343

        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestInvocation.cpp:

2010-10-07  Antonio Gomes  <agomes@rim.com>

        Reviewed by Simon Fraser.

        [Mac] [DRT] implement setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=47291

        Implemented LayoutTestController::setSpatialNavigationEnabled for Mac's DRT
        so it can track regression on the existing implementation and future improvements
        we are making.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSpatialNavigationEnabled):

2010-10-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        rebaseline-chromium-webkit-tests relied on the filename_to_uri()
        hook in the Port infrastructure to generate URIs for the files
        in its summary HTML report; however, that method is supposed to only
        be used for test files (and should really be renamed), so this would
        crash.

        This change adds a new "path" module to the system package with a
        routine called abspath_to_uri() that handles converting paths to
        file: URIs independently of anything in the layout_tests package,
        and changes the code to use this. At some point in the near future
        the layout_tests/port/* code should use this as well.

        This change also deletes a bunch of unused code and fixes some
        comments in rebaseline_chromium_webkit_tests.py.

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

        * Scripts/webkitpy/common/system/path.py: Added.
        * Scripts/webkitpy/common/system/path_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:

2010-10-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The FreeType backend does not respect the FC_EMBOLDEN property
        https://bugs.webkit.org/show_bug.cgi?id=46216

        Fix my latest commit, as it contained some bad changes from a merge gone wrong.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Also initialize the DevaVu Sans font.

2010-10-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Minor naming cleanup in WebDragData, part 2
        https://bugs.webkit.org/show_bug.cgi?id=47227

        Update DRT to use the renamed methods.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2010-10-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a WKPageFindClient, hook up WKPageCountStringMatches
        https://bugs.webkit.org/show_bug.cgi?id=47373

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Remove hard coded paths.

        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        Fix expected result.

        * TestWebKitAPI/Tests/WebKit2/Find.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didCountStringMatches):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/find.html: Added.
        Add test for WKPageCountStringMatches.

2010-09-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] The FreeType backend does not respect the FC_EMBOLDEN property
        https://bugs.webkit.org/show_bug.cgi?id=46216

        * DumpRenderTree/gtk/fonts/fonts.conf: Add a setting which enables FC_EMBOLDEN
        for DejaVu Serif when there is no bold version available. This is necessary to
        properly test the property in layout tests.

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>, Andras Becsi  <abecsi@webkit.org>, Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WTR's InjectedBundle build files.
        https://bugs.webkit.org/show_bug.cgi?id=47333

        * Scripts/webkitdirs.pm:
        * WebKitTestRunner/DerivedSources.pro: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Added.
        * WebKitTestRunner/WebKitTestRunner.pro: Added.
        * WebKitTestRunner/qt/DerivedSources.pro: Removed.
        Content merged in ../DerivedSources.pro

2010-10-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69315.
        http://trac.webkit.org/changeset/69315
        https://bugs.webkit.org/show_bug.cgi?id=47363

        Forgot to add the new files (Requested by kbalazs on #webkit).

        * Scripts/webkitdirs.pm:
        * WebKitTestRunner/qt/DerivedSources.pro: Added.

2010-10-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change API tester to ask the executable for the list of all
        tests instead of relying on the directory structure.
        https://bugs.webkit.org/show_bug.cgi?id=47359

        * Scripts/run-test-webkit-api: Added.
        * Scripts/webkitdirs.pm:
        Add additional script to just launch the api tester with the correct settings.

        * Scripts/run-api-tests:
        Change to use the new --dump-tests options to build the list of tests and change
        output to reflect a (suite, testcase) tuple for each test. Also adds some color.

        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::Test::Register::Register):
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        (TestWebKitAPI::TEST):
        Give each test a suite name in addition to the test name.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::dumpTestNames):
        (TestWebKitAPI::TestsController::runTestNamed):
        * TestWebKitAPI/TestsController.h:
        * TestWebKitAPI/mac/main.mm:
        (main):
        Add option to print all registered tests.

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>, Andras Becsi  <abecsi@webkit.org>, Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WTR's InjectedBundle build files.
        https://bugs.webkit.org/show_bug.cgi?id=47333

        * Scripts/webkitdirs.pm:
        * WebKitTestRunner/DerivedSources.pro: Added.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Added.
        * WebKitTestRunner/WebKitTestRunner.pro: Added.
        * WebKitTestRunner/qt/DerivedSources.pro: Removed.
        Content merged in ../DerivedSources.pro

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed. Do a renaming that was recommended by the reviewer
        (Kenneth) but I forgot to do before landing (http://trac.webkit.org/changeset/69253)

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        (WTR::RunUntilConditionLoop::start):
        (WTR::RunUntilConditionLoop::RunUntilConditionLoop):
        (WTR::TestController::runUntil):

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Watchdog timer implementation for WTR
        https://bugs.webkit.org/show_bug.cgi?id=47337

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Factor out
        the definition of the timer type to a typedef.
        * WebKitTestRunner/InjectedBundle/qt/LayoutTestControllerQt.cpp: Added.
        Timer implementation with QTimer and a helper QObject class.
        (WTR::WatchdogTimerHelper::instance):
        (WTR::WatchdogTimerHelper::timerFired):
        (WTR::WatchdogTimerHelper::WatchdogTimerHelper):
        (WTR::LayoutTestController::platformInitialize):
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdogTimer):
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed buildfix for 69297 again

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

2010-10-07  Balazs Kelemen  <Balazs Kelemen>

        Unreviewed trivial build fix for r69297

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

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner should be portable
        https://bugs.webkit.org/show_bug.cgi?id=45393

        Use only the WebKit API for working with urls.
        * WebKitTestRunner/StringFunctions.h:
        (WTR::createWKURL):
        * WebKitTestRunner/TestController.cpp:
        (WTR::blankURL):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didFinishLoadForFrame):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use gtk_widget_draw() instead of gtk_widget_get_snapshot() in PixelDumpSupportGtk when building with gtk3
        https://bugs.webkit.org/show_bug.cgi?id=47332

        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        (createBitmapContextFromWebView):

2010-10-06  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Remove unused accessibility functions from webkit.
        https://bugs.webkit.org/attachment.cgi?bugid=46707

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

2010-10-06  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Adam Roben.

        Fix the sunspider-compare-results to actually use the passed in value for $root.

        * Scripts/sunspider-compare-results:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Runloop implementation for WTR
        https://bugs.webkit.org/show_bug.cgi?id=47280

        * WebKitTestRunner/qt/TestControllerQt.cpp:
        Implemented TestController::runUntil by a timerEvent
        and a QEventLoop. We step into the event loop from runUntil.
        While we are waiting in the loop a timerEvent is periodically
        checking the value of the condition. Once the condition has
        becoming true the timerEvent wakes us up.
        (WTR::RunUntilLoop::start):
        (WTR::RunUntilLoop::RunUntilLoop):
        (WTR::RunUntilLoop::run):
        (WTR::RunUntilLoop::timerEvent):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::runUntil):
        * WebKitTestRunner/qt/main.cpp:
        Start the main event loop first and creating the TestController later.
        (Launcher::Launcher):
        (Launcher::~Launcher):
        (Launcher::launch): Creating the TestController.
        (main): Setting up a timer for calling Launcher::launch from
        the main event loop.

2010-10-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kenneth Russell.

        new-run-webkit-tests: fix typo in chromium-gpu that was trying to
        enable 'accelerated-composting' instead of 'accelerated-compositing'.

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

        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] PlatformWebView implementation for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=47276

        The implementation follows the way how
        we use the API in MiniBrowser.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WebView::wkView):
        (WTR::WebView::~WebView):
        (WTR::WebView::WebView):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        * WebKitTestRunner/qt/WebKitTestRunner.pro:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WebKitTestRunner's build files
        https://bugs.webkit.org/show_bug.cgi?id=44155

        Parts was taken by Zoltan Horvath's patch.

        * Scripts/generate-forwarding-headers.pl: Moved from WebKit2.
        * Scripts/webkitdirs.pm: Make the generated files needed by WTR.
        * WebKitTestRunner/PlatformWebView.h: Addeed typedefs for
        PlatformWKView and PlatformWindow (void* for now).
        Buildfix the case when __APPLE__ is not defined.
        * WebKitTestRunner/qt/DerivedSources.pro: Added.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp: Added.
        Empty stub implementation.
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        * WebKitTestRunner/qt/TestControllerQt.cpp: Added.
        Empty stub implementation.
        (WTR::registerWindowClass):
        (WTR::TestController::runUntil):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):
        (WTR::TestController::platformInitializeContext):
        * WebKitTestRunner/qt/WebKitTestRunner.pro: Added.
        * WebKitTestRunner/qt/main.cpp: Added.
        (main):

2010-10-06  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r69202.
        http://trac.webkit.org/changeset/69202
        https://bugs.webkit.org/show_bug.cgi?id=46937

        Broke compile of test_shell

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2010-10-06  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Minor naming cleanup in WebDragData, part 2
        https://bugs.webkit.org/show_bug.cgi?id=46937

        Update DRT to use the renamed methods.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (addDRTFakeFileToDataObject):

2010-10-06  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/47270> Move WebArchive serialization code into its own file

        Reviewed by Adam Roben.

        This is the first step in making webarchive tests work on
        Windows.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added
        new files to the project.
        * DumpRenderTree/mac/DumpRenderTree.mm: Removed code that moved
        to WebArchiveDumpSupport.mm.
        * DumpRenderTree/mac/WebArchiveDumpSupport.h: Added.
        * DumpRenderTree/mac/WebArchiveDumpSupport.mm: Copied from WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm.
        (serializeWebArchiveToXML):

2010-10-05  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Add infrastructure to towards detecting change log diffs that aren't at the top of the ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=46058

        Make VCSUtils::fixChangeLogPatch() return a reference to a hash
        structure so as to support returning additional information
        about a change log diff.

        Currently, VCSUtils::fixChangeLogPatch() returns a string that
        represents the change log diff. Towards supporting the return
        of additional information, such as whether the change log diff
        inserts an entry at the top of the ChangeLog file, we need to
        make VCSUtils::fixChangeLogPatch() return a reference to hash
        structure.

        * Scripts/VCSUtils.pm:
          - Modified fixChangeLogPatch() to return a reference to a
            hash structure.
          - Added documentation to fixChangeLogPatch().
          - Modified call site in mergeChangeLogs() as necessary.
        * Scripts/svn-apply:
          - Modified call site in patch() as necessary.
        * Scripts/svn-create-patch:
          - Modified call site in generateDiff() as necessary.
        * Scripts/svn-unapply:
          - Modified call site in patch() as necessary.
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl:
          - Modified the unit tests as necessary.

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        fix the link to the expected image on windows
        https://bugs.webkit.org/show_bug.cgi?id=47228

        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: On
            windows, the file must be opened in binary mode when writing
            binary data.

2010-10-05  Adam Barth  <abarth@webkit.org>

        Update expected result of unittest to match Tony's change below.

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

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai (over the shoulder).

        Paper over errors in image_diff so we don't crash the whole test run.

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

2010-10-05  Tony Chang  <tony@chromium.org>

        Unreviewed, make shutil.rmtree more resiliant to errors
        since windows was raising WindowsError: The process cannot access the file because it
        is being used by another process.

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

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] fix image diffing in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=47128

        * Scripts/webkitpy/layout_tests/port/chromium.py: Stop using
            NamedTemporaryFile since it doesn't work on Windows.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-05  Kenneth Russell  <kbr@google.com>

        Reviewed by Tony Chang.

        [chromium] Implement layerTreeAsText in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=47216

        Plumbed Frame::layerTreeAsText through Chromium's WebKit API to
        make it callable from DumpRenderTree.

        No new tests; verified with existing compositor layout tests.

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

2010-10-05  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * DumpRenderTree/win/ImageDiff.vcproj: Use WinCairo debug
        property sheet so proper libraries are linked.

2010-10-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix url conversion in QWebHistory

        Converting from KURL to WFT::String to QUrl does not
        permit proper percent encoding later.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2010-10-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r68966?): All dumpAsText test fail on WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=47188
        <rdar://problem/8514104>

        When constructing the std::string, use the real string length instead of the maximum buffer size.

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::toSTD):
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toSTD):

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add MIMEType accessor to WKFrame
        <rdar://problem/8347683>
        https://bugs.webkit.org/show_bug.cgi?id=47138

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp: Added.
        (TestWebKitAPI::didStartProvisionalLoadForFrame):
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp: Added.
        (TestWebKitAPI::didStartProvisionalLoadForFrame):
        (TestWebKitAPI::didCommitLoadForFrame):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/basic-1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/icon.png: Added.
        * TestWebKitAPI/Tests/WebKit2/simple.html: Added.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::createURLForResource):

2010-10-05  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Ojan Vafai.

        [NRWT] Rename current_dir to current_group because it's not a directory
        https://bugs.webkit.org/show_bug.cgi?id=47169

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        r69065 broke test-webkitpy by trying to create a '/tmp-X' directory,
        which can't always be done. This test uses tempfile.mkdtemp(), which
        should be safe.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Add missing "from __future__ import with_statement" that was
        breaking test-webkitpy on the Leopard bots (broke in r69040).

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

2010-10-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69066.
        http://trac.webkit.org/changeset/69066
        https://bugs.webkit.org/show_bug.cgi?id=47163

        Made NRWT reliability worse. (Requested by tkent on #webkit).

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Reverse the http tests to alphabetical order.
        https://bugs.webkit.org/show_bug.cgi?id=47075

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-10-04  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix timeout on http/tests/navigation/post-goback2.html and postredirect-goback2.html

        We need to queue back and forward navigations in the DRT from the
        LayoutTestController so that maybeDump() knows about them.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):

2010-10-04  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix image diffing in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=47128

        * Scripts/webkitpy/layout_tests/port/chromium.py: Flush data to the
              temp file and check the image_diff error code more carefully
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        aroben's change in r68792 actually broke new-run-webkit-tests when
        running the DRT code path. His change was intended to fix the
        way we were converting windows paths to URIs when running under
        Cygwin (the paths were getting one too many "/" on the front).
        However, the change ended up breaking the chromium_win port, which
        had slightly different logic.

        This patch removes the port-specific code and adds tests to make
        sure we're getting the behavior we expect. The Port object no longer
        exposes a get_absolute_path() method that can be used outside of
        of converting test filenames, because it's unreliable otherwise
        (we don't have the right context to know which conversion is intended).

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Handle crash introduced in r69040 if we are not running in a
        Chromium checkout.

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

2010-10-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Add a way for us to have test expectations that are specific to the
        official builds of Google Chrome (as opposed to Chromium). This change
        looks for an additional "test_expectations_chrome.txt" file in
        Chromium's repository (webkit/tools/layout_tests), and uses the
        concatenation of that file and the regular test_expectations.txt
        file for test overrides.

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

        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:

2010-10-04  Simon Fraser  <simon.fraser@apple.com>

        Color tests in the list based on existing pass/fail result.
        
        Fix the summary data to account for htmlOnly and nonHTML tests.

        * CSSTestSuiteHarness/harness/harness.css:
        (#test-list > option.pass):
        (#test-list > option.fail):
        (#test-list > option.skipped):
        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (Test.prototype.statusForFormat):
        (TestSuite.prototype.fillTestList):
        (TestSuite.prototype.updateTestList):
        (TestSuite.prototype.recordResult):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.countTestsWithFlag):
        (TestSuite.prototype.queryDatabaseForSummary.this.db.transaction):
        (TestSuite.prototype.queryDatabaseForSummary):

2010-10-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: doAXRangeForLine does not work
        https://bugs.webkit.org/show_bug.cgi?id=47101

        DRT support to handle NSAccessibilityRangeForLineParameterizedAttribute.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (rangeForLineCallback):
        (AccessibilityUIElement::rangeForLine):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rangeForLine):

2010-10-04  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Adding myself to the committers list.

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

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to set the CacheModel in Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=47066

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]): Opt minibrowser into
        a PrimaryWebBrowser cache model.

2010-10-03  Simon Fraser  <simon.fraser@apple.com>

        Make sure to enter all tests when creating the database
        for the first time.
        
        When migrating to a new version of the suite, be sure to
        sync up the database and testinfo.data by removing old
        tests, and inserting new ones.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.openDatabase.creation):
        (TestSuite.prototype.databaseCreated):
        (TestSuite.prototype.populateDatabaseFromTestInfoData):
        (TestSuite.prototype.insertTest):

2010-10-03  Simon Fraser  <simon.fraser@apple.com>

        More work on treating HTML4 and XHTML1 independently; when 
        changing the format, rebuild the test list, and update the 
        numbers in the chapter popup.

        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (Test.prototype.runForFormat):
        (Test.prototype.completedForFormat):
        (ChapterSection):
        (ChapterSection.prototype.countTests):
        (Chapter):
        (Chapter.prototype.description):
        (Chapter.prototype.countTests):
        (Chapter.prototype.testCount):
        (Chapter.prototype.untestedCount):
        (TestSuite.prototype.buildChapters):
        (TestSuite.prototype.loadCurrentTest):
        (TestSuite.prototype.updateProgressLabel):
        (TestSuite.prototype.processFlags):
        (TestSuite.prototype.formatChanged):

2010-10-03  Simon Fraser  <simon.fraser@apple.com>

        Update test suite version 20101001.
        
        Handle database migration, and delete tests from the db that are
        not present in testinfo.data.
        
        Load about:blank into the test frame before the test url, to make
        missing tests more obvious.
        
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadTest):
        (TestSuite.prototype.openDatabase.creation):
        (TestSuite.prototype.openDatabase.migration1_0To1_1):
        (TestSuite.prototype.openDatabase.if.return):
        (TestSuite.prototype.databaseReady):
        (TestSuite.prototype.populateDatabaseFromTestInfoData):
        (TestSuite.prototype.syncDatabaseWithTestInfoData.this.db.transaction):
        (TestSuite.prototype.syncDatabaseWithTestInfoData):

2010-10-02  Simon Fraser  <simon.fraser@apple.com>

        Add the ability to jump to a specific test.

        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.goToTestByName):
        (TestSuite.prototype.switchToFormat):

2010-10-02  Simon Fraser  <simon.fraser@apple.com>

        For a ref test, load the ref in the same format (HTML4 vs XHTML1)
        as the test.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadRef):

2010-10-02  Simon Fraser  <simon.fraser@apple.com>

        Update the UI to reflect the fact that each test needs to be tested
        in both HTML4 and XHTML1 format.
        
        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (Chapter.prototype.description):
        (Chapter.prototype.untestedCount):
        (TestSuite.prototype.fillChapterPopup):
        (TestSuite.prototype.updateChapterPopup):
        (TestSuite.prototype.fillTestList):
        (TestSuite.prototype.updateTestList):
        (TestSuite.prototype.goToNextIncompleteTest):
        (TestSuite.prototype.firstIncompleteTestIndex):
        (TestSuite.prototype.recordResult):
        (TestSuite.prototype.formatChanged):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.resetTestStatus):

2010-10-01  Simon Fraser  <simon.fraser@apple.com>

        Add the ability to remove results for re-testing, and
        to import results.

        * CSSTestSuiteHarness/harness/harness.css:
        (.custom button):
        (#overlay):
        (#overlay.visible):
        (.overlay-contents):
        (.overlay-contents textarea):
        (.overlay-contents .buttons):
        (.overlay-contents .note):
        (.overlay-contents .buttons button):
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.importResults):
        (TestSuite.prototype.clearResults):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.resetTestStatus):
        (TestSuite.prototype.storeTestResult):
        (TestSuite.prototype.importTestResults):
        (TestSuite.prototype.clearTestResults):

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Deploy the new WKString functions to remove most uses of CF from
        the WebKitTestRunner.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK):
        (WTR::toJS):
        (WTR::toSTD):
        (WTR::operator<<):
        (WTR::copyURLString):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2010-10-01  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed TestResultsServer change.

        Add files introduced by http://crrev.com/61273 to the list of dashboard 
        files to update.

        * TestResultServer/handlers/dashboardhandler.py:

2010-10-01  Brian Weinstein  <bweinstein@apple.com>

        Build Fix for Windows.

        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Don't copy ForwardingHeaders from
            WebKitTestRunner/ForwardingHeaders, instead, add $(WebKitOutputDir)/include/WebCore/
            ForwardingHeaders to the include path.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add SPI to convert a WKStringRef to a JSStringRef and vice-versa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp: Added.
        (TestWebKitAPI::TEST):

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add additional WKString API
        https://bugs.webkit.org/show_bug.cgi?id=46958

        Add basic WKStringRef tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp: Added.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add makefile for TestWebKitAPI and call it from the base makefile.

        * Makefile:
        * TestWebKitAPI/Makefile: Added.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Remove unnecessary ForwardingHeaders from test runners.
        https://bugs.webkit.org/show_bug.cgi?id=47010

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/ForwardingHeaders: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/ForwardingHeaders: Removed.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebSocket tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=46956

        Update these tools to understand how to run the WebSocket tests off the
        Apache server.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-01  Adam Roben  <aroben@apple.com>

        Encode Executive command arguments using UTF-8 on Cygwin

        Cygwin's Python's os.execv doesn't support unicode command arguments.
        Cygwin's execv expects arguments to be encoded using the current code
        page. But code pages are limited in what characters they can handle,
        and our tests include characters that the English code page can't
        handle.  So for now we'll just encode everything in UTF-8 on Cygwin,
        which can handle all characters but might confuse some commands, for
        expediency's sake. I'm sure we'll run into cases where UTF-8 isn't
        good enough, but we can deal with that when the problem arises.

        Reviewed by Adam Barth.

        Fixes <http://webkit.org/b/46892> <rdar://problem/8496639>
        webkitpy.common.system.executive_unittest.ExecutiveTest.test_run_command_with_unicode
        fails on Windows

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output):
        (Executive.run_command):
        On Cygwin, encode arguments using UTF-8.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add simple API tester for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=46953

        This adds a very simple testing infrastructure for testing APIs exposed
        through the WebKit project. It consists of two parts: 1) a project that
        builds the all the tests 2) a script that searches the tests directory and
        calls the tester once for each test.

        This adds the infrastructure and two tests:
        - Tests/WTF/Vector1.cpp - A proof of concept test of WTF data-structures.
        - Tests/WebKit2/BasicTest1.cpp - A proof of concept test of WebKit2 API.

        This currently only works on the mac, but is designed to be easily ported 
        to any platform.

        * Scripts/run-api-tests: Added.
        * Scripts/build-api-tests: Added.
        Scripts to build/run the tests.

        * TestWebKitAPI: Added.
        * TestWebKitAPI/Configurations: Added.
        * TestWebKitAPI/Configurations/Base.xcconfig: Added.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Added.
        * TestWebKitAPI/ForwardingHeaders: Added.
        * TestWebKitAPI/ForwardingHeaders/wtf: Added.
        * TestWebKitAPI/PlatformUtilities.h: Added.
        * TestWebKitAPI/PlatformWebView.h: Added.
        (TestWebKitAPI::PlatformWebView::platformView):
        * TestWebKitAPI/StringFunctions.h: Added.
        * TestWebKitAPI/Test.h: Added.
        (TestWebKitAPI::Test::~Test):
        (TestWebKitAPI::Test::name):
        (TestWebKitAPI::Test::Register::Register):
        (TestWebKitAPI::Test::Register::create):
        (TestWebKitAPI::Test::Test):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added.
        * TestWebKitAPI/TestWebKitAPIPrefix.h: Added.
        * TestWebKitAPI/TestsController.cpp: Added.
        (TestWebKitAPI::TestsController::shared):
        (TestWebKitAPI::TestsController::TestsController):
        (TestWebKitAPI::TestsController::runTestNamed):
        (TestWebKitAPI::TestsController::testFailed):
        (TestWebKitAPI::TestsController::registerCreateTestFunction):
        * TestWebKitAPI/TestsController.h: Added.
        * TestWebKitAPI/mac: Added.
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm: Added.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::createURLForResource):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm: Added.
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page):
        (TestWebKitAPI::PlatformWebView::focus):
        * TestWebKitAPI/mac/main.mm: Added.
        Infrastructure.

        * TestWebKitAPI/Tests: Added.
        * TestWebKitAPI/Tests/WTF: Added.
        * TestWebKitAPI/Tests/WTF/Vector1.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2: Added.
        * TestWebKitAPI/Tests/WebKit2/BasicTest1.cpp: Added.
        (TestWebKitAPI::State::State):
        * TestWebKitAPI/Tests/WebKit2/basic-1.html: Added.
        Proof of concept tests.

2010-10-01  Adam Roben  <aroben@apple.com>

        Don't assume AccessibleObjectFromEvent succeeds

        Fixes <http://webkit.org/b/44136> <rdar://problem/8321684> Crash in
        DumpRenderTree!notificationListenerProc when running
        plugins/access-after-page-destroyed.html

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (notificationListenerProc): Check both the return value of
        AccessibleObjectFromEvent and the object it returns, as MSDN
        recommends.

2010-10-01  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Tony Chang.

        [NRWT] Put the http and websocket tests first in the test list.
        https://bugs.webkit.org/show_bug.cgi?id=46453

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-10-01  Fady Samuel  <fsamuel@chromium.org>

        Unreviewed, adding myself to the committer list.

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

2010-10-01  Adam Roben  <aroben@apple.com>

        Test NPN_GetValue(NPNVnetscapeWindow)

        Test for <http://webkit.org/b/46726> <rdar://problem/8486319>
        Right-clicking on windowless Flash plugin in WebKit2 makes a context
        menu appear in the bottom-right corner of the screen

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetValue): Added. Calls through to the browser.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added NPN_GetValue.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/GetValueNetscapeWindow.cpp: Added.
        (GetValueNetscapeWindow::GetValueNetscapeWindow): Initialize members.
        (GetValueNetscapeWindow::NPP_SetWindow): Test that
        NPN_GetValue(NPNVnetscapeWindow) returns a valid HWND and that it
        isn't our HWND.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added GetValueNetscapeWindow.

2010-10-01  Andreas Kling  <andreas.kling@nokia.com>

        Unreviewed, adding my webkit.org identity to reviewer list.

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

2010-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The WebSocket server should flush its logs
        https://bugs.webkit.org/show_bug.cgi?id=46946

        The WebSocket server logs are truncated because the driver just
        terminates the child.  It should run Python without buffering so we can
        see the end of the log.

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

2010-09-30  Simon Fraser  <simon.fraser@apple.com>

        Add a button to jump to the next untested test.
        
        * CSSTestSuiteHarness/harness/harness.css:
        (.test-type):
        (.name > button):
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (Chapter.prototype.description):
        (Chapter.prototype.untestedCount):
        (TestSuite.prototype.testInfoDataLoaded):
        (TestSuite.prototype.fillChapterPopup):
        (TestSuite.prototype.updateChapterPopup):
        (TestSuite.prototype.buildTestListForChapter):
        (TestSuite.prototype.goToNextIncompleteTest):
        (TestSuite.prototype.firstIncompleteTestIndex):
        (TestSuite.prototype.testCompletionStateChanged):

2010-09-29  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKit2 on Windows should use Windows fonts for the various standard
        font families
        https://bugs.webkit.org/show_bug.cgi?id=43499
        <rdar://problem/8272758>

        Reviewed by Adam Roben.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Use the Mac fonts for running tests. This matches DRT behavior.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Third attempt.  We need a better integration test environment.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:

2010-09-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Support for PlainTextController

        Unskip editing/text-iterator/basic-iteration.html

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

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::initJSObjects):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/PlainTextControllerQt.cpp: Added.
        (PlainTextController::PlainTextController):
        (PlainTextController::plainText):
        * DumpRenderTree/qt/PlainTextControllerQt.h: Added.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Second attempt to fix sheriffbot.

        * Scripts/webkitpy/common/net/buildbot.py:

2010-09-30  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        This patch should stop the sheriffbot from throwing an exception.

        * Scripts/webkitpy/common/net/buildbot.py:

2010-09-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        The same bots shouldn't run both Windows Debug Tests and Windows Release Tests.
        https://bugs.webkit.org/show_bug.cgi?id=46926

        * BuildSlaveSupport/build.webkit.org-config/config.json: Have two bots running Windows 
            Release Tests, and two bots running Windows Debug Tests, instead of four running both.

2010-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch find-flaky-tests should print results URLs
        https://bugs.webkit.org/show_bug.cgi?id=46917

        Printing out the results URL makes find-flaky-tests more actionable
        because you can see what happens when a test fails.  The output from
        the script is still pretty noisy, but it seems useful.

        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make 2D accelerated canvas rendering build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=46007
        
        Added ACCELERATED_2D_CANVAS to build-webkit

        * Scripts/build-webkit:

2010-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [chromium] Add accelerated compositing support to DumpRenderTree and test_shell
        https://bugs.webkit.org/show_bug.cgi?id=46849

        Added offscreen code path for WebGraphicsContext3DDefaultImpl which
        works with the compositor integration in both DumpRenderTree and
        test_shell, since both pass a non-null WebCanvas* to WebViewImpl::paint
        and thereby trigger the compositor's readback code path. Added support
        for --enable-accelerated-compositing to DumpRenderTree.

        Tested in both test_shell and DumpRenderTree on Linux, the latter by
        modifying a compositing layout test, dumping the pixels and verifying
        that they matched the output when the compositor was active.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::resetWebSettings):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAcceleratedCompositingEnabled):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::scheduleComposite):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-09-30  Adam Roben  <aroben@apple.com>

        Ensure that QueueEngine cleans up its log files when its delegate
        tells it to stop processing work

        Reviewed by Adam Barth.

        Fixes <http://webkit.org/b/46891> <rdar://problem/8496638> Many tests
        in webkitpy.tool.bot.queueengine_unittest.QueueEngineTest crash on
        Windows

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.run): Stop ourselves normally (including cleaning up log
        files) when the delegate tells us to stop processing work.

        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (LoggingDelegate.__init__): Moved code here from
        RaisingDelegate.__init__.
        (LoggingDelegate.expeced_callbacks): Added the stop_work_queue
        callback.
        (LoggingDelegate.stop_work_queue): Moved here from RaisingDelegate.
        (RaisingDelegate.__init__): Removed code that LoggingDelegate takes
        care of for us now.
        (QueueEngineTest.test_trivial): Make sure we got the expected stop
        message.
        (QueueEngineTest.test_not_safe_to_proceed): Changed to explicitly
        remove the callbacks that are related to processing a single work
        item, rather than removing all callbacks after a certain point, as
        there are now more callbacks we expect to receive at the end.

2010-09-30  Adam Roben  <aroben@apple.com>

        Fix path -> URL conversion on Cygwin

        Reviewed by Adam Barth.

        Fixes <http://webkit.org/b/46890> <rdar://problem/8496637> Many tests
        in webkitpy.layout_tests.run_webkit_tests_unittest assert on Windows

        * Scripts/webkitpy/layout_tests/port/base.py:
        (Port.filename_to_uri): Treat Cygwin like other UNIX-y platforms by
        assuming paths already have a leading slash.

2010-09-30  Adam Roben  <aroben@apple.com>

        Teach WindowGeometryInitializedBeforeSetWindow that NPP_SetWindow can
        be called more than once

        The NPP_SetWindow call made when the plugin is torn down was confusing
        us, and was causing us to spew an error into the next test.

        Fixes <http://webkit.org/b/46900> <rdar://problem/8496888> REGRESSION
        (r68520): plugins/access-after-page-destroyed.html failing on Windows

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowGeometryInitializedBeforeSetWindow.cpp:
        (WindowGeometryInitializedBeforeSetWindow::WindowGeometryInitializedBeforeSetWindow):
        Initialize member.
        (WindowGeometryInitializedBeforeSetWindow::NPP_SetWindow): Bail if
        this isn't the first time this is called.

2010-09-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch upload warns that I'm using Xcode when I'm not
        https://bugs.webkit.org/show_bug.cgi?id=46869

        String.find returns -1 when not found, so switched to "in".

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/common/system/user_unittest.py:

2010-09-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch failure-reason dies if non-trunk commits are in the blame range
        https://bugs.webkit.org/show_bug.cgi?id=46866

        I also made failure-reason use RegressionWindow in a cleaner way.

        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch find-flaky-tests
        https://bugs.webkit.org/show_bug.cgi?id=46876

        This command helps us find flaky tests so we can squash them.

        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        Fix export to use '?' instead of 'null' for
        tests with no results.
        
        * CSSTestSuiteHarness/harness/harness.js:

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        Add a warning when a test requires special steps.
        Add a Print Preview button for 'paged' tests that
        brings up the print dialog, allowing the user to 
        judge paged media tests.

        * CSSTestSuiteHarness/harness/harness.css:
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadTest):
        (TestSuite.prototype.processFlags):

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove revisions_casuing_failures
        https://bugs.webkit.org/show_bug.cgi?id=46872

        This function exists only to be unit tested.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/failuremap_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        SheriffBot should post the list of failing tests to bugs
        https://bugs.webkit.org/show_bug.cgi?id=46871

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-29  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson, Eric Seidel, and Mark Rowe.

        [WinCairo] Adds a build slave.
        https://bugs.webkit.org/show_bug.cgi?id=46360

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add
        entries for a debug build of the WinCairo port.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add
        platform flag to configuration for wincairo (like gtk, chromium, etc.)
        * Scripts/build-webkit: Change 'cairo-win32' labeling to 'wincairo'
        * Scripts/webkitdirs.pm: Change 'cairo-win32' labeling to 'wincairo'

2010-09-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move more SheriffBot smarts into FailureMap
        https://bugs.webkit.org/show_bug.cgi?id=46703

        This patch pushes the FailureMap model object further into the
        SheriffBot machine.  In addition, it moves a couple operations on this
        object from SheriffBot itself to the model.

        Eventually, FailureMap will be the canonical context object for
        SheriffBot operations.  FailureMap represents a map of the current
        failures on the bots that might require remediation.

        * Scripts/webkitpy/common/net/failuremap.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-29  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        [chromium] enable -Werror for DRT and webkit_unit_tests on Linux
        https://bugs.webkit.org/show_bug.cgi?id=46829

        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::DRTDevToolsClient):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::postAccessibilityNotification):
        (WebViewHost::WebViewHost):

2010-09-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: implement CSS3 Speech "speak"
        https://bugs.webkit.org/show_bug.cgi?id=46827

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (speakCallback):
        (AccessibilityUIElement::speak):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::speak):

2010-09-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Record bot ID when updating queue status
        https://bugs.webkit.org/show_bug.cgi?id=46764
        
        Since we now have multiple bots handling patches from the commit queue,
        we need to differentiate status updates from them, so that we can group
        the queue status page in a less confusing way.

        * QueueStatusServer/handlers/updatestatus.py: Accept bot_id as input
        * QueueStatusServer/model/queuestatus.py: Add bot_id property
        * QueueStatusServer/templates/updatestatus.html: Add bot_id input
        * Scripts/webkitpy/common/net/bugzilla_unittest.py: Extract MockBrowser
        * Scripts/webkitpy/common/net/statusserver.py: Add bot_id
        * Scripts/webkitpy/common/net/statusserver_unittest.py: Added.
        * Scripts/webkitpy/tool/main.py: Add --bot-id
        * Scripts/webkitpy/tool/mocktool.py: Add MockBrowser

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        No review.
        
        References always refert to a file in .xht format, even
        for HTML tests, so fix their loading.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.loadRef):

2010-09-28  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Add a new parameter to the test plugin to allow specifying a script 
        and a mouse/keyboard event. The specified script will be evaluated
        in the browser when the specified event is received by the plugin.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        Fix export by adding missing argument.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite.prototype.showResultsForAllTests):

2010-09-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add missing import.

        * wx/packaging/build-win-installer.py:

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        No review
        
        Show which tests have been run by dimming them out in the test list.
        
        Adjust some element sizes.
        
        * CSSTestSuiteHarness/harness/harness.css:
        (#test-list > option.untested):
        (#test-list > option.completed):
        (#output):
        (.output-options):
        * CSSTestSuiteHarness/harness/harness.js:
        (Test):
        (TestSuite.prototype.fillTestList):
        (TestSuite.prototype.updateTestList):
        (TestSuite.prototype.setSelectedChapter):
        (TestSuite.prototype.recordResult):
        (TestSuite.prototype.markTestCompleted):
        (TestSuite.prototype.testCompletionStateChanged):
        (TestSuite.prototype.loadTestStatus):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        No review.
        
        Implement export of various queries on the test database, sharing
        code with that which displays results inline.

        * CSSTestSuiteHarness/harness/harness.js:
        ():
        (TestSuite.prototype.exportResultsCompletion.var):
        (TestSuite.prototype.exportResultsCompletion):
        (TestSuite.prototype.showResultsForCompletedTests):
        (TestSuite.prototype.exportResultsForCompletedTests):
        (TestSuite.prototype.showResultsForAllTests):
        (TestSuite.prototype.exportResultsForAllTests):
        (TestSuite.prototype.exportResultsForTestsNotRun):
        (TestSuite.prototype.exportResultsForTestsWithStatus):
        (TestSuite.prototype.exportResultsForTestsWithMismatchedResults):

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Work around uncertainty about the order of database
        transactions when creating the database, so that we don't
        try to query the table before it has been created.

        * CSSTestSuiteHarness/harness/harness.js:
        (TestSuite):
        (TestSuite.prototype.databaseCreated):
        (TestSuite.prototype.storeTestResult):
        (TestSuite.prototype.populateDatabaseFromTestInfoData):
        (TestSuite.prototype.queryDatabaseForTestsWithStatus):
        (TestSuite.prototype.queryDatabaseForTestsWithMixedStatus):
        (TestSuite.prototype.queryDatabaseForCompletedTests):
        (TestSuite.prototype.queryDatabaseForTestsNotRun):

2010-09-28  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        add python keyring support to webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=41269

        * Scripts/webkitpy/common/net/credentials.py: Add the ability to read passwords using
            the python keyring module
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/system/user.py: Allow confirm() to default to no and add testing params.
        * Scripts/webkitpy/common/system/user_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Cairo] FreeType fonts should obey FontConfig hinting/anti-aliasing settings
        https://bugs.webkit.org/show_bug.cgi?id=46740

        * DumpRenderTree/gtk/fonts/fonts.conf: Add specialized variants of common
        fonts which can be used to fully test FontConfig rendering settings.

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [gtk] Fedora has a different path for the liberation fonts
        https://bugs.webkit.org/show_bug.cgi?id=46709

        When searching for DRT fonts, also look in the path where those fonts
        are commonly found on Fedora systems.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Include logic for looking for Fedora-style font paths.

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        run-webkit-tests needs an updated list of directories with webgl tests
        https://bugs.webkit.org/show_bug.cgi?id=46747

        Update the list of directories containing WebGL tests and a unit test
        which depends on this list.

        * Scripts/old-run-webkit-tests: Update the list of directories.
        * Scripts/webkitpy/layout_tests/port/webkit.py: Ditto.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Update the expected result.

2010-09-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Introduce FailureMap to summaries the failures status of all the bots
        https://bugs.webkit.org/show_bug.cgi?id=46700

        This patch gives the SheriffBot a handle on the list of failing tests.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/failuremap.py: Added.
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-28  Adam Roben  <aroben@apple.com>

        Update for the addition of WKPageUIClient::didNotHandleKeyEvent

        Fixes <http://webkit.org/b/46660> <rdar://problem/8483465> Need API to
        tell a WebKit2 client application that a key event was not handled

        Reviewed by Kenneth Rohde Christiansen and Sam Weinig.

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

2010-09-28  Simon Fraser  <simon.fraser@apple.com>

        Unreviewed.

        Update the CSSTestSuiteHarness to not scrape the XHTML chapter files
        for the test order, but instead use information from testinfo.data.
        
        * CSSTestSuiteHarness/harness/harness.html:
        * CSSTestSuiteHarness/harness/harness.js:

2010-09-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't try to get the svn revision from the git repo when packaging,
        it causes the process to hang on the gitorious repo.

        * wx/packaging/build-mac-installer.py:
        * wx/packaging/build-win-installer.py:

2010-09-28  Adam Roben  <aroben@apple.com>

        Test that a plugin's HWND is sized/positioned before NPP_SetWindow is
        called

        Reviewed by Anders Carlsson.

        Test for <http://webkit.org/b/46716> <rdar://problem/8482014>
        Full-page Adobe Reader does not paint until window is resized

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPP_SetWindow): Added. Just returns NPERR_NO_ERROR at
        this level.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Declared
        NPP_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn/Tests/win/WindowGeometryInitializedBeforeSetWindow.cpp: Added.
        (WindowGeometryInitializedBeforeSetWindow::NPP_SetWindow): Checks that
        the plugin's HWND has a non-zero size and that its size/position
        matches that specified in the NPWindow.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_SetWindow): Call through to the PluginTest.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Added WindowGeometryInitializedBeforeSetWindow.cpp, and let VS reorder
        the files as it saw fit.

2010-09-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove support for Qt 4.5
        https://bugs.webkit.org/show_bug.cgi?id=46718

        Remove the code for versions of Qt prior to 4.6.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::setTouchModifier):
        (EventSender::touchStart):
        (EventSender::touchMove):
        (EventSender::touchEnd):
        (EventSender::clearTouchPoints):
        (EventSender::releaseTouchPoint):
        (EventSender::sendTouchEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        (TextInputController::setMarkedText):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::sendTouchEvent):
        (LauncherWindow::eventFilter):
        (LauncherWindow::applyZoom):
        (LauncherWindow::setTouchMocking):
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/utils.cpp:
        (urlFromUserInput):
        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::animatedFlip):
        (WebViewGraphicsBased::animatedYFlip):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::setYRotation):

2010-09-28  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        Fix DRT compilation on WinCE. Introduce a WCECOMPAT variable
        which should point to wcecompat installation. Needs wcecompat
        library from http://github.com/mauricek/wcecompat .

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2010-09-28  Daniel Bates  <dbates@rim.com>

        Rollout changeset 68493 <http://trac.webkit.org/changeset/68493>
        <https://bugs.webkit.org/show_bug.cgi?id=39136>

        Rollout changeset 68493 because it broke Sheriffbot's rollout feature.
        In particular, this change caused Sheriffbot to raise an exception when
        trying to parse the bug id on a bug page. We need to look into this
        some more.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:

2010-09-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move RegressionWindow further up the dependency chain
        https://bugs.webkit.org/show_bug.cgi?id=46698

        Baby steps towards pushing this information into bug posts.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/regressionwindow.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-27  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        sheriffbot can't roll out security patches
        https://bugs.webkit.org/show_bug.cgi?id=39136

        Make SheriffBot determine if it's authorized to view a bug
        whose change it wants to rollout before it tries to rollout
        the change.

        Moreover, make both webkit-patch and Sheriffbot provide human-
        readable error messages when they are not authorized to view
        a bug and when a bug number is invalid.

        Currently, Sheriffbot does not parse Bugzilla bugs for
        <bug error="...">, which indicates an error when retrieving
        a bug. In particular, error="NotPermitted" if a person (or bot)
        is not authorized to view a bug. For such error="NotPermitted" bugs,
        Sheriffbot raises an exception when parsing the bug report and
        this exception does not explicitly indicate Sheriffbot's lack
        of authorization. Instead, Sheriffbot should explicitly check
        for the presence <bug error="..."> before operating on a bug
        and error with a human-readable message if it's not permitted
        to view it.

        * Scripts/webkitpy/common/net/bugzilla.py: Added BugzillaError class.
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
          - Added unit test test_bug_parsing_for_bugzilla_not_permitted_error().
          - Added unit test test_bug_parsing_for_bugzilla_not_found_error().
          - Added unit test test_bug_parsing_for_bugzilla_invalid_bug_id_error().
        * Scripts/webkitpy/tool/bot/sheriff.py: Modified to catch BugzillaError.
        * Scripts/webkitpy/tool/commands/download.py: Ditto.
        * Scripts/webkitpy/tool/commands/queues.py: Ditto.
        * Scripts/webkitpy/tool/commands/upload.py: Ditto.
        * Scripts/webkitpy/tool/steps/closebug.py: Ditto.
        * Scripts/webkitpy/tool/steps/obsoletepatches.py: Ditto.
        * Scripts/webkitpy/tool/steps/preparechangelog.py: Ditto.
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py: Ditto.

2010-09-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Expose more more failure information from Buildbot to SheriffBot
        https://bugs.webkit.org/show_bug.cgi?id=46697

        This patch moves the information about what tests failured closer to
        SheriffBot.  There are still a couple more patches to go before
        SheriffBot can post this information to bugs, but this is a step in
        that direction.  Yay for unit tests, which caught some bugs in earlier
        versions of this patch.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/regressionwindow.py: Added.
        * Scripts/webkitpy/tool/commands/queries.py:

2010-09-27  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing 500 error seen in the status server.

        It turns out that a = b = []; b.append(1); then a[0] will be 1!
        This should have been obvious to me, I guess, but it was not what I was expecting.

        * QueueStatusServer/model/activeworkitems.py:

2010-09-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue should reject patches that fail to land
        https://bugs.webkit.org/show_bug.cgi?id=46694

        This can happen, for example, if there's no reviewer.  Without this
        patch, we'll keep retrying the patch.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2010-09-27  Simon Fraser  <simon.fraser@apple.com>

        Rubber-stamped by Adele Peterson.

        Add a harness for running the CSS 2.1 test suite.
        
        This harness assumes that you've got a local a copy of the suite
        adjacent to the 'harness' directory.
        
        The harness lets you go through the tests in chapter order,
        denoting pass/fail/skipped for each test.
        
        It uses a client-side database to store the results of testing.

        * CSSTestSuiteHarness/harness/harness.css: Added.
        * CSSTestSuiteHarness/harness/harness.html: Added.
        * CSSTestSuiteHarness/harness/harness.js: Added.

2010-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Patch locks should expire if a patch is marked for retry
        https://bugs.webkit.org/show_bug.cgi?id=46682

        This was part Adam's original CommitQueueTask design,
        but support for it was missing from the server.
        I added the support, but triggering lock-release based on this
        special "retry" status feels a bit strange so I added a FIXME.

        I also changed the text in queuestatus.html to say "Lock Acquired"
        since "Last Activity" isn't really true.  We only update the lock
        date when the patch is started, not on every status update.

        I also noticed an exception in next-patch, which I fixed by re-writing
        the unzip logic in activeworkitems.py again.

        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/templates/queuestatus.html:

2010-09-27  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] fix a warning when compiling DRT on 32-bit linux
        https://bugs.webkit.org/show_bug.cgi?id=46641

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (DRTPrinter::handleImage):

2010-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queue-status should report when the patch was last locked to a queue
        https://bugs.webkit.org/show_bug.cgi?id=46674

        This isn't necessarily the best way to expose this information
        but having this accessible via the web interface is very
        useful until we come up with a nicer way to display this.

        I also cleaned up the code in activeworkitems.py a little
        to use list comprehensions and to have the code work with
        pairs instead of two lists at once.  Eventually I think those
        item/time pairs need to be their own little helper class.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/model/activeworkitems.py:
        * QueueStatusServer/templates/queuestatus.html:

2010-09-27  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] fix detection of missing fonts on DRT
        https://bugs.webkit.org/show_bug.cgi?id=46651

        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (setupFontconfig):  Only print an error message if lohit isn't found in both locations.

2010-09-27  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        add webkit unit tests to the chromium testers
        https://bugs.webkit.org/show_bug.cgi?id=46669

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/run-chromium-webkit-unit-tests: Fix a bug where we weren't using the right configuration.

2010-09-27  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed.

        Adding myself to the committers list.

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

2010-09-27  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        webkitpy.common.system.user_unittest.UserTest.test_prompt_with_list spams the console
        https://bugs.webkit.org/show_bug.cgi?id=46634
        
        Use OutputCapture to prevent console spam (and also check for expected
        output).

        * Scripts/webkitpy/common/system/user_unittest.py:

2010-09-27  Eric Seidel  <eric@webkit.org>

        Reviewed by James Robinson.

        start-commit-queue should abort any rebases in progress
        https://bugs.webkit.org/show_bug.cgi?id=46640

        webkit-patch commit-queue would do this itself, but this just
        helps ensure that the commit-queue script is properly updated
        before we run it (in the case where a previous rebase is in
        progress the git svn rebase would not work before we run the
        commit-queue).

        * EWSTools/start-commit-queue.sh:

2010-09-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Clean up the DRT fonts.conf and switch to Liberation
        https://bugs.webkit.org/show_bug.cgi?id=46038

        Switch to Liberation fonts for GTK+ layout tests. This will make our
        test results metric-compatible with many Windows/Chromium results. It
        also simplifies the fonts.conf that we load and prepares the way for
        fixing many font bugs.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Initialize a known list of fonts instead of loading
        every font in the WEBKIT_TESTFONTS directory.
        * DumpRenderTree/gtk/fonts.conf: Removed.
        * DumpRenderTree/gtk/fonts/AHEM____.TTF: Copied from WebKitTools/DumpRenderTree/qt/fonts/AHEM____.TTF.
        * DumpRenderTree/gtk/fonts/fonts.conf: Added.
        * GNUmakefile.am: Modify FONTS_CONF_FILE to be FONTS_CONF_DIR, so that
        we can load both fonts.conf and AHEM____.TTF from this location.
        * Scripts/old-run-webkit-tests: Remove the check for WEBKIT_TESTFONTS, since
        it is no longer used.

2010-09-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-httpd fails if Perl is not installed
        https://bugs.webkit.org/show_bug.cgi?id=46602
        
        Make Port._read_configuration catch all exceptions, since trying to run
        perl (because of _webkit_build_directory) when it's not installed throws
        a WindowsError or OSError, not an IOError (this became an issue after 
        r68268, since ChromiumPort ends up calling Port.default_configuration in
        its constructor, which means that we're ending up on this codepath in
        non-NRWT cases too, e.g. for the Chromium NaCl tests, which use
        new-run-webkit-httpd).

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2010-09-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add setting API to set a local storage database path.
        https://bugs.webkit.org/show_bug.cgi?id=45446

        Add a setting API to set local storage database path.

        * EWebLauncher/main.c:
        (on_key_down):
        (browserCreate):
        (main):

2010-09-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move shared WebKit2 API (used by both bundle and main API) to WebKit2/Shared/API
        https://bugs.webkit.org/show_bug.cgi?id=46587

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

2010-09-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        DRT/Mac nodesFromRect support

        [Mac][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46580

        Implements LayoutTestController::nodesFromRect for Mac DRT, and
        adding stubs for GTK+ and Windows.

        * DumpRenderTree/LayoutTestController.cpp:
        (nodesFromRectCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::LayoutTestController::nodesFromRect):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::nodesFromRect):

2010-09-25  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=46555
        Fix typo in prepare-ChangeLog's help output.

        * Scripts/prepare-ChangeLog:

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

        Reviewed by Darin Adler.

        Implement WebKit2 callback equivalent to -[WebUIDelegate mouseDidMoveOverElement:modifierFlags:]
        <rdar://problem/8359279>
        https://bugs.webkit.org/show_bug.cgi?id=46546

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

2010-09-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Allow rebaselines for webkit-patch rebaseline to be chosen
        https://bugs.webkit.org/show_bug.cgi?id=46407
        
        Instead of always rebaselining all failing tests, allow a subset to be
        chosen.

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:

2010-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        [chromium] Implement TextInputController::firstRectForCharacterRange
        https://bugs.webkit.org/show_bug.cgi?id=38100

        Implemented TextInputController::firstRectForCharacterRange for chromium platform.
        No new tests are added since we need to implement the same feature in chromium side
        in order to enable any tests that uses this function.

        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::firstRectForCharacterRange): Added.

2010-09-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue reports land failures as "PASS"
        https://bugs.webkit.org/show_bug.cgi?id=46530

        We were ignoring the return value of land instead of passing it back to
        CommitQueue.  Of course, this was the one case I forgot to test!

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2010-09-24  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Eric Seidel.

        new-run-webkit-tests prints out nothing when build-dumprendertree fails
        https://bugs.webkit.org/show_bug.cgi?id=37563

        Print error message when build-dumprendertree fails.

        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-09-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT doesn't respect config set with set-webkit-configuration
        https://bugs.webkit.org/show_bug.cgi?id=46278
        
        Use Port.default_configuration() instead of hardcoding Release in
        ChromiumPort configuration initialization, so that we still inherit the
        configuration set by set-webkit-configuration.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-09-24  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix the code to check file existence.
        https://bugs.webkit.org/show_bug.cgi?id=46465

        * QtTestBrowser/main.cpp:
        (main):

2010-09-23  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r68232.
        http://trac.webkit.org/changeset/68232

        Broken NRWT on the canary bots.

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

2010-09-23  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        r68008 broke new-run-webkit-tests in that the chromium ports no
        longer respect set-webkit-configuration. The correct fix for this
        is being pursued in bug 46278 (along with a bunch of unit tests),
        but in the meantime I'm reverting the particular lines that broke
        things. This was tested by hand.

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

2010-09-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 API: Need way to know when a frame is removed from the hierarchy
        <rdar://problem/8414062>
        https://bugs.webkit.org/show_bug.cgi?id=46432

        * MiniBrowser/mac/BrowserWindowController.m:
        (didRemoveFrameFromHierarchy):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-09-23  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] implement layoutTestController.sampleSVGAnimationForElementAtTime
        https://bugs.webkit.org/show_bug.cgi?id=46426

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

2010-09-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nate Chapin.

        [GTK] r68199 introduced two test failures
        https://bugs.webkit.org/show_bug.cgi?id=46424

        Fix a regression handling preference overrides that are attached to boolean properties.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): g_strcasecmp returns 0 when strings match
        so we must check for that when converting a string to a boolean.

2010-09-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        Fix a condition check in ServerProcess, which becomes relevant when reading binary data.
        https://bugs.webkit.org/show_bug.cgi?id=46406

        This breaks when the method is called with specified size of data (image data), and the
        buffer hasn't yet reached this size.

        * Scripts/webkitpy/layout_tests/port/server_process.py: Changed to check for values of
          index larger than 0.

2010-09-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nate Chapin.

        [GTK] Some tests from r68174 fail on the GTK+ bots
        https://bugs.webkit.org/show_bug.cgi?id=46396

        Simplify LayoutTestController::overridePreference to make it easier for
        people unfamiliar with the code to keep the list of preferences up to date.
        Add the conversion for enable-hyperlink-auditing.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): Use a simple if-else block to determine
        out the property name for overrridePreference. Also simplify the logic for setting
        string properties. Add the conversion for enable-hyperlink-auditing.

2010-09-23  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] add caretBrowsingEnabled to WebSettings and DRT
        https://bugs.webkit.org/show_bug.cgi?id=46388

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Allow DRT to toggle hyperlink auditing (i.e., <a ping>).
        https://bugs.webkit.org/show_bug.cgi?id=30458

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        (WebPreferences::applyTo):
        * DumpRenderTree/chromium/WebPreferences.h:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2010-09-21  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Implement --enable-accelerated-2d-canvas flag in DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=46208

        This flag allows the layout tests to be run with or without accelerated
        2D canvas rendering.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        Declare the new flag string, and check for it on startup.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        Add a boolean for the new flag, in order to preserve its value over
        preferences reset.
        (TestShell::resetWebSettings):
        Set the new flag to the stored value on reset.
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::setAccelerated2dCanvasEnabled):
        Add an accessor for the new flag.
        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::reset):
        Initialize the new flag to false.
        (WebPreferences::applyTo):
        Copy the flag's value to the WebSettings.
        * DumpRenderTree/chromium/WebPreferences.h:
        Add the new flag.

2010-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Refactor QtWebKitPlatformPlugin interface

        Make it easier to keep source-compability for the
        QtWebKitPlatformPlugin interface, and run qmake
        on the example (but not build) for convenience. 

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

        * Scripts/webkitdirs.pm:

2010-09-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Tweak some status messages that Eric thought were confusing
        https://bugs.webkit.org/show_bug.cgi?id=46342

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix comm-queue typo
        https://bugs.webkit.org/show_bug.cgi?id=46339

        We were missing a "self".  The real problem is that we didn't have an
        integration test for the failure case.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue should log more detailed messages to the QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=46333

        When I created CommitQueueTask, I removed most of the previous logging.
        This patch adds back more detailed logging so folks can see their patch
        progress through the queue.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-22  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] User style layout tests don't pass on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=46069

        Fix a typo in LayoutTestController::addUserStyleSheet that was causing a
        crash the Chromium DRT. Pass InjectInExistingDocuments to mimic DRT
        behavior from other ports.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::addUserStyleSheet):

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Part 2: Update WebKitTestRunner and DumpRenderTree Build.
        https://bugs.webkit.org/show_bug.cgi?id=46303.

        * MiniBrowser/Configurations/MiniBrowserCFLite.vsprops: Added.
        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Moved
        CoreFoundation-specific stuff to new MiniBrowserCoreFoundation
        property sheet.
        * MiniBrowser/Configurations/MiniBrowserCoreFoundation.vsprops: Added.
        * MiniBrowser/MiniBrowser.vcproj: Updated configuration to use
        appropriate property sheet for the build types.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Updated the
        configuration to use appropriate property sheet for CoreFoundation
        and CFLite-style builds.

2010-09-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Optimize commit-queue performance for green trees
        https://bugs.webkit.org/show_bug.cgi?id=46254

        This patch redesigns the controller logic for the commit-queue.  In the
        new design, the controller exercises much finer-grained control over
        the landing process.  In particular:

        - Patches that fail to apply now get rejected almost immediately.
        - Patches that fail to build get rejects after two builds (instead of
          three builds and one test run).
        - Patches that run into a flaky test now get accepted after one build
          and two test runs instead of three full build-and-test runs.

        The main cost of these optimizations is that we don't find out the tree
        has a failing test until the very end of the process, but if the tree
        has a busted test, there's not much we can do anyway.  We might as well
        burn commit-queue resources spinning optimisticly.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py: Added.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Update WebKitTestRunner and DumpRenderTree Build.
        https://bugs.webkit.org/show_bug.cgi?id=46303.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Disable local MD5 sources
        for Cairo build. Copy wtf MD5 header to ForwardingHeaders for the
        WinCairo build.
        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops: Added.
        * WebKitTestRunner/win/InjectedBundle.vcproj: Update win new *_Cairo
        build targets that use the new InjectedBundleCFLite.vsprops file.

2010-09-22  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix bustage of rebaseline-chromium-webkit-tests resulting from
        r67974. Really need better unit tests for this tool :(

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-09-22  Adam Roben  <aroben@apple.com>

        Unbreak test-webkitpy

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): Add a line that mysteriously got deleted.

2010-09-22  Adam Roben  <aroben@apple.com>

        Make test-webkitpy test WebKit2's scripts

        These scripts can't be in WebKitTools due to limitations of Apple's
        build process. But that doesn't mean we can't test them!

        Fixes <http://webkit.org/b/46297> test-webkitpy should test code in
        WebKit2/Scripts

        Reviewed by Adam Barth.

        * Scripts/test-webkitpy:
        (_clean_packages_with_test): Renamed from _clean_webkitpy_with_test.
        Now takes an external_package_paths parameter and cleans both webkitpy
        and any external packages.
        (init): Added an external_package_paths parameter which we pass along
        to _clean_packages_with_test.
        (top level): Add WebKit2/Scripts/webkit2 as our only external package
        and pass it along to init and Tester.run_tests.

        * Scripts/webkitpy/test/main.py:
        (Tester.run_tests): Added an optional external_package_paths
        parameter. We modify sys.path so that the external packages can be
        imported, and search for unittest files inside all external packages
        in addition to inside webkitpy.

2010-09-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: r68063 broke linux python tests

        Add a missing "from __future__ import with_statement" to this
        new file; the perils of testing only on the Mac and by review :(

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

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

2010-09-22  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Add a 'chromium-gpu' set of ports that will test the accelerated
        GPU paths. This patch adds:

        - support for the '--accelerated-compositing' and
          'accelerated-2d-canvas' flags to new-run-webkit-tests (and the
          'no-' flags)
        - adds a new set of Ports that will look under
          platform/chromium-gpu-$OS/ for baselines before looking in the
          regular chromium search path
        - adds a new test_expectations.txt file in platform/chromium-gpu
          that skips all but the tests we actually want to run with
          acceleration.

        This patch will allow us to run both with and without acceleration
        and to change the defaults for both the regular and -gpu options
        as the code evolves.

        We plan to add both --chromium-$OS and --chromium-gpu-$OS runs to
        each test bot.

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

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-09-22  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web Inspector: Remote Web Inspector support for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=43988

        Runs a web debug server on port specified by QtTestBrowser
        argument -remote-inspector-port. Property
        _q_webInspectorServerPort of the QWebPage instance will be set
        according to the argument. All pages with that property set will
        be remotely inspectable.

        URL for remote inspection of first QWebPage is
            http://localhost:9222/webkit/inspector/inspector.html?page=1
        where 1 is the number of the QWebPage instance.

        The base URL yields an index page with links to the individual inspectors:
            http://localhost:9222/

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        * QtTestBrowser/launcherwindow.h:
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2010-09-22  Adam Roben  <aroben@apple.com>

        Fix webkit-patch failure-reason now that build.webkit.org has been
        updated

        Fixes <http://webkit.org/b/46273> webkit-patch failure-reason crashes
        every time

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/common/net/buildbot.py:
        (BuildBot._file_cell_text): Added. Travels down the firstChild chain
        looking for an element that contains text, then returns it.
        (BuildBot._parse_twisted_file_row): Use _file_cell_text to get the
        text out of the cells. This way it doesn't matter whether the cells
        have <b> children (as for cells in directory rows) or not (as for
        cells in file rows)
        (BuildBot._parse_twisted_directory_listing): Look for rows that have
        the "directory" or "file" class, rather than rows with any class,
        since header rows now have a class attribute.

        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        (BuildBotTest._example_directory_listing): Updated to more closely
        match the markup that build.webkit.org is producing now.

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

        Unreviewed, build fix.

        new-run-webkit-tests: fix bug introduced in r68008 where if you
        specify --chromium and no --platform, and you're running on
        windows, you use the 'chromium-win' port by default instead of the
        version-specific port. This breaks the buildbots.

        It will be good for this refactoring to settle down so I can
        rewrite the logic for default ports and the unit tests to be
        clearer (and the testing more comprehensive).

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

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

        Reviewed by Adam Barth.

        Modify the Port interface to take only a series of keyword arguments
        in the constructor, and modify Port/factory.get() to accomodate that,
        and to accept user=XXX as an argument so we can pass
        webkitpy.common.system.user.User objects in.

        Then, modify new-run-webkit-tests and rebaseline-chromium-webkit-tests
        to use the common routine in webkitpy.common.system.user.open_url()
        to display HTML files.

        There was a routine in the Port interface to do the same thing,
        but I see no need for a port-specific hook for this, since it is
        something that will always be executed by the host environment
        and displaying web pages has nothing to do with running layout tests.

        Note that new-run-webkit-tests used to use test_shell to display
        the page; this is potentially useful so that you can actually click
        from a result to the broken page; however, since DumpRenderTree
        doesn't support this functionality, it will be going away eventually.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-09-21  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Get fresh theme when running EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=46210

        If user tried to run EWebLauncher outside of the build tree, it would
        not find the theme and fallback to the installed one. However, since
        EWebLauncher is not installed, we always want to take the theme from
        the just compiled source code. If user had never installed WebKit's
        EFL port it could even receive a segv since no theme would be found.

        Now EWebLauncher does not fallback to the installed theme and CMake
        gives as DATA_DIR the directory of the theme it has just built.

        * CMakeListsEfl.txt: Pass the build directory as DATA_DIR to
        EWebLauncher.
        * EWebLauncher/main.c: Use only the theme from build director. Do not
        fallback to others as this could hide real bugs.
        (quit):
        (browserCreate):
        (findThemePath):
        (main):

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

        Unreviewed, build fix.

        Don't pass the --test-shell arg to the Chromium Mac port of DRT;
        it just confuses it.

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

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

2010-09-21  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Make a new buildbot for Leopard Debug Test

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

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

        Unreviewed, build fix.

        Fix breakage of Chromium Mac DRT port caused by r67905.

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

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

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

        Unreviewed, build fix.

        Add missing import of 'tempfile'.

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

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

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: pull the list of tests from the Port, and
           make it possible to run with no actual test files in the filesystem.

        This set of changes allows us to delete the special
        webkitpy/layout_tests/data directory and test the generic code without
        touching the filesystem (except to write results). This speeds up
        test-webkitpy substantially.

        This also cleans up and removes several code paths in the generic
        code and fixes some minor bugs, notably in the test_expectations
        parsing, which was previously fragile if the tests weren't present.

        We also change the way we diff image results to be able to do so
        in memory, without relying on files. This slows down chromium
        test_shell, which always writes images to files, but should speed
        up DRT and ImageDiff-based implementations slightly.

        Note that pulling the list of tests to run from the Port will allow
        ports to specify what tests to run as an inclusive list; previously
        you could only do this as an exclusive list by using a 
        test_expectations file or Skipped files; nothing actually uses this
        feature yet and it's unclear if it should be used.

        Note that there are no functional changes -- apart from now 
        always printing out the location of the checksum file when we are
        tracing test runs -- and the total number of lines of non-test code
        actually drops by two.

        There is some more cleanup that can be done in the Port/Driver 
        interface and in some handling of filenames, but I'll save that
        for another change.

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

        * Scripts/webkitpy/layout_tests/data/*: Removed.
            - no longer need special mock layout_tests_directory in the
              repository.
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
            - add code to display missing text files, checksums when tracing
            - update to not look at the filesystem directly.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
            - remove tests_are_present flag
            - update with changes in Port interface - no longer access
              the filesystem directly, although we still use os.path for
              filename manipulation.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py: Removed.
            - renamed to port/test_files.py
        * Scripts/webkitpy/layout_tests/port/base.py:
            - change diff_image() to expect actual image data, not filenames
            - add expected_checksum(), expected_image(), expected_text() to
              return the content of the files so that we don't need a filesystem
            - add path_exists(), path_isdir() for filesystem-like access.
            - add test_dirs() to keep clobber-test-results from needing to
              actually look at a real layout tests dir
            - add tests() to return the list of tests to run on the port
              (calls port/test_files to do the work).
            - add update_baseline() to be able to save new baselines
            - add uri_to_test_name() from port/dryrun.py so we can easily check
              filename_to_uri()
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/port/chromium.py:
            - change diff_image() to accept image content, not filenames.
              This will be slower for test_shell/image_diff, but faster
              for DRT/ImageDiff.
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
            - simplify greatly
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:
            - add more unit tests
        * Scripts/webkitpy/layout_tests/port/test.py:
            - massive rewrite to use in-script list of tests and expectations
        * Scripts/webkitpy/layout_tests/port/test_files.py:
            - rename from layout_package/test_files.
        * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:
            - add unit tests
        * Scripts/webkitpy/layout_tests/port/webkit.py:
            - update diff_image() to take image contents, not files. Should
              make things slightly faster.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
            - update with changes to diff_image()
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
            - update with changes to diff_image()
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
            - remove tests_are_present from test_expectations
            - pull the list of tests from port.tests() instead
              of calling test_files.py directly.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
            - update unit tests
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
            - update with changes to 
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
            - update with change in Port interface
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
            - update with change in Port interface
        * Scripts/webkitpy/style/checkers/test_expectations.py:
            - remove the tests_are_present flag

2010-09-21  Anders Carlsson  <andersca@apple.com>

        Disable logging.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2010-09-21  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        add a script for running webkit_unit_tests
        https://bugs.webkit.org/show_bug.cgi?id=46014

        * Scripts/run-chromium-webkit-unit-tests: Added.

2010-09-21  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Fix linking problems on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=45844

        * GNUmakefile.am: link the executables with winmm.dll

2010-09-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        feeder-queue svn updates more often than needed
        https://bugs.webkit.org/show_bug.cgi?id=46171

        We don't need to poll SVN every time we feed the feeders.  Rather, we
        can count on the wrapper shell script to auto-update the queue.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Add robot loader timeout and extra time options.
        https://bugs.webkit.org/show_bug.cgi?id=46172

        [-robot-timeout <s>]: Load the next page after s seconds if the current
        page didn't finish loading.
        [-robot-extra-time <s>]: Wait s seconds after the current page finished
        loading before loading the next one. This should allow some time for the
        page's JavaScript to execute.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::robotTimeout):
        (LauncherApplication::robotExtraTime):
        (LauncherApplication::LauncherApplication):
        (LauncherApplication::handleUserOptions):
        (main):
        * QtTestBrowser/urlloader.cpp:
        (UrlLoader::UrlLoader):
        (UrlLoader::loadNext):
        (UrlLoader::loadUrlList):
        * QtTestBrowser/urlloader.h:

2010-09-21  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed.

        Adding myself to the committers list.

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

2010-09-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        EventSender::contextClick() now returns an array of js
        objects. Each object has a title property and a click() method.

        * DumpRenderTree/gtk/EventSender.cpp:
        (getMenuItemTitleCallback):
        (setMenuItemTitleCallback):
        (menuItemClickCallback):
        (getMenuItemClass):
        (contextClickCallback):

2010-09-20  Hayato Ito  <hayato@chromium.org>

        Unreviewed.
        Adding myself to the committers list.

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

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The tool member variable should be called _tool
        https://bugs.webkit.org/show_bug.cgi?id=46160

        Created by find-and-replace.

        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/openbugs.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/multicommandtool.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        I ran the tests before landing but ignored the fact that they failed.  :(

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a feeder queue that polls bugs.webkit.org for the commit-cluster
        https://bugs.webkit.org/show_bug.cgi?id=46141

        The feeder-queue polls bugs.webkit.org every 30 seconds and updates the
        list of work items on the status server.  The individual commit-cluster
        nodes then grab the patches from the server and process them.

        * Scripts/webkitpy/tool/bot/feeders.py: Added.
        * Scripts/webkitpy/tool/bot/feeders_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:

2010-09-20  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Darin Adler.

        build-webkit: Add support for CMake build system
        https://bugs.webkit.org/show_bug.cgi?id=44979

        * Scripts/build-webkit: Add "--efl" command-line option to build the
        EFL port of WebKit.
        * Scripts/webkitdirs.pm: Define buildCMakeProject() and
        buildEflCMakeProject() subroutines.

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

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: refactor command line args getting passed to DRT

        This change cleans up some argument parsing between functions to get
        rid of some overlapping data structures. There should be no functional
        changes in this patch; it is pure refactoring in preparation for
        landing the Chrome GPU port and adding a generic way to pass
        args to DRT/TestShell.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
          - pass the options argument explicitly to the threads and drivers,
            also consolidate the passing of options to the driver.
          - pass options directly to process_output() to remove a couple
            parameters (minor cleanup).
        * Scripts/webkitpy/layout_tests/port/base.py:
          - pass the options argument to Port.create_driver().
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
          - update Port.create_driver() test
        * Scripts/webkitpy/layout_tests/port/chromium.py:
          - pass the options argument to Port.create_driver(), and clean up
            building of the cmd line for DRT.
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
          - pass the options argument to Port.create_driver()
        * Scripts/webkitpy/layout_tests/port/test.py:
          - pass the options argument to Port.create_driver()
        * Scripts/webkitpy/layout_tests/port/webkit.py:
          - pass the options argument to Port.create_driver(), and clean up
            building of the cmd line for DRT.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
          - consolidate args in _get_dump_render_tree_args and rename to
            _get_test_args(); move all of the command-line args to the
            Port implementations.

2010-09-20  Andrew Wilson  <atwilson@chromium.org>

        Revert change which was accidentally committed along with some expectation changes.

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

2010-09-20  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Add explicit --force-patch flag to webkitpy tools
        https://bugs.webkit.org/show_bug.cgi?id=46103
        
        It wasn't obvious until I read the applypatch.py source code that
        --non-interfactive implies passing --force to patch. Add --force-patch
        as an alias to the flag, so that this behavior is more discoverable.

        * Scripts/webkitpy/tool/steps/applypatch.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-09-20  Eric Seidel  <eric@webkit.org>

        Unreviewed, adding a line which got dropped and is trivially correct (and tested).

        commit-queue can't land patches
        https://bugs.webkit.org/show_bug.cgi?id=46138

        Add a line of code I forgot in my last commit.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The commit-cluster bots still race to lock patch_ids
        https://bugs.webkit.org/show_bug.cgi?id=46130

        It turns out we need to use a transaction object to make the
        read/modify/write lock operation atomic.  From reading the AppEngine
        documentation, I think this patch should do what we want.  It's hard to
        test locally because the test instance isn't distributed in the same
        way the production instance is.

        * QueueStatusServer/handlers/nextpatch.py:
        * QueueStatusServer/model/activeworkitems.py: Added.

2010-09-20  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (HTML5 Parser): Pages broken due to <tag<tag> parsing changes
        https://bugs.webkit.org/show_bug.cgi?id=40961

        Implement WebKitUsePreHTML5ParserQuirks preference.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Reset WebKitUsePreHTML5ParserQuirks
        to false after a test finishes.

2010-09-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Put
        $(WebKitOutputDir)\include before $(WebKitLibrariesDir)\include so
        we'll pick up the most recent versions of the headers.

2010-09-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should check commit-queue+ again just before committing
        https://bugs.webkit.org/show_bug.cgi?id=32679

        Added a _revalidate_patch check, right before landing.

        Since _revalidate_patch passes the patch_id from the work item
        back to bugzilla, I had to fix all of the previous queue tests to
        use valid attachment ids (that's the majority of this change).

        In order to validate that the bug was still open, I had to teach
        bugzilla.Bug about open/closed states.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-20  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed.

        Adding myself as a comitter.

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

2010-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Two instances of commit-queue try to process the same patch
        https://bugs.webkit.org/show_bug.cgi?id=46113

        This patch makes next-patch atomic so that the server won't vend the
        same patch twice in the same hour.

        * QueueStatusServer/handlers/nextpatch.py:

2010-09-20  Adam Roben  <aroben@apple.com>

        Make WebKitTestRunner's wait-to-dump watchdog timer work on Windows

        We were previously trying to use a CFRunLoopTimer, but since Windows
        doesn't use CFRunLoop on most threads this doesn't work. Now we use a
        Windows-style timer on Windows.

        I also replaced all uses of "watchdog" with "watchdog timer".

        Fixes <http://webkit.org/b/46101> WebKitTestRunner's wait-to-dump
        watchdog timer doesn't work on Windows

        Reviewed by Anders Carlsson.

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

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: Removed
        platform-specific functions.
        (WTR::LayoutTestController::LayoutTestController): Added call to
        platformInitialize.
        (WTR::LayoutTestController::waitUntilDone): Changed to call
        initializeWaitToDumpWatchdogTimerIfNeeded instead of doing the work
        right in this function.
        (WTR::LayoutTestController::waitToDumpWatchdogTimerFired): Updated for
        rename.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added new
        members needed to support the watchdog timer abstraction. Replaced
        some "watchdog"s with "watchdog timer".

        * WebKitTestRunner/InjectedBundle/mac/LayoutTestControllerMac.mm:
        Added.
        (WTR::LayoutTestController::platformInitialize): Does nothing on this
        platform.
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Moved here
        from LayoutTestController.cpp and changed to use an early return.
        (WTR::waitUntilDoneWatchdogTimerFired): Moved here from
        LayoutTestController.cpp.
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):
        Moved code here from LayoutTestController::waitUntilDone and changed
        to use an early return.

        * WebKitTestRunner/InjectedBundle/win/LayoutTestControllerWin.cpp:
        Added.
        (WTR::LayoutTestController::platformInitialize): Initialize our
        watchdog timer.
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Added.
        Kills and clears the watchdog timer.
        (WTR::waitToDumpWatchdogTimerFired): Added. Calls through to the
        LayoutTestController member function of the same name.
        (WTR::LayoutTestController::initializeWaitToDumpWatchdogTimerIfNeeded):
        Added. Sets up the timer if it isn't already set.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added
        LayoutTestControllerMac.mm.

        * WebKitTestRunner/win/InjectedBundle.vcproj: Added
        LayoutTestControllerWin.cpp.

2010-09-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] fast/forms/listbox-selection.html fails
        https://bugs.webkit.org/show_bug.cgi?id=45942

        Use the gdkModifersFromJSValue helper to parse all appropriate modifier
        strings in keyDownCallback.

        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback): Use the gdkModifersFromJSValue instead of duplicating the 
        modifier parsing logic.

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 decidePolicyForNavigationAction should include mouse button information
        <rdar://problem/8413165>
        https://bugs.webkit.org/show_bug.cgi?id=46060

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):

2010-09-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Add unit tests for diffs that delete or modify a change log entry
        or describe changes that are far apart
        https://bugs.webkit.org/show_bug.cgi?id=46046

        Add additional unit tests to test change log diffs that contain
        deletions or changes that are far apart from each other in the
        ChangeLog file.

        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl:
          - Added the following unit tests:
          "fixChangeLogPatch: [no change] In-place change."
          "fixChangeLogPatch: [no change] Remove first entry."
          "fixChangeLogPatch: [no change] Remove entry in the middle."
          "fixChangeLogPatch: [no change] Far apart changes (i.e. more than one chunk)."

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WKBundleRangeRef with WKBundleRangeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=46054

        The new one acts like WKBundleNodeHandleRef and allows for getting a
        wrapper in a specific world for the handle.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue):
        (WTR::propertyValueDouble):
        (WTR::propertyValueInt):
        (WTR::numericWindowPropertyValue):
        (WTR::toStr):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-09-19  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Fix WebGL test regressions by r67809.

        * DumpRenderTree/chromium/WebPreferences.cpp:
        (WebPreferences::applyTo): Call setExperimentalWebGLEnabled().

2010-09-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [DRT/Chromium] Fix a WebSettings handling bug
        https://bugs.webkit.org/show_bug.cgi?id=45945

        Before this change, Chromium DRT reset WebSettings for every new
        window. It was wrong.
        If new window is not the first one, we have to apply the same
        settings as the first window.  So, we introduce WebPreference to
        store the current settings, and apply it to new windows. It's same
        as test_shell's behavior.

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
          Use WebPreferences instead of WebSettings.
        (LayoutTestController::setUserStyleSheetEnabled):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        (LayoutTestController::setAllowFileAccessFromFileURLs):
        (LayoutTestController::overridePreference):
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings): Use WebPreferences.
        (TestShell::runFileTest): ditto.
        (TestShell::createNewWindow): Apply existing WebPreferences to a new WebView.
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::preferences):
        (TestShell::applyPreferences):
        * DumpRenderTree/chromium/WebPreferences.cpp: Added.
        * DumpRenderTree/chromium/WebPreferences.h: Added.

2010-09-18  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by David Levin.

        update-webkit --chromium spitting out a spurious error
        https://bugs.webkit.org/show_bug.cgi?id=45868

        * Scripts/update-webkit-chromium: Use commandExists() function to check for existence of gclient.

2010-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Improve/unify the PageLoadClient interfaces
        https://bugs.webkit.org/show_bug.cgi?id=46043

        * MiniBrowser/mac/BrowserWindowController.m:
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishDocumentLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didReceiveTitleForFrame):
        (didFirstLayoutForFrame):
        (didFirstVisuallyNonEmptyLayoutForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestController.h:

2010-09-17  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Adding a shell script I use to run the
        commit-queue. Now that multiple machines run the cq,
        it makes sense to share the script between them.

        * EWSTools/start-commit-queue.sh: Added.

2010-09-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        The colors on the new build.webkit.org (after upgrading the master to 0.8.1) are
        slightly harder to read, so this reverts the previous background colors for various
        states, making it easier to read.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (.success):
        (.failure):
        (.warnings):
        (.exception):
        (.start,.running,td.building):
        (.offline,td.offline):

2010-09-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67692.
        http://trac.webkit.org/changeset/67692
        https://bugs.webkit.org/show_bug.cgi?id=46011

        broke layout test dashboard (Requested by johnny_g on
        #webkit).

        * 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/run_webkit_tests.py:

2010-09-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        Style bot complains about cairo forward declaration naming
        https://bugs.webkit.org/show_bug.cgi?id=45867

        Exclude Cairo forward declarations from indentifiers with underscores checks.

        * Scripts/webkitpy/style/checkers/cpp.py: Add exclusion for Cairo forward-declarations.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Add some tests for this.

2010-09-16  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Include detailed test modifiers (e.g. FLAKY) in results.json for failing non-layout tests
        https://bugs.webkit.org/show_bug.cgi?id=45408

        This change also tries to remove duplicated upload_results_json methods
        in run_webkit_tests.py and json_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/run_webkit_tests.py:

2010-09-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] When switching views (WebViewGraphicsBased <--> WebViewTraditional), QWebPage signals and QActions have to be re-set.

        Recently r67554 changed the way different views use the WebPage class: it was previously being shared between
        different views, but now for each view switch, a new WebPage class is constructed and set. Signals and QAction's
        were not being set to the new WebPage though. Patch fix that, by re constructing the toolbar, and then re-hooking
        all page specific stuff to the UI.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::buildUI):
        (MainWindow::setPage):
        * QtTestBrowser/mainwindow.h:

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Make all accesses to m_item (GraphicsWebView) done by WebViewGraphicsBased class happen though graphicsWebView getter method.

        This patch is mostly a preparation for another commit, where the ownership of the m_item/GraphicsWebView
        object will move to the qgraphicsscene instead of the qgraphicsview.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setPage):
        (WebViewGraphicsBased::setResizesToContents):
        (WebViewGraphicsBased::resizeEvent):
        (WebViewGraphicsBased::animatedFlip):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::setItemCacheMode):
        (WebViewGraphicsBased::itemCacheMode):

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Moved setYRotation method body out of the class (WebViewGraphicsBased) definition.

        We usually separate methods whose body are larger than a few lines from the class definition.

        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::yRotation):
        (WebViewGraphicsBased::setYRotation):

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Make initializeView method of LauncherWindow private.

        No one else needs to be able to call it but LauncherWindow.
        Also moving the declation of isGraphicsBased method down in the same file, in order
        to better group related methods.

        * QtTestBrowser/launcherwindow.h:

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Make the getter 'page' method of MainWindow const.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::page):
        * QtTestBrowser/mainwindow.h:

2010-09-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Andreas Kling.

        Remove useless parameter from MainWindow class' constructor.

        The parameter defaults to an empty URL and is not being used by any caller. Apart from that it is also
        not referred in the constructor body and does not make much sense.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        * QtTestBrowser/mainwindow.h:

2010-09-15  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Needs DRT queueLoadHTMLString and setDeferMainResourceLoad-implementations
        https://bugs.webkit.org/show_bug.cgi?id=42151

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (WorkItemLoadHTMLString::WorkItemLoadHTMLString):
        (WorkItemLoadHTMLString::run):
        (LayoutTestController::queueLoadHTMLString):
        (LayoutTestController::reset):
        (LayoutTestController::setDeferMainResourceDataLoad):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::deferMainResourceDataLoad):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didCreateDataSource):

2010-09-16  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        Add script to synchronize WebKit and Khronos WebGL tests
        https://bugs.webkit.org/show_bug.cgi?id=42336

        * Scripts/update-webgl-conformance-tests: Added.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py: Added.
        * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests_unittest.py: Added.

2010-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add support for sending synchronous messages from the InjectedBundle to the WKContext
        <rdar://problem/8365320>
        https://bugs.webkit.org/show_bug.cgi?id=44785

        * MiniBrowser/mac/AppDelegate.m:
        (didReceiveSynchronousMessageFromInjectedBundle):
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didCreatePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2010-09-16  Leonid Ebril  <leonid.ebril@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtTestBrowser: Disable creation of a new window for screenshot on Symbian platform.
        https://bugs.webkit.org/show_bug.cgi?id=45885

        Avoid creation of an additional window for screenshot to prevent overlapping with original window.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::screenshot):

2010-09-16  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController zoomIn:]):
        (-[BrowserWindowController zoomOut:]):
        (-[BrowserWindowController resetZoom:]):
        Remove trailing semicolons.

2010-09-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67628.
        http://trac.webkit.org/changeset/67628
        https://bugs.webkit.org/show_bug.cgi?id=45904

        broke the build (Requested by eric_carlson on #webkit).

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

2010-09-16  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed.

        Adding myself as a comitter.

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

2010-09-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        EventSender::contextClick() now returns an array of js
        objects. Each object has a title property and a click() method.

        * DumpRenderTree/gtk/EventSender.cpp:
        (getMenuItemTitleCallback):
        (setMenuItemTitleCallback):
        (menuItemClickCallback):
        (getMenuItemClass):
        (contextClickCallback):

2010-09-14  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson and Martin Robinson.

        [GTK] eventSender.contextClick() should return the contents of the context menu
        https://bugs.webkit.org/show_bug.cgi?id=39102

        Make the eventSender use the new private WebKitGtk+ API to
        retrieve the context-menu item titles and store them in an array.

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

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * Scripts/build-webkit:

2010-09-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support globalhistory tests
        https://bugs.webkit.org/show_bug.cgi?id=45774

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::isGlobalHistoryTest):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpHistoryCallbacks):
        (LayoutTestController::removeAllVisitedLinks):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-10  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        deduplicate-tests should be runnable from any WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=44709

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-15  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] sort testing methods in DRT
        https://bugs.webkit.org/show_bug.cgi?id=45850

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):

2010-09-15  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        CQ status shows items out of order
        https://bugs.webkit.org/show_bug.cgi?id=45846
        
        Only group consecutive status items with the same patch ID into the same
        group, so that overall item ordering is preserved.
        
        Also don't indent status items that only have a single item in their
        group.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/templates/includes/singlequeuestatus.html: Added.
        * QueueStatusServer/templates/queuestatus.html:

2010-09-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add queue start/stop messages
        https://bugs.webkit.org/show_bug.cgi?id=45853

        I ended up needing to clean up a bunch of our unit testing
        in order to test this new code path nicely.

        There are also a few PEP8 changes needed to pass check-webkit-style.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=45849
        WKURLCreateWithCFURL crashes with null url
        
        Fix MiniBrowser crash when the url is not parseable.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController fetch:]):

2010-09-15  Patrick Gansterer  <paroga@paroga.com>

        Unreviewed.

        Adding myself to the committers list.

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

2010-09-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to run more than one commit-queue instance
        https://bugs.webkit.org/show_bug.cgi?id=45786

        Mostly we need to make sure the two (or more) instances get
        different patches to work on.  To do this, I re-worked
        the code responsible for getting the next work item to
        round trip through the status server.  The status server only
        vends patches from the work items list, only if those patches
        have not had status reported for them in the last hour.

        This is another step towards making all queues go through the
        status server, thus making it possible to run more than one
        instance of various EWS bots (as requested in bug 44292).

        The webkitpy changes are already covered by existing unit tests.
        The QueueStatusSever sadly has no testing infrastructure yet. :(

        * QueueStatusServer/handlers/nextpatch.py: Added.
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/main.py:
        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-15  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        NRWT fails with UnicodeDecodeError on editing/selection/mixed-editability-10.html
        https://bugs.webkit.org/show_bug.cgi?id=45791

        Force filenames to be raw bytes before running difflib.unified_diff.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2010-09-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] QtTestBrowser crashes when enabling QGraphicsView mode after first loading page without it enabled
        https://bugs.webkit.org/show_bug.cgi?id=35247

        The main issue when changing the views is that the plugins and any other components that
        depend on view specific attributes such as the native window id are not teared down.
        Even if we had a tear-down procedure, we'd have to re-initialize the plugin after
        switching to the new view (QGraphicsWebView). This is a rather uncommon situation, so
        we decided to work around this in QtTestBrowser by making toggling between QWebView
        and QGraphicsWebView also re-create the page.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        * QtTestBrowser/mainwindow.h:

2010-09-14  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Send webkit accessibility notifications to Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45156

        Move printf inside shouldDumpAccessibilityNotifications check.

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

2010-09-14  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] fix http/tests/security/local-user-CSS-from-remote.html
        https://bugs.webkit.org/show_bug.cgi?id=45788

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setUserStyleSheetLocation): use a base64 url like in Chrome

2010-09-14  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] Remove WebKit::areLayoutTestImagesOpaque since it's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=45768

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage): new baselines are checked in and Linux will match Windows going forward.

2010-09-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add newly added directories to the directory list.

        * wx/build/settings.py:

2010-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove WKBundleNodeRef, replacing uses with WKBundleNodeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=45785

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue):
        (WTR::numericWindowPropertyValue):
        (WTR::dumpPath):
        (WTR::toStr):
        (WTR::operator<<):
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

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

        Fix two typos in commit-queue.  The first is harmless.  The second
        causes the queue to reject patches when the build is broken.  :(

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-14  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Send all accessibility notifications to Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=45156

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

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

        Reviewed by Eric Seidel.

        commit-queue is slow during the day
        https://bugs.webkit.org/show_bug.cgi?id=45780

        Thanks to the new logging, we've noticed that checkout-is-out-of-date
        errors in the first pass of landing don't retry the land.  Instead,
        they're treated as failures and cause the commit-queue to do two more
        builds before really trying to land the patch.  Worse, in the second
        build, we can get bitten by a flaky test.

        This patch takes a slightly different approach to the commit-queue's
        main control logic.  We now use a separate subprocess for building and
        testing and for landing.  This means we should very rarely see the
        checkout-is-out-of-date error, and when we do see it, we should retry
        more quickly.  If my understanding is correct, this should be a big
        speed win for the commit-queue.

        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-14  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] implement layoutTestController.setDomainRelaxationForbiddenForURLScheme
        https://bugs.webkit.org/show_bug.cgi?id=45762

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

2010-09-14  Csaba Osztrogonác  <ossy@webkit.org>

        Adding myself as a reviewer.

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

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Build-webkit shows a warning when WebKitBuild directory is not exist
        https://bugs.webkit.org/show_bug.cgi?id=45736

        Build-webkit has showed a warning when WebKitBuild didn't exist, add
        an additional condition to avoid it.

        * Scripts/build-webkit:

2010-09-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should log when it's retrying due to checkout out of date error
        https://bugs.webkit.org/show_bug.cgi?id=45725

        This will allow us to better track how often we see these errors
        and how long it takes the queue to recover from them.

        In order to pass the tests, I had to correct an error
        from a previous change.  The UnitTestPort should not have
        ever been using the base port method as that will read
        a file from disk.  If the unit tests haven't passed the contents
        it should raise an IOError as though the file doesn't exist.

        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Upload results when cq patch landing fails
        https://bugs.webkit.org/show_bug.cgi?id=45683
        
        Include script errors when CommitQueue._land fails.

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: accessibilityIsIgnored is returning nil when return value expects a BOOL
        https://bugs.webkit.org/show_bug.cgi?id=45548

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isIgnoredCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isIgnored):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isIgnored):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isIgnored):

2010-09-13  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        jscPath() is incorrect in Windows' cmd.exe shell
        https://bugs.webkit.org/show_bug.cgi?id=45651

        * Scripts/webkitdirs.pm: Add ".exe" suffix to $jscName on Windows.

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64816-r64889): Crash in WebCore::AccessibilityRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=43807

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (textMarkerForPointCallback):
        (AccessibilityUIElement::textMarkerForPoint):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::textMarkerForPoint):

2010-09-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] build-webkit: Add --v8 option to build against V8

        Note that V8 is picked up from QtScript, so this currently requires building
        against the experimental qt-script-v8 branch.

        * Scripts/build-webkit:

2010-09-13  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        Add WebDeviceOrientationClientMock::create() and use it from DRT.
        https://bugs.webkit.org/show_bug.cgi?id=45650

        Do not use the WebDeviceOrientationClientMock constructor directly,
        but use the create() member function.

        This should fix the linker errors for the multi-DLL Chromium DRT build.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        (LayoutTestController::deviceOrientationClient):

2010-08-27  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        Add support for testing the viewport meta tag algorithm,
        based on the following draft spec:

        http://people.opera.com/rune/TR/ED-css-viewport-20100806/

        Add common handling of viewport meta tag based on new Opera spec
        https://bugs.webkit.org/show_bug.cgi?id=44201

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::dumpConfigurationForViewport):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        [DRT/Chromium] Remove dependency to base/string16.h and gfx/codec/png_codec.h
        https://bugs.webkit.org/show_bug.cgi?id=45517

        Use webkit_support_gfx.h for PNG encoding/decoding instead of png_codec.h

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (Image::craeteFromStdin):
        (Image::createFromFilename):
        (diffImages):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage):

2010-09-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Chromium] Implement textInputController.hasSpellingMarker() for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45441

        Added TextInputController::hasSpellingMarker().
        
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::TextInputController):
        (TextInputController::hasSpellingMarker):
        * DumpRenderTree/chromium/TextInputController.h:

2010-09-12  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        My last change accidentally contained a local change to the
        rebaselinig script; webkit-patch land picked it up without telling
        me and committed it :(

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-09-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        Attempt to fix Windows MiniBrowser build (untested)
        https://bugs.webkit.org/show_bug.cgi?id=45609

        * MiniBrowser/win/BrowserView.cpp:
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix zoom related tests when testing WebKit2.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::zoomPageIn): Zoom in and zoom out are not the same.

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Implement WebKit2 callback equivalent to - [WebUIDelegate webView:setStatusText:]
        <rdar://problem/8359252>
        https://bugs.webkit.org/show_bug.cgi?id=45605

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

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add callback mechanism for the getting the source of a frame
        <rdar://problem/8364681>
        https://bugs.webkit.org/show_bug.cgi?id=45604

        Add ability to dump the main frame's source to the console.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController dumpSourceToConsole:]):
        * MiniBrowser/mac/MainMenu.xib:

2010-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove unneeded Empty Queue messages
        https://bugs.webkit.org/show_bug.cgi?id=45602

        We already have a /gc job to delete these.
        recentstatus.py is already smart enough to use the
        most recent of the workitems last update or the most recent status,
        so removing these should not change the _last_status_date() return
        value more than a few milliseconds.

        These messages just spam the recent status log.

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Fix Python exception when generating synthetic patch IDs
        https://bugs.webkit.org/show_bug.cgi?id=45592

        Can't concatenate strings and numbers directly.

        * QueueStatusServer/handlers/queuestatus.py:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Group statuses in queue status by patch ID
        https://bugs.webkit.org/show_bug.cgi?id=45588

        Group statuses by patch ID so that the status page is easier
        to scan.

        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/stylesheets/dashboard.css:
        (.status-group):
        (.status-bug):
        (.status-group ul):
        (.status-group ul li):
        (.status-group ul li:hover):
        (.status-cell):
        (.status-cell:hover):
        (.status-cell.pass):
        (.status-cell.fail):
        (.status-cell.pending):
        (.status-cell.error):
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/queuestatus.html:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Implement layoutTestController.dumpResourceResponseMIMETypes in Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=45479

        Implement layoutTestController.dumpResourceResponseMIMETypes (modelled after
        implementation in ResourceLoadDelegate in the Mac port).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpResourceResponseMIMETypes):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShouldDumpResourceResponseMIMETypes):
        (LayoutTestController::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveResponse):

2010-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queues.webkit.org should expose /remote_api for data upload/download
        https://bugs.webkit.org/show_bug.cgi?id=45559

        * QueueStatusServer/app.yaml:
         - /remote_api is a standard app-engine service which allows use of
           the bulk uploader for data upload/download.  Exposing this
           (for admin access only) allows us to use 

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add zoom support to WebKit2 API
        <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45585

        - Add zoom options to MiniBrowser that mimic Safari's options using
          the new WebKit2 zoom APIs.
        - Switch uses of float for the zoom APIs to use double.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithPageNamespace:]):
        (-[BrowserWindowController validateMenuItem:]):
        (-[BrowserWindowController validateUserInterfaceItem:]):
        (-[BrowserWindowController currentZoomFactor]):
        (-[BrowserWindowController setCurrentZoomFactor:]):
        (-[BrowserWindowController canZoomIn]):
        (-[BrowserWindowController zoomIn:]):
        (-[BrowserWindowController canZoomOut]):
        (-[BrowserWindowController zoomOut:]):
        (-[BrowserWindowController canResetZoom]):
        (-[BrowserWindowController resetZoom:]):
        (-[BrowserWindowController toggleZoomMode:]):
        * MiniBrowser/mac/MainMenu.xib:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):

2010-09-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix crash in DRT in standalone mode

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::loadNextTestInStandAloneMode):

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        Update for changes to the Bundle API to allow separate control of page and text zoom
        levels.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):

2010-09-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Support click event for notifications
        https://bugs.webkit.org/show_bug.cgi?id=44836

        Add support for simulateDesktopNotificationClick by calling
        back to DumpRenderTreeSupportQt.cpp.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-10  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Update queue status when patches fail their first land attempt
        https://bugs.webkit.org/show_bug.cgi?id=45583

        Add a few more _update_status calls to make it more obvious if a patch is 
        being retried because tests failed.

        * Scripts/webkitpy/tool/commands/queues.py:

2010-09-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] MiniBrowser crashes with multiply windows when closing one of them
        https://bugs.webkit.org/show_bug.cgi?id=45536

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::BrowserView): Reference the context instead of adopting it
        because it can be shared across different views.

2010-09-10  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r67241.
        http://trac.webkit.org/changeset/67241
        https://bugs.webkit.org/show_bug.cgi?id=44709

        Accidentally committed.

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        deduplicate-tests should be runnable from any WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=44709

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-10  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r67216.
        http://trac.webkit.org/changeset/67216
        https://bugs.webkit.org/show_bug.cgi?id=44709

        Broke

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        deduplicate-tests should be runnable from any WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=44709

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-09  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        Hook up LayoutTestController.setMockDeviceOrientation() in Chromium DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=45460

        This enables DumpRenderTree to run layout tests for DeviceOrientation.

        Also declare the LayoutTestController destructor out-of-line.
        Otherwise the implicit destructor would cause compiler errors because
        of the OwnPtr<WebKit::WebDeviceOrientationClientMock> member.

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

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

        Unreviewed, rolling out r67119.
        http://trac.webkit.org/changeset/67119
        https://bugs.webkit.org/show_bug.cgi?id=45505

        Extra newlines in results (Requested by tony^work on #webkit).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (printResponseDescription):
        (printNodeDescription):
        (printRangeDescription):
        (WebViewHost::shouldBeginEditing):
        (WebViewHost::shouldEndEditing):
        (WebViewHost::shouldInsertNode):
        (WebViewHost::shouldChangeSelectedRange):
        (WebViewHost::shouldDeleteRange):
        (WebViewHost::shouldApplyStyle):
        (WebViewHost::didBeginEditing):
        (WebViewHost::didChangeSelection):
        (WebViewHost::didChangeContents):
        (WebViewHost::didEndEditing):
        (WebViewHost::decidePolicyForNavigation):
        (WebViewHost::didCancelClientRedirect):
        (WebViewHost::didStartProvisionalLoad):
        (WebViewHost::didReceiveServerRedirectForProvisionalLoad):
        (WebViewHost::didFailProvisionalLoad):
        (WebViewHost::didCommitProvisionalLoad):
        (WebViewHost::didFinishDocumentLoad):
        (WebViewHost::didHandleOnloadEvents):
        (WebViewHost::didFailLoad):
        (WebViewHost::didFinishLoad):
        (WebViewHost::didChangeLocationWithinPage):
        (WebViewHost::willSendRequest):
        (WebViewHost::didReceiveResponse):
        (WebViewHost::didFinishResourceLoad):
        (WebViewHost::didFailResourceLoad):
        (WebViewHost::didDisplayInsecureContent):
        (WebViewHost::didRunInsecureContent):
        (WebViewHost::printFrameDescription):

2010-09-09  Michael Saboff  <msaboff@apple.com>

        Unreviewed, adding myself to committers list.

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

2010-09-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Implement layoutTestController.dumpResourceResponseMIMETypes in Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=45479

        Implement layoutTestController.dumpResourceResponseMIMETypes (modelled after
        implementation in ResourceLoadDelegate in the Mac port).

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpResourceResponseMIMETypes):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::setShouldDumpResourceResponseMIMETypes):
        (LayoutTestController::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::shouldDumpResourceResponseMIMETypes):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didReceiveResponse):

2010-09-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Daniel Bates.

        svn-apply tries to delete directories it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=45424

        isDirectoryEmptyForRemoval had the wrong check. If an item in the
        directory is itself a directory, then the directory is definitely
        not empty.

        * Scripts/svn-apply:

2010-09-09  Chris Fleizach  <cfleizach@apple.com>

        Fixing GTK and windows build failure.

        AX: Support AccessibilityTextMarkers in DRT
        https://bugs.webkit.org/show_bug.cgi?id=44778

        * DumpRenderTree/AccessibilityTextMarker.h:
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):

2010-09-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: Support AccessibilityTextMarkers in DRT
        https://bugs.webkit.org/show_bug.cgi?id=44778

        Add AccessibilityTextMarker and AccessibilityTextMarkerRange which encapsulate the AXTextMarkers 
        that WebCore uses when vending information about its VisiblePositions through AX.

        There are a few new methods in AccessibilityUIElement to retrieve and use text markers, and some basic
        methods for encapsulating and checking equality.

        This will allow future bug fixes in the text marker system to be adequately tested.

        * DumpRenderTree/AccessibilityTextMarker.cpp: Added.
        (toTextMarker):
        (isMarkerEqualCallback):
        (markerFinalize):
        (AccessibilityTextMarker::makeJSAccessibilityTextMarker):
        (AccessibilityTextMarker::getJSClass):
        (toTextMarkerRange):
        (isMarkerRangeEqualCallback):
        (markerRangeFinalize):
        (AccessibilityTextMarkerRange::makeJSAccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::getJSClass):
        * DumpRenderTree/AccessibilityTextMarker.h: Added.
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        (AccessibilityTextMarker::AccessibilityTextMarker):
        (AccessibilityTextMarker::~AccessibilityTextMarker):
        (AccessibilityTextMarker::isEqual):
        (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::isEqual):
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (textMarkerRangeForElementCallback):
        (textMarkerRangeLengthCallback):
        (textMarkerRangeForMarkersCallback):
        (startTextMarkerForTextMarkerRangeCallback):
        (endTextMarkerForTextMarkerRangeCallback):
        (accessibilityElementForTextMarkerCallback):
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::textMarkerRangeLength):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: Added.
        (AccessibilityTextMarker::AccessibilityTextMarker):
        (AccessibilityTextMarker::~AccessibilityTextMarker):
        (AccessibilityTextMarker::isEqual):
        (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::isEqual):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::textMarkerRangeLength):
        (AccessibilityUIElement::textMarkerRangeForMarkers):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        * DumpRenderTree/win/DumpRenderTree.vcproj:

2010-08-25  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        don't delete duplicates needed because of intermediate results
        https://bugs.webkit.org/show_bug.cgi?id=44653

        Also, output the full path so we can pipe the output to rm.

        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:

2010-09-09  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] MiniBrowser does not starts properly
        https://bugs.webkit.org/show_bug.cgi?id=45459

        Do not try set up the first window by calling newWindow on a
        newly created BrowserWindow since it creates a new object.
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        * MiniBrowser/qt/main.cpp:
        (main):

2010-09-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Get ImageDiff building on Win32
        https://bugs.webkit.org/show_bug.cgi?id=45353

        * DumpRenderTree/gtk/ImageDiff.cpp:
        (main): Switch from using strtok to g_strsplit.

2010-09-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Modify load method of MiniBrowser's BrowserView class
        https://bugs.webkit.org/show_bug.cgi?id=45442

        Modify load method to take a QString as argument, remove unnecessary QT_VERSION_CHECK.

        * MiniBrowser/qt/BrowserView.cpp:
        (BrowserView::load):
        * MiniBrowser/qt/BrowserView.h:
        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::load):

2010-09-09  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        fix show_results in new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=45413

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

2010-09-08  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] Fix test results server to make sure
        it does not have corrupted data.

        results.json file size coulbe be >1M and we split
        the data into multiple data store entries in this
        case. This patch fixes the issue that the data may
        be corrupted if data store error happens in the middle
        of saving multiple entries.

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

        * TestResultServer/model/datastorefile.py:

2010-09-08  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Fix ignoring return value warning in case of gcc 4.4.4
        https://bugs.webkit.org/show_bug.cgi?id=45384

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testPostURLFile):
        If fwrite have written zero byte then the testPostURLFile function
        returns with false as tempFile can't be opened.
        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):
        Put fwrite function into an if condition without body to avoid
        warning. It is safe because this function writes to the stdout.

2010-09-08  Satish Sampath  <satish@chromium.org>

        Unreviewed, adding myself to committers list.

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

2010-09-08  Hans Wennborg  <hans@chromium.org>

        Unreviewed.

        Adding myself as a committer in committers.py.

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

2010-09-08  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Refactor MiniBrowser 
        https://bugs.webkit.org/show_bug.cgi?id=45173

        Split BrowserWindow into two source files and headers. Remove unnecessary header includes.

        * MiniBrowser/qt/BrowserView.cpp: Added.
        (createNewPage):
        (BrowserView::BrowserView):
        (BrowserView::resizeEvent):
        (BrowserView::load):
        (BrowserView::view):
        * MiniBrowser/qt/BrowserView.h: Added.
        (BrowserView::~BrowserView):
        * MiniBrowser/qt/BrowserWindow.cpp:
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/MiniBrowser.pro:

2010-09-08  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Rename DocLoader to CachedResourceLoader because that's what it does.

        * Scripts/do-webcore-rename:

2010-09-07  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Enable incremental results.json generation for non-layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=45315

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: Enable generate_incremental_results=True by default. (This still keeps to generate results.json.)  Also add a code to upload results json files to the app-engine server.  Need a chromium change to actually start the uploading.

        * TestResultServer/model/jsonresults.py: Make sure we save the file with test_type for incremental cases too.


2010-09-07  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix

        Missed one test in mac_unittest.py in previous change; for some
        reason the method is listed twice. I will fix both for now, but will
        figure this out in a later, not-time-sensitive patch.

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

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

2010-09-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        test-webkitpy: Fix load error of
        webkitpy/layout_tests/port/factory_unittest.py on Win32 Python
        https://bugs.webkit.org/show_bug.cgi?id=45356 Need a short

        * Scripts/webkitpy/layout_tests/port/server_process.py:
          Avoid to import fcntl on win32. Win32 Python doesn't have fcntl
          and we don't use server_process.py on Win32 Python. However
          unittest.py tries to load everything in a module.

2010-09-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kent Tamura.

        Fix regression introduced in previous change to new-run-webkit-tests
        (bug 45090) to not try to run unittests for the Mac implementation
        of the Port interface if we aren't running on a Mac.

        Also fix the overrides implementation mock in the chromium unittests
        to fix the case where there are overrides checked in that cause
        problems.

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

        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py:

2010-09-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: still more unit tests

        Clean up and remove unnecessary code. Biggest notable change is
        moving the chromium-specific imagediff code from port/base to
        port/chromium.

        Add more unit tests for run_webkit_tests.py, port/base.py,
        port/factory.py, port/dryrun.py, and
        layout_package/dump_render_tree_thread.py

        This covers almost all of the generic and test code paths except for
        a few error paths involving invalid or port-specific command line
        arguments, and the code path for uploading results files to the
        buildbots.
        
        https://bugs.webkit.org/show_bug.cgi?id=45090

        * Scripts/webkitpy/layout_tests/data/failures/expected/hang.html: Added.
        * Scripts/webkitpy/layout_tests/data/http/tests/passes/text-expected.txt: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text-expected.txt.
        * Scripts/webkitpy/layout_tests/data/http/tests/passes/text.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text.html.
        * Scripts/webkitpy/layout_tests/data/http/tests/ssl/text-expected.txt: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text-expected.txt.
        * Scripts/webkitpy/layout_tests/data/http/tests/ssl/text.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text.html.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/data/websocket/tests/passes/text-expected.txt: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text-expected.txt.
        * Scripts/webkitpy/layout_tests/data/websocket/tests/passes/text.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/passes/text.html.
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/port_testcase.py: Added.
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-09-07  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Provide a way to trigger a <select multiple> onchange event on changes
        https://bugs.webkit.org/show_bug.cgi?id=45192

        Adds a selector on ObjCController for testing
        -[DOMHTMLSelectElement _activateItemAtIndex:allowMultipleSelection:] and
        its different uses.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController setSelectElement:selectedIndex:allowingMultiple:]):

2010-09-07  James Robinson  <jamesr@chromium.org>

        Rubber-stamped by Dimitri Glazkov.

        Move myself from the committer to the reviewer list.

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

2010-09-07  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Make a public flag for how DRT generates bitmaps on Linux
        https://bugs.webkit.org/show_bug.cgi?id=45133

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

2010-09-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Implement --check-layout-test-sys-deps
        https://bugs.webkit.org/show_bug.cgi?id=45283

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Check --check-layout-test-sys-deps and call checkLayoutTestSystemDependencies().
        * DumpRenderTree/chromium/TestShell.h: Declare checkLayoutTestSystemDependencies().
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (checkLayoutTestSystemDependencies): Add an empty implementation.
        * DumpRenderTree/chromium/TestShellMac.mm:
        (checkLayoutTestSystemDependencies): Add an empty implementation.
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (checkLayoutTestSystemDependencies): Port similar function of test_shell.

2010-09-07  Jessie Berlin  <jberlin@apple.com>

        Unreviewed. Mac build fix.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowObjectForFrame):

2010-09-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Indicate which one of the ScriptWorlds for a Frame the Window Object has been cleared for
        https://bugs.webkit.org/show_bug.cgi?id=45217
        
        Make WebKitTestRunner work with this change.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        Make sure the ScriptWorld here is the normal world, since that is no longer being done in
        WebFrameLoaderClient.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-09-07  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix.

        webkit-patch command to find the ports covering a specific layout test
        https://bugs.webkit.org/show_bug.cgi?id=42832

        * Scripts/webkitpy/layout_tests/port/chromium.py: Don't assume the
        tests are present when building the expectations. This is needed
        for the unittests.

2010-09-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Adam Barth.

        webkit-patch command to find the ports covering a specific layout test
        https://bugs.webkit.org/show_bug.cgi?id=42832

        To use it: webkit-patch skipped-ports some/layout/test.html

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-09-07  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [NRWT] Add temp directory to all running drivers.
        https://bugs.webkit.org/show_bug.cgi?id=45261

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

2010-09-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium/DRT] Empty out user stylesheet after each test run.
        https://bugs.webkit.org/show_bug.cgi?id=45282

        This should significantly cut down on the number of the mysterious flaky tests
        whose diffs looked like the page was blown up to a very lage size. This
        was indeed the dirty work of platform/mac/fast/loader/user-stylesheet-fast-path.html,
        which set the base body font to 100px.

        Since the user stylesheet was never reset, _all_ pixel tests that ran after it in
        the same thread failed.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings): Set user stylesheet to an empty URL.

2010-09-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Do not generate pixel results for text/plain resources
        https://bugs.webkit.org/show_bug.cgi?id=45253

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump): Clear shouldGeneratePixelResults flag for text/plain.

2010-09-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Kent Tamura.

        print out correct error when a DRT thread dies in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=45281

        Not sure why, but with the parens, python 2.6.5 on Linux
        gives an error that raise takes 5 arguments and 0 were given.
        Didn't test other platforms or python versions, but putting it
        all on one line fixes it and correctly prints the exception
        from the DRT thread.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-09-06  Eric Seidel  <eric@webkit.org>

        Unreviewed, just adding some emails from lists.webkit.org.

        Update committers.py to include emails from lists.webkit.org
        as found by the validate-committer-lists script.

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

2010-09-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Small code cleanup in DumpRenderTreeGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45213

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts): Made this function do nothing for non-X11 platforms, so we don't
        have to surround the invocation with #ifdefs.
        (useLongRunningServerMode): Added.
        (runTestingServerLoop): Added.
        (initializeGlobalsFromCommandLineOptions): Added.
        (runTest): Removed ifdefs.
        (main): Use new helper functions.

2010-09-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] EventSender should support modifier keys with mouseDown and mouseUp events
        https://bugs.webkit.org/show_bug.cgi?id=45235

        Add support for interpreting the modifier key arguments to the mouseDown and mouseUp
        methods of the EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Allow passing in a modifier bitmask, which will be OR'd
        with the current modifiers.
        (contextClickCallback): Always send no modifiers when preparing the mouse event.
        (gdkModifersFromJSValue): Added, converts a JSValue array into a GDK modifier bitmask.
        (mouseDownCallback): Send in the requested modifiers to prepareMouseButtonEvent.
        (mouseUpCallback): Ditto.

2010-09-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Make Chromium/Mac generate continuous mousewheel events with the same wheelDelta values as Safari/Mac.
        https://bugs.webkit.org/show_bug.cgi?id=45155

        * DumpRenderTree/chromium/EventSender.cpp: Modify Chromium DRT mousewheel event generation to match new behavior on Mac.
        (EventSender::handleMouseWheel):

2010-09-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: remove WebDevToolsAgentClient::forceRepaint which is not used
        https://bugs.webkit.org/show_bug.cgi?id=45179

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-09-05  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Daniel Bates.

        Adding myself as reviewer.

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

2010-09-04  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Teach svn-apply/unapply about svn:mergeinfo
        https://bugs.webkit.org/show_bug.cgi?id=45236

        Recognize the svn:mergeinfo property and ignore it for now.

        Currently, svn-apply/unapply recognize only '+' and '-'
        property changes within a diff. We should add support
        to recognize "Merged" and "Reverse-merged" changes as well.
        Because svn:mergeinfo is metadata that is used only by SVN
        and tends to be error-prone and/or nuisance (*), we will ignore
        it for now.
        (*) See "Parting Thoughts" of <http://www.collab.net/community/subversion/articles/merge-info.html>.

        * Scripts/VCSUtils.pm:
          - Modified parseSvnProperty() to recognize "Merged" and
            "Reverse-merged" as the start of a property value.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl:
          - Added the following unit tests:
            "simple: add svn:mergeinfo"
            "simple: delete svn:mergeinfo"
            "simple: modified svn:mergeinfo"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following unit tests:
            "simple: add svn:mergeinfo"
            "simple: delete svn:mergeinfo"
            "simple: modified svn:mergeinfo"
            "simple: modified svn:mergeinfo using SVN 1.4 syntax"
            "'Merged' change followed by 'Merged' change"
            "'Reverse-merged' change followed by 'Reverse-merged' change"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following unit tests:
            "'Merged' change"
            "'Reverse-merged' change"
            "'Reverse-merged' change followed by 'Merge' change"
            "'Merged' change followed by 'Merge' change"
            "'Reverse-merged' change followed by 'Reverse-merged' change"
            "'Reverse-merged' change followed by 'Reverse-merged' change followed by 'Merged' change"

2010-09-04  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Move test browser to WebKitTools directory
        https://bugs.webkit.org/show_bug.cgi?id=45212

        Follow other ports like QT and GTK which moved the test browser to
        WebKitTools directory.

        * CMakeListsEfl.txt: Added.
        * EWebLauncher/main.c: Added.
        (print_history):
        (zoom_level_set):
        (on_ecore_evas_resize):
        (title_set):
        (viewport_set):
        (on_title_changed):
        (on_progress):
        (on_load_finished):
        (on_toolbars_visible_set):
        (on_toolbars_visible_get):
        (on_statusbar_visible_set):
        (on_statusbar_visible_get):
        (on_scrollbars_visible_set):
        (on_scrollbars_visible_get):
        (on_menubar_visible_set):
        (on_menubar_visible_get):
        (on_tooltip_text_set):
        (on_inputmethod_changed):
        (on_viewport_changed):
        (on_mouse_down):
        (on_focus_out):
        (on_focus_in):
        (on_resized):
        (on_key_down):
        (on_browser_del):
        (on_closeWindow):
        (quit):
        (browserCreate):
        (browserDestroy):
        (closeWindow):
        (main_signal_exit):
        (findThemePath):
        (main):

2010-09-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Set project dependencies so that they build serially. This fixes
        issues when running run-webkit-tests if DRT is not built yet.

        * DumpRenderTree/DumpRenderTree.sln:

2010-09-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Fix reading configuraiton in NWRT to work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=45180

        * Scripts/webkitpy/layout_tests/port/base.py: Added 'perl' argument, because Windows doesn't know what to do
            with the file otherwise.

2010-09-03  Chris Rogers  <crogers@google.com>

        Unreviewed

        Add myself to the committers list
        https://bugs.webkit.org/show_bug.cgi?id=45189

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

2010-09-03  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        http/tests/inspector/console-xhr-logging.html and http/tests/inspector/resource-har-conversion.html are failing on chromium win bot
        Changed MIME type for .js to application/x-javascript for consistency with apache used on other platforms.
        https://bugs.webkit.org/show_bug.cgi?id=45137

        * Scripts/webkitpy/layout_tests/port/lighttpd.conf:

2010-09-03  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Add feature detection support to NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=41842

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added.

2010-09-03  Hironori Bono  <hbono@chromium.org>

        Reviewed by Kent Tamura.

        Adds textInputController.hasSpellingMarker() to avoid using pixel tests for spellchecking tests
        and implements it for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=41832

        * DumpRenderTree/mac/TextInputController.m: Added [TextInputController hasSpellingMarker:length:]
        and bind it so we can call it from JavaScript.
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController hasSpellingMarker:length:]):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add a unit test for commit-queue retries
        https://bugs.webkit.org/show_bug.cgi?id=45162

        I think commit-queue retries are not correctly avoiding
        build and test on retries.  So I started testing the code.
        Unfortunately this test did not find the bug.  But now
        that we have the test we might as well keep it.
        I also fixed a broken import in validate-committer-lists.

        * Scripts/validate-committer-lists:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-09-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependency to base/task.h and base/timer.h
        https://bugs.webkit.org/show_bug.cgi?id=45091

        Task.{cpp,h} introduces a simpler version of Chromium
        base/task.h. It doesn't have TupleN and Method.

        * DumpRenderTree/DumpRenderTree.gypi:
         Add Task.cpp and Task.h
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::DRTDevToolsAgent):
        (DRTDevToolsAgent::reset):
        (DRTDevToolsAgent::asyncCall):
        (DRTDevToolsAgent::frontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        (DRTDevToolsAgent::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::DRTDevToolsClient):
        (DRTDevToolsClient::~DRTDevToolsClient):
        (DRTDevToolsClient::reset):
        (DRTDevToolsClient::asyncCall):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        (DRTDevToolsClient::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::reset):
        (EventSender::scheduleAsynchronousClick):
        * DumpRenderTree/chromium/EventSender.h:
        (EventSender::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::WorkQueue::processWorkSoon):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::taskList): Added to use MethodTask<T>.
        (LayoutTestController::WorkQueue::taskList): Added to use MethodTask<T>.
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (deferredDisplayDispatch):
        (NotificationPresenter::show):
        * DumpRenderTree/chromium/Task.cpp: Added.
        * DumpRenderTree/chromium/Task.h: Added.

2010-09-02  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Hook up LayoutTestController.setMockDeviceOrientation() on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=43181

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):

2010-08-31  Adam Roben  <aroben@apple.com>

        Fix flashiness when resizing the browser window on Windows

        Reviewed by Sam Weinig.

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::wndProc): Override WM_ERASEBKGND so Windows won't
        periodically fill the window with white.

2010-09-02  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Implement [continuous]MouseScrollBy() on Chromium, and partly on GTK.
        https://bugs.webkit.org/show_bug.cgi?id=45073

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::mouseScrollBy):
        (EventSender::continuousMouseScrollBy):
        (EventSender::sendCurrentTouchEvent):
        (EventSender::handleMouseWheel):
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseScrollByCallback):
        (continuousMouseScrollByCallback):

2010-09-01  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        Land a patched version of r66542 - change TestRunner to have an
        separate cleanup method and fix the ordering of cleanup between
        TestRunner and the printing module, and then wrap everything in a
        try/finally block to ensure reliable cleanup without needing to
        rely on stuff happening in the destructor of the TestRunner.

        Also refactor run_webkit_tests.run() to be much smaller and cleaner
        by creating a bunch of helper methods and moving more stuff into
        the TestRunner class.

        This fixes the crash at the end of the linux test run of
        new-run-webkit-tests (and undoes the rollout in 66547).

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

        * Scripts/webkitpy/layout_tests/data/failures/expected/exception.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/keyboard.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-09-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Fix TestNetscapePlugIn to compile without access to QuickDraw private headers.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:

2010-09-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Have kill-old-processes kill debug and release variants of WebKit2WebWebProcess
        and WebKitTestRunner.

        * BuildSlaveSupport/win/kill-old-processes:

2010-09-01  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Remove obsolete include path from DumpRenderTree.pro

        * DumpRenderTree/qt/DumpRenderTree.pro:

2010-09-01  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QWebPage::allowGeolocationRequest should be async API
        https://bugs.webkit.org/show_bug.cgi?id=41364

        Implements new async API for geolocation permission similar to
        Notification. WebPage maintains list of geolocation permission request
        QtWebkit and set's when LayoutTestController gets the access from test JS

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::cancelPermission):
        (WebCore::WebPage::permissionSet):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::geolocationPermissionSet):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setGeolocationPermissionCommon):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-09-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Auto-generate WebKit2 forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=44692

        * MiniBrowser/qt/BrowserWindow.h: use source style includes
        * MiniBrowser/qt/MiniBrowser.pro: add missing include paths
        * Scripts/enumerate-included-framework-headers: Removed.

2010-08-31  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Adam Barth.

        Allow Ctrl+C inside Bugzilla::fetch_bug_dictionary
        https://bugs.webkit.org/show_bug.cgi?id=44789

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-08-31  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Barth.

        ews: Add support for EFL-EWS
        https://bugs.webkit.org/show_bug.cgi?id=44982

        * QueueStatusServer/model/queues.py: Add "efl-ews" to queues list.
        * Scripts/webkitpy/common/config/ports.py: Define a EflPort class
        and add it to the ports dict.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py: Define a
        EflEWS class.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Add
        a test case for the EFL EWS.

2010-08-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42195
        <rdar://problem/8186761> WebKitTestRunner needs to support layoutTestController.setXSSAuditorEnabled

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: (WTR::LayoutTestController::setXSSAuditorEnabled):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added setXSSAuditorEnabled, calling through to an WKBundle private method. Calling this method
        makes WebProcess use a different value for this preference than UIProcess thinks it uses.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetStateToConsistentValues):
        Reset xssAuditorEnabled. Even though the value doesn't change, this calls through to WebProcess,
        which forgets its override.

2010-08-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKitTestRunner needs layoutTestController.addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=42680

        WebKitTestRunner needs layoutTestController.addUserScript
        https://bugs.webkit.org/show_bug.cgi?id=42681

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::addUserScript):
        (WTR::LayoutTestController::addUserStyleSheet):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-08-31  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r66542.
        http://trac.webkit.org/changeset/66542
        https://bugs.webkit.org/show_bug.cgi?id=44902

        r66542 - the weird logging dependencies in Python stuck again ...

        * Scripts/webkitpy/layout_tests/data/failures/expected/exception.html: Removed.
        * Scripts/webkitpy/layout_tests/data/failures/expected/keyboard.html: Removed.
        * Scripts/webkitpy/layout_tests/data/passes/error-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/passes/error.html: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-31  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Tony Chang.

        Implementing LayoutTestController::markerTextForListItem() in Chromium's DRT.

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

2010-08-31  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests

        Add more unit tests for new-run-webkit-tests; we now cover all but
        the most obscure code paths in the generic code. We still need to
        add coverage for the http server and web socket paths, and add better
        coverage of the platform-specific logic. Note that the rebaselining
        tool is still not well tested.

        Also clean up some of the configuration logic for the printing
        module and the way it interacts with the Python logging module; that
        is a crufty interface, to be certain.
        
        https://bugs.webkit.org/show_bug.cgi?id=44902

        * Scripts/webkitpy/layout_tests/data/failures/expected/exception.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/keyboard.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/error.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        * Scripts/check-for-global-initializers: Add a file that ends up having global initializers
        in a debug build when built with certain compilers.

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Isolate all GTK+ typedefs into one file
        https://bugs.webkit.org/show_bug.cgi?id=44900

        * DumpRenderTree/gtk/EventSender.h: Remove GTK+ typedefs.

2010-08-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Show more status on queue status pages
        https://bugs.webkit.org/show_bug.cgi?id=44938

        I upped the number of status lines from 6 to 15 --
        this has been bugging me for a while...

        I also disabled showing the chromium-win EWS queue
        since it's been down for almost 5 months now.

        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/queuestatus.py:
        * QueueStatusServer/model/queues.py:

2010-08-31  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Read command line arguments and open them as URLs in new windows
        https://bugs.webkit.org/show_bug.cgi?id=44944

        Extend MiniBrowser to accept command line arguments and open them as URLs in new browser windows.

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

2010-08-31  Adrian Perez  <aperez@igalia.com>

        Reviewed by Martin Robinson.

        Support scripts to run Buildbot slaves under daemontools (gtk related)
        https://bugs.webkit.org/show_bug.cgi?id=40053

        * BuildSlaveSupport/gtk: Added.
        * BuildSlaveSupport/gtk/README: Added.
        * BuildSlaveSupport/gtk/buildbot: Added.
        * BuildSlaveSupport/gtk/buildbot/log: Added.
        * BuildSlaveSupport/gtk/buildbot/log/run: Added.
        * BuildSlaveSupport/gtk/buildbot/run: Added.
        * BuildSlaveSupport/gtk/crashmon: Added.
        * BuildSlaveSupport/gtk/crashmon/crashmon: Added.
        * BuildSlaveSupport/gtk/crashmon/log: Added.
        * BuildSlaveSupport/gtk/crashmon/log/run: Added.
        * BuildSlaveSupport/gtk/crashmon/run: Added.
        * BuildSlaveSupport/gtk/daemontools-buildbot.conf: Added.
        * BuildSlaveSupport/gtk/pulseaudio: Added.
        * BuildSlaveSupport/gtk/pulseaudio/run: Added.
        * BuildSlaveSupport/gtk/xvfb: Added.
        * BuildSlaveSupport/gtk/xvfb/log: Added.
        * BuildSlaveSupport/gtk/xvfb/log/run: Added.
        * BuildSlaveSupport/gtk/xvfb/run: Added.

2010-08-27  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Notifications should support a click event.
        Adds necessary hooks to chromium's DRT so that clicks on desktop notifications
        can be simulated during a layout test.  Requires storing a list of active
        notifications so that they can be referred to later for clicking.
        https://bugs.webkit.org/show_bug.cgi?id=44800

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::simulateDesktopNotificationClick):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::simulateClick):
        (NotificationPresenter::show):
        (NotificationPresenter::cancel):
        (NotificationPresenter::objectDestroyed):
        * DumpRenderTree/chromium/NotificationPresenter.h:

2010-08-30  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        Add missing parts of didFinishDocumentLoadForFrame
        https://bugs.webkit.org/show_bug.cgi?id=44913

        * MiniBrowser/mac/BrowserWindowController.m:
        (didFinishDocumentLoadForFrame): Added
        (-[BrowserWindowController awakeFromNib]): Updated struct
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Rearranged function ptr
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Updated struct

2010-08-30  Vangelis Kokkevis  <vangelis@chromium.org>

        Unreviewed: Add myself to the list of Committers.

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

2010-08-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Fix fast/notifications/notifications-display-close-events.html failure
        https://bugs.webkit.org/show_bug.cgi?id=44585

        Apply http://crrev.com/48893. We should dispatch display events
        asynchronously.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (deferredDisplayDispatch):
        (NotificationPresenter::show):

2010-08-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        allow ports with windowed plugins to support windowless plugin tests

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

        Ports that implement plugins windowed by default need to have a way of
        supporting plugin tests that assume the plugin is windowless. Add this
        feature to the tests and support it in the webkit test plugin. Also
        add mouse and keyboard event logging to the webkit-test plugin on Unix.

        Unskip the following tests on Qt:

        plugins/mouse-events.html
        plugins/keyboard-events.html
        plugins/mouse-events-fixedpos.html

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginSetProperty):
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_handle_event):

2010-08-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after addition of fileapi directory in WebCore.

        * wx/build/settings.py:

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Fixed compilation error, now that we have included the
        GtkVersioning.h we have to remove some version dependent code from
        EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] gdk_display_get_core_pointer and gdk_device_get_core_pointer
        are deprecated
        https://bugs.webkit.org/show_bug.cgi?id=44787

        We have replaced GtkVersioning.cpp with GtkVersioning.c and
        created a function (getDefaultGDKPointerDevice) to get the pointer
        of the window with the new APIs. We added that function to DRT and
        copyandpaste unit test.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent):
        (mouseMoveToCallback):
        (keyDownCallback):
        * GNUmakefile.am:

2010-08-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add new window menu to MiniBrowser

        Implement newWindow function and add a menu item for opening new window in MiniBrowser.

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::newWindow):
        * MiniBrowser/qt/BrowserWindow.h:
        * MiniBrowser/qt/main.cpp:
        (main):

2010-08-29  James Robinson  <jamesr@chromium.org>

        Reviewed by David Levin.

        Make failing the download step fail the build
        https://bugs.webkit.org/show_bug.cgi?id=44298

        If the download step fails on a test bot, this ensures that
        the build goes red instead of only the download step going red
        and the overall build staying green.

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

2010-08-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependency to base/keyboard_codes.h
        https://bugs.webkit.org/show_bug.cgi?id=44847

        * DumpRenderTree/chromium/EventSender.cpp:
         Use webkit_support::VKEY_* instead of base::VKEY_*.

2010-08-29  Darin Adler  <darin@apple.com>

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

        * Scripts/prepare-ChangeLog: Only prepend namespaces to non-empty
        function names.

2010-08-26  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Darin Adler.

        [iExploder] Add new CSS Properties and HTML Attributes
        https://bugs.webkit.org/show_bug.cgi?id=44746

        Updated the files with the update-iexploder-cssproperties script
        and manually readded the -webkit-binding CSS Property to the list.

        * iExploder/htdocs/cssproperties.in:
        * iExploder/htdocs/htmlattrs.in:
        * iExploder/htdocs/htmltags.in:

2010-08-26  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Darin Adler.

        Fix Coverage build after the addition of ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=44744

        ANGLE is using libtool to build a static library and the version of
        libtool on Leopard refuses to handle the -fprofile-arcs and -ftest-coverage
        parameters. The easiest way to handle this is to not build ANGLE with
        coverage information.

        This is achieved by applying the XCode options for each project
        separately and exclude ANGLE.

        * Scripts/build-webkit: Remove -framework AppKit due link errors.
        * Scripts/webkitdirs.pm: Do not apply the XCode options for ANGLE.

2010-08-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after directory addition.

        * wx/build/settings.py:

2010-08-28  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Add AX notification for childrenChanged
        https://bugs.webkit.org/show_bug.cgi?id=44472

        * DumpRenderTree/chromium/AccessibilityController.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::reset):
        (AccessibilityController::getRootElement):
        (AccessibilityController::dumpAccessibilityNotifications):
        * DumpRenderTree/chromium/AccessibilityController.h:
        (AccessibilityController::shouldDumpAccessibilityNotifications):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didChangeAccessibilityObjectChildren):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-08-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update commit-queue failure message
        https://bugs.webkit.org/show_bug.cgi?id=44798

        The commit-queue auto-restarts itself and has for a very long time.
        No need for people to email me to request a restart anymore.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-07-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Add JavaScript API to allow a page to go fullscreen.
        rdar://problem/6867795
        
        Added basic full screen support to DumpRenderTree: when a webView requests
        that DumpRenderTree go "full screen", just call the provided callback listener object's
        will/did Enter/Exit full screen methods.  Also, register a new user default which 
        enables full screen support.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:supportsFullscreenForElement:]):
        (-[UIDelegate webView:enterFullscreenForElement:listener:]):
        (-[UIDelegate webView:exitFullscreenForElement:listener:]):

2010-08-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Unreviewed. Add myself to the committers list.

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

2010-08-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Pavel Feldman.

        [DRT/Chromium] Fix inspector test failures
        https://bugs.webkit.org/show_bug.cgi?id=44748

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::createClientMessageLoop):
          Returns a valid WebKitClientMessageLoop instance
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-26  Jon Honeycutt  <jhoneycutt@apple.com>

        Add Windows WebKit2 Tester to buildbot
        <rdar://problem/7887703>

        Reviewed by Dan Bernstein.

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

2010-08-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Needs DRT queueLoadHTMLString and setDeferMainResourceLoad-implementations
        https://bugs.webkit.org/show_bug.cgi?id=42152

        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadHTMLStringItem::invoke): Implementation using
        webkit_web_frame_load_string().

2010-08-25  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/8334338> run-webkit-tests sometimes hangs when using
        WebKitTestRunner (44331)

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        The hang occurs when WebKitTestRunner begins launching the WebKit2
        web process then exits before it finishes launching. Work around this by
        looking for the --print-supported-features argument and exiting without
        creating the web process.

2010-08-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Tony Chang.

        new-run-webkit-tests: add rebaselining tests for test_expectations
        
        This patch adds more unit tests for the rebaselining code in the
        test_expectations module. It doesn't add any tests for
        rebaseline_chromium_webkit_tests itself; that will come some other
        time.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:

2010-08-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        Ignore new soup API that we decided to merge into the soup backend
        while it is being cooked. It follows the libsoup style, and will
        be removed from WebKit as soon as it is merged into libsoup.

        * Scripts/webkitpy/style/checker.py:

2010-08-26  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DumpRenderTree runs only one test from command mode
        https://bugs.webkit.org/show_bug.cgi?id=44012

        Enables support to run multiple test files and single
        folder containing html files in stand alone mode

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::processArgsLine):
        (WebCore::DumpRenderTree::loadNextTestInStandAloneMode):
        (WebCore::DumpRenderTree::processLine):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setStandAloneMode):
        (WebCore::DumpRenderTree::isStandAloneMode):
        * DumpRenderTree/qt/main.cpp:
        (main):

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Updating webkitpy test expectations.

        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        fix the always squash git config
        https://bugs.webkit.org/show_bug.cgi?id=44651

        Fix help text and apparently underscores are not allowed
        in git config keys.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/steps/commit.py:

2010-08-25  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * Scripts/commit-log-editor: Fix perl warning for people who have no
        value for SVN_LOG_EDITOR or CVS_LOG_EDITOR.

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        stop blocking commits when the bots are red
        https://bugs.webkit.org/show_bug.cgi?id=44644

        This check currently is just annoying. It doesn't actually
        help keep the tree green. We can always add it back later
        if we decide the tree is generally more green.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:

2010-08-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION: media/video-loop.html is timing out on the commit-queue Leopard Bot
        https://bugs.webkit.org/show_bug.cgi?id=38912

        I know of nothing else to do but skip all media tests for the cq.

        * Scripts/webkitpy/tool/steps/runtests.py:

2010-08-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests for test_expectations
        This adds unit tests to cover (almost?) all of the non-rebaselining
        functionality.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:

2010-08-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests

        This change adds more unit tests for the image_diff, test_failures,
        and test_files modules, bringing them to 100% coverage (and adds a
        couple tests to run_webkit_tests while we're at it).

        This test also turns on the "dryrun" port for testing when run on
        the mac, increasing coverage in a few other places.

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

        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/checksum.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum.html.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_check-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_check-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_check.html: Copied from WebKitTools/Scripts/webkitpy/layout_tests/data/failures/expected/missing_image.html.
        * Scripts/webkitpy/layout_tests/data/failures/expected/timeout.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/data/resources/README.txt: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: add more unit tests for layout_package/printing.py

        This change adds more unit tests to get the test coverage to 100%
        for the printing module. This code is actually pretty crufty and
        has some layering violations that need to be cleaned up but I'll
        save that for another CL after we get all the unit tests written and
        we fix the multithreading issues. At least now we'll be able to tell
        if we break things.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests should respect set-webkit-configuration
        https://bugs.webkit.org/show_bug.cgi?id=44633

        Moves the getting of the configuration into the base Port so that
        chromium ports use it as well. In the downstream chromium port,
        this should still just return Release.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-08-25  Tony Chang  <tony@chromium.org>

        Not reviewed, changing svn props for a script.

        * Scripts/deduplicate-tests: Added properties svn:executable and svn:eol-style.

2010-08-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WebKit2 from core builders
        https://bugs.webkit.org/show_bug.cgi?id=44625

        This builder was added to the core builders by accident.  It doesn't
        appear to be green enough to be a core builder yet.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-08-19  Adam Roben  <aroben@apple.com>

        Test that NP_Initialize and NP_GetEntryPoints are called in the
        correct order

        The order differs between Mac and Windows (see r38858).

        Fixes <http://webkit.org/b/44270> <rdar://problem/8330393> Crash in
        NP_Initialize when loading QuickTime when running
        plugins/embed-attributes-setting.html in WebKit2 on Windows

        Reviewed by John Sullivan.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Added a CRASH macro and
        a boolean to record whether NP_GetEntryPoints has been called.
        (NP_Initialize): Crash on Windows if NP_GetEntryPoints hasn't been
        called yet. This matches Flash and QuickTime's behavior.
        (NP_GetEntryPoints): Crash on Mac if NP_Initialize hasn't been called
        yet. This matches Silverlight's behavior.

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Cairo and EFL port shouldn't depend on glib.
        https://bugs.webkit.org/show_bug.cgi?id=44354

        Replace occurrences of GRefPtr and adoptGRef with PlatformRefPtr and
        adoptPlatformRef.

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

2010-08-25  Ojan Vafai  <ojan@chromium.org>

        Fix order of Timothy's email address. The script, and
        other tools all assume that the first email is the bugzilla address.

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

2010-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Pavel Feldman.

        [DRT/Chromium] Fix 26 inspector test crashes
        https://bugs.webkit.org/show_bug.cgi?id=44580

        - DRTDevToolsAgent has a reference to the main WebView. So we
          should not clear it in closeDevTools() and should clear it in
          ~TestShell().
        - DRTDevToolsClient has a reference to a DevTools WebView and no
          way to update it. So we should delete DRTDevToolsClient instances
          in closeDevTools().

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

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        unicode(Exception(\u"0x1234")) is busted in python 2.5, disable tests which hit this
        https://bugs.webkit.org/show_bug.cgi?id=44584

        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue and EWS bots should report all failures
        https://bugs.webkit.org/show_bug.cgi?id=41820

        Right now commit-queue/EWS only report failures when the
        patch under testing fails.  We should report all failures
        to the status server so that we can diagnose when the bots
        are wedged w/o needing to log into the machines.

        I also reduced the amount of data we upload since we've seen
        timeouts during status upload.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove HTML5 parser testing infrastructure now that we don't need it
        https://bugs.webkit.org/show_bug.cgi?id=44581

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (initializeGlobalsFromCommandLineOptions):
        * Scripts/old-run-webkit-tests:
        * Scripts/test-html5-parser: Removed.

2010-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix 28 inspector test crashes
        https://bugs.webkit.org/show_bug.cgi?id=44574

        Reset DevToolsClient and DevToolsAgent before closing a DevTools
        WebView in order to avoid accessing to a deleted WebView instance.

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

2010-08-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: clean up code for test_types, test_failures

        Add a bunch of unit tests for webkitpy.layout_tests.test_types and
        webkitpy.layout_tests.layout_package.test_failures, and remove
        some dead code and otherwise clean up things.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * 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/test_type_base_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:

2010-08-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: revise unit testing strategy for test failures
    
        This change revamps the way we store test data for new-run-webkit-tests.
        Previously we had a few copies of test files from the main test tree.
        Now we have a bunch of completely fake test data and use the test
        data to generate different kinds of test failures, getting
        much better coverage.

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

        * Scripts/webkitpy/layout_tests/data/failures/expected/crash.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/image_checksum.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_image.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/missing_text.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/text-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/expected/text.html: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/failures/unexpected/text-image-checksum.html: Added.
        * Scripts/webkitpy/layout_tests/data/image/canvas-bg.html: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.checksum: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.png: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom.html: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/crash-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/crash.html: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/missing-expectation.html: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/passing-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/misc/passing.html: Removed.
        * Scripts/webkitpy/layout_tests/data/passes/image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/passes/image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/passes/image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/image.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/platform_image.html: Added.
        * Scripts/webkitpy/layout_tests/data/passes/text-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/passes/text.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.checksum: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.png: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/platform/test/passes/platform_image-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/passes/platform_image-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/passes/platform_image-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt:
        * Scripts/webkitpy/layout_tests/data/text/article-element-expected.txt: Removed.
        * Scripts/webkitpy/layout_tests/data/text/article-element.html: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:

2010-08-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        speed up new-run-webkit-tests unit tests

        Add a --no-record-results flag that turns off generating the JSON
        results file on every test run. Generating the file requires us to
        fetch the old results down from the bots, which can be slow. This
        flag is off by default.
    
        Reduce the sleep time in wait_for_threads_to_finish from 0.1s to 0.01s.
    
        These changes together shorten the test cycle from ~4.5s to ~1.5s
        - a 3x speedup.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-24  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] fix the platform result fallback order on mac/win
        https://bugs.webkit.org/show_bug.cgi?id=44483

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

2010-08-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Set a device to the event struct when building with GTK+ 3.x, it's
        mandatory.

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

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
        https://bugs.webkit.org/show_bug.cgi?id=44534

        Fix two double-frees introduced in my previous commit.

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback): Copy the event before using it again.
        (keyDownCallback): Ditto.

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
        https://bugs.webkit.org/show_bug.cgi?id=44534

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Use gdk_event_new and reference the reference the GdkWindow
        when setting it on the event. It is dereferenced by gdk_event_free(...).
        (contextClickCallback): Ditto.
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.
        (mouseMoveToCallback): Ditto.
        (mouseWheelToCallback): Ditto.
        (sendOrQueueEvent): Take a GdkEvent* instead of a GdkEvent.
        (dispatchEvent): Ditto. Also free the event when we are done with it.
        (keyDownCallback): Use gdk_event_new and reference the GdkWindow.

2010-08-24  Andras Becsi  <abecsi@webkit.org>

        [Qt] WebKit2 build fix.

        * Scripts/enumerate-included-framework-headers:
        Remove stray global option form sed.

2010-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Jeremy Orlow.

        [DRT/Chromium] Support for IndexedDB tests
        https://bugs.webkit.org/show_bug.cgi?id=44490

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

2010-08-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The 64-bit Release bot is showing crashes on tests that use mouse buttons
        https://bugs.webkit.org/show_bug.cgi?id=44465

        Initialize the axes field of mouse button and motion events to null.
        This is the value that should be used for events originating from the
        mouse device.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Initalize button event axes field to null.
        (mouseMoveToCallback): Initialize motion event axes field to null.

2010-08-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65703.
        http://trac.webkit.org/changeset/65703
        https://bugs.webkit.org/show_bug.cgi?id=44460

        "Causing lots of crashes on Snow Leopard when running the
        layout tests" (Requested by eseidel2 on #webkit).

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize):
        (NP_GetEntryPoints):

2010-08-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Layout tests do not run when using WebKitTestRunner in a Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=44409

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        Use InjectedBundle_debug.dll when building Debug.

2010-08-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] run-launcher fails if WebKitGTK+ compiled with GTK+-3.0 support
        https://bugs.webkit.org/show_bug.cgi?id=42026

        If a GTK+ 3.x build is present return that as the library to use,
        otherwise fallback to the GTK+ 2.x build.

        * Scripts/webkitdirs.pm:

2010-08-23  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        [Qt] Find needed forwarding headers for WebKit2 automatically
        https://bugs.webkit.org/show_bug.cgi?id=44336

        * MiniBrowser/qt/BrowserWindow.cpp: Use normal (not framework style) includes here.
        The new script does not satisfy the needs of this file however using normal includes
        is generally better here.
        * MiniBrowser/qt/MiniBrowser.pro: Added include paths.
        * Scripts/enumerate-included-framework-headers: Enumerates headers included from the 
        given frameworks by files in the current directory (and subdirectories).
        In the future this needs to be rewritten in perl for being able to use on Windows.

2010-08-22  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Qt test browser: enable a QGLWidget viewport with a command line argument
        https://bugs.webkit.org/show_bug.cgi?id=43010

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):

2010-08-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove specialized retain/release functions in favor of a single one for WKTypeRefs
        https://bugs.webkit.org/show_bug.cgi?id=44386

        * MiniBrowser/mac/AppDelegate.m:
        (didRecieveMessageFromInjectedBundle):
        (didNavigateWithNavigationData):
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        * MiniBrowser/mac/BrowserStatisticsWindowController.m:
        (-[BrowserStatisticsWindowController initWithThreadedWKContextRef:processWKContextRef:]):
        (-[BrowserStatisticsWindowController dealloc]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithPageNamespace:]):
        (-[BrowserWindowController fetch:]):
        (-[BrowserWindowController windowWillClose:]):
        (-[BrowserWindowController applicationTerminating]):
        (closePage):
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowObjectForFrame):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::goToURL):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::~PlatformWebView):

2010-08-20  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebKit does not build with Python 2.3
        https://bugs.webkit.org/show_bug.cgi?id=44373

        Replaced the function sorted() by a call to sort()
        on the entry list.
        The function sorted() has been added to Python 2.4.
        The function method sort() of List works with older
        versions of Python.

        * Scripts/create-html-entity-table:

2010-08-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector tests were disabled for GTK.
        https://bugs.webkit.org/show_bug.cgi?id=43977

        * Scripts/old-run-webkit-tests: Set the WEBKIT_INSPECTOR_PATH to the appropriate
        path before running tests.

2010-08-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        svn-apply doesn't detect empty line with Windows line endings
        after property value
        https://bugs.webkit.org/show_bug.cgi?id=43981

        Part 2 of 2

        Add unit tests that were not landed in the first commit.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added the following test cases:
            "SVN: binary file (isBinary true) using Windows line endings"
            "SVN: property diff, followed by file change diff using Windows line endings"
            "SVN: two consecutive property diffs using Windows line endings"
            "SVN: binary file with executable bit change usng Windows line endings"
            "SVN: binary file followed by property change on different file using Windows line endings"
            "SVN: binary file followed by file change on different file using Windows line endings"
            "SVN: file change diff with property change, followed by property change diff using Windows line endings"
            "SVN: file change diff with property change, followed by file change diff using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following test cases:
            "add svn:executable, followed by empty line and start of next diff using Windows line endings"
            "add svn:executable, followed by empty line and start of next property diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next property diff using Windows line endings"
            "add svn:executable, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '+' change, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch using Windows line endings"
            "single-line '+' with trailing new line using Windows line endings"
            "single-line '+' with trailing new line, followed by empty line and start of binary patch using Windows line endings"
            "single-line '-' change with trailing new line, and single-line '+' change using Windows line endings"
            "multi-line '-' change with trailing new line, and multi-line '+' change using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following test cases:
            "single-line '-' change followed by empty line with Windows line endings"
            "multi-line '+' change and start of binary patch with Windows line endings"

2010-08-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        svn-apply doesn't detect empty line with Windows line endings
        after property value
        https://bugs.webkit.org/show_bug.cgi?id=43981

        Fixes an issue where an empty line following the property value
        in an SVN property change diff would not be detected if it had
        Windows line endings (i.e. ended in CRLF). Hence it was consumed
        as if it was part of a multi-line property value. 

        * Scripts/VCSUtils.pm:
          - Modified parseSvnPropertyValue() to detect empty line
            with Windows line endings.
          - Added toWindowsLineEndings().
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added the following test cases:
            "SVN: binary file (isBinary true) using Windows line endings"
            "SVN: property diff, followed by file change diff using Windows line endings"
            "SVN: two consecutive property diffs using Windows line endings"
            "SVN: binary file with executable bit change usng Windows line endings"
            "SVN: binary file followed by property change on different file using Windows line endings"
            "SVN: binary file followed by file change on different file using Windows line endings"
            "SVN: file change diff with property change, followed by property change diff using Windows line endings"
            "SVN: file change diff with property change, followed by file change diff using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
          - Added the following test cases:
            "add svn:executable, followed by empty line and start of next diff using Windows line endings"
            "add svn:executable, followed by empty line and start of next property diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next diff using Windows line endings"
            "multi-line '+' change, followed by empty line and start of next property diff using Windows line endings"
            "add svn:executable, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '+' change, followed by empty line and start of binary patch using Windows line endings"
            "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch using Windows line endings"
            "single-line '+' with trailing new line using Windows line endings"
            "single-line '+' with trailing new line, followed by empty line and start of binary patch using Windows line endings"
            "single-line '-' change with trailing new line, and single-line '+' change using Windows line endings"
            "multi-line '-' change with trailing new line, and multi-line '+' change using Windows line endings"
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Added the following test cases:
            "single-line '-' change followed by empty line with Windows line endings"
            "multi-line '+' change and start of binary patch with Windows line endings"

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Fix Mac build after Windows WebKit2 changes for Netscape Plug-ins

        * MiniBrowser/mac/BrowserWindowController.m:
        (decidePolicyForNavigationAction): Updated method signature.
        (decidePolicyForNewWindowAction): Updated method signature.

2010-08-19  Adam Roben  <aroben@apple.com>

        Test that NP_Initialize and NP_GetEntryPoints are called in the
        correct order

        The order differs between Mac and Windows (see r38858).

        Fixes <http://webkit.org/b/44270> <rdar://problem/8330393> Crash in
        NP_Initialize when loading QuickTime when running
        plugins/embed-attributes-setting.html in WebKit2 on Windows

        Reviewed by Sam Weinig.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Added a CRASH macro and
        a boolean to record whether NP_GetEntryPoints has been called.
        (NP_Initialize): Crash on Windows if NP_GetEntryPoints hasn't been
        called yet. This matches Flash and QuickTime's behavior. Crash on Mac
        if NP_GetEntryPoints has been called already. This matches
        Silverlight's behavior.

2010-08-19  Adam Roben  <aroben@apple.com>

        Make build-webkittestrunner build TestNetscapePlugIn on Windows

        Fixes <http://webkit.org/b/44268> <rdar://problem/8330388>

        Reviewed by Sam Weinig.

        * WebKitTestRunner/WebKitTestRunner.sln: Added TestNetscapePlugIn.
        Threaded it in between ImageDiff and InjectedBundleGenerated.

2010-08-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        install rietveld's upload script from a versioned url
        https://bugs.webkit.org/show_bug.cgi?id=44291

        autoinstall expects the file at a given URL to never change.
        In order to be able to update the file, we need to be able to
        change the path.

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-08-19  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        add --webkit_patch_id to reitveld uploads
        https://bugs.webkit.org/show_bug.cgi?id=44289

        This is the first step in having rietveld store which
        patches have been uploaded and getting rid of the
        in-rietveld flag.

        * Scripts/webkitpy/common/net/rietveld.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py:

2010-08-19  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Adjust my status from committer to reviewer
        https://bugs.webkit.org/show_bug.cgi?id=44277

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

2010-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: remove injected script fetcher from test harness.
        https://bugs.webkit.org/show_bug.cgi?id=44266

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: There is no need in resource-based InjectedScript.js source.
        Now that we populate front-end after its onload handler, we don't need
        to install injected script early. Exposing injected script source on the WebCore
        level here.
        https://bugs.webkit.org/show_bug.cgi?id=44029

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::runtimePropertyChanged):
        (DRTDevToolsAgent::delayedFrontendLoaded):
        (DRTDevToolsAgent::frontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        [Gtk] Enable view mode media feature layout test
        https://bugs.webkit.org/show_bug.cgi?id=43278

        Add view mode media feature testing infrastructure, and add
        placeholder methods for the other platforms'
        LayoutTestControllers.

        * DumpRenderTree/LayoutTestController.cpp:
        (setViewModeMediaFeatureCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setViewModeMediaFeature):

2010-08-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Make it so the WebKit2 test slave runs the WebKit2 tests

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

2010-08-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Make run-webkit-tests --webkit-test-runner build DumpRenderTree
        in addition to WebKitTestRunner to get the DumpRenderTreeSupport
        module and the TestNetscapePlugin.

        * Scripts/old-run-webkit-tests:

2010-08-18  Adam Roben  <aroben@apple.com>

        Fix hang when saving crash logs on Windows

        * Scripts/old-run-webkit-tests:
        (setUpWindowsCrashLogSaving):
        (END):
        Pass -s to regtool so it will write the Auto value as a string instead
        of as a number. This was causing a "do you want to debug?" dialog to
        appear.

2010-08-17  Victor Wang  <victorw@chromium.org>

        Unreviewed. Fixed chromium incremental test json upload.
        Quote builder name and test results server in url.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-08-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] [Symbian] Consistently use Q_OS_SYMBIAN to guard all Symbian platform dependencies
        https://bugs.webkit.org/show_bug.cgi?id=44124

        Q_WS_S60 is not defined for Symbian^4 devices as Q_WS_S60 used to guard 
        Avkon UI framework dependencies. Use Q_OS_SYMBIAN everywhere to mark
        Symbian dependencies.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::init):
        (LauncherWindow::toggleFullScreenMode):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):

2010-08-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        new-run-webkit-tests: remove --show-sources option

        --show-sources is pretty much obsolete with --trace everything, so
        I'm removing it.

        Also rename a couple of methods in the TestTextDiff class to make their
        intended visibility (private) more obvious.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * 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:

2010-08-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        remove --fuzzy-image-diff in new-run-webkit-tests (it doesn't work)

        This code bit-rotted at some point more than a year ago, and nobody seems
        to miss it. old-run-webkit-tests has a --tolerance flag that new-run-webkit-tests
        should support instead, making this flag unnecessary anyway.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.py: Removed.

2010-08-17  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Update json results generator to have incremental json including
        results for tests that pass in current run but failed before.

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

        * 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/run_webkit_tests.py:

2010-08-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        fix test-webkitpy, add easy way to find a checkout root

        test-webkitpy currently doesn't work right if run from someplace other
        than the checkout root, and it spews a bunch of debug logging because
        the deduplicate_tests tests contaminates the test environment.

        This patch cleans up the deduplicate_tests unit tests, and creates
        two new methods in scm.py: find_checkout_root() and default_scm(),
        both of which use a single algorithm for guessing what checkout root
        to use if you aren't explicitly told one from a path.

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

        * Scripts/deduplicate-tests:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/main.py:

2010-08-17  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Add support to the test results server for downloading json that
        contains test list only.

        This is for json results generator to generate incremental json
        results so that it includes results not only for tests failed in
        current run, but also tests failed before.

        Also set the results type to "N" (no data) instead of "P" (pass)
        if test results cannot be found in incremental json file.

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

        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2010-08-17  Adam Roben  <aroben@apple.com>

        Use the right path style

        * Scripts/old-run-webkit-tests:

2010-08-17  Adam Roben  <aroben@apple.com>

        Fix typo

        * Scripts/old-run-webkit-tests:

2010-08-17  Adam Roben  <aroben@apple.com>

        Don't hang when running run-webkit-tests as a non-Administrator on
        Vista/7

        * Scripts/old-run-webkit-tests:
        (setUpWindowsCrashLogSaving): Use regtool to set NTSD as the
        post-mortem debugger, rather than using NTSD itself. The latter waits
        for user input when it fails to set the registry values; the former
        does not.

2010-08-17  Adam Roben  <aroben@apple.com>

        Teach run-webkit-tests, DumpRenderTree, and WebKitTestRunner how to
        save crash logs on Windows

        The crash logs are saved to /tmp/layout-test-results and have names
        like CrashLog_02bc_2010-08-17_14-36-20-108.txt.

        Unfortunately, crashes in the WebKit2 web process are recorded as
        time-outs by run-webkit-tests. Fixing this is covered by
        <http://webkit.org/b/44121>.

        Fixes <http://webkit.org/b/37859> <rdar://problem/7883560>
        DumpRenderTree should save a stack trace and/or dump file when it
        crashes

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (exceptionFilter):
        (main):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::exceptionFilter):
        (WTR::TestController::platformInitialize):
        These changes set up an exception filter that prints #CRASHED to
        stderr, then lets the exception propagate normally. This allows
        run-webkit-tests to detect when we've crashed even when a post-mortem
        debugger attaches to the process.

        * Scripts/old-run-webkit-tests:
        (top level): Declared some variables used by the crash-log-saving
        code.
        (openDumpTool): Copy _NT_SYMBOL_PATH into the clean environment so
        that the post-mortem debugger has access to it.
        (toCygwinPath): Added. This is the opposite of toWindowsPath.
        (readFromDumpToolWithTimer): If the dump tool prints #CRASHED to
        stderr, consider it a crash.
        (setUpWindowsCrashLogSaving): Added. Saves the current post-mortem
        debugger, then sets ntsd as the post-mortem debugger. ntsd is
        configured to save a crash log and then quit automatically.
        (END): Added. Restores the previous post-mortem debugger when the
        script exits.

2010-08-17  Victor Wang  <victorw@chromium.org>

        Reviewed by ojan@chromium.org.

        Update test results server:
        1. Normalize test results and times after merging (prune tests where
           all runs pass or do not have data, truncate all test items to max
           number of builds)
        2. times should be int not string.
        3. when inserting a new test item, should keep old data regardless
           whether or not they have same item type with new one.

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

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2010-08-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add WebKit2 Mac tester to buildbot.

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

2010-08-16  Paul Sawaya  <psawaya@apple.com>

        Reviewed by Chris Marrin.

        Added shader validation via ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=42405

        Added ANGLE to webkit build

        * Scripts/build-webkit:

2010-08-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, do not build WebCore as a convenience library as this leads to
        errors in the Win build w/export symbols and causes problems with DOM bindings
        debugging in gdb.

        * DumpRenderTree/wscript:
        * Scripts/build-webkit:
        * wx/browser/wscript:
        * wx/build/settings.py:
        * wx/build/waf_extensions.py:

2010-08-16  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * WebKitTestRunner/TestController.cpp:
        (WTR::createOtherPage): Initialize the contentsSizeChanged member.
        (WTR::TestController::initialize): Ditto.

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Handle content size change in WebKit2
        Re-landing after fix.

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

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Initialize WKPageUICallback::contetsSizeChanged to 0.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Initialize WKPageUICallback::contetsSizeChanged to 0.

2010-08-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65419.
        http://trac.webkit.org/changeset/65419
        https://bugs.webkit.org/show_bug.cgi?id=44053

        Broke the Windows build (Requested by bbandix on #webkit).

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Handle content size change in WebKit2

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

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]): Initialize WKPageUICallback::contetsSizeChanged to 0.
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): Initialize WKPageUICallback::contetsSizeChanged to 0.

2010-08-16  Ariya Hidayat  <ariya@sencha.com>

        Add my new email address to committers.py.

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

2010-08-16  Zoltan Horvath  <zoltan@webkit.org>

        Add my old e-mail addresses to committers.py.

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

2010-08-15  Jon Honeycutt  <jhoneycutt@apple.com>

        WebEditorClient::didBeginEditing is never called in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42939

        Reviewed by Sam Weinig.

        * WebKitTestRunner/PlatformWebView.h:
        Declare focus().

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Focus the PlatformWebView.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::focus):
        Stubbed.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::focus):
        Focus the view.

2010-08-15  Jon Honeycutt  <jhoneycutt@apple.com>

        run-webkit-tests should not strip editing callbacks when using
        WebKitTestRunner on Windows
        https://bugs.webkit.org/show_bug.cgi?id=44000

        Reviewed by Mark Rowe.

        * Scripts/old-run-webkit-tests:
        Leave $stripEditingCallbacks undefined until we look for command-line
        arguments. If using WebKit2, set it to 0 if not explicity set on the
        command line. Later, set it to isCygwin() to match old behavior if it is
        not yet defined.

2010-08-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, remove define always set to the correct value by wtf/Platform.h.

        * wx/build/settings.py:

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

        Reviewed by Kenneth Rohde Christiansen.

        [GTK] autogen.sh not executed if build-webkit options change
        https://bugs.webkit.org/show_bug.cgi?id=42266

        Rerun autogen.sh in situations where the arguments to build-webkit have
        changed since the previous build. This will fix some issues on the bots
        where the build does not notice changes to default build-webkit arguments.

        * Scripts/webkitdirs.pm: Add special logic for detecting changes to build-webkit arguments.

2010-08-14  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Another fix to support python 2.3.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        * Scripts/webkitpy/thirdparty/simplejson/decoder.py:
         - It looks like our simplejson is version 1.7.3 which
           should be python 2.3 compatible.  But someone modified
           our copy slightly from the original source.
           I've removed the relative import in hopes this fixes
           the problem.

2010-08-13  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Build fix only.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        * Scripts/create-html-entity-table:
         - Hack sys.path to avoid executing 2.5 dependent python
           on systems (like chromium-win and Tiger) which do not have 2.5 python.

2010-08-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename some concepts in HTML entity search to be more self-documenting
        https://bugs.webkit.org/show_bug.cgi?id=44004

        Reflect name change in generator script.

        * Scripts/create-html-entity-table:

2010-08-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        A script for generating the C++ state data structure describing all the
        entities from a JSON description.

        * Scripts/create-html-entity-table: Added.

2010-08-13  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Rewrite new-run-webkit-test's wait_for_threads_to_finish loop to
        check for exceptions on all threads, not just the first thread.
        
        This change also changes the logging behavior for wedged threads
        to only dump the stacks of threads that are actually wedged.

        Refactor the thread classes in the dump_render_tree_thread module
        to make the contract between TestRunner and TestShellThread clearer.

        Added a bunch of unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=38561

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-08-13  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Add test_expectations.txt syntax checker to check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=43899

        Just utilizing layout_tests/layout_package/test_expectations.py for checking
        the syntax of test_expectations.txt.
        This change also moves tab checking class from style/checkers/text.py to
        style/checkers/common.py for sharing code.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/common.py:
        * Scripts/webkitpy/style/checkers/common_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py: Added.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Added.
        * Scripts/webkitpy/style/checkers/text.py:
        * Scripts/webkitpy/style_references.py:

2010-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner does not correctly resize WebView for W3C SVG tests
        https://bugs.webkit.org/show_bug.cgi?id=43945

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::sizeWebViewForCurrentTest):
        Allow for a Windows-style path.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::resizeTo):
        Call SetWindowPos to resize the view window.

2010-08-12  David Levin  <levin@chromium.org>

        Build break fix.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Removed usage
        of a variable that doesn't exist in the class.

2010-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to run tests without using native controls
        https://bugs.webkit.org/show_bug.cgi?id=43772

        Reviewed by Sam Weinig.

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

        * WebKitTestRunner/TestController.h:
        Declare platformInitializeContext().

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitializeContext):
        Stubbed.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitializeContext):
        Call WKContextSetShouldPaintNativeControls() to disable native control
        drawing.

2010-08-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        WebKitTestRunner should be more aggressive about ensuring consistent state between tests
        https://bugs.webkit.org/show_bug.cgi?id=43653

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::isTestRunning):
        (WTR::InjectedBundle::):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::stopLoading):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        Don't do any work if we are not currently running a test.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toCF):
        Add conversion function for WKURLRef -> CFURLRef

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::runTest):
        (WTR::TestController::didFinishLoadForFrame):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestInvocation.h:
        Move resetting code to TestController.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::runUntil):
        * WebKitTestRunner/mac/TestInvocationMac.mm: Removed.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::runUntil):
        * WebKitTestRunner/win/TestInvocationWin.cpp: Removed.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Move runUntil to TestController.

2010-08-12  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed.

        Adding myself to the committers list.

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

2010-08-12  Hayato Ito  <hayato@chromium.org>

        Reviewed by Tony Chang.

        Merge pretty printers for gdb.
        https://bugs.webkit.org/show_bug.cgi?id=43850

        We need to update webcore.py because basic string classes have moved to WTF from WebCore.
        It is good timing to merge webcore.py and wtf.py and name it 'webkit.py'.
        webcore.py is left for backward compatibility.

        * gdb/webcore.py:
        * gdb/webkit.py: Added.
        * gdb/wtf.py: Removed.

2010-08-11  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] add google-chrome layout test result directories
        https://bugs.webkit.org/show_bug.cgi?id=43889

        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/google_chrome.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:

2010-08-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Disable accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=43894

        Disable accelerated compositing because DRT is not ready for
        it. This change fixes hundreds of test crashes on Windows and
        Linux.

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

2010-08-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Adding my Collabora personality to the list.

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

2010-08-11  Martin Robinson  <mrobinson@igalia.com>

        Adding myself as a reviewer.

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

2010-08-11  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Perl warnings when running commit-log-editor
        https://bugs.webkit.org/show_bug.cgi?id=43856

        Fixes Perl warnings introduced by the patch for Bug #40548.

        Perl doesn't have symbolic names for True/False. Instead, we
        should use boolean values. Moreover, the variable installedEditorApplication
        is not be used and should be renamed builtEditorApplication so that it
        uses the existing machinery to set the commit log editor application.

        * Scripts/commit-log-editor:

2010-08-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Trying waiting for httpd lock in the EWS
        https://bugs.webkit.org/show_bug.cgi?id=43833

        If this works, we can probably run the tests on the mac-ews, which
        would be very exciting.  :)

        * Scripts/webkitpy/tool/steps/runtests.py:

2010-08-11  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Eric Seidel.

        Check in a script to list redundant test outputs.
        https://bugs.webkit.org/show_bug.cgi?id=37630

        If e.g. platform/mac-leopard is missing an expected test output, we
        fall back on platform/mac.  This means it's possible to grow redundant
        test outputs, where we have the same expected data in both a platform
        directory and another platform it falls back on.
        (original patch by Evan Marting <evan@chromium.org> https://bugs.webkit.org/attachment.cgi?id=53398)

        * Scripts/deduplicate-tests: Added.
        * Scripts/webkitpy/layout_tests/deduplicate_tests.py: Added.
        * Scripts/webkitpy/layout_tests/deduplicate_tests_unittest.py: Added.

2010-08-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: after switching between QWebView and QGraphicsWebView, rotation actions get broken
        https://bugs.webkit.org/show_bug.cgi?id=43853

        LauncherWindow::createChrome is connecting menu itens to WebViewGraphicsBased's slots directly.
        It behaviors badly when user launches the QtTestBrowser in QWebView mode, since then switching to
        QGraphicsWebView mode, createChrome is not called again, and menu items end up not getting connected
        to slots at all.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::animatedFlip):
        (LauncherWindow::animatedYFlip):
        * QtTestBrowser/launcherwindow.h:

2010-08-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] QtTestBrowser: switching between QWebView and QGraphicsWebView modes is broken
        https://bugs.webkit.org/show_bug.cgi?id=43851

        All window options data (including the bool holding if the view is either QWebView or
        QGraphicsWebView based) is stored in m_windowOptions, a class member of LauncherWindow.
        When toggle the view from QWebView to QGraphicsWebView based (and vice-versa), we were
        not updating LauncherWindow::WindowOptions::m_useGraphicsView bit, and then things were
        getting broken.

        Patch addresses this issue.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::toggleWebView):
        (LauncherWindow::toggleAcceleratedCompositing):

2010-08-10  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: lazy instantiate "YRotation" state machine and related objects
        https://bugs.webkit.org/show_bug.cgi?id=43831

        Only instantiate QStateMachine and friends associated to the YRotation action on demand.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::animatedYFlip):

2010-08-11  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        Improved editor options for prepare-ChangeLog and commit-log-editor
        https://bugs.webkit.org/show_bug.cgi?id=40548

        * Scripts/commit-log-editor: Split editor strings on spaces so EDITOR
        values like "xed --launch --wait" work properly.

        * Scripts/prepare-ChangeLog: Added a new CHANGE_LOG_EDITOR so we can
        use a command line tool with the $openChangeLogs feature.

2010-08-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove InjectDispatch.js
        https://bugs.webkit.org/show_bug.cgi?id=43835

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:

2010-08-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        webkit-patch should refuse to run under Win32 Python
        https://bugs.webkit.org/show_bug.cgi?id=40962

        Given that there are lots of places in webkit-patch's code that
        assume unix-style filenames (forward slashes), webkit-patch fails
        with weird file-not-found errors when run under a native windows
        Python. It would be nice if we just trapped this and errored out
        at the beginning, rather than producing unpredictable errors.

        * Scripts/webkit-patch:

2010-08-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.
        
        Chromium build fix for r65107.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):

2010-08-10  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/tests/media/video-cookie.html fails
        https://bugs.webkit.org/show_bug.cgi?id=42240

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAlwaysAcceptCookies): create the
        SoupCookieJar if it does not exist. Otherwise the accept policy
        won't be set.

2010-08-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add suspendAnimations/resumeAnimation API to DRT
        https://bugs.webkit.org/show_bug.cgi?id=43733
        
        Adds suspendAnimations() and resumeAnimations() to LayoutTestController.
        Calls functions with the same names on AnimationController for the 
        mainFrame.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/LayoutTestController.cpp:
        (suspendAnimationsCallback):
        (resumeAnimationsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::suspendAnimations):
        (LayoutTestController::resumeAnimations):

2010-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium/DRT] Enable saving layout test results.
        https://bugs.webkit.org/show_bug.cgi?id=43796

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added more
            parameters to the new-run-webkit-tests, including the name
            of the test results server.

2010-08-10  Jian Li  <jianli@chromium.org>

        More chromium build fix.

        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        (MockSpellCheck::spellCheckWord):
        (MockSpellCheck::initializeIfNeeded):
        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::grantPermission):
        (NotificationPresenter::show):
        (NotificationPresenter::checkPermission):

2010-08-10  Jian Li  <jianli@chromium.org>

        Chromium build fix.

        * DumpRenderTree/chromium/MockSpellCheck.cpp:
        * DumpRenderTree/chromium/NotificationPresenter.cpp:

2010-08-10  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Update test results server merge logic so the aggregated
        results and times are updated for tests that are
        in aggragated json but not in incremental json.

        Also update unittest to test this case.

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

        * TestResultServer/model/jsonresults.py:
        * TestResultServer/model/jsonresults_unittest.py:

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: proper set scene rect

        When resizesToContents is ON scene's rect is set to the boundary of
        the mainFrame. However, navigating to other web page should keep resizing
        scene's rect according to the new document loaded. Patch addresses this issue.

        Now resizesToContents and scrolling properly work on QtTestBrowser.

        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setPage):
        (WebViewGraphicsBased::contentsSizeChanged):
        (WebViewGraphicsBased::setResizesToContents):
        (WebViewGraphicsBased::resizeEvent):
        * QtTestBrowser/webview.h:

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: Clean up LauncherWindow code.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow): Moves applyPrefs methods call from the constructor to init().
        (LauncherWindow::init): Fixed comments.
        (LauncherWindow::applyPrefs): Move the method around.
        (LauncherWindow::createChrome): Move more code of this method around, for grouping, and fixing up comments.

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser: make reset-zooming to animate when tiled backing store is on.

        It gets control+0 the same visual effect as control++ or control-.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::toggleZoomTextOnly):

2010-08-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtTestBrowser:: make m_zoomLevels a static member.

        Not all instances of LauncherWindow need its own m_zoomLevel.

        * QtTestBrowser/launcherwindow.cpp:
        * QtTestBrowser/launcherwindow.h:

2010-08-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add zoom support for injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=43759

        Use zoom factor SPI to implement zoom related eventSender functions.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset): Reset zoom mode and level for each test.

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Speculative chromium build fix III.

        * DumpRenderTree/chromium/MockSpellCheck.h:
        * DumpRenderTree/chromium/NotificationPresenter.h:
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::addClearHeader):
        (WebViewHost::clearHeaders):

2010-08-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        increase the number of test results that we save
        https://bugs.webkit.org/show_bug.cgi?id=43763

        Now that we do incremental uploads, we can increase the number of
        results that we save for http://test-results.appspot.com/dashboards/flakiness_dashboard.html.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-08-09  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] DRT error print statement incorrectly tries to print a FILE*
        https://bugs.webkit.org/show_bug.cgi?id=43747

        * DumpRenderTree/chromium/ImageDiff.cpp:
        (writeFile): pass the correct pointer.

2010-08-09  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Upload incremental test results json to server by default.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-08-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bots wait 2 minutes between patches
        https://bugs.webkit.org/show_bug.cgi?id=43731

        * Scripts/webkitpy/tool/bot/queueengine.py:
         - Don't sleep after failures.  This was a hold-over from
           an earlier design.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
         - EWS bots were not properly reporting true/false from process_work_item.
           They were always returning None, thus false, thus always logging
           as a failure and sleeping 2 minutes after each patch.

2010-08-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Stub out EventSender for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43703

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Add ability to pass javascript arguments to the wrapped object.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Added.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp: Added.
        (WTR::EventSendingController::create):
        (WTR::EventSendingController::EventSendingController):
        (WTR::EventSendingController::~EventSendingController):
        (WTR::EventSendingController::wrapperClass):
        (WTR::setExceptionForString):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::contextClick):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::textZoomIn):
        (WTR::EventSendingController::textZoomOut):
        (WTR::EventSendingController::zoomPageIn):
        (WTR::EventSendingController::zoomPageOut):
        (WTR::EventSendingController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::eventSendingController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        Add stubbed out EventSenderController.

        * WebKitTestRunner/InjectedBundle/GCController.h:
        Remove incorrect comment.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:
        Add new files.

2010-08-08  Kent Tamura  <tkent@chromium.org>

        Unreviewed, trivial fix.

        Fix "WindowsError: [Error 32] The process cannot access the file
        because it is being used by another process" introduced by r64959.

        * BuildSlaveSupport/test-result-archive:

2010-08-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        Chromium buildbot: Avoid "zip" command dependency
        https://bugs.webkit.org/show_bug.cgi?id=43470

        * BuildSlaveSupport/test-result-archive:
         For Chromium port, creates a zip archive with zipfile package of Python
         instead of external "zip" command. We'd like to avoid additional
         command installation.

2010-08-08  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner should add the QuickTime dir to the PATH environment
        variable
        https://bugs.webkit.org/show_bug.cgi?id=43686

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::addQTDirToPATH):
        Copied from DRT.
        (WTR::TestController::platformInitialize):
        Call addQTDirToPath().
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:
        Link to shlwapi.lib for SHGetValue.

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        WebKitTestRunner needs layoutTestController.dumpTitleChanges
        <rdar://problem/8213861>
        https://bugs.webkit.org/show_bug.cgi?id=42683

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpTitleChanges):
        (WTR::LayoutTestController::shouldDumpTitleChanges):

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs to print onunload handler information
        <rdar://problem/8213831>
        https://bugs.webkit.org/show_bug.cgi?id=42703

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add additional loader client functions need to complete WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43684

        Remove unnecessary and jarring underscores as well.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowObjectForFrame):
        (didCreatePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        (WTR::InjectedBundlePage::didCancelClientRedirectForFrame):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didChangeLocationWithinPageForFrame):
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        (WTR::InjectedBundlePage::didHandleOnloadEventsForFrame):
        (WTR::InjectedBundlePage::didDisplayInsecureContentForFrame):
        (WTR::InjectedBundlePage::didRunInsecureContentForFrame):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt):
        (WTR::InjectedBundlePage::shouldBeginEditing):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-08-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Made the references
        to JSGCController.{cpp,h} relative to the build root.

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs GCController
        <rdar://problem/8213834>
        https://bugs.webkit.org/show_bug.cgi?id=42701

        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/InjectedBundle/Bindings/GCController.idl: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h:
        (WTR::setProperty):
        * WebKitTestRunner/InjectedBundle/GCController.cpp: Added.
        (WTR::GCController::create):
        (WTR::GCController::GCController):
        (WTR::GCController::~GCController):
        (WTR::GCController::wrapperClass):
        (WTR::GCController::collect):
        (WTR::GCController::collectOnAlternateThread):
        (WTR::GCController::getJSObjectCount):
        (WTR::GCController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/GCController.h: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::bundle):
        (WTR::InjectedBundle::gcController):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::keepWebHistory):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundle.vcproj:

2010-08-05  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to be able to set the font smoothing type
        https://bugs.webkit.org/show_bug.cgi?id=43406

        Reviewed by Adam Roben.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        Set the font smoothing level to
        kWKFontSmoothingLevelNoSubpixelAntiAliasing to match DRT.

2010-08-06  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix a missed variable rename.

        Unreviewed.

        * Scripts/old-run-webkit-tests:

2010-08-06  Jon Honeycutt  <jhoneycutt@apple.com>

        mac-wk2/Skipped should be used on Windows when running regression tests
        https://bugs.webkit.org/show_bug.cgi?id=43494

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests:
        If the platform is win-wk2, also read the mac-wk2 skipped list.

2010-08-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Should revoke scheduled tasks
        https://bugs.webkit.org/show_bug.cgi?id=43560

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Calls RevokeAll().
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): Calls DRTDevToolsAgent::reset() and DRTDevToolsClient::reset().

2010-08-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Fix the DRT build on Mac OS X

        * DumpRenderTree/qt/DumpRenderTree.pro:

2010-08-06  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Pavel Feldman.

        Rietvield's upload.py moved to a different location.
        https://bugs.webkit.org/show_bug.cgi?id=43613

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-05-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        QueueStatusServer needs better queue-status pages
        https://bugs.webkit.org/show_bug.cgi?id=39562

        The primary goal of this patch is to display queue
        positions somewhere on the site so that it's easier
        for commit-queue users to know when their pach will
        be landed.  I also tried to improve the root page
        to be more useful than the previous wall of status text.

        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/recentstatus.html:

2010-08-05  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        Add option to generate/upload incremental json results to test result server.
        Also refactor the json results generator unittest code to test
        incremental and aggregated json results.

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

        * 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/run_webkit_tests.py:

2010-08-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Scripts/build-webkit:

2010-08-05  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Add speech input controller mock in WebKit and a layout test.
        https://bugs.webkit.org/show_bug.cgi?id=43477

        Added LayoutTestController::setMockSpeechInputResultCallback method.

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockSpeechInputResultCallback): Wrapper invoking the member function.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockSpeechInputResult): Sets the mock result.
        (LayoutTestController::speechInputController): Creates the mock controller.
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::speechInputController): Creates the mock controller.
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockSpeechInputResult): dummy method.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockSpeechInputResult): dummy method.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockSpeechInputResult): dummy method.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: dummy method.
        (LayoutTestController::setMockSpeechInputResult):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: dummy method.
        (LayoutTestController::setMockSpeechInputResult):

2010-08-04  Adam Roben  <aroben@apple.com>

        Fix the path to TestNetscapePlugin's directory on Windows

        Fixes <http://webkit.org/b/43513> WebKitTestRunner on Windows fails to
        load TestNetscapePlugin

        Reviewed by Jon Honeycutt.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        TestNetscapePlugin is in a TestNetscapePlugin[_Debug] directory that's
        next to WebKitTestRunner.exe. Previously we were passing the directory
        that contains WebKitTestRunner.exe. Also fixed some leaks.

2010-08-05  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style returns non-zero when patch is entirely minus lines.
        https://bugs.webkit.org/show_bug.cgi?id=38169

        * Scripts/check-webkit-style:
        Check whether a patch contains modified files that are entirely minus lines.
        * Scripts/webkitpy/style/filereader.py:
        Add a variable that holds number of files that contain only deleted lines.
        * Scripts/webkitpy/style/patchreader.py:
        Count up modified files that contain only deleted lines.

2010-08-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        DevTools: get rid of delayed command dispatching on front-end side.

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

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::detach):
        (DRTDevToolsAgent::frontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::~DRTDevToolsClient):
        (DRTDevToolsClient::sendFrontendLoaded):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2010-08-04  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Fixes check-webkit-style false positive on "new uint32_t."
        https://bugs.webkit.org/show_bug.cgi?id=43077

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove base/linked_ptr.h dependency
        https://bugs.webkit.org/show_bug.cgi?id=43472

        Replace linked_ptr<TestNavigationEntry> with RefPtr<TestNavigationEntry>.
        We need to use RefPtr<> because m_pendingEntry points an object in
        m_entries or not in m_entries.

        * DumpRenderTree/chromium/TestNavigationController.cpp:
        (TestNavigationEntry::create): Added.
        (TestNavigationController::activeEntry):
        (TestNavigationController::didNavigateToEntry):
        (TestNavigationController::discardPendingEntry):
        (TestNavigationController::insertEntry):
        (TestNavigationController::navigateToPendingEntry):
        * DumpRenderTree/chromium/TestNavigationController.h:
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::loadURLForFrame):
         Use TestNavigationEntry::create().
        (WebViewHost::updateURL):
         Use RefPtr<>.
        (WebViewHost::updateSessionHistory):
         Remove unnecessary static_cast<>.

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a problem that "archived test results" step doesn't work on Chromium buildbots
        https://bugs.webkit.org/show_bug.cgi?id=43333

        * BuildSlaveSupport/test-result-archive:
          - Make layoutTestResultsDir local and pass it to archiveTestResults()
          - Adjust layoutTestResultsDir for Chromium

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        NRWT: websocket_server startup detection failure
        https://bugs.webkit.org/show_bug.cgi?id=43466

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
         Increase timeout value: 5 second -> 10 second

2010-08-04  Victor Wang  <victorw@chromium.org>

        Reviewed by Ojan Vafai.

        -. Add result.json incremental merging functionality to test results app engine.
        -. blobstore is not suitable for AE data merging and there is no API to
           programatically edit existing blob or write a new one yet, so replace blobstore
           with datastore. If file is oversize (>1000*1000 bytes), store file data in
           multiple datastore entries.
        -. Fix styles.

        Test: jsonresults_unittest to test merging logics.

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

        * TestResultServer/handlers/dashboardhandler.py:
        * TestResultServer/handlers/menu.py:
        * TestResultServer/handlers/testfilehandler.py:
        * TestResultServer/main.py:
        * TestResultServer/model/dashboardfile.py:
        * TestResultServer/model/datastorefile.py: Added.
        * TestResultServer/model/jsonresults.py: Added.
        * TestResultServer/model/jsonresults_unittest.py: Added.
        * TestResultServer/model/testfile.py:
        * TestResultServer/templates/uploadform.html:

2010-08-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] [QtTestBrowser] Remove unneeded QAction class members
        https://bugs.webkit.org/show_bug.cgi?id=43518

        LauncherWindow class has two totally unneeded class members: m_flopAnimated and
        m_flipYAnimated. Also, in initializeView method there are some dead code block
        trying to connect them at the wrong time, when they have not been instanciated.

        This patch:

        - removes the two cited class members in favor of local variables in createChrome method;
        - removes the dead code block.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        * QtTestBrowser/launcherwindow.h:

2010-08-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann and Kenneth Christiansen.

        [Qt] [QtTestBrowser] Clean up static and global menu state controls
        https://bugs.webkit.org/show_bug.cgi?id=43448

        After LauncherWindow class was refactored out of from main.cpp, all global variables that
        were hanging in main.cpp became temporarily public static class members of newly added
        LauncherWindow class. This design was not properly handling the initial purpose of the
        global variables: newly created launcher windows should inherit the settings of the originating
        one.

        In order to properly fix the problem, this patch introduces a WindowOptions class, as a POD. It
        comprises all data needed to handling the goal described above.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::LauncherWindow): The class now receives an optional WindowOptions pointer object
                                          holding all user settings configured in the menus and command line.
                                          It also receices an optional QGraphicsScene points in case we are doing
                                          a "Clone Window".
        (LauncherWindow::init): Removed the usesGraphics parameter because the class member m_userData holds its
                                value.
        (LauncherWindow::initializeView): Ditto.
        (LauncherWindow::createChrome): Changed all references to gXXX to m_userData.XXX
        (LauncherWindow::applyPrefs): Removed the "LauncherWindow* source" parameter. All data needed to properly
                                      apply the preferences is provided by m_userData.
        (LauncherWindow::toggleAcceleratedCompositing): Change gXXX by m_userData.XXX
        (LauncherWindow::toggleResizesToContents): Ditto.
        (LauncherWindow::toggleWebGL): Ditto.
        (LauncherWindow::toggleFrameFlattening): Ditto.
        (LauncherWindow::toggleQGLWidgetViewport): Ditto.
        (LauncherWindow::changeViewportUpdateMode): Ditto.
        (LauncherWindow::showFPS): Ditto.
        (LauncherWindow::newWindow): Changed to pass the userData.
        (LauncherWindow::cloneWindow): Ditto.
        * QtTestBrowser/launcherwindow.h:
        (WindowOptions::WindowOptions):
        * QtTestBrowser/main.cpp:
        (requiresGraphicsView):
        (LauncherApplication::handleUserOptions):
        (main):

2010-08-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for gcc not importing all symbols from convenience libraries.
        Works on 10.6 only for Mac until the build system is reworked. 

        * wx/build/settings.py:

2010-08-04  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Change wording in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=43241

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):

2010-08-04  Aaron Boodman  <aa@chromium.org>

        Reviewed by Eric Seidel.

        prepare-ChangeLog fails mysteriously if curl doesn't support ssl
        https://bugs.webkit.org/show_bug.cgi?id=43460

        * Scripts/prepare-ChangeLog:

2010-08-03  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [DRT] Assertion failed when drag and move a draggable element.
        https://bugs.webkit.org/show_bug.cgi?id=41695

        mouseMoveToX() did call [WebHTMLView mouseDragged] even if dragging started.
        But Cocoa doesn't call mouseDragged() until dragging is done.
        Other part of DumpRenderTree also assumes Cocoa behavior and an assertion
        on UIDelegate failed when mouseDragged() is called during dragging.
        This change eliminated the mouseDragged() call when dragging begins,
        which is implicated by draggingInfo instance.
        
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseMoveToX:Y:]):

        Test: fast/events/dragging-mouse-moves.html
        
2010-08-02  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Adds Geolocation LayoutTests for the case where permission is not granted or denied immediately
        https://bugs.webkit.org/show_bug.cgi?id=40002

        The code in LayoutTestController::setGeolocationPermission() was moved to
        setGeolocationPermissionCommon() to allow each port to provide its own
        implementation of setGeolocationPermission().

        For the Mac port, setGeolocationPermission() notifies the UIDelegate of the
        new permission, so it can call back to WebCore if permission requests are in
        progress and are waiting for a response. A minor fix to the Mac
        MockGeolocationProvider was also required to make sure that the mock provider
        calls back to WebCore when it is first started.

        For other ports, LayoutTestController::setGeolocationPermission() is not
        implemented.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::setGeolocationPermissionCommon):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setGeolocationPermission):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setGeolocationPermission):
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider registerWebView:]):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        (-[UIDelegate setGeolocationPermission:]):
        (-[UIDelegate dealloc]):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setGeolocationPermission):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setGeolocationPermission):

2010-08-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Implement --testshell-startup-dialog
        https://bugs.webkit.org/show_bug.cgi?id=40616

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Check --testshell-startup-dialog, and call openStartUpDialog()
        if it is specfied.
        * DumpRenderTree/chromium/TestShell.h:
          Declare openStartUpDialog().
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (openStartupDialog):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (openStartupDialog):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (openStartupDialog):

2010-08-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependency of base/md5.h
        https://bugs.webkit.org/show_bug.cgi?id=43403

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage): Use wtf/MD5.h

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 6 - LayoutTest and Cleanup

          Allow tests to delete application caches and set application cache
          origin quotas, so they can be tested.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpApplicationCacheDelegateCallbacksCallback): JavaScript callback, delegates to the controller.
        (clearAllApplicationCachesCallback): should delete all application caches.
        (setApplicationCacheOriginQuotaCallback): should set the origin quota for the localhost tests.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpApplicationCacheDelegateCallbacks): accessor to see if application cache callbacks should be output.
        (LayoutTestController::setDumpApplicationCacheDelegateCallbacks): enable or disable debug output when the application cache quota is reached.

          Mac implementation.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::clearAllApplicationCaches): delete application caches.
        (LayoutTestController::setApplicationCacheOriginQuota): set the quota for localhost.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): style fix.
        (-[UIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:]): reset the quota.

          Stub implementations for other platforms.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::clearAllApplicationCaches):
        (LayoutTestController::setApplicationCacheOriginQuota):

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 5 - Refactor Quota Management in WebSecurityOrigin into Managers

          Change old style calls to make use of the managers.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setDatabaseQuota):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]):

2010-08-03  Mark Rowe  <mrowe@apple.com>

        Add a new Leopard build slave to run the release tests.

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

2010-08-03  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to activate the Mac font ascent hack
        https://bugs.webkit.org/show_bug.cgi?id=43404

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        Call WKBundleActivateMacFontAscentHack().

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the default for MathML support so that is is enabled by default.

        * Scripts/build-webkit:

2010-08-03  Sam Weinig  <sam@webkit.org>

        Roll r64566 back in this time with all the overloads in place..

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldInsertNode):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-08-03  Sam Weinig  <sam@webkit.org>

        Rollout r64566. It broke all the WebKit2 tests.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<):
        (WTR::InjectedBundlePage::shouldInsertNode):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/StringFunctions.h: Removed.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL):
        (WTR::WKStringToUTF8):
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-08-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WTR: Move all the utility functions for working with strings to a shared header.
        https://bugs.webkit.org/show_bug.cgi?id=43386

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldInsertNode):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        * WebKitTestRunner/StringFunctions.h: Added.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-08-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] QtTestBrowser not setting preferredContentsSize for resizesToContents
        https://bugs.webkit.org/show_bug.cgi?id=43168

        QGraphicsWebView resizesToContents property has to work together with QWebPage's
        setPreferredContentsSize as stated by the docs. Patch addresses that for QtTestBrowser.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::applyPrefs):
        * QtTestBrowser/webview.cpp:
        (WebViewGraphicsBased::setResizesToContents): Properly handle scene, webview and viewport sizes
                                                      needed when toggle resizesToContents on/off.
        (WebViewGraphicsBased::resizeEvent):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::setCustomLayoutSize): Setter helper.
        (WebViewGraphicsBased::customLayoutSize): Getter helper.

2010-08-03  Jochen Eisinger  <jochen@chromium.org>

        Unreviewed. Adding myself as committer.

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

2010-08-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: Get rid of DevTools RPC.

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

        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp:
        (DRTDevToolsAgent::sendMessageToInspectorFrontend):
        (DRTDevToolsAgent::call):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
        (DRTDevToolsCallArgs::DRTDevToolsCallArgs):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::sendMessageToBackend):
        (DRTDevToolsClient::call):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:

2010-08-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove dependencies to some Chromium headers
        https://bugs.webkit.org/show_bug.cgi?id=43396

        * DumpRenderTree/chromium/CppVariant.h:
         Remove base/basictypes.h because webkit_support.h contains it.
        * DumpRenderTree/chromium/EventSender.cpp:
        (getCurrentEventTimeSec): Use new wrapper function.
        * DumpRenderTree/chromium/TestNavigationController.h:
         Remove base/basictypes.h because webkit_support.h contains it.
        * DumpRenderTree/chromium/TestShell.cpp:
        (dumpHistoryItem): Use new wrapper function.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::cancelledError): Use new wrapper function.
        (WebViewHost::didFailResourceLoad): Use new wrapper function.

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT implement execCommand()
        https://bugs.webkit.org/show_bug.cgi?id=35351

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::execCommand): Implement using webkit_web_view_execute_core_command_by_name.
        (LayoutTestController::isCommandEnabled): Implement using webkit_web_view_is_command_enabled.
        (LayoutTestController::setCacheModel): Move below LayoutTestController::isCommandEnabled.

2010-08-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add alias for run-webkit-tests --webkit-test-runner (run-webkit-tests -2).

        * Scripts/old-run-webkit-tests:

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to support loading custom fonts (via the
        WEBKIT_TESTFONTS environment variable)
        https://bugs.webkit.org/show_bug.cgi?id=42782

        Reviewed by Adam Roben.

        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp:
        (WTR::fontsPath):
        Copied from DRT code. Removed the fallback to DumpRenderTree.resources/,
        as this directory doesn't appear to be created anymore.
        (WTR::activateFonts):
        Loop through the fonts, and call AddFontResourceExW() for each.

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Restore the WebKitTestRunner.sln that was removed, and remove the
        correct one.

        Rubber-stamped by Sam Weinig.

        * WebKitTestRunner/WebKitTestRunner.sln: Added.
        * WebKitTestRunner/win/WebKitTestRunner.sln: Removed.

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Move InjectedBundle.vcproj to where the other WebKitTestRunner vcprojs live.

        Remove the unused WebKitTestRunner.sln.

        Reviewed by Sam Weinig.

        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: Removed.
        * WebKitTestRunner/WebKitTestRunner.sln: Removed.
        * WebKitTestRunner/win/InjectedBundle.vcproj: Added.
        * WebKitTestRunner/win/WebKitTestRunner.sln:

2010-08-02  Sam Weinig  <sam@webkit.org>

        Fix the windows build.

        * WebKitTestRunner/win/main.cpp:

2010-07-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a Skipped list on Windows, and have run-webkit-tests respect it.

        Part of <rdar://problem/8233237> Fill WebKit2 Windows skipped list so
        there are zero tests failing
        https://bugs.webkit.org/show_bug.cgi?id=43374

        Reviewed by Adam Roben.

        * Scripts/old-run-webkit-tests:
        If using WebKitTestRunner and Apple Windows WebKit, set the platform to
        win-wk2. When building the result hierarchy, if the platform is win-wk2,
        add it first to the list of platforms.

2010-08-02  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.setCanOpenWindows
        https://bugs.webkit.org/show_bug.cgi?id=42321

        WebKitTestRunner needs layoutTestController.setCloseRemainingWindowsWhenComplete
        https://bugs.webkit.org/show_bug.cgi?id=42779

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added
        setCanOpenWindows, setCloseRemainingWindowsWhenComplete, and windowCount

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle): Initialize m_mainPage to 0 instead of
        waiting for the first call to didCreatePage.
        (WTR::InjectedBundle::didCreatePage): Set m_mainPage only when the first page
        is created. Put other pages into a map.
        (WTR::InjectedBundle::willDestroyPage): Added code to handle the destruction
        of the main page.
        (WTR::InjectedBundle::closeOtherPages): Added. Closes all the pages other than
        the main page.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Added pageCount and
        closeOtherPages functions.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Don't let pages other than
        the main page affect dumping.
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame): Ditto.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize the new
        m_shouldCloseExtraWindows member.
        (WTR::LayoutTestController::setCanOpenWindows): Added. Empty for now.
        (WTR::LayoutTestController::windowCount): Added.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added setCanOpenWindows, setCloseRemainingWindowsWhenComplete,
        windowCount, shouldCloseExtraWindowsAfterRunningTest, and
        m_shouldCloseExtraWindows.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::shared): Return a pointer to the shared copy, but
        don't allocate and leak it. This seemed cleaner than adding an explicit
        finalize call to go along with the explicit initialize call.
        (WTR::TestController::TestController): Added calls to the initialize and
        run function, which are now done automatically.
        (WTR::TestController::~TestController): Added, since it's called now.
        (WTR::closeOtherPage): Added. Used to close pages other than the main page.
        (WTR::createOtherPage): Added. Used to create pages other than the main page.
        (WTR::TestController::initialize): Added code to set up createOtherPage.
        (WTR::TestController::run): Removed unused return value.
        * WebKitTestRunner/TestController.h: Made constructor and destructor public,
        and initialize and run private. Changed m_mainWebView to be an OwnPtr.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Added a call to setReleasedWhenClosed
        to avoid releasing the window twice. Another way to handle it would be to
        remove the release, but this approach is slightly more robust because it works
        even if some other code calls the close method an extra time.

        * WebKitTestRunner/mac/main.mm:
        (main): Use a stack-allocated TestController object instead of calling
        initalize and run on a globally allocated one.

2010-08-02  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        add myself to the reviewers list
        https://bugs.webkit.org/show_bug.cgi?id=43366

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

2010-08-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cache JSNPObjects and fix bugs in the object map
        https://bugs.webkit.org/show_bug.cgi?id=43368

        Test that we correctly throw exceptions when trying to do things to a JSObject that used to
        wrap an NPObject that came from a plug-in that is now destroyed.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest::Object::getProperty):
        (PluginTest::Object::NP_GetProperty):
        (PluginTest::Object::npClass):
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeObjectFromDestroyedPlugin.cpp: Added.
        (NPRuntimeObjectFromDestroyedPlugin::NPRuntimeObjectFromDestroyedPlugin):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::hasProperty):
        (NPRuntimeObjectFromDestroyedPlugin::ScriptableObject::getProperty):
        (NPRuntimeObjectFromDestroyedPlugin::NPP_GetValue):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] DOM listeners get wrong keycodes for some keys
        https://bugs.webkit.org/show_bug.cgi?id=35170

        Add support to all event senders for simulating keypad insert
        and print screen keys.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::keyDown): Add support for generating keypad insert and print screen.
        * DumpRenderTree/gtk/EventSender.cpp:
        (keyDownCallback): Ditto.
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]): Ditto.
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown): Ditto.
        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback): Ditto.

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Build fix for building against development versions of GTK+. GTK 2.22
        has not yet been released, so these function definitions must be conditionalized
        on the development version.

        * DumpRenderTree/gtk/EventSender.cpp: Fix GTK+ 2.21 build.

2010-08-02  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] use ChromiumDriver on Linux when running webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=43273

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

2010-08-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Always initialize GTK
        https://bugs.webkit.org/show_bug.cgi?id=43327

        Call gtk_init() in order to fix plugin test crash.

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Pass argc/argv to platformInit().
        * DumpRenderTree/chromium/TestShell.h:
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (platformInit): Update parameters, call gtk_init().
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit): Update parameters.
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit): Update parameters.

2010-08-02  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Generate forwarding headers for WebKit2

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

        * Scripts/webkitdirs.pm: Call make on WebKit2/Makefile.DerivedSources.

2010-08-02  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket server should start with SO_REUSEADDR
        https://bugs.webkit.org/show_bug.cgi?id=43329

        Pulls in pywebsocket-0.5.2.
        pywebsocket-0.5.2 includes a small fix to start server with SO_REUSE_ADDR.
        http://code.google.com/p/pywebsocket/source/detail?r=273

        * Scripts/webkitpy/thirdparty/__init__.py: Bump pywebsocket version

2010-08-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove string_util.h dependency
        https://bugs.webkit.org/show_bug.cgi?id=43312

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::pathToLocalResource):
         Use string::find() instead of StartsWithASCII().
        (LayoutTestController::cppVariantToInt32):
         Use strtol() instead of StringToNumber().

2010-08-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to reset frame names for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43316

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-08-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_RemoveProperty
        https://bugs.webkit.org/show_bug.cgi?id=43315

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add NPRuntimeRemoveProperty.cpp
        
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::NPN_GetStringIdentifier):
        (PluginTest::NPN_GetIntIdentifier):
        (PluginTest::NPN_RemoveProperty):
        Add NPN_ helpers.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Support more NPClass functions.

        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp: Added.
        (NPRuntimeRemoveProperty::NPRuntimeRemoveProperty):
        Test for NPN_RemoveProperty.

        (NPRuntimeRemoveProperty::TestObject::hasMethod):        
        (NPRuntimeRemoveProperty::TestObject::invoke):
        Add a testRemoveProperty method.

        (NPRuntimeRemoveProperty::NPP_GetValue):
        Return the test object.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Add NPRuntimeRemoveProperty.cpp

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add an NPObject class template helper to TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=43288

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        Add some template magic to be able to figure out if a class has a member function of a given type.

        (PluginTest::Object::create):
        Create an object.

        (PluginTest::Object::invokeDefault):
        Add dummy function, this should never be called.

        (PluginTest::Object::Object):
        Initialize m_pluginTest to 0.

        (PluginTest::Object::~Object):
        Add virtual destructor.

        (PluginTest::Object::NP_Allocate):
        Create a new object.

        (PluginTest::Object::NP_Deallocate):
        Delete the object.

        (PluginTest::Object::NP_InvokeDefault):
        Call invokeDefault.

        (PluginTest::Object::npClass):
        Initialize the NPClass struct.

        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp:
        (DocumentOpenInDestroyStream::NPP_DestroyStream):
        Move this inline.

        * DumpRenderTree/TestNetscapePlugIn/Tests/PluginScriptableNPObjectInvokeDefault.cpp:
        (PluginScriptableNPObjectInvokeDefault::NPObjectWithInvokeDefault::invokeDefault):
        (PluginScriptableNPObjectInvokeDefault::NPP_GetValue):
        Use the PluginTest::Object class template.

2010-07-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43305
        Add back WKBundleFrameCopyInnerText to fix ~50 test failures
        due to SVGElements not having the innerText function.

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

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43290
        Add structured message passing from the injected bundle to UIProcess

        * MiniBrowser/mac/AppDelegate.m:
        (didRecieveMessageFromInjectedBundle):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didClearWindowForFrame):
        (didRecieveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43275
        Make WKArrayRef more usable.

        Remove now unnecessary const_casts.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpDescendantFrameScrollPositions):
        (WTR::dumpDescendantFramesText):

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43274
        Add first pass of structured message passing.

        Update Minibrowser and WebKitTestRunner to work with the new post message
        function.

        * MiniBrowser/mac/AppDelegate.m:
        (didRecieveMessageFromInjectedBundle):
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didReceiveTitleForFrame):
        (didClearWindowForFrame):
        (didCreatePage):
        (willDestroyPage):
        (didRecieveMessage):
        (WKBundleInitialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::_didReceiveMessage):
        (WTR::InjectedBundle::didReceiveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Try to fix the layout test failures.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Replace plugins/npruntime/bindings-test.html with a more sophisticated test
        https://bugs.webkit.org/show_bug.cgi?id=43232

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add PluginScriptableNPObjectInvokeDefault.cpp.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        Remove invokeDefault callback function.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::create):
        Move this to the top of the file.

        (PluginTest::NPP_GetValue):
        Add default implementation.

        (PluginTest::NPN_CreateObject):
        Add NPN_ wrapper.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        (PluginTest::identifier):
        Add identifier getter.

        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp:
        (DocumentOpenInDestroyStream::DocumentOpenInDestroyStream):
        Add "using namespace std".

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_GetValue):
        Give PluginTest a chance to return a value.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * GNUmakefile.am:
        Add PluginScriptableNPObjectInvokeDefault.cpp.
        
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):
        Give PluginTest a chance to return a value.

2010-07-30  Steve Block  <steveblock@google.com>

        Reviewed by Steve Block.

        Add LayoutTestController methods to test DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39589

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockDeviceOrientationCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * Scripts/build-webkit:

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] QtTestBrowser: -resizes-to-contents command line parameter is broken
        https://bugs.webkit.org/show_bug.cgi?id=43209

        When -resizes-to-content was being passed as a command line parameter it was simply
        not being set (although the corresponding menu item was marked as ON).
        User had to toggle the menu OFF and then ON again for it to take place.

        Reason: LauncherWindow::applyPrefs method sets many user options passed in from
        the command line, but not resizesToContents. Patch addresses that.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::createChrome):
        (LauncherWindow::applyPrefs):
        (LauncherWindow::toggleResizesToContents):
        * QtTestBrowser/webview.h:
        (WebViewGraphicsBased::resizesToContents):

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Simon Fraser.

        [Qt] QtTestBrowser: more method grouping and clean ups.

        Moving blocks of code around. Basically grouping related methods close to each.

        * QtTestBrowser/launcherwindow.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):
        (LauncherWindow::changeViewportUpdateMode):
        (LauncherWindow::showFPS):
        (LauncherWindow::newWindow):
        (LauncherWindow::cloneWindow):
        * QtTestBrowser/launcherwindow.h:

2010-07-30  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [QT][Symbian] QtTestBrowser missing location capabilities
        https://bugs.webkit.org/show_bug.cgi?id=43235

        QtTestBrowser missing capabilities to use QtMobility::QLocation. 

        * QtTestBrowser/QtTestBrowser.pro:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Add PluginTest.cpp

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Update download URLs for python irclib package; the old URLs 
        pointed at a specific mirror host and not the general sourceforge
        URLs.

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

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Fix typo.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Qt and GTK+ build.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_stream):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Another build fix attempt.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        * GNUmakefile.am:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Try to fix Windows and Unix builds.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_stream):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Refactor TestNetscapePlugin so tests can be split in separate files
        https://bugs.webkit.org/show_bug.cgi?id=43220

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add PluginTest.cpp, PluginTest.h and Tests/DocumentOpenInDestroyStream.cpp.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        Initialize pluginTest to 0. Remove testDocumentOpenInDestroyStream.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp: Added.
        (PluginTest::PluginTest):
        Initialize m_npp and the test identifier.
        
        (PluginTest::createTestFunctions):
        Return the map from identifiers to createTest functions.

        (PluginTest::registerCreateTestFunction):
        Insert the identifier and create function pair in the map.

        (PluginTest::create):
        Look for a createTest function. If one is found, call it. Otherwise create a vanilla PluginTest object.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added.
        (PluginTest::Register::Register):
        Helper class template for registering plug-in tests.
        
        (PluginTest::Register::create):
        Create a new test of the given type.

        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp: Added.
        (DocumentOpenInDestroyStream::DocumentOpenInDestroyStream):
        Add a test that calls testDocumentOpen from its NPP_DestroyStream callback.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        Create a PluginTest given the identifier. Remove the check for "testdocumentopenindestroystream".

        (NPP_DestroyStream):
        Call the plug-in test NPP_DestroyStream member function.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        Add PluginTest.cpp, PluginTest.h and Tests/DocumentOpenInDestroyStream.cpp.

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed build fix.

        Add missing second argument to assert_lint in new style checker tests.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        check-webkit-style shouldn't complain about NPAPI functions
        https://bugs.webkit.org/show_bug.cgi?id=43211

        Allow underscores in functions that start with NPN_, NPP_ or NP_.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-07-29  Victor Wang  <victorw@chromium.org>

        Unreviewed, rolling out r64270.
        http://trac.webkit.org/changeset/64270
        https://bugs.webkit.org/show_bug.cgi?id=39589

        The patch breaks chromium webkit unittest

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        * Scripts/build-webkit:

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] QtTestBrowser: Move WebPage class methods definitions from main.cpp to webpage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43199

        There is no sense in keeping WebPage method definitions in main.cpp once
        webpage.cpp already exists.

        No behavior change.

        * QtTestBrowser/main.cpp:
        * QtTestBrowser/webpage.cpp:
        (WebPage::createWindow):
        (WebPage::createPlugin):

2010-07-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Factor out LauncherWindow class out of main.cpp (QtTestBrowser)
        https://bugs.webkit.org/show_bug.cgi?id=43170

        Moving LauncherWindow class out of main.cpp to its own .cpp and .h files:
        launcherwindow.{cpp|h}

        No behavior change.

        Also changed all global static variables (named "gXXX") from main.cpp to
        static public variables of the LauncherWindow class.

        * QtTestBrowser/QtTestBrowser.pro:
        * QtTestBrowser/launcherwindow.cpp: Added.
        * QtTestBrowser/launcherwindow.h: Added.
        * QtTestBrowser/main.cpp:
        (LauncherApplication::handleUserOptions):
        (main):

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Build fix for building against GTK+ 3.x. GSEAL requires that we
        access internals of the GdkDragContext via methods. For older versions
        of GTK+, define those methods.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdk_drag_context_get_selected_action): Added.
        (gdk_drag_context_get_actions): Added.
        (dispatchEvent): Use the two new accessor methods.

2010-07-29  Adam Roben  <aroben@apple.com>

        Always say "plugins directory" when referring to a directory
        containing one or more plugins

        Fixes <http://webkit.org/b/43197> WebKit2 often says "plugin
        directory" when it means "plugins directory"

        Reviewed by John Sullivan.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Updated for rename.

2010-07-29  Adam Roben  <aroben@apple.com>

        Always say "directory" when referring to a plugin directory

        Fixes <http://webkit.org/b/43195> WebKit2 often says "plugin path"
        when it means "plugin directory"

        Reviewed by John Sullivan.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Updated for renames.

        * WebKitTestRunner/TestController.h: Renamed m_testPluginPath to
        m_testPluginDirectory.
        (WTR::TestController::testPluginDirectory): Renamed from
        testPluginPath.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::initializeTestPluginDirectory):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        Renamed from initializeTestPluginPath and updated for rename.

2010-07-29  Csaba Osztrogonác  <ossy@webkit.org>

         Reviewed by Antonio Gomes.

         Initialize all members of NPClass struct.
         https://bugs.webkit.org/show_bug.cgi?id=43193

         * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:

2010-07-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        Warning fix on platforms where XP_MACOSX is undefined.
        https://bugs.webkit.org/show_bug.cgi?id=43192

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        Use #if defined(XP_MACOSX) instead of #if XP_MACOSX .

2010-07-29  Adam Roben  <aroben@apple.com>

        Give find-included-framework-headers our standard license

        * Scripts/find-included-framework-headers: Used the license from
        WebCore/LICENSE-APPLE.

2010-07-29  Adam Roben  <aroben@apple.com>

        Speed up find-included-framework-headers

        We only do one invocation of find now, no longer pipe to grep, and
        replace uniq with sort -u.

        Also added a license header.

        * Scripts/find-included-framework-headers:

2010-07-29  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add LayoutTestController methods to test DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39589

        * DumpRenderTree/LayoutTestController.cpp:
        (setMockDeviceOrientationCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setMockDeviceOrientation):
        * Scripts/build-webkit:

2010-07-28  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Fixed <https://bugs.webkit.org/show_bug.cgi?id=33814>
        check-webkit-style gives false positives in single-line functions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-07-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.execCommand
        <https://bugs.webkit.org/show_bug.cgi?id=42538>

        WebKitTestRunner needs layoutTestController.isCommandEnabled
        <https://bugs.webkit.org/show_bug.cgi?id=42671>

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added execCommand and isCommandEnabled.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::execCommand): Added.
        (WTR::LayoutTestController::isCommandEnabled): Added.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Ditto.

2010-07-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Introduce drt_expectations.txt for NRWT
        https://bugs.webkit.org/show_bug.cgi?id=43123

        Introduce LayoutTests/platform/chromium/drt_expectations.txt,
        which overrides test expectations only for DumpRenderTree, in
        order to manage what problems are investigated.
        This change will be reverted when we switch to DRT completely.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
         Add drt_expectations.txt content to the result of
         test_expectations_overrides() if --use-drt is specified.

2010-07-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        First pass at visited link support for WK2
        https://bugs.webkit.org/show_bug.cgi?id=43157

        * MiniBrowser/mac/AppDelegate.m:
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks): Added for the new version of the HistoryClient.
        (-[BrowserAppDelegate init]): Set the HistoryClient right after creating the context(s)
        
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

2010-07-28  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Add DOM bindings support for wx port.

        * DumpRenderTree/wscript:
        * wx/browser/wscript:
        * wx/build/settings.py:

2010-07-28  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] cleanup temp files left by Linux DRT
        https://bugs.webkit.org/show_bug.cgi?id=43062

        * BuildSlaveSupport/build.webkit.org-config/config.json: Rename the chromium bots to include the OS
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: add a step on chromium-linux to delete temp files left
            by crashed DRTs

2010-07-28  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Kenneth Christiansen.

        More Developer menu items reordering.

        Grouping related menu items together, visually and logically (in the code).

        No behavior change.

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):

2010-07-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Add FILE_SYSTEM build flag for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=42915

        * Scripts/build-webkit:

2010-07-27  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by David Levin.

        Stylebot should not complain about NULL usage in calls to gdk_pixbuf_save_to
        https://bugs.webkit.org/show_bug.cgi?id=43090

        * Scripts/webkitpy/style/checkers/cpp.py: Add exemption for some GdkPixbuf methods.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added some tests for this behavior.

2010-07-27  Kent Tamura  <tkent@chromium.org>

        Unreviewed, trivial typo fix.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
          Fix a wrong method name committed by r64109.

2010-07-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43087
        Clean up handling of strings at the WebKit2 API layer.

        * MiniBrowser/mac/BrowserWindowController.m:
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (didNavigateWithNavigationData):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame):

2010-07-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        webkit-patch post-commits is broken: AttributeError: Values instance has no attribute 'no_squash'
        https://bugs.webkit.org/show_bug.cgi?id=42984

        squash and no_squash have been intentionally erroring for a couple weeks now.
        But post-commits was just broken. Just remove squash/no_squash.

        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-07-27  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after introduction of EXECUTABLE_ALLOCATOR_DEMAND.

        * wx/build/settings.py:

2010-07-27  Adam Roben  <aroben@apple.com>

        Mac build fix

        * MiniBrowser/mac/BrowserWindowController.m:
        (processDidExit):
        (-[BrowserWindowController awakeFromNib]):
        Added processDidExit support.

2010-07-26  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Simon Hausmann.

        [Qt] Reorder some items in Developers' menu so QGraphicsView one is easier accessible.

        Move some less useful menu items on Developers menu from the top to the bottom, so
        QGraphicsView menu goes to the top, and becomes more quickly accessible.

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):

2010-07-26  Adam Roben  <aroben@apple.com>

        Fix the path to InjectedBundle.dll in Debug_Internal builds

        Fixes <http://webkit.org/b/42994> WebKitTestRunner fails to load
        InjectedBundle.dll in the Debug_Internal configuration

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeInjectedBundlePath): Add the _debug
        suffix only in Debug_All builds.

2010-07-25  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42947
        Check for WEBKIT_TESTFONTS for qt, gtk and windows port and throw 
        error. Without which dumpRenderTree crashes.

        * Scripts/old-run-webkit-tests:

2010-07-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=42956
        [DRT/Chromium] Fix "out of sync" assertion error

        Fix an assertion error on Windows like the following:
        100721 20:16:46 chromium.py:386  CRITICAL Test got out of sync:
        |file:///c:/WebKitBuildSlave2/chromium-win-release-tests/build/LayoutTests/http/tests/local/blob/send-data-blob.html|
        |file:///C:/WebKitBuildSlave2/chromium-win-release-tests/build/LayoutTests/http/tests/local/blob/send-data-blob.html|

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        If the url matches with "file:///[a-z]:", does case-ignore comparison.
        GURL capitalize the driver letter of a file: URL.

2010-07-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.counterValueForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42537

        WebKitTestRunner needs layoutTestController.markerTextForListItem
        https://bugs.webkit.org/show_bug.cgi?id=42549

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Fixed _paramterExpression typo. Improved support for string type as a
        return value, so we don't try to include DOMString.h and we can convert
        the string to a JSValue by calling JSValueMakeStringOrNull.

        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h:
        Added JSValueMakeStringOrNull, used by the code generator.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added counterValueForElementById and markerTextForListItem.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        Moved constant to the top of the file.
        (WTR::toCF): Added. Converts strings to CFStringRef.
        (WTR::toWK): Added. Converts strings to WKStringRef.
        (WTR::toJS): Added. Converts strings to JSStringRef.
        (WTR::setProperty): Moved this function to the top of the file
        rather than having it down where it's used inside the class. Also
        renamed it so it's a separate function rather than an overload of
        JSObjectSetProperty.
        (WTR::propertyValue): Copied this here from InjectedBundlePage.cpp.
        Should move it somewhere we can share it.
        (WTR::propertyObject): Ditto.
        (WTR::getElementById): Added. Calls getElementById through the magic
        of JavaScript.
        (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        Chagned to use toWK instead of four local variables.
        (WTR::LayoutTestController::counterValueForElementById): Added.
        Calls WKBundleFrameCopyCounterValue.
        (WTR::LayoutTestController::markerTextForListItem): Added.
        Calls WKBundleFrameCopyMarkerText.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        Added counterValueForElementById and markerTextForListItem.

2010-07-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The EventSender should support simulating drop events
        https://bugs.webkit.org/show_bug.cgi?id=39844

        Add initial dropping support to the GTK+ EventSender.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (createWebView): Listen for some new drag-and-drop signals.
        * DumpRenderTree/gtk/EventSender.cpp: Add currentDragSourceContext.
        (dispatchEvent):
        Detect situations where a drag is either starting or ending and massage
        GTK+ into sending the appropriate signals to the WebView.
        (replaySavedEvents): Remove comment.
        (makeEventSender): Clear the currentDragSourceContext when creating a new EventSender.
        (dragBeginCallback): Capture the new currentDragSourceContext when a drag begins.
        (dragEndCallback): Clear the currentDragSourceContext when a drag ends.
        (dragFailedCallback): Disable the GTK+ drag failed animation.
        * DumpRenderTree/gtk/EventSender.h: Add declarations for new signal callbacks.

2010-07-26  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        svn-unapply warns of uninitialized variable when unapplying
        a patch that describes an svn move operation
        https://bugs.webkit.org/show_bug.cgi?id=42036

        Fixes Perl uninitialized variable warnings when un-applying
        a patch that moves a file.

        * Scripts/svn-unapply:
          - Modified patch() so that it initializes $patch to the empty
            string when we don't have svnConvertedText (such as when
            reversing a diff that represents a svn copy/move operation).

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move some non-APIish functions into private headers.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42986
        Add prompt and confirm client functions to WebKit2

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController awakeFromNib]):

2010-07-26  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:
        Removed empty attributes so the values will be picked up from the
        vsprops files. (Also removed a couple of attributes that accidentally
        duplicated values from the vsprops files.)

2010-07-26  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Adam Roben.
        
        Touch MiniBrowser's stdafx to fix the build.

        * MiniBrowser/win/stdafx.h:

2010-07-26  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Add pretty printer of WTF::Vector for GDB 7.

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

        * gdb/wtf.py: Added.

2010-07-26  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix feature detection regexp

        We were missing the last feature

        * Scripts/webkitdirs.pm:

2010-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        WebKitTestRunner needs to support layoutTestController.dumpSelectionRect
        https://bugs.webkit.org/show_bug.cgi?id=42326

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpSelectionRect.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpSelectionRect): Added. For now, this
        does nothing because its purpose is to change pixel test output and
        we do not have pixel tests implemented yet.

2010-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKitTestRunner needs to support layoutTestController.keepWebHistory
        https://bugs.webkit.org/show_bug.cgi?id=42323

        Added keepWebHistory and computedStyleIncludingVisitedInfo.

        Also fixed misspellings of the word "receive".

        Also tweaked the names of some of the LayoutTestController members.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Added support for a type named "object" that is passed and returns as
        a JSValueRef.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added keepWebHistory and computedStyleIncludingVisitedInfo. Also
        put setAcceptsEditing up nearer the top.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::_didReceiveMessage): Fixed mispellings of receive.
        (WTR::InjectedBundle::initialize): Ditto.
        (WTR::InjectedBundle::didReceiveMessage): Ditto.
        (WTR::InjectedBundle::reset): Reset the state of visited links between
        tests. Also eliminated the unused argument to the LayoutTestController
        create function.
        (WTR::InjectedBundle::setShouldTrackVisitedLinks): Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Ditto.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::shouldBeginEditing): Call shouldAllowEditing
        instead of acceptsEditing.
        (WTR::InjectedBundlePage::shouldEndEditing): Ditto.
        (WTR::InjectedBundlePage::shouldInsertNode): Ditto.
        (WTR::InjectedBundlePage::shouldInsertText): Ditto.
        (WTR::InjectedBundlePage::shouldDeleteRange): Ditto.
        (WTR::InjectedBundlePage::shouldChangeSelectedRange): Ditto.
        (WTR::InjectedBundlePage::shouldApplyStyle): Ditto.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::create): Removed uneeded argument.
        (WTR::LayoutTestController::LayoutTestController): Removed unneeded
        argument. Updated for rename of m_acceptsEditing to m_shouldAllowEditing.
        (WTR::LayoutTestController::numberOfActiveAnimations): Added some FIXMEs
        about the fact that this works on the main frame.
        (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId): Ditto.
        (WTR::LayoutTestController::keepWebHistory): Added.
        (WTR::LayoutTestController::computedStyleIncludingVisitedInfo): Added.
        (WTR::JSObjectSetProperty): Added. Helper to make the function below
        cleaner.
        (WTR::LayoutTestController::makeWindowObject): Changed to use the
        overload of JSObjectSetProperty above.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Changes to
        match above.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Fixed mispellings of receive.
        (WTR::TestController::_didReceiveMessageFromInjectedBundle): Ditto.
        (WTR::TestController::didReceiveMessageFromInjectedBundle): Ditto.
        * WebKitTestRunner/TestController.h: Ditto.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Ditto.
        * WebKitTestRunner/TestInvocation.h: Ditto.

2010-07-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42193
        Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

        Step 2 - add the rest of editing delegates.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<): Fixed to not crash when range is null.
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_shouldEndEditing):
        (WTR::InjectedBundlePage::_shouldInsertNode):
        (WTR::InjectedBundlePage::_shouldInsertText):
        (WTR::InjectedBundlePage::_shouldDeleteRange):
        (WTR::InjectedBundlePage::_shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::_shouldApplyStyle):
        (WTR::InjectedBundlePage::_didBeginEditing):
        (WTR::InjectedBundlePage::_didEndEditing):
        (WTR::InjectedBundlePage::_didChange):
        (WTR::InjectedBundlePage::_didChangeSelection):
        (WTR::InjectedBundlePage::shouldEndEditing):
        (WTR::InjectedBundlePage::shouldInsertNode):
        (WTR::InjectedBundlePage::shouldInsertText):
        (WTR::InjectedBundlePage::shouldDeleteRange):
        (WTR::InjectedBundlePage::shouldChangeSelectedRange):
        (WTR::InjectedBundlePage::shouldApplyStyle):
        (WTR::InjectedBundlePage::didBeginEditing):
        (WTR::InjectedBundlePage::didEndEditing):
        (WTR::InjectedBundlePage::didChange):
        (WTR::InjectedBundlePage::didChangeSelection):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-07-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: need a layout test testing misspelled words in attributed strings
        https://bugs.webkit.org/show_bug.cgi?id=42899

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributedStringForRangeCallback):
        (attributedStringRangeIsMisspelledCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):

2010-07-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/42911> Update ruby tools to work with shallow framework bundles

        Reviewed by Mark Rowe.

        * Scripts/check-for-inappropriate-files-in-framework: Added
        check for the SHALLOW_BUNDLE environment variable so that the
        script will work with iOS WebKit builds.
        * Scripts/check-for-webkit-framework-include-consistency: Ditto.

2010-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Eliminate unneeded WKBundleFrameCopyInnerText function from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42847

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::operator<<): Replaced the WKStringToUTF8 function with
        a set of overloaded stream operators.
        (WTR::dumpPath): Changed to use ostringstream and return a string.
        (WTR::propertyValue): Added.
        (WTR::propertyObject): Added.
        (WTR::propertyString): Added.
        (WTR::numericWindowPropertyValue): Changed to call propertyValue.
        (WTR::dumpFrameScrollPosition): Removed now unneeded WKStringToUTF8 sequence
        since we now have suitable streaming functions.
        (WTR::dumpFrameText): Use propertyObject and propertyString instead of
        WKBundleFrameCopyInnerText.
        (WTR::dumpDescendantFramesText): Removed now unneeded WKStringToUTF8 sequence
        since we now have suitable streaming functions.
        (WTR::InjectedBundlePage::dump): Ditto.
        (WTR::InjectedBundlePage::willAddMessageToConsole): Ditto.
        (WTR::InjectedBundlePage::willSetStatusbarText): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptAlert): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt): Ditto.

2010-07-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42193
        Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

        Step 1: Add the method, and implement one actual delegate call as proof of concept. No tests
        fixed, but this makes difference one line smaller on many editing tests.

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpEditingCallbacks() and setAcceptsEditing().

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpPath): Dump path to a node in a format that's compatible with DumpRenderTree.
        (WTR::operator<<): Print a range.
        (WTR::InjectedBundlePage::InjectedBundlePage): Set editor client in addition to existing
        clients.
        (WTR::InjectedBundlePage::_shouldBeginEditing): The only client method implemented so far.
        (WTR::InjectedBundlePage::shouldBeginEditing): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added a section for editor client
        calls.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpEditingCallbacks):
        (WTR::LayoutTestController::setAcceptsEditing):
        (WTR::LayoutTestController::acceptsEditing):
        (WTR::LayoutTestController::shouldDumpEditingCallbacks):
        Store m_acceptsEditing and m_dumpEditingCallbacks.

2010-07-22  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QtWebKit needs public API for Notifications.
        https://bugs.webkit.org/show_bug.cgi?id=41413

        Update DumpRenderTree and QtTestBrowser to use the new API.
        Add new DRT API to flag that notifications permission requests should be ignored.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::requestPermission):
        (WebCore::WebPage::checkPermission):
        (WebCore::WebPage::cancelRequestsForPermission):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::ignoreDesktopNotificationPermissionRequests):
        (LayoutTestController::checkDesktopNotificationPermission):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::ignoreReqestForPermission):
        * QtTestBrowser/main.cpp:
        (LauncherWindow::LauncherWindow):
        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::requestPermission):
        (WebPage::checkPermission):
        (WebPage::cancelRequestsForPermission):
        * QtTestBrowser/webpage.h:

2010-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpChildFramesAsText
        https://bugs.webkit.org/show_bug.cgi?id=42325

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        Added dumpChildFramesAsText.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpFrameText): Added.
        (WTR::dumpDescendantFramesText): Added.
        (WTR::InjectedBundlePage::dumpAllFramesText): Added.
        (WTR::InjectedBundlePage::dump): Changed to use the new whatToDump function
        instead of the shouldDumpAsText function, and added a case for AllFramesText.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added dumpAllFramesText.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Replaced m_dumpAsText with
        m_whatToDump.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added
        dumpChildFramesAsText. Removed shouldDumpAsText, shouldDumpDOMAsWebArchive,
        and shouldDumpSourceAsWebArchive. Added whatToDump.

2010-07-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        Inspired by r63881.

        * MiniBrowser/MiniBrowser.vcproj:
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:
        Removed pre- and post-build events so they will be inherited from the
        vsprops files.

2010-07-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.dumpChildFrameScrollPositions
        https://bugs.webkit.org/show_bug.cgi?id=42548

        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::numericWindowPropertyValue): Renamed this and moved it up higher in the file.
        (WTR::dumpFrameScrollPosition): Added argument telling whether to dump the frame name.
        Changed to a file-internal function instead of a member function.
        (WTR::dumpDescendantFrameScrollPositions): Added.
        (WTR::InjectedBundlePage::dumpAllFrameScrollPositions): Added.
        (WTR::InjectedBundlePage::dump): Changed to call dumpAllFrameScrollPositions when
        appropriate. Also streamlined all the WKStringToUTF8 call sites.
        (WTR::InjectedBundlePage::willAddMessageToConsole): Streamlined use of WKStringToUTF8.
        (WTR::InjectedBundlePage::willSetStatusbarText): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptAlert): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt): Ditto.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Updated for above changes.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize
        m_shouldDumpAllFrameScrollPositions.
        (WTR::LayoutTestController::shouldDumpMainFrameScrollPosition): Renamed from
        shouldDumpFrameScrollPositions.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Reorganized the file a
        bit, added dumpChildFrameScrollPositions and shouldDumpAllFrameScrollPositions,
        and renamed shouldDumpFrameScrollPositions to shouldDumpMainFrameScrollPosition.

2010-07-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support dumping of scroll position
        https://bugs.webkit.org/show_bug.cgi?id=42514

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame): Use JSGlobalContextRef instead of JSContextRef.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::_didClearWindowForFrame): Use JSGlobalContextRef
        instead of JSContextRef.
        (WTR::InjectedBundlePage::dump): Call dumpFrameScrollPosition when appropriate.
        (WTR::numericWindowProperty): Added. Helper for dumpFrameScrollPosition.
        (WTR::InjectedBundlePage::dumpFrameScrollPosition): Added.
        (WTR::InjectedBundlePage::didClearWindowForFrame): Use JSGlobalContextRef
        instead of JSContextRef.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Removed names from
        arguments that simply repeat the argument type. Added dumpFrameScrollPosition.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::shouldDumpDOMAsWebArchive): Added. Currently
        returns false.
        (WTR::LayoutTestController::shouldDumpSourceAsWebArchive): Added. Currently
        returns false.
        (WTR::LayoutTestController::shouldDumpFrameScrollPositions): Added. Matches
        the logic in DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Updated for above changes.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Added property svn:ignore.

2010-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, adding the WebCore/bindings/generic dir to the list of build dirs.

        * wx/build/settings.py:

2010-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42539
        WebKitTestRunner needs to support printing ALERT, PROMPT and CONFIRM messages

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_willAddMessageToConsole):
        (WTR::InjectedBundlePage::_willSetStatusbarText):
        (WTR::InjectedBundlePage::_willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::_willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::_willRunJavaScriptPrompt):
        (WTR::InjectedBundlePage::willAddMessageToConsole):
        (WTR::InjectedBundlePage::willSetStatusbarText):
        (WTR::InjectedBundlePage::willRunJavaScriptAlert):
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm):
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-07-21  Adam Roben  <aroben@apple.com>

        Give InjectedBundle our standard set of configurations (minus the
        *_Cairo variants)

        InjectedBundle's Debug_All configuration was the same as is Debug
        configuration, and it was missing a Debug_Internal configuration.

        Fixes <http://webkit.org/b/42749> InjectedBundle's build
        configurations are screwy

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: Added
        debug_internal.vsprops and debug_all.vsprops to the Debug_All
        configuration. Added a Debug_Internal configuration.

        * WebKitTestRunner/WebKitTestRunner.sln: Build the Debug_Internal
        variant of InjectedBundle when we're using the Debug_Internal solution
        configuration.

2010-07-21  Adam Roben  <aroben@apple.com>

        Move InjectedBundle's settings to a vsprops file

        This will make it easier to change settings for all configurations,
        and to add new configurations.

        Fixes <http://webkit.org/b/42748> InjectedBundle should use vsprops
        files

        Reviewed by Darin Adler.

        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops: Added.
        Moved settings here...
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: ...from
        here.

2010-07-21  Adam Roben  <aroben@apple.com>

        Give MiniBrowser our standard set of configurations (minus the *_Cairo
        variants)

        MiniBrowser already had a configuration called "Release", but it was
        using mostly the same settings as Debug. And its Debug configuration
        was using the settings that Debug_Internal should be using.

        Fixes <http://webkit.org/b/42746> MiniBrowser's build configurations
        are screwy

        Reviewed by Darin Adler.

        * MiniBrowser/MiniBrowser.vcproj: Removed debug_internal.vsprops from
        the Debug configuration. Remove debug.vsprops and
        debug_internal.vsprops from the Release configuration and replace them
        with release.vsprops. Added Debug_Internal and Debug_All
        configurations.

2010-07-21  Adam Roben  <aroben@apple.com>

        Move MiniBrowser's settings to a vsprops file

        This will make it easier to change settings for all configurations,
        and to add new configurations.

        MiniBrowser should use vsprops files
        https://bugs.webkit.org/show_bug.cgi?id=42745

        Reviewed by Darin Adler.

        * MiniBrowser/Configurations/MiniBrowserCommon.vsprops: Added. Moved
        settings here...
        * MiniBrowser/MiniBrowser.vcproj: ...from here.

2010-07-21  Adam Roben  <aroben@apple.com>

        Fix compiler warnings when building MiniBrowser

        Also cleaned up the .vcproj a bit.

        Fixes <http://webkit.org/b/42743>.

        Reviewed by Darin Adler.

        * MiniBrowser/MiniBrowser.vcproj: Removed all settings that are
        already defined in .vsprops files. This also fixes a warning about
        /EDITANDCONTINUE being incompatible with /SAFESEH.

        * MiniBrowser/win/MiniBrowser.rc: Replaced afxres.h with winresrc.h so
        that we stop getting warnings about ID_FILE_OPEN and ID_FILE_CLOSE
        being redefined. (I think this will also get us closer to building
        with VC++ Express.)

2010-07-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Fix obvious typo.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::setStatusbarText): Need to call ->data() to actually get the string value.

2010-07-20  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] by default, dumpAsText should disable pixel results
        https://bugs.webkit.org/show_bug.cgi?id=42715

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::dumpAsText): disable pixel results, but allow JS to override

2010-07-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/MiniBrowser.vcproj: Link against the new, shiny
        WebKit.lib instead of the old, dusty WebKit2.lib.

2010-07-20  Adam Roben  <aroben@apple.com>

        Stop linking WebKitTestRunner against getopt

        Use of getopt was removed in r63700.

        Fixes <http://webkit.org/b/42714> WebKitTestRunner links against
        getopt, but doesn't need to

        Reviewed by Sam Weinig.

        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Removed getopt.lib
        from all configurations.

2010-07-20  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests --webkit-test-runner "work" on Windows

        WebKitTestRunner crashes on launch, but at least the scripts build and
        launch it!

        Fixes <http://webkit.org/b/42709> run-webkit-tests
        --webkit-test-runner bails with an error on Windows

        Reviewed by Anders Carlsson.

        * Scripts/build-webkittestrunner: Build WebKitTestRunner.sln on
        Windows.
        * WebKitTestRunner/WebKitTestRunner.sln: Added. Contains the following
        projects (from first-built to last-built): FindSafari, ImageDiff,
        InjectedBundleGenerated, InjectedBundle, WebKitTestRunner.

2010-07-20  Adam Roben  <aroben@apple.com>

        Change build-webkit back to building WebKit.sln on Windows

        WebKit.sln builds all the same projects as WebKit2.sln, and the latter
        is being removed.

        Rubber-stamped in advance by Steve Falkenburg.

        * Scripts/build-webkit:

2010-07-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * MiniBrowser/win/BrowserWindow.cpp: Added missing #include.

2010-07-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Geoffrey Garen.

        WebScriptObject Should Allow Safely Checking For Key Existence
        https://bugs.webkit.org/show_bug.cgi?id=42613

        Normal ObjCController workflow for a WebScriptObject test.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testHasWebScriptKey:]):

2010-07-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable compositing/webgl tests if WebGL is not enabled

        * Scripts/old-run-webkit-tests:

2010-07-20  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Print additional information about exception if failed to connect to apache (in verbose mode).
        https://bugs.webkit.org/show_bug.cgi?id=42627

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

2010-07-20  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] only pass --force to gclient sync if explicitly stated
        https://bugs.webkit.org/show_bug.cgi?id=42581

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: bots should
              always pass --force since it's hard to do manual cleanups
        * Scripts/update-webkit-chromium: only pass --force if --force is
              passed in

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Paths of generated files should be relative to the build product.

2010-07-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        [Win] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37930

        Implements DRT support for markerTextForListItem in the Windows port.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::markerTextForListItem): Implemented.

2010-07-19  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginPath):

2010-07-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Remove dependency on getopt from WebKitTestRunner.

        - Simplify options parsing and eliminate unused options.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::testPluginPath):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::initializeTestPluginPath):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::initializeTestPluginPath):

2010-07-19  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] MiniBrowser: Progress indication at address bar
        https://bugs.webkit.org/show_bug.cgi?id=42565

        Make possible to see load progress at address bar based on
        QtTestBrowser solution

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::loadProgress):
        * MiniBrowser/qt/BrowserWindow.h:

2010-07-19  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Add MiniBrowser features: urlChanged, titleChanged and from user input load
        https://bugs.webkit.org/show_bug.cgi?id=42564

        * MiniBrowser/qt/BrowserWindow.cpp:
        (BrowserView::load):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::titleChanged):
        (BrowserWindow::urlChanged):
        * MiniBrowser/qt/BrowserWindow.h:

2010-07-19  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42532
        Auto-generate the JS bindings for WebKitTestRunner's script objects.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/DerivedSources.make: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/GetPtr.h: Added.
        * WebKitTestRunner/InjectedBundle/Bindings: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h: Added.
        (WTR::JSWrappable::~JSWrappable):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp: Added.
        (WTR::JSWrapper::wrap):
        (WTR::JSWrapper::unwrap):
        (WTR::unwrapObject):
        (WTR::JSWrapper::initialize):
        (WTR::JSWrapper::finalize):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h: Added.
        (WTR::toJS):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::setStatusbarText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::wrapperClass):
        (WTR::LayoutTestController::waitUntilDone):
        (WTR::LayoutTestController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpAsText):
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::shouldDumpStatusCallbacks):
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::waitToDump):
        (WTR::LayoutTestController::testRepaint):
        (WTR::LayoutTestController::repaintSweepHorizontally):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj: Added.
        * WebKitTestRunner/win/build-generated-files.sh: Added.

2010-07-19  Mark Rowe  <mrowe@apple.com>

        Clean up the buildbot configuration a little.

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

2010-07-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable WebGL on Leopard for now. 

        LayoutTests fail on some graphics hardware on Leopard because one of the features we use,
        GL_ARB_framebuffer_object, is not universally available in Leopard like it is in
        SnowLeopard. This will allow LayoutTests to pass on Leopard until we add logic to use a
        software OpenGL driver on machines without this support.

        * Scripts/build-webkit:

2010-07-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Brady Eidson.

        Fix MiniBrowser to update URL as you browse
        https://bugs.webkit.org/show_bug.cgi?id=42591
        
        Hook up various loading notifications to update the URL bar in MiniBrowser.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (-[BrowserWindowController updateProvisionalURLForFrame:]):
        (-[BrowserWindowController didStartProvisionalLoadForFrame:]):
        (-[BrowserWindowController didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[BrowserWindowController didFailProvisionalLoadWithErrorForFrame:]):
        (-[BrowserWindowController didFailLoadWithErrorForFrame:]):
        (-[BrowserWindowController didCommitLoadForFrame:]):

2010-07-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42586
        Log all canceled authentication attempts in DumpRenderTree

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        It's important to know whether an auth sheet appeared. Added logging to "no preset credentials"
        case.

2010-07-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63671.
        http://trac.webkit.org/changeset/63671
        https://bugs.webkit.org/show_bug.cgi?id=42575

        broke windows (Requested by weinig on #webkit).

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/DerivedSources.make: Removed.
        * WebKitTestRunner/ForwardingHeaders/wtf/GetPtr.h: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::setStatusbarText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::setWaitToDump):
        (WTR::displayCallback):
        (WTR::dumpAsTextCallback):
        (WTR::dumpStatusCallbacksCallback):
        (WTR::waitUntilDoneCallback):
        (WTR::notifyDoneCallback):
        (WTR::numberOfActiveAnimationsCallback):
        (WTR::pauseAnimationAtTimeOnElementWithIdCallback):
        (WTR::repaintSweepHorizontallyCallback):
        (WTR::testRepaintCallback):
        (WTR::layoutTestControllerObjectFinalize):
        (WTR::LayoutTestController::makeWindowObject):
        (WTR::LayoutTestController::getJSClass):
        (WTR::LayoutTestController::staticFunctions):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::setDumpAsText):
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::setDumpStatusCallbacks):
        (WTR::LayoutTestController::setTestRepaint):
        (WTR::LayoutTestController::setTestRepaintSweepHorizontally):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42532
        Auto-generate the JS bindings for WebKitTestRunner's script objects.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/DerivedSources.make: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/GetPtr.h: Added.
        * WebKitTestRunner/InjectedBundle/Bindings: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrappable.h: Added.
        (WTR::JSWrappable::~JSWrappable):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp: Added.
        (WTR::JSWrapper::wrap):
        (WTR::JSWrapper::unwrap):
        (WTR::unwrapObject):
        (WTR::JSWrapper::initialize):
        (WTR::JSWrapper::finalize):
        * WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.h: Added.
        (WTR::toJS):
        * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::setStatusbarText):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::wrapperClass):
        (WTR::LayoutTestController::waitUntilDone):
        (WTR::LayoutTestController::makeWindowObject):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::shouldDumpAsText):
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::shouldDumpStatusCallbacks):
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::waitToDump):
        (WTR::LayoutTestController::testRepaint):
        (WTR::LayoutTestController::repaintSweepHorizontally):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-19  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        fix chromium linux compile on ubuntu maverick
        https://bugs.webkit.org/show_bug.cgi?id=42528

        * Scripts/webkitdirs.pm: add a chomp to eat a newline that breaks the make command line

2010-07-19  Adam Roben  <aroben@apple.com>

        When dumping a response's MIME type, print its URL's last path
        component rather than its suitable-for-test-result form

        This matches the Mac behavior.

        Fixes <http://webkit.org/b/42276>
        http/tests/loading/preload-slow-loading.php and
        http/tests/mime/uppercase-mime-type.html fail on Windows

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Moved code to actually extract the last
        path component from here...
        (lastPathComponent): ...to here.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Added lastPathComponent.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveResponse): Use the URL's last path
        component, rather than its suitable-for-test-result form, to match
        Mac.

2010-07-19  Anders carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        WebKit2 does not have application cache
        https://bugs.webkit.org/show_bug.cgi?id=42552

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::resetPreferencesToConsistentValues):
        Set up default preferences. Right now just enables the web application cache.

        (WTR::TestInvocation::invoke):
        Call resetPreferencesToConsistentValues.

        * WebKitTestRunner/TestInvocation.h:

2010-07-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Roben.

        Fix NewRunWebKitTests to work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=41180

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
          Specifying python explicitly.

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add dumping of statusbar text to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42516

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_setStatusbarText):
        (WTR::InjectedBundlePage::setStatusbarText):
        Dump the statusbar text.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController):
        Initialize m_dumpStatusCallbacks to false.

        (WTR::dumpStatusCallbacksCallback):
        Implement JSC callback.

        (WTR::LayoutTestController::staticFunctions):
        Add dumpStatusCallbacks.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::dumpStatusCallbacks):
        (WTR::LayoutTestController::setDumpStatusCallbacks):
        Add setter and getter for m_dumpStatusCallbacks.

2010-07-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Get the test plug-in path and set it on the context.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::initializeInjectedBundlePath):
        Simplify this code by using NSBundle.

        (WTR::TestController::testPluginPath):
        Return the test plug-in path.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::testPluginPath):
        Ditto.

2010-07-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach webkitpy about queues.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=42492

        * Scripts/webkitpy/common/net/statusserver.py:

2010-07-16  Ada Chan  <adachan@apple.com>

        Reviewed by Alice Liu.

        Fix Windows build.

        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj:

2010-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42482
        <rdar://problem/8197701>
        Add notification of when the BackForwardList changes
        to aid invalidation of Back/Forward related UI elements.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didStartProvisionalLoadForFrame):
        (_didCommitLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didChangeBackForwardList):
        (-[BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] <input type=number> UI implementation for Windows
        https://bugs.webkit.org/show_bug.cgi?id=42259

        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
        (WebThemeEngineDRT::paintSpinButton):
         Added. Check state consistency and use existing arrow painting code.
        * DumpRenderTree/chromium/WebThemeEngineDRT.h:

2010-07-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42430
        Make WebKitTestRunner on Windows actually load and run a test

        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp: Export WKBundleInitialize.
        (WKBundleInitialize):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundle.vcproj: Added.  Output is a dll.
        * WebKitTestRunner/TestInvocation.cpp: Create a Windows-style path on Windows
        (WTR::createWKURL):
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Change check for Windows platform to match
        other existing checks, and avoid including Platform.h
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::registerWindowClass): Added.
        (WTR::PlatformWebView::PlatformWebView): Implemented.
        (WTR::PlatformWebView::~PlatformWebView): Implemented.
        (WTR::PlatformWebView::page): Implemented.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeInjectedBundlePath): Implemented. Provide build 
        configuration specific path to InjectedBundle.dll.
        * WebKitTestRunner/win/TestInvocationWin.cpp:
        (WTR::TestInvocation::runUntil): Implemented.
        * WebKitTestRunner/win/WebKitTestRunner.sln: Added InjectedBundle project.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Cleaned up unnecessary dependencies.

2010-07-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Make revalidation of back/forward work a little better with page loads
        https://bugs.webkit.org/show_bug.cgi?id=42470

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController validateToolbar]):
        (_didStartProvisionalLoadForFrame):
        (_didCommitLoadForFrame):
        (_didFailLoadWithErrorForFrame):

2010-07-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add possibility to dumpAsText and generate a pixel test result
        https://bugs.webkit.org/show_bug.cgi?id=42374

        Add optional parameter to setDumpAsText() to allow generating a pixel test result even if dumpAsText mode.
        setDumpAsText(true) will also generate a pixel test result now, when running run-webkit-tests --pixel-tests.

        This is needed for the svg/dynamic-updates tests, which don't want render tree dumps but text dumps + a pixel test result.
        At some point DRT changed to not generate pixel test results when using dumpAsText - which makes sense, but breaks the svg/dynamic-updates test.

        Implemented for all DRT platforms, except Qt, as it's not clear how arguments to functions like "setDumpAsText" are handled.
        (Qt always dumps pixel tests when using --pixel-tests mode, so it does not break anything)

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsTextAndPixelsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsTextAndPixels):
        (LayoutTestController::setDumpAsTextAndPixels):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::dumpAsTextAndPixels):
        (LayoutTestController::reset):
        * DumpRenderTree/chromium/LayoutTestController.h:
        (LayoutTestController::shouldDumpAsTextAndPixels):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dump):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (dump):

2010-07-16  Kent Hansen  <kent.hansen@nokia.com>

        Unreviewed. Adding myself as committer.

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

2010-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Another uneviewed attempt to fix build.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):

2010-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed tiger build fix.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext):
        (createBitmapContextFromWebView):

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed build fix.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * DumpRenderTree/PixelDumpSupport.cpp:
        (dumpWebViewAsPixelsAndCompareWithExpected):
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext): This function was added to share bitmap context creation code.
        (createBitmapContextFromWebView):
        (createPagedBitmapContext):

2010-07-15  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        Pull in pywebsocket-0.5.1
        https://bugs.webkit.org/show_bug.cgi?id=42353

        pywebsocket-0.5.1 contains a small bug fix (*) that should fix a worker test
        in Chromium. There is no other functional change.

        (*) http://code.google.com/p/pywebsocket/source/detail?r=265

        * Scripts/webkitpy/thirdparty/__init__.py: Bump pywebsocket version to 0.5.1.

2010-07-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add toolbar and toolbar item validation for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=42422

        * MiniBrowser/MBToolbarItem.h: Added.
        * MiniBrowser/MBToolbarItem.m: Added.
        (-[MBToolbarItem validate]):

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController validateUserInterfaceItem:]):

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/BrowserWindow.xib:

2010-07-15  Victor Wang  <victorw@chromium.org>

        Unreviewed, add victorw irc nickname to committer list.

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

2010-07-15  Adam Roben  <aroben@apple.com>

        Make killing Apache more reliable (on both Mac and Windows)

        We previously had two ways of determining whether we had succeeded in
        killing Apache:
          1) checking the return value of kill(0, $apachePID)
          2) checking whether Apache's PID file still exists

        On Cygwin, Apache doesn't always delete its PID file when it exits,
        making (2) unreliable. We unfortunately misdiagnosed this as an
        impotency of Perl's kill function, which led to r63177 and r63355.

        Now that we know that the real problem is that Apache doesn't always
        delete its PID file on Windows, we can make a much better fix: always
        use method (1) to determine whether we've killed Apache.

        Fixes <http://webkit.org/b/42415> Killing Apache is unreliable,
        leading to regression test failures (and general annoyance).

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/httpd.pm:
        (openHTTPD): Moved killing code from here to killHTTPD. Added a call
        to delete the PID file in case Apache doesn't do this itself when
        killed. Our later logic relies on the PID file being deleted after
        this point.
        (closeHTTPD): Removed killing logic and changed to just call killHTTPD
        instead. killHTTPD's logic is a bit different from the logic we had
        here, for the reasons stated above.
        (killHTTPD): Added. Code came from openHTTPD.
        (handleInterrupt): Bonus fix for Mac: don't hang when pressing Ctrl-C!
        On Mac, don't try to kill Apache when we receive a signal, as Apache
        will already have been killed by this point (though for some reason
        this isn't detected by our killing logic in killHTTPD). On Cygwin, we
        still need to kill Apache manually.

2010-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42399
        Update MiniBrowser for WKFrameNavigationType 

        * MiniBrowser/mac/BrowserWindowController.m:
        (_decidePolicyForNavigationAction):
        (_decidePolicyForNewWindowAction):

2010-07-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        http://bugs.webkit.org/show_bug.cgi?id=42406
        Make SunSpider work better with roots.

        * Scripts/sunspider-compare-results: fix argument bug
        * Scripts/webkitdirs.pm: look inside JavaScriptCore if jsc isn't top-level.

2010-07-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Hook up back/forward in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=42397

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController goBack:]):
        (-[BrowserWindowController goForward:]):

2010-07-15  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        [Mac] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37929

        Implements DRT support for markerTextForListItem in the Mac port.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::markerTextForListItem): Implemented.

2010-07-15  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Update the port names to be more specific.  Before this patch,
        port-specific results for Mac would end up in the wrong place.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2010-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        WebKit needs a rebaselining tool (finally)
        https://bugs.webkit.org/show_bug.cgi?id=42339

        This is a very basic rebaselining tool.  It's not
        quite as fancy as chromium's as it will only handle
        updating failing results.  It cannot yet handle adding new
        results, or updating results where the results should not
        replace existing results.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py: Added.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Added.

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63352.
        http://trac.webkit.org/changeset/63352
        https://bugs.webkit.org/show_bug.cgi?id=42341

        Broke plugin-initiate-popup-window.html and plugin-javascript-
        access.html on snow leopard (Requested by abarth on #webkit).

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):

2010-07-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Lower WebKitTestRunner notifyDone timeout to 6.0 for now, to make it easier to grind through the failures.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63346.
        http://trac.webkit.org/changeset/63346
        https://bugs.webkit.org/show_bug.cgi?id=42295

        Broke lots of tests, some of which probably just need new
        results (Requested by aroben on #webkit).

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult):

2010-07-14  Adam Roben  <aroben@apple.com>

        Speed up killing of Apache on Windows

        Fixes <http://webkit.org/b/42289> Killing Apache (and thus quitting
        run-webkit-tests) takes a long time on Windows

        Reviewed by Darin Adler and Jon Honeycutt.

        * Scripts/webkitperl/httpd.pm:
        (closeHTTPD): Use taskkill to kill Apache and its child processes.
        Perl's kill seems ineffectual. We were already using taskkill, but
        only after trying kill 20 times. Since kill never works, let's just
        skip it entirely.

2010-07-14  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Add a new parameter to the test plugin to allow to specify a script and a
        mouse/keyboard event. The specified script will be evaluated in the browser
        when the specified event is received by the plugin.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (handleEventCarbon):
        (handleEventCocoa):

2010-07-14  Adam Roben  <aroben@apple.com>

        Make urlSuitableForTestResult work for http: URLs, too

        Fixes <http://webkit.org/b/42276>
        http/tests/loading/preload-slow-loading.php and
        http/tests/mime/uppercase-mime-type.html fail on Windows.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Don't bail if the URL starts with http://.
        We want this function to work for those URLs, too!

2010-07-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Add placebo versions of some repaint test functions to WebKitTestRunner - good enough for non-pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=42227

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize new bool
        members.
        (WTR::LayoutTestController::display): Dummy method.
        (WTR::displayCallback): Call the dummy.
        (WTR::repaintSweepHorizontallyCallback): ditto
        (WTR::testRepaintCallback): ditto
        (WTR::LayoutTestController::staticFunctions): Expose new methods.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::setTestRepaint): Set the flag (which currently does
        nothing).
        (WTR::LayoutTestController::setTestRepaintSweepHorizontally): ditto

2010-07-13  Andreas Kling  <andreas.kling@nokia.com>

        Unreviewed. Adding myself as committer.

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

2010-07-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Darin Adler.

        Prevent assertion/duplicate loads for non-deferred subtitute-data loads

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

        MainResourceLoader uses the member m_initialRequest to store requests for future
        deferred loads. When doing the actual load in handleDataLoadNow(), we therefore
        have to clear this request so that subsequent entries into the loader will not
        start yet another load.

        This can happen as a result of a PageGroupLoadDeferrer going out of scope when
        returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false),
        but only in the case of using both substitute-data and non-deferred main resource
        load together. That's why two new DRT functions were added:

         * queueLoadHTMLString()
         * setDeferMainResourceLoad()

        The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac
        and Win the hook uses new SPI in WebDataSource. For Qt a new static member was
        added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (queueLoadHTMLStringCallback):
        (setDeferMainResourceDataLoadCallback):
        (LayoutTestController::staticFunctions):
        (LayoutTestController::queueLoadHTMLString):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::deferMainResourceDataLoad):
        (LayoutTestController::setDeferMainResourceDataLoad):
        * DumpRenderTree/WorkQueueItem.h:
        (LoadHTMLStringItem::LoadHTMLStringItem):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setDeferMainResourceDataLoad):
        (LayoutTestController::queueLoadHTMLString):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/WorkQueueItemQt.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/qt/WorkQueueItemQt.h:
        (LoadHTMLStringItem::LoadHTMLStringItem):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (LoadHTMLStringItem::invoke):
        * DumpRenderTree/wx/WorkQueueItemWx.cpp:
        (LoadHTMLStringItem::invoke):

2010-07-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Nikolas Zimmermann.

        Activate test fonts for layout tests in WebKitTestRunner (on Mac)
        https://bugs.webkit.org/show_bug.cgi?id=42153

        * WebKitTestRunner/InjectedBundle/ActivateFonts.h: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize): Activate fonts on startup.
        * WebKitTestRunner/InjectedBundle/mac: Added.
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm: Added.
        (WTR::activateFonts): Activate our fonts.
        * WebKitTestRunner/InjectedBundle/win: Added.
        * WebKitTestRunner/InjectedBundle/win/ActivateFonts.cpp: Added.
        (WTR::activateFonts): Dummy version.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Copy fonts to bundle;
        add more files.
        * WebKitTestRunner/fonts: Added.
        * WebKitTestRunner/fonts/AHEM____.TTF: Added.
        * WebKitTestRunner/fonts/ColorBits-A.png: Added.
        * WebKitTestRunner/fonts/ColorBits.ttf: Added.
        * WebKitTestRunner/fonts/WebKit Layout Tests 2.ttf: Added.
        * WebKitTestRunner/fonts/WebKit Layout Tests.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher100.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher200.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher300.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher400.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher500.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher600.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher700.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher800.ttf: Added.
        * WebKitTestRunner/fonts/WebKitWeightWatcher900.ttf: Added.

2010-07-13  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Remove check-header-includes, as it didn't turn out to be very useful.
        https://bugs.webkit.org/show_bug.cgi?id=41970

        * Scripts/check-header-includes: Removed.

2010-07-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej Stachowiak.

        Make WebKit2 be built by build-webkit (so it will be built by build.webkit.org bots)
        https://bugs.webkit.org/show_bug.cgi?id=40922
        
        Always build WebKit2 on Windows. Necessary since our WebKit build on
        Windows is packaged into a DLL with WebKit2.

        * Scripts/build-webkit: Always build WebKit2 on Windows.

2010-07-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        One http test timing out on Windows can cause all future tests to time out
        https://bugs.webkit.org/show_bug.cgi?id=42146
        
        There have been multiple times on the Windows bots where one http test timing out causes all future
        http tests to time out. This is because the httpd process becomes unresponsive. When an http test
        times out, we should restart httpd on Cygwin to prevent this.

        * Scripts/old-run-webkit-tests: If an http test timed out on Cygwin, close httpd and restart it.
        * Scripts/webkitperl/httpd.pm: Add additional logic to closeHTTPD to teach it about taskkill if
            using kill fails.

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Remove use of auto_ptr in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42134
        
        Replaced auto_ptr with PassOwnPtr / OwnPtr.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::WKStringToUTF8):
        (WTR::InjectedBundlePage::dump):
        (WTR::InjectedBundlePage::addMessageToConsole):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::WKStringToUTF8):
        (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Need support for a WebKit2-specific Skipped list (and initially add accessibility tests to it)
        https://bugs.webkit.org/show_bug.cgi?id=42132

        * Scripts/old-run-webkit-tests: In --webkit-test-runner mode, add mac-wk2 to list of
        platform directories.

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        Make WebKitTestRunner resize the view specially for the W3C SVG tests.
        https://bugs.webkit.org/show_bug.cgi?id=42126

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation): Store the path as a C
        string for later use.
        (WTR::TestInvocation::~TestInvocation):
        (WTR::sizeWebViewForCurrentTest): Resize the WebView to the proper
        size, depending on whether this is a W3C SVG test.
        (WTR::TestInvocation::invoke): Call the size function.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::resizeTo): Implement.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::resizeTo): Placeholder.

2010-07-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Ensure DRT loads GAIL (Gtk+ module), for a11y tests
        https://bugs.webkit.org/show_bug.cgi?id=38648

        Add the GTK_MODULES envvar (set to "gail") to the clean
        environment when running DRT for the Gtk+ port

        * Scripts/old-run-webkit-tests:

2010-07-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [GTK] Support pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=31518

        Finish support for pixel tests on GTK+.

        * DumpRenderTree/PixelDumpSupport.cpp: Remove unecessary RetainPtr include (only
        works on CoreFoundation systems) and add missing cstdio include.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp: Switch to using the MD5 support found
        in JSC library. MD5.cpp and MD5.h are only available for the Windows build.
        (computeMD5HashStringForBitmapContext): The number of bytes per row should be the row stride
        of the image, not the row stride multiplied by the width. Use JSC MD5 implementation to calculate
        the MD5 hash here. According to glibc manpages, using snprintf to build a string in unsupported
        by the ANSI standard and this fails on Linux, so unroll the loop here.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h: Correct some constructor misbehavior.
        (BitmapContext::BitmapContext): There is no reason to check the value of the
        m_context member in the constructor and it certainly should not be freed. Instead
        just initialize it with the incoming value.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Fix the order of includes.
        (dump): Actually call dumpWebViewAsPixelsAndCompareWithExpected when it is time to
        dump pixels.
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Added.
        (createBitmapContextFromWebView):
        * GNUmakefile.am: Add new files to the build.

2010-07-12  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Remove stray "raise e" that got included in a previous patch.  This
        caused the EWS bots to turn red instead of purple when a patch failed
        to apply.

        * Scripts/webkitpy/tool/commands/stepsequence.py:

2010-07-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63101.
        http://trac.webkit.org/changeset/63101
        https://bugs.webkit.org/show_bug.cgi?id=42103

        Broke one API test (Requested by xan_ on #webkit).

        * Scripts/old-run-webkit-tests:

2010-07-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        Fix crashes in Windows DumpRenderTree.

        * DumpRenderTree/win/ResourceLoadDelegate.cpp: (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        If we return an error, WebKit will call continueWithoutCredentialForAuthenticationChallenge()
        again on a destroyed sender.

2010-07-12  Adam Roben  <aroben@apple.com>

        Windows failure-to-launch fix

        * DumpRenderTree/win/DumpRenderTree.vcproj: Copy CoreVideo.dll and
        CoreVideo.pdb into WebKitOutputDir in the post-build event, too, like
        we already do for CoreFoundation, CFNetwork, etc.

2010-07-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Ensure DRT loads GAIL (Gtk+ module), for a11y tests
        https://bugs.webkit.org/show_bug.cgi?id=38648

        Add the GTK_MODULES envvar (set to "gail") to the clean
        environment when running DRT for the Gtk+ port

        * Scripts/old-run-webkit-tests:

2010-07-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        Do respond even if handlesAuthenticationChallenges() is false. Pretend that the user pressed
        the Cancel button.

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add location bar (Ctrl+L) shortcut in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=42082

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::openLocation):
        * QtTestBrowser/mainwindow.h:

2010-07-12  Adam Roben  <aroben@apple.com>

        Make the Python autoinstaller not use a dead SourceForge server

        Fixes <http://webkit.org/b/42080> webkit-patch is broken due to
        offline SourceForge server

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/thirdparty/__init__.py: Use
        surfnet.dl.sourceforge.net instead of hivelocity.dl.sourceforge.net,
        which seems to be down.

2010-07-12  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests print how many tests timed out when exiting
        early

        The number of timed-out tests is taken into account when deciding
        whether to exit early. Leaving it out of the output just makes the
        script look buggy (because it might say something like "Exiting early
        after 0 crashes.").

        Fixes <http://webkit.org/b/42077> run-webkit-tests prints confusing
        messages when exiting early due to crashes and time-outs

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (stopRunningTestsEarlyIfNeeded): When stopping, print the number of
        timed-out tests, too.

2010-07-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement animation-related methods for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42053
        
        Implemented numberOfActiveAnimatiosn and pauseAnimationAtTimeOnElementWithId. Many
        animation tests were hanging otherwise.

        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::numberOfActiveAnimations):
        (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (WTR::numberOfActiveAnimationsCallback):
        (WTR::pauseAnimationAtTimeOnElementWithIdCallback):
        (WTR::LayoutTestController::staticFunctions):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:

2010-07-11  Daniel Bates  <dbates@rim.com>

        Reviewed by David Kilzer.

        Enable executable support for svn-apply and svn-unapply
        https://bugs.webkit.org/show_bug.cgi?id=39409

        Connect up the Git and SVN executable bit support in parseDiff() so that
        executable bit changes are propagated via the returned diff hash to the
        patch function in svn-apply and svn-unapply.

        * Scripts/VCSUtils.pm:
          - Modified parseDiff() to call parseSvnDiffProperties when
            it finds the start of an SVN property change diff.
          - Removed FIXME comment above parseSvnDiffProperties() since
            it is now being used by parseDiff().
          - Export method scmToggleExecutableBit() now that we added the
            executableBitDelta hash key. (This should have been exported
            when we added this function in Bug #38423 <https://bugs.webkit.org/show_bug.cgi?id=38423>).
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated results for:
            "rename (with executable bit change)"
              - Test value of executableBitDelta (now that we have support).
            "SVN: binary file (isBinary true)"
              - Remove the property change diff from svnConvertedText. We plan
                to remove svnConvertedText in the future. So, we decided
                against adding such support to any new code, such as the
                property parsing routines. Therefore, we do not keep SVN
                converted text for property change diffs.
          - Added unit tests:
            "SVN: file change diff with property change diff"
            "SVN: file change diff, followed by property change diff on different file"
            "SVN: property diff, followed by file change diff"
            "SVN: copied file with property change"
            "SVN: two consecutive property diffs"
            "SVN: binary file with executable bit change"
            "SVN: binary file followed by property change on different file"
            "SVN: binary file followed by file change on different file"
            "SVN: file change diff with property change, followed by property change diff"
            "SVN: file change diff with property change, followed by file change diff"

2010-07-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement waitUntilDone and notifyDone for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42049

        With this fix, most of the DOM tests pass.
        
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage): Track the main page. Not
        a great way to do it in the future case where we may get multiple
        pages - we really need a way to send it over from the ui process.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::page): A way to get the main page.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Initialize m_isLoading to false.
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): Track that we
        are loading.
        (WTR::InjectedBundlePage::dump): Factor into a method so this can be
        called by the layout test controller. Also, cancel any pending watchdogs.
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Note that we are done loading.
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (WTR::InjectedBundlePage::isLoading): A way to track if we are loading.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
        (WTR::LayoutTestController::LayoutTestController): Initialize m_waitToDump
        to false.
        (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Invalidate 
        the watchdog.
        (WTR::waitUntilDoneWatchdogFired): Static helper for the watchdog timer.
        (WTR::LayoutTestController::setWaitToDump): Set the flag.
        (WTR::LayoutTestController::waitToDumpWatchdogTimerFired): Handle the case
        where waitUntilDone times out.
        (WTR::LayoutTestController::notifyDone): Dump, if loading is done.
        (WTR::waitUntilDoneCallback): JS glue for waitUntilDone.
        (WTR::notifyDoneCallback): JS glue for notifyDone.
        (WTR::LayoutTestController::staticFunctions): Add waitUntilDone and notifyDone
        to the layoutController.
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
        (WTR::LayoutTestController::waitToDump): Inline method to get the wait state.

2010-07-09  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Dan Bernstein.

        Windows testers running Windows 7 were hanging during test_kill_process. Changing the
        number of attempts from 3 to 10 fixes the problem on the new bots (and doesn't seem to
        slow down the tests).

        * Scripts/webkitpy/common/system/executive.py:

2010-07-09  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mac build fix
        https://bugs.webkit.org/show_bug.cgi?id=41967

        Adding file PluginObjectMac.mm and frameworks Cocoa and QuartzCore.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-09  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] [WebKit2] Add navigation actions to MiniBrowser toolbar
        https://bugs.webkit.org/show_bug.cgi?id=41966

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

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        * Scripts/build-webkit:

2010-07-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        r63004 broke some python tests
        https://bugs.webkit.org/show_bug.cgi?id=42007

        AbstractStep now checks options.no_squash and options.squash, so
        they needed to have real values. Mock would return an object for those,
        which would then act as if the values were True.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py:

2010-07-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        --squash should go away and become the default
        https://bugs.webkit.org/show_bug.cgi?id=39624

        If there are local commits and working copy changes, then prompt the user
        whether to continue. Setting git config webkit-patch.commit_should_always_squash
        true bypasses the prompt.

        --git-commit=HEAD.. operates on working copy changes only.
        --git-commit=committish operates on a range of commits as a single commit.
            e.g. --git-commit=HEAD only operates on the HEAD commit.
            --git-commit=HEAD~4..HEAD~2 will operate on HEAD~3 and HEAD~2 as a single commit.

        --no-squash and --squash are left in with descriptive error messages if used.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/api_unittest.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/net/rietveld.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/style/optparser.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/checkstyle_unittest.py: Removed.
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2010-07-09  Mark Rowe  <mrowe@apple.com>

        Add two new Windows test build slaves.

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

2010-07-09  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        rebaseline_chromium_webkit_tests missing --use_drt option on linux
        https://bugs.webkit.org/show_bug.cgi?id=41985

        This adds in the --use_drt option for rebaseline_chromium_webkit_tests
        so that it works on linux. This is essentially a "compile-fix" for the
        script.

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-07-09  Nico Weber  <thakis@chromium.org>

        Unreviewed. Adding myself as committer.

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

2010-07-09  David Kilzer  <ddkilzer@apple.com>

        Revert "<http://webkit.org/b/41788> commit-log-editor: wrong ChangeLog read when invoked from subdir with git"

        This reverts commit r62692.

        * Scripts/commit-log-editor:

2010-07-08  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        cleanup json_results_generator dependencies so that non-layout-tests can also use it safely
        https://bugs.webkit.org/show_bug.cgi?id=38693

        Introduced a new base class JSONResultsGeneratorBase that doesn't
        have any dependency on layout_tests packages.
        Turned JSONResultsGenerator into a wrapper class of the base class
        so that the old code can work with it during the cleanup.

        Added json_results_generator_unittest.py.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py: Added

2010-07-09  Abhishek Arya  <inferno@chromium.org>

        Unreviewed.

        Marking myself as a committer.

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

2010-07-09  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        Implement MiniBrowser for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=40233

        * MiniBrowser/qt/BrowserWindow.cpp: Added.
        (createNewPage):
        (BrowserView::BrowserView):
        (BrowserView::resizeEvent):
        (BrowserView::load):
        (BrowserView::view):
        (BrowserWindow::BrowserWindow):
        (BrowserWindow::load):
        (BrowserWindow::changeLocation):
        (BrowserWindow::~BrowserWindow):
        * MiniBrowser/qt/BrowserWindow.h: Added.
        (BrowserView::~BrowserView):
        * MiniBrowser/qt/MiniBrowser.pro: Added.
        * MiniBrowser/qt/main.cpp: Added.
        (main):

2010-07-09  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Introduce the Qt autotest launcher.

        Qt autotests should be executed more frequently, ideally by the Qt
        build bot. This is the first step to provide the tests more accessible.

        [Qt] It should be easier to run all Qt's autotests.
        https://bugs.webkit.org/show_bug.cgi?id=31625

        * Scripts/run-qtwebkit-tests: Added.

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue should merge to TOT when checkout needs update
        https://bugs.webkit.org/show_bug.cgi?id=41944

        There are a bunch of different designs that are possible here.  This
        one merges to top of tree by cleaning out the working copy and
        re-applying the patch.  Once you decide to merge that way, you need to
        decide who's going to retry.  In this patch, we retry in the child
        process instead of plumbing the failure reason to the master process.

        This patch is difficult to test end-to-end, but hopefully it will work.
        :)

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:

2010-07-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Add a script to check for unnecessary includes in header files.
        https://bugs.webkit.org/show_bug.cgi?id=41894

        * Scripts/check-header-includes: Added.

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add --html5-treebuilder option to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=41922

        We're down to one or two regressions in the HTML5lib test suite.  It's
        getting to be time to look at fixing LayoutTests.

        * Scripts/old-run-webkit-tests:

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

        Fix Tiger plugin test failures; the #ifdefs were incorrect, resulting
        in the drawing model never getting set on Tiger.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2010-07-08  Aaron Boodman  <aa@chromium.org>

        Reviewed by Timothy Hatcher.

        Add the ability for user scripts and user styles to affect just the top frame.

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

        * DumpRenderTree/LayoutTestController.h: Added new allFrames param.
        * DumpRenderTree/LayoutTestController.cpp: Ditto.
        (addUserScriptCallback):
        (addUserStyleSheetCallback):
        * DumpRenderTree/chromium/LayoutTestController.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Ditto.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):

2010-07-08  Adele Peterson  <adele@apple.com>

        Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.

        Test infrastructure for https://bugs.webkit.org/show_bug.cgi?id=41721
        <rdar://problem/8158561> Missing plug-in indicator should have a pressed state

        Log when the missing plugin button is pressed.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:didPressMissingPluginButton:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface):
        (UIDelegate::createWebViewWithRequest):
        (UIDelegate::drawBackground):
        (UIDelegate::decidePolicyForGeolocationRequest):
        (UIDelegate::didPressMissingPluginButton):
        * DumpRenderTree/win/UIDelegate.h:

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

        Fix the Tiger build.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

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

        Fix windows build.

        #ifdef code for Mac.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

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

        Reviewed by Anders Carlsson.

        Allow the TestPlugin to use Core Animation rendering for testing
        https://bugs.webkit.org/show_bug.cgi?id=41872
        
        Add the ability for the TestPlugin to use the CoreAnimation rendering model
        when available, based on the "drawingmodel" attribute of the embed tag:
            drawingmodel="coreanimation"

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Add PluginObjectMac.mm
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Add some macros so we can detect
        when building on Tiger. Add a void* coreAnimationLayer member.
        
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm: Added.
        (createCoreAnimationLayer): Obj-C method to create the CALayer.
        
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New): Look for the drawingmodel attribute to decide which drawing
        model to use.
        (NPP_Destroy): Release the CALayer if we have one.
        (NPP_GetValue): Return the retained CALayer.

2010-07-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Support pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=31518

        Convert this file from CRLF to NL line endings. It will soon
        be used on more than just the WinCairo platform.

        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        (writeFunction):
        (printPNG):
        (computeMD5HashStringForBitmapContext):
        (dumpBitmap):

2010-07-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Enable Data Execution Prevention for our test harnesses on Windows
        https://bugs.webkit.org/show_bug.cgi?id=41882

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * WebKitAPITest/WebKitAPITest.vcproj:
        * WebKitTestRunner/win/WebKitTestRunner.vcproj:

2010-07-07  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add DRT support for pageProperty etc.

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageSizeAndMarginsInPixels):
        (LayoutTestController::pageProperty):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-07-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Remove a warnings from the ImageDiff build by using the proper
        printf format string for the gsize data type.

        * DumpRenderTree/gtk/ImageDiff.cpp:
        (printImage): Use the proper printf format string for the gsize data type.

2010-07-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=41653
        Add new WebKitTestRunner project for Windows

        * WebKitTestRunner/WebKitTestRunnerPrefix.h: 
        Similar to how it's done in DumpRenderTree, define max and min early
        on so that they don't get replaced by a macro requiring 2 arguments.

        * WebKitTestRunner/win: Added.
        * WebKitTestRunner/win/WebKitTestRunner.sln: Added.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Added.
        * WebKitTestRunner/win/main.cpp: Added.
        (main): Implemented

        Added these files with stubbed out functions:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::page):
        * WebKitTestRunner/win/TestControllerWin.cpp: Added.
        (WTR::TestController::initializeInjectedBundlePath):
        * WebKitTestRunner/win/TestInvocationWin.cpp: Added.
        (WTR::TestInvocation::runUntil):

2010-07-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Implement ImageDiff and add it to the build system
        https://bugs.webkit.org/show_bug.cgi?id=41779

        Add the initial implementation of the ImageDiff tool for the GTK+
        port. This is an essential tool for doing pixel tests. The implementation
        is based on the Mac and Chromium ports.

        * DumpRenderTree/gtk/ImageDiff.cpp: Added.
        (readPixbufFromStdin): Added.
        (differenceImageFromDifferenceBuffer): Ditto.
        (calculateDifference): Ditto.
        (printImage): Ditto.
        (printImageDifferences): Ditto.
        (main): Ditto.
        * GNUmakefile.am: Add ImageDiff to the WebKitTools build scripts.

2010-07-08  Jay Civelli  <jcivelli@chromium.org>

        Unreviewed. Adding myself as a committer.

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

2010-07-08  Adam Roben  <aroben@apple.com>

        Make Windows stop running tests from platform/mac

        r62742 made a change (at my suggestion!) that caused us to start
        looking for tests in platform/mac, rather than just looking for
        expected results in platform/mac. This patch just undoes that part of
        r62742.

        Fixes <http://webkit.org/b/41855> REGRESSION (r62742): Windows runs
        tests from platform/mac, but shouldn't

        Reviewed by Antti Koivisto and Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (top level): Removed "mac-snowleopard" and "mac" from @winPlatforms,
        so we won't look in those directories for tests to run.
        (expectedDirectoryForTest): Added back code from pre-r62742 to look in
        platform/mac-snowleopard and platform/mac for expected results.

2010-07-08  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed. Adding myself as a reviewer.

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

2010-07-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Update my e-mail in committers.py

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

2010-07-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Dumitru Daniliuc.

        VCSUtils.pm complains about uninitialized value $newLine
        https://bugs.webkit.org/show_bug.cgi?id=41333

        Fixes an issue where VCSUtils::fixChangeLogPatch() may read off the end of
        an array when fixing a change log entry that overlaps with an earlier
        entry. In particular, when a patch contains a change log entry inserted
        earlier in the change log file, but after an entry with the same author
        and date.

        * Scripts/VCSUtils.pm:
            - Added for-loop constraint to fixChangeLogPatch() so that it does not
              read off the end of the @overlappingLines array.
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl: Added unit test.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Comment out a part of TestNetscapePlugin that caused tests to fail on Tiger and Leopard.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2010-07-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [DRT/Chromium] Support for indeterminate checkbox
        https://bugs.webkit.org/show_bug.cgi?id=41747

        Import http://src.chromium.org/viewvc/chrome?view=rev&revision=51499

        * DumpRenderTree/chromium/WebThemeControlDRT.cpp:
        (WebThemeControlDRT::draw):
        * DumpRenderTree/chromium/WebThemeControlDRT.h:
        (WebThemeControlDRT::):
        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
        (WebThemeEngineDRT::paintButton):

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Clean up MiniBrowser Xcode project.

        - Use xcconfig files.
        - Rename plists to canonical Info.plist
        - Remove localizations.

        * MiniBrowser/Configurations: Added.
        * MiniBrowser/Configurations/Base.xcconfig: Added.
        * MiniBrowser/Configurations/DebugRelease.xcconfig: Added.
        * MiniBrowser/Configurations/MiniBrowser.xcconfig: Added.
        * MiniBrowser/Configurations/WebBundle.xcconfig: Added.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/WebBundle-Info.plist: Removed.
        * MiniBrowser/mac/BrowserStatisticsWindowController.m:
        (-[BrowserStatisticsWindowController initWithThreadedWKContextRef:processWKContextRef:]):
        * MiniBrowser/mac/BrowserWindow.xib: Added.
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithPageNamespace:]):
        * MiniBrowser/mac/English.lproj: Removed.
        * MiniBrowser/mac/English.lproj/BrowserWindow.xib: Removed.
        * MiniBrowser/mac/English.lproj/InfoPlist.strings: Removed.
        * MiniBrowser/mac/English.lproj/MainMenu.xib: Removed.
        * MiniBrowser/mac/Info.plist: Copied from MiniBrowser/mac/MiniBrowser-Info.plist.
        * MiniBrowser/mac/MainMenu.xib: Added.
        * MiniBrowser/mac/MiniBrowser-Info.plist: Removed.
        * MiniBrowser/mac/WebBundle/Info.plist: Copied from MiniBrowser/WebBundle-Info.plist.

2010-07-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix two regressions
        https://bugs.webkit.org/show_bug.cgi?id=41745

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):
         Repaint three times to fix svg/W3C-SVG-1.1/struct-use-01-t.svg
         and svg/custom/use-on-g-containing-foreignObject-and-image.svg
         though test_shell does it twice. Probably DRT needs it because
         DRT delays painting as possible.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix build.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_destroy_stream):

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix the GTK+ and Qt test failures by merging the newly added code from TestNetscapePlugin/main.cpp

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_stream):
        (webkit_test_plugin_destroy_stream):
        (webkit_test_plugin_write_ready):
        (webkit_test_plugin_write):

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Don't hard code the Mac OS X 10.6 SDK for MiniBrowser. 

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Use the correct XP_MACOSX define instead of XP_MAC. This was causing test failures on some platforms.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):

2010-07-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Need to have a way to specify different results for Windows XP and 7
        https://bugs.webkit.org/show_bug.cgi?id=41776
        
        Add the ability to have platform/win-xp, platform/win-vista, and platform/win-7
        subdirectories, so we can have different results for tests on Windows XP, Windows
        Vista, and Windows 7.

        Windows XP will try the order: win-xp, win-vista, win-7, win, mac-snowleopard, mac.
        Windows Vista will try the order: win-vista, win-7, win, mac-snowleopard, mac.
        Windows 7 will try the order: win-7, win, mac-snowleopard, mac.

        This matches the behavior of the mac.

        * Scripts/old-run-webkit-tests: Add multiple platforms for Windows, and if we are on XP
            or Vista, try looking in other win-* subdirectories before win.
        * Scripts/webkitdirs.pm: Add some helper functions to determine what version of Windows
            we are running.

2010-07-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Remove ASSERT_NOT_REACHED in some functions
        https://bugs.webkit.org/show_bug.cgi?id=41753

        The original code of the following functions in
        test_shell_devtools_client.cc have NOTIMPLEMENTED(), not
        ASSERT_NOT_REACHED(). The program shouldn't stop at these
        functions.

        * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
        (DRTDevToolsClient::activateWindow):
        (DRTDevToolsClient::closeWindow):
        (DRTDevToolsClient::dockWindow):
        (DRTDevToolsClient::undockWindow):

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Test that we call NPP_DestroyStream if a plug-in returns -1 from its NPP_Write function
        https://bugs.webkit.org/show_bug.cgi?id=41821

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (pluginGetProperty):
        (pluginSetProperty):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        Add and initialize the returnNegativeOneFromWrite property.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_NewStream):
        Set the stream type to NP_NORMAL so we'll get write callbacks.

        (NPP_DestroyStream):
        Treat the onstreamdestroy attribute as a function name and not a string.

        (NPP_WriteReady):
        Have this return a nonzero value.

        (NPP_Write):
        If returnNegativeOneFromWrite is true return -1.

2010-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for machines with both MSVC 2005 and 2008 installed. Ensures the
        latest version is selected by default, and allows the version to be specified.

        * wx/build/settings.py:

2010-07-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: TextArea should return AXSelectedTextRange of 0,0 if the cursor is not in the text area
        https://bugs.webkit.org/show_bug.cgi?id=41810

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::selectedTextRange):

2010-07-07  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Build fix after r62700.

        * GNUmakefile.am: Update the source list to reflect the new TestNetscapePlugIn
        source file locations.

2010-07-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        change --exit-after-n-crashes to --exit-after-n-crashes-or-timeouts
        https://bugs.webkit.org/show_bug.cgi?id=41814

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        * Scripts/old-run-webkit-tests:

2010-07-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        add --exit-after-n-crashes to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=41811

        Change the bots at build.webkit.org to use --exit-after-n-crashes
        instead of --exit-after-n-failures since we want to be able to have
        more than 20 failures on those bots, but more than 20 crashes means
        something should be rolled out.

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-07-07  Brian Weinstein  <bweinstein@apple.com>

        Fix the Windows build by removing win/TestNetscapePlugin/main.cpp from the
        TestNetscapePlugin project, because this was removed from the tree.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Unify Mac and Windows TestNetscapePlugin main.cpp files
        https://bugs.webkit.org/show_bug.cgi?id=41798
        
        * DumpRenderTree/DumpRenderTree.sln:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (strcasecmp):
        (NP_Initialize):
        (NP_GetEntryPoints):
        (NP_Shutdown):
        (NPP_New):
        (NPP_Destroy):
        (NPP_HandleEvent):
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp: Removed.

2010-07-07  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. pageProperty needs to return a value.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageProperty):

2010-07-07  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/41788> commit-log-editor: wrong ChangeLog read when invoked from subdir with git

        Reviewed by Anders Carlsson.

        For both svn and git, commit-log-editor is invoked from the root
        of the working directory.  Unlike svn, git returns a list of
        changed files that are relative to the directory where the
        command was invoked.  This caused the ChangeLog file in the root
        directory to be read instead of the ChangeLog in the current
        directory.

        The fix is to use $ENV{PWD} as the base directory when fixing
        the path to the ChangeLog files.  With svn, this has no net
        effect since $ENV{PWD} is the root of the working directory and
        the ChangeLog paths are already relative to that directory.
        With git, $ENV{PWD} is the directory that the commit was invoked
        from, which fixes the ChangeLog paths so that the correct files
        are read when creating the commit log entry.

        Note that the call to makeFilePathRelative() was supposed to
        address this issue, but it doesn't because (a) it does nothing
        with svn working directories by design, and (b) it does nothing
        with git working directories because it's invoked when the
        current directory is the root of the working directory, thus
        giving no relative path.

        * Scripts/commit-log-editor: Removed call to
        makeFilePathRelative() since since it does nothing.  Moved code
        to fix up $changeLog path so that it's fixed before trying to
        open the file, and use $ENV{PWD} as the base path.  Also use
        canonicalizePath() to clean up paths with "../" in them.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Qt build.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix Qt build.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Rename TestNetscapePlugin.subproj and move platform specific files to subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=41781

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp.
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h.
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp.
        * DumpRenderTree/TestNetscapePlugIn/TestObject.h: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h.
        * DumpRenderTree/TestNetscapePlugIn/mac/Info.plist: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def.
        * DumpRenderTree/TestNetscapePlugIn/win/resource.h: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/resource.h.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Removed.

2010-07-07  Andras Becsi  <abecsi@webkit.org>

        Unreviewed trivial fix.

        Remove DUMPRENDERTREE_TEMP environment variable from NRWT
        which was checked in accidentally in r62635.

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

2010-07-07  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Pass port specific environment to server process.
        https://bugs.webkit.org/show_bug.cgi?id=41593

        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-07-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Fix a wrong dup detection of rebaseline-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=41644

        rebaseline-chromium-webkit-tests used ImageDiff with 0.1%
        tolerance. We don't need tolerance for rebaseline.

        * Scripts/webkitpy/layout_tests/port/base.py:
          Add optional tolerance parameter to diff_image().
        * Scripts/webkitpy/layout_tests/port/test.py:
          Add optional tolerance parameter to diff_image().
        * Scripts/webkitpy/layout_tests/port/webkit.py:
          Add optional tolerance parameter to diff_image(), and pass it to ImageDiff command.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
          diff_files() always calls diff_image() with tolerance=0.
          diff_files() is used only by rebaseline-chromium-webkit-tests.

2010-07-06  Sam Weinig  <sam@webkit.org>

        Fix MiniBrowser build.

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add support for dumping the contents of messages to the console to WebKitTestRunner

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::_addMessageToConsole):
        (WTR::InjectedBundlePage::addMessageToConsole):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41708
        Add dumpAsText support for WebKitTestRunner

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::reset): Reset the LayoutTestController for each test.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Use the new WKBundleFrameCopyInnerText
        API to dump the main frames text.

2010-07-06  Darin Adler  <darin@apple.com>

        Fix Chromium build.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::didCreateDataSource): Call leakPtr instead of release.
        (WebViewHost::didNavigateWithinPage): Ditto.
        (WebViewHost::updateURL): Ditto.

2010-07-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] build-webkit should not run autogen.sh unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=41704

        * Scripts/webkitdirs.pm: Only run autogen.sh during a build if GNUmakefile
        doesn't exist. Autotools should re-run autogen.sh when necessary. Also do
        some very minor cleanup.

2010-07-06  Darin Adler  <darin@apple.com>

        Try to fix Chromium build.

        * DumpRenderTree/chromium/WebViewHost.cpp: Added include of PassOwnPtr.h.

2010-07-06  Darin Adler  <darin@apple.com>

        Fix build.

        * WebKitAPITest/TestsController.cpp:
        (WebKitAPITest::TestsController::addTest): Use leakPtr instead of release.

2010-07-06  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 40558 - [DRT/Chromium] Upstream TestShellDevTools for Chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=40558

        Upstream DevTools for Chromium DRT.
        (original Chromium files rev. 51287)

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp: Added.
        (DRTDevToolsAgent::DRTDevToolsAgent):
        (DRTDevToolsAgent::setWebView):
        (DRTDevToolsAgent::sendMessageToFrontend):
        (DRTDevToolsAgent::forceRepaint):
        (DRTDevToolsAgent::runtimeFeatureStateChanged):
        (DRTDevToolsAgent::injectedScriptSource):
        (DRTDevToolsAgent::injectedScriptDispatcherSource):
        (DRTDevToolsAgent::debuggerScriptSource):
        (DRTDevToolsAgent::asyncCall):
        (DRTDevToolsAgent::call):
        (DRTDevToolsAgent::webDevToolsAgent):
        (DRTDevToolsAgent::attach):
        (DRTDevToolsAgent::detach):
        (DRTDevToolsAgent::setTimelineProfilingEnabled):
        (DRTDevToolsAgent::evaluateInWebInspector):
        (DRTDevToolsAgent::dispatchMessageLoop):
        * DumpRenderTree/chromium/DRTDevToolsAgent.h: Added.
        (DRTDevToolsAgent::~DRTDevToolsAgent):
        (DRTDevToolsAgent::hostIdentifier):
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp:
        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
        (DRTDevToolsCallArgs::DRTDevToolsCallArgs):
        (DRTDevToolsCallArgs::~DRTDevToolsCallArgs):
        (DRTDevToolsCallArgs::callsCount):
        * DumpRenderTree/chromium/DRTDevToolsClient.cpp: Added.
        (DRTDevToolsClient::DRTDevToolsClient):
        (DRTDevToolsClient::~DRTDevToolsClient):
        (DRTDevToolsClient::sendMessageToAgent):
        (DRTDevToolsClient::sendDebuggerCommandToAgent):
        (DRTDevToolsClient::activateWindow):
        (DRTDevToolsClient::closeWindow):
        (DRTDevToolsClient::dockWindow):
        (DRTDevToolsClient::undockWindow):
        (DRTDevToolsClient::asyncCall):
        (DRTDevToolsClient::call):
        (DRTDevToolsClient::allMessagesProcessed):
        * DumpRenderTree/chromium/DRTDevToolsClient.h:
        * DumpRenderTree/chromium/EventSender.cpp:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::setTimelineProfilingEnabled):
        (LayoutTestController::evaluateInWebInspector):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::~TestShell):
        (TestShell::createDRTDevToolsClient):
        (TestShell::showDevTools):
        (TestShell::closeDevTools):
        (TestShell::runFileTest):
        (TestShell::createNewWindow):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::drtDevToolsAgent):
        (TestShell::drtDevToolsClient):
        * DumpRenderTree/chromium/config.h:

2010-07-06  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Don't pass image hash to DRT when pixel tests are disabled.
        https://bugs.webkit.org/show_bug.cgi?id=41597

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

2010-07-05  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(r60652): WebKitTools/Scripts/ensure-valid-python should cleanup temporary directory
        https://bugs.webkit.org/show_bug.cgi?id=41612

        * Scripts/ensure-valid-python: File::Temp::tempdir call fixed.

2010-07-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        We should be able to specify a bug to block for webkit-patch upload
        https://bugs.webkit.org/show_bug.cgi?id=41648

        This will be useful for working on the HTML5 parser.

        * Scripts/webkitpy/tool/steps/createbug.py:
        * Scripts/webkitpy/tool/steps/options.py:

2010-07-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        The style checker exempts gtk2drawing.h when it should exempt gtkdrawing.h
        https://bugs.webkit.org/show_bug.cgi?id=41017

        * Scripts/webkitpy/style/checker.py: Exempt gtkdrawing.h instead of gtk2drawing.h
        * Scripts/webkitpy/style/checker_unittest.py: Update the unit test to reflect the change.

2010-07-04  MORITA Hajime  <morrita@google.com>

        rebaseline-chromium-webkit-tests: UnicodeDecodeError
        https://bugs.webkit.org/show_bug.cgi?id=41589

        * run() method can result non-utf-8 bytes, that causes utf-8
          decoding fail.  Fixed to disable decoding.
        * Fixed Git.find_checkout_root() to make a test pass.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-07-03  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix DumpRenderTree userStyleSheet handling.
        https://bugs.webkit.org/show_bug.cgi?id=41570

        DumpRenderTree did only set the userStyleSheet at
        layoutTestController.setUserStyleSheetEnabled().

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setUserStyleSheetEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-07-03  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] support dumpChildFrameScrollPositions

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

        Unskip:

        http/tests/navigation/anchor-subframeload.html
        http/tests/navigation/relativeanchor-frames.html

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpFrameScrollPosition):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::shouldDumpChildFrameScrollPositions):
        (LayoutTestController::dumpChildFrameScrollPositions):

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename new scripts so that they don't make autocompleting run-webkit-tests annoying.

        * Scripts/debug-test-runner: Copied from Scripts/debug-webkittestrunner.
        * Scripts/debug-webkittestrunner: Removed.
        * Scripts/run-test-runner: Copied from Scripts/run-webkittestrunner.
        * Scripts/run-webkittestrunner: Removed.

2010-07-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Some http tests fail on Windows with Cygwin 1.7
        https://bugs.webkit.org/show_bug.cgi?id=41537
        
        With Cygwin 1.7, the registry key at SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/
        doesn't exist anymore, because the mount points are stored in /etc/fstab. However, we
        just need root mount point, which is defined in SOFTWARE\\Cygwin\\setup.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (resolveCygwinPath): Fall back to SOFTWARE\\Cygwin\\setup if 
            SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/ doesn't work.

2010-06-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Separate DerivedSources per-project
        https://bugs.webkit.org/show_bug.cgi?id=41109

        The JavaScriptCore cppflags used to include the top-level DerivedSources directory
        allowing the tools to build as a side-effect. Now that the top-level directory
        is no longer in the list of JavaScriptCore includes, include it explicitly.

        * GNUmakefile.am:

2010-07-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make context menus show up in the right place in QTestBrowser

        Context menus were shown at scene-relative coordinates for
        QGraphicsWebView while QMenu expects them to be global. The
        change to the QWidget case was to get rid of the mapToGlobal.

        * QtTestBrowser/webview.cpp:

2010-07-01  Robert Hogan <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump frames in ascending alphabetical order of title

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2010-07-01  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed. 

        Fix the GTK+ build after r62278.

        * Scripts/webkitdirs.pm: If the make arguments have already been specified,
        let them override the automatic CPU detection for autotools builds.

2010-07-01  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Fix the Windows build after r62278.

        * Scripts/num-cpus: Use FindBin to add the Scripts directory to the list of library directories.

2010-07-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

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

        Pass the appropriate -j<#> flag to make when building autotools builds.
        This causes make to spawn that many number of child processes for doing
        parallel builds.

        * Scripts/num-cpus: Use the newly abstracted numberOfCPUs to return the number
        of CPUs. This makes the script work across more platforms.
        * Scripts/webkitdirs.pm: Create a numberOfCPUs/determineNumberOfCPUs to determine the
        number of CPUs across several platforms. Use this new function to determine the appropriate
        arguments to pass to make for doing parallel builds with autotools build files.

2010-07-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Laszlo Gombos.

        [Qt][Symbian] Bumped up the maximum heap size to 96MB

        * QtTestBrowser/QtTestBrowser.pro: Removed explicit heap size declaration
        and use the one from WebKit.pri instead.

2010-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Promote webkit-patch land-safely to main help
        https://bugs.webkit.org/show_bug.cgi?id=41446

        I've been using this command a bunch and recommending it to folks.  We
        should show it in main help as it's past the experimental phase.

        * Scripts/webkitpy/tool/commands/upload.py:

2010-06-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Shinichiro Hamaji.

        rebaseline-chromium-webkit-tests doesn't do diffs right with a Git checkout of WebKit
        https://bugs.webkit.org/show_bug.cgi?id=38775

        - Introduced SCM.show_head() and SCM.diff_for_file().
        - Replaced direct svn invocations with newly implement SCM methods.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-06-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Allow MiniBrowser to open local files
        https://bugs.webkit.org/show_bug.cgi?id=41104

        Wire up the openDocument: message with an NSOpenPanel, so we can open
        local files.
        
        Also change the xib so that the window remembers its size.
        
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate frontmostBrowserWindowController]):
        (-[BrowserAppDelegate openDocument:]):
        (-[BrowserAppDelegate openPanelDidEnd:returnCode:contextInfo:]):
        * MiniBrowser/mac/English.lproj/BrowserWindow.xib:

2010-06-30  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Anders Carlsson.

        Add debug-webkittestrunner and cleanup related scripts.

        * Scripts/debug-webkittestrunner: Added.
        * Scripts/run-webkittestrunner:
        * Scripts/webkitdirs.pm:

2010-06-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after recent changes to LayoutTestController.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41389
        Make WebKitTestRunner work with more than one test at a time.

        This converts WebKitTestRunner to a similar model as DumpRenderTree,
        where there is a single WKView and each test is run it, rather than
        the design I was using where each test got its own WKView.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didRecieveMessage):
        (WTR::InjectedBundle::reset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        (WTR::TestController::_didRecieveMessageFromInjectedBundle):
        (WTR::TestController::didRecieveMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::mainWebView):
        (WTR::TestController::pageNamespace):
        (WTR::TestController::context):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2010-06-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Only 10 websites can be loaded consecutively when using QtWebkit 2.0
        https://bugs.webkit.org/show_bug.cgi?id=40446

        We quickly run out of memory on Symbian when loading web pages. This is
        caused by the default heap size, which is not suited for a web browser.

        This change bumps the max heap size to 32MB.

        * QtTestBrowser/QtTestBrowser.pro:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch land allow the user to continue even if the builders are red
        https://bugs.webkit.org/show_bug.cgi?id=41395

        I don't think it's good that we've been teaching people
        to always pass --ignore-builders.  At least land is now
        useable w/o --ignore-builders.

        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:

2010-06-29  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] support dumpResourceResponseMIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=41260

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpResourceResponseMIMETypes):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-29  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Resize scene when Qt DRT WebPage receives a geometry change request
        https://bugs.webkit.org/show_bug.cgi?id=41173

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::setViewGeometry):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-06-29  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Deal with postEvent in case of graphics based DRT
        https://bugs.webkit.org/show_bug.cgi?id=41174

        QGraphicsScene does not have a postEvent method, so make scene
        send the event, in case of graphics based DRT, and delete it after that.

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

2010-06-29  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make switchFocus() method works with QGraphicsWebView in Qt DRT
        https://bugs.webkit.org/show_bug.cgi?id=41172

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::switchFocus):

2010-06-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Make DRT more coherent with other ports to allow reusing more tests
        https://bugs.webkit.org/show_bug.cgi?id=40009

        Make sure "AXRole: ", "AXTitle: " and "AXDescription: " prefixes
        are used when returning those values, for coherency with other ports.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):

2010-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62106.
        http://trac.webkit.org/changeset/62106
        https://bugs.webkit.org/show_bug.cgi?id=41346

        "Broke editing tests" (Requested by xan_ on #webkit).

        * Scripts/old-run-webkit-tests:

2010-06-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Ensure DRT loads GAIL (Gtk+ module), for a11y tests
        https://bugs.webkit.org/show_bug.cgi?id=38648

        Add the GTK_MODULES envvar (set to "gail") to the clean
        environment when running DRT for the Gtk+ port

        * Scripts/old-run-webkit-tests:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Switch test-html5-parser back to using runner.html.

        * Scripts/test-html5-parser:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Restore webkit-runner.html for use with new tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41317

        For now, we just want to run webkit-runner when we test-html5-parser.

        * Scripts/test-html5-parser:

2010-06-23  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Scripts/build-webkit:

2010-06-28  Gustavo Noronha Silva  <gns@gnome.org>

        Rubber-stamped by Xan Lopez.

        Update webkitdirs's knowledge of our library's name.

        * Scripts/webkitdirs.pm:

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41299
        Build up WebKitTestRunner output in the InjectedBundle

        Simplify WebKitTestRunner by building up the output in the InjectedBundle
        and sending it over postMessage when done, instead of using the async
        WKPageRenderTreeExternalRepresentation.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::didRecieveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::os):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::WKStringToUTF8):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::WKStringToUTF8):
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::initializeMainWebView):
        (WTR::TestInvocation::_didRecieveMessageFromInjectedBundle):
        (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2010-06-28  Robert Hogan  <robert@webkit.org>

        Unreviewed, rolling out r62021.
        http://trac.webkit.org/changeset/62021
        https://bugs.webkit.org/show_bug.cgi?id=41261

        Broke http/navigation tests among other

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add run-webkittestrunner to run WebKitTestRunner with the appropriate
        environment.

        * Scripts/run-webkittestrunner: Added.
        * Scripts/webkitdirs.pm:

2010-06-28  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump frames in ascending alphabetical order of title

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):

2010-06-28  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump bf history of child windows

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dumpBackForwardList):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41288
        WebKit2: Add frame API for InjectedBundle code

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame):

2010-06-28  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser does not have a "Load" button ; therefore, unable to load pages on touch only symbian devices (portrait mode).
        https://bugs.webkit.org/show_bug.cgi?id=38597

        Fix behavior so reload button really acts as a load and a reload button.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::changeLocation):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Does not compile with -DGSEAL_ENABLE
        https://bugs.webkit.org/show_bug.cgi?id=37851

        Fix build with GSEAL enabled.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gtk_widget_get_window):
        (prepareMouseButtonEvent):
        (mouseMoveToCallback):
        (mouseWheelToCallback):
        (keyDownCallback):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for GTK+3
        https://bugs.webkit.org/show_bug.cgi?id=41253

        Adapt build system for 3.x support.

        * GNUmakefile.am:

2010-06-10  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [QT][S60] build-webkit scripts picks wrong make spec for windows build
        https://bugs.webkit.org/show_bug.cgi?id=41198

        Instead of checking for existence of %EPOCROOT% on windows, mandatory use of --symbian flag for symbian builds. 

        * Scripts/webkitdirs.pm:
        (determineIsSymbian): remove check for %EPOCROOT% as one can build for windows port of QT as well

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to test the new HTML5 TreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41276

        Adam was concerned that someone might make their port
        depend on this setting (I guess we had some trouble with that
        with the HTML5Parser setting), so I littered the code with warnings.

        test-html5-parser now tests this code path.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (initializeGlobalsFromCommandLineOptions):
        * Scripts/test-html5-parser:

2010-06-27  MORITA Hajime  <morrita@google.com>

        Unreviewed. 
        
        Some never-called @staticmethods touched self. 
        Fixed it to replace these self with a class.

        * Scripts/webkitpy/common/checkout/scm.py:

2010-06-27  MORITA Hajime  <morrita@google.com>

        Unreviewed.
        
        Fixed exception raising syntax that is pointed out at
        https://bugs.webkit.org/show_bug.cgi?id=41153

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py: 
          Removed a bad line that I accidentally checked-in at last revision.

2010-06-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        rebaseline-chromium-webkit-tests should add or remove files to local git repository
        https://bugs.webkit.org/show_bug.cgi?id=41153

        - Added SCM.add() and SCM.remove()
        - Replaced "svn add" and "svn remove"
          rebaseline_chromium_webkit_tests.py: in with SCM method equivalents.
        - add "-U" and "-q" options to rebaseline_chromium_webkit_tests.py
          for debugging purpose.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-06-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Improve default value handling for page format properties.
        https://bugs.webkit.org/show_bug.cgi?id=41150

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePageNumber):
        (parsePageNumberSizeMarings):
        (pageSizeAndMarginsInPixelsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pageSizeAndMarginsInPixels):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pageSizeAndMarginsInPixels):

2010-06-21  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT Support for setCustomPolicyDelegate

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setCustomPolicyDelegate):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-26  Robert Hogan  <robert@webkit.org>

        Unreviewed, Qt build fix following http://trac.webkit.org/changeset/61879
        
        Remove qwebscriptworld.h from LayoutTestControllerQt.cpp - it is no longer
        exported.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add a build-webkit option for enabling Web Timing support.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        * Scripts/build-webkit:

2010-06-25  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser does not have a "Load" button ; therefore, unable to load pages on touch only symbian devices (portrait mode).
        https://bugs.webkit.org/show_bug.cgi?id=38597

        Make the reload button act as a load button as well.

        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::changeLocation):

2010-06-25  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by Dmitry Titov.

        Add empty abortModal() method to all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=40864

        Add an empty abortModal() stub to LayoutTestController on all platforms to get rid of platform specific #ifs in
        platform independent LayoutTestController code.  Without this change, layout tests using LayoutTestController tests
        that use abortModal will become mac specific which is not desirable.

        * DumpRenderTree/LayoutTestController.cpp:
        (abortModalCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::abortModal):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::abortModal):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::abortModal):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::abortModal):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::abortModal):

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41226
        Flesh out injected bundle code for WebKitTestRunner and add basic LayoutTestController.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Added.
        (WTR::InjectedBundle::shared):
        (WTR::InjectedBundle::InjectedBundle):
        (WTR::InjectedBundle::_didCreatePage):
        (WTR::InjectedBundle::_willDestroyPage):
        (WTR::InjectedBundle::_didRecieveMessage):
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::didCreatePage):
        (WTR::InjectedBundle::willDestroyPage):
        (WTR::InjectedBundle::didRecieveMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Added.
        (WTR::InjectedBundle::layoutTestController):
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        (WKBundleInitialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Added.
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::~InjectedBundlePage):
        (WTR::InjectedBundlePage::_didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::_didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::_didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::_didCommitLoadForFrame):
        (WTR::InjectedBundlePage::_didFinishLoadForFrame):
        (WTR::InjectedBundlePage::_didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::_didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::_didClearWindowForFrame):
        (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        (WTR::InjectedBundlePage::didFinishLoadForFrame):
        (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didReceiveTitleForFrame):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Added.
        (WTR::InjectedBundlePage::page):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp: Added.
        (WTR::LayoutTestController::create):
        (WTR::LayoutTestController::LayoutTestController):
        (WTR::LayoutTestController::~LayoutTestController):
        (WTR::dumpAsTextCallback):
        (WTR::layoutTestControllerObjectFinalize):
        (WTR::LayoutTestController::makeWindowObject):
        (WTR::LayoutTestController::getJSClass):
        (WTR::LayoutTestController::staticFunctions):
        * WebKitTestRunner/InjectedBundle/LayoutTestController.h: Added.
        (WTR::LayoutTestController::dumpAsText):
        (WTR::LayoutTestController::setDumpAsText):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make WebKitTestRunner really work with run-webkit-tests. 

        - Add Forwarding headers to allow some cleanup.

        * WebKitTestRunner/ForwardingHeaders: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/ASCIICType.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Assertions.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Atomics.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/FastMalloc.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/HashMap.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/HashSet.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/HashTraits.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Locker.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/MainThread.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/MathExtras.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Noncopyable.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/OwnPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/OwnPtrCommon.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/PassOwnPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/PassRefPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Platform.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/RefCounted.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/RefPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/RetainPtr.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/StringExtras.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/ThreadSafeShared.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Threading.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/ThreadingPrimitives.h: Added.
        * WebKitTestRunner/ForwardingHeaders/wtf/Vector.h: Added.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dump): Dump the right number of #EOFs.
        * WebKitTestRunner/TestInvocation.h:

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add support for WebKitTestRunner to old-run-webkit-tests

        - Also adds a script to build WebKitTestRunner for old-run-webkit-tests to use.

        * Scripts/build-webkittestrunner: Added.
        * Scripts/old-run-webkit-tests:

2010-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Incremental build failed on Chromium ews
        https://bugs.webkit.org/show_bug.cgi?id=41011

        The division of responsibility between update-webkit --chromium and
        build-webkit --chromium is slightly unclear.  In this patch, we make
        build-webkit --chromium also update DEPS and re-run GYP in case the
        developer has changed either since they updated.

        This change is also helpful for the EWS, which wants to update DEPS and
        re-run GYP after applying patches, but the EWS doesn't want to run
        update-webkit --chromium because it has a dirty working copy.

        * Scripts/webkitdirs.pm:

2010-06-25  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Support evaluateScriptInIsolatedWorld()

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

        Remove evaluateScriptInIsolatedWorld() from QtWebKit API.
        Remove QWebScriptWorld from exported headers.
        Confine support to DumpRenderTreeSupportQt so that the tests can pass.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-25  Anders Carlsson  <andersca@apple.com>

        Revert accidental part and add a newline.

        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2010-06-25  Anders Carlsson  <andersca@apple.com>

        Rubber-stamped by Dan Bernstein.

        Add a LOG macro that expands to a no-op by default.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.m:
        (_didRecieveMessageFromInjectedBundle):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowShouldClose:]):
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFinishLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didReceiveTitleForFrame):
        (_didFirstLayoutForFrame):
        (_didFirstVisuallyNonEmptyLayoutForFrame):
        (_didBecomeUnresponsive):
        (_didBecomeResponsive):
        (_decidePolicyForNavigationAction):
        (_decidePolicyForNewWindowAction):
        (_createNewPage):
        (_showPage):
        (_closePage):
        (_didNavigateWithNavigationData):
        (_didPerformClientRedirect):
        (_didPerformServerRedirect):
        (_didUpdateHistoryTitle):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindowForFrame):
        (_didCreatePage):
        (_willDestroyPage):
        (_didRecieveMessage):

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue is taking too long to land patches because of red trees
        https://bugs.webkit.org/show_bug.cgi?id=41194

        Instead of checking for the tree to be green, we'll just spin hot
        trying to land patches.  This is probably too extreme in ignoring the
        tree, but I think we should try it for a while to see if we have
        trouble.  That will help us find the right balance.

        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Clean up the use of gdk_window_get_root_coords in EventSender
        https://bugs.webkit.org/show_bug.cgi?id=40843

        Define the version for old GTK+s in a way that is forward-compatible
        and clean up the logic a bit.

        * DumpRenderTree/gtk/EventSender.cpp:
        (gdk_window_get_root_coords): Renamed and cleaned up.
        (prepareMouseButtonEvent): Remove #ifdefs.
        (mouseMoveToCallback): Remove #ifdefs.

2010-06-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Fix NewRunWebKitTests to work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=41180

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added "perl" as first arguments,
            because Windows fails to understand what we're asking of it.

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The url passed to the WebView during layout tests is invalid
        https://bugs.webkit.org/show_bug.cgi?id=40832

        Set the test URL to the full real file URL and do a small cleanup.
        Previously a URL like file://relative/path/to/test.html was passed
        to the WebView. This malformed file URL would be returned by
        webkit_web_view_get_url and webkit_web_frame_get_url.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldLogFrameLoadDelegates): Change to take a const string& as the argument.
        (shouldOpenWebInspector): Change to take a const string& as the argument.
        (shouldEnableDeveloperExtras): Change to take a const string& as the argument.
        (runTest): Pass the full file:// URL to the view. Remove the superfluous url variable.

2010-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix WebKitTestRunner Makefile typos.

        * WebKitTestRunner/Makefile:

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Carlson.

        DumpRenderTree part of testing <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebViewToConsistentStateBeforeTesting):
        Clear the general pasteboard in between tests so Cut,Copy, and setData on ClipboardData won't have lasting effects.

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41086
        Add new WebKitTestRunner project (ie. DRT for WebKit2).

        - Mac only.
        - run-webkit-tests has not been modified to call it yet.
        - Only dumps the render tree at this time. 

        * WebKitTestRunner: Added.
        * WebKitTestRunner/Configurations: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig: Added.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig: Added.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Added.
        * WebKitTestRunner/InjectedBundle: Added.
        * WebKitTestRunner/InjectedBundle-Info.plist: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp: Added.
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFinishLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didReceiveTitleForFrame):
        (_didClearWindow):
        (_didCreatePage):
        (_willDestroyPage):
        (_didRecieveMessage):
        (WKBundleInitialize):
        * WebKitTestRunner/Makefile: Added.
        * WebKitTestRunner/PlatformWebView.h: Added.
        (WTR::PlatformWebView::platformView):
        * WebKitTestRunner/TestController.cpp: Added.
        (WTR::TestController::shared):
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::runTest):
        (WTR::TestController::runTestingServerLoop):
        (WTR::TestController::run):
        * WebKitTestRunner/TestController.h: Added.
        (WTR::TestController::verbose):
        (WTR::TestController::injectedBundlePath):
        * WebKitTestRunner/TestInvocation.cpp: Added.
        (WTR::createWKURL):
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::dump):
        (WTR::TestInvocation::initializeMainWebView):
        (WTR::TestInvocation::didStartProvisionalLoadForFrame):
        (WTR::TestInvocation::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WTR::TestInvocation::didFailProvisionalLoadWithErrorForFrame):
        (WTR::TestInvocation::didCommitLoadForFrame):
        (WTR::TestInvocation::didFinishLoadForFrame):
        (WTR::TestInvocation::didFailLoadForFrame):
        (WTR::TestInvocation::renderTreeExternalRepresentationFunction):
        (WTR::TestInvocation::renderTreeExternalRepresentationDisposeFunction):
        * WebKitTestRunner/TestInvocation.h: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Added.
        * WebKitTestRunner/mac: Added.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm: Added.
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::page):
        * WebKitTestRunner/mac/TestInvocationMac.mm: Added.
        (WTR::TestInvocation::runUntil):
        * WebKitTestRunner/mac/main.mm: Added.
        (main):

2010-06-24  Luiz Agostini  <luiz.agostini@openbossa.org>

        Unreviewed. Adding myself to the committers list.

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

2010-06-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, adding new LayoutTestController methods and enabling SVG_FOREIGN_OBJECT.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):
        * wx/build/settings.py:

2010-06-23  James Robinson  <jamesr@chromium.org>

        Unreviewed.  Add my IRC handle to committers.py so the sheriffbot can yell at me.

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

2010-06-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Correct Chromium test configuration
        https://bugs.webkit.org/show_bug.cgi?id=41057

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
         - Add "--use-drt" option for NRWT. It is required for Chromium and
           ignored for other platforms.
         - Skip JSC test on Chromium
        * BuildSlaveSupport/test-result-archive:
          Add Chromium support.

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41073
        WebKit2: Flesh out more of the InjectedBundle client API

        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didStartProvisionalLoadForFrame):
        (_didReceiveServerRedirectForProvisionalLoadForFrame):
        (_didFailProvisionalLoadWithErrorForFrame):
        (_didCommitLoadForFrame):
        (_didFinishLoadForFrame):
        (_didFailLoadWithErrorForFrame):
        (_didReceiveTitleForFrame):
        (_didClearWindowForFrame):
        (_didCreatePage):
        (_willDestroyPage):
        (WKBundleInitialize):

2010-06-23  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement page format data programming interface.
        Add methods for testing.
        https://bugs.webkit.org/show_bug.cgi?id=37538

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePageNumber):
        (isPageBoxVisibleCallback):
        (pageAreaRectInPixelsCallback):
        (preferredPageSizeInPixelsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::isPageBoxVisible):
        (LayoutTestController::pageAreaRectInPixels):
        (LayoutTestController::preferredPageSizeInPixels):

2010-06-23  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Shinichiro Hamaji.

        Follow proper convention for if/switch/while as I've discovered
        them to be through my review processes.
        https://bugs.webkit.org/show_bug.cgi?id=40723

        Modified test so that if( foo ) is not allowed as it appears not
        to be the accepted convention.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Run clean-header-guards to fix some header guards
        https://bugs.webkit.org/show_bug.cgi?id=41044

        No functional changes, thus no tests.

        This entire change was generated by running
        clean-header-guards, and then reverting changes
        to files which shouldn't be changed.  Those which
        are left all should be updated.

        Some of these changes are just fixing 755 permissions
        to be 644, since it seems various files have the wrong
        execute bit which don't need it.  clean-header-guards
        made those (welcome) permission fixes unintentionally.

        * DumpRenderTree/chromium/WebThemeControlDRT.h:
        * DumpRenderTree/chromium/WebThemeEngineDRT.h:
        * QtTestBrowser/fpstimer.h:

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename HTMLDocumentParser to LegacyHTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=41043

        Update the hash.

        * Scripts/do-webcore-rename:

2010-06-22  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Shinichiro Hamaji.

        Follow proper convention for variable declaration spacing.
        https://bugs.webkit.org/show_bug.cgi?id=40724

        Modified test so that 'int   a;' is not allowed.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Add Tony Gentilcore now that he's a committer.

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

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove Gtk 64-Release bot from core since it's broken
        https://bugs.webkit.org/show_bug.cgi?id=41022

        This bot alone has been responsible for more than 72 hours of
        commit-queue blockage in the last week.  The bot is broken -- keeps
        losing its display server or similar.  Until the Gtk folks can fix the
        bot, we need to remove it from core.  The WebKit community can't keep
        it green as is.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-06-21  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Fix the Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=40972

        * DumpRenderTree/win/ImageDiff.vcproj:

2010-06-21  Prasad Tammana  <prasadt@chromium.org>

        Reviewed by Darin Adler, Dmitry Titov.

        DumpRenderTree should allow tests with modal dialogs
        https://bugs.webkit.org/show_bug.cgi?id=35350

        * DumpRenderTree/LayoutTestController.cpp:
        (abortModalCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::abortModal):
        Add abortModal method to LayoutTestController and make it available from script.

        * DumpRenderTree/mac/UIDelegate.mm: Add support for showModalDialog.
        (-[UIDelegate modalWindowWillClose:]): Observer for NSWindowWillCloseNotifications to call
        abortModal from when modal window closes.
        (-[UIDelegate webViewRunModal:]): Delegate method for showModalDialog to run the modal loop.

2010-06-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.
        
        Rename DrawingAreaProxyUpdateChunk to ChunkedUpdateDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=40948
        
        Have the script look in WebKit2.

        * Scripts/do-webcore-rename:

2010-06-21  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unskip plugins/get-url-that-the-resource-load-delegate-will-disallow.html

        It's a Mac-specific test so just add the required LayoutTestController
        function as a no-op to avoid failing. Similar approach adopted by other
        ports.

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

        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::addDisallowedURL):

2010-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=40940
        Add message passing support to the WebKit2 API.

        - Add some test messages.

        * MiniBrowser/mac/AppDelegate.m:
        (_didRecieveMessageFromInjectedBundle):
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
        (_didClearWindow):
        (_didCreatePage):
        (_didRecieveMessage):
        (WKBundleInitialize):

2010-06-21  Drew Wilson  <atwilson@chromium.org>

        Unreviewed.

        Rolling back 61551 and 61555 due to test failures.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setEditingBehavior):
        * DumpRenderTree/mac/UIDelegate.mm:

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make DumpRenderTree build with clang++

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (-[LocalPasteboard setPropertyList:forType:]):
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow keyDown:]):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        (LayoutTestController::isCommandEnabled):

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        * Scripts/build-webkit:

2010-06-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Initialization for http/tests/loading/
        https://bugs.webkit.org/show_bug.cgi?id=40902

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

2010-06-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Unreviewed.

        Adding myself to the committers list.

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

2010-06-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add --allow-external-pages option
        https://bugs.webkit.org/show_bug.cgi?id=40762

        Add --allow-external-pages introduced by Chromium r45403.
        http://src.chromium.org/viewvc/chrome?view=rev&revision=45403

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::allowExternalPages):
        (TestShell::setAllowExternalPages):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest):

2010-06-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Adam Barth.

        Sheriffbot: Should allow "r" in SVN_REVISION
        https://bugs.webkit.org/show_bug.cgi?id=40889

        * Scripts/webkitpy/tool/bot/irc_command.py: remove a leading "r" from SVN_REVISION if it exists
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: test an SVN_REVISION with a leading r.

2010-06-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dimitri Glazkov.

        Python Tests Fail after r61508
        https://bugs.webkit.org/show_bug.cgi?id=40891

        Test's regex list needed to be updated to match the new
        regex list in the source code. Added new bots to the
        example_buildbots list.

        Regex list fixed in r61512. Updated bot list.

        * Scripts/webkitpy/common/net/buildbot_unittest.py:

2010-06-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Tweak test regexp list to match the change in http://trac.webkit.org/changeset/61508.

        * Scripts/webkitpy/common/net/buildbot_unittest.py: Tweaked regexp.

2010-06-19  Justin Schuh  <jschuh@chromium.org>

        Unreviewed.

        Adding myself to the committers list.

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

2010-06-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40882
        Add ability to have a WebProcess per WebContext.

        Move to use new shared contexts API.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate getCurrentPageNamespace]):
        (-[BrowserAppDelegate validateMenuItem:]):
        (-[BrowserAppDelegate _setProcessModel:]):
        (-[BrowserAppDelegate setSharedProcessProcessModel:]):
        (-[BrowserAppDelegate setSharedThreadProcessModel:]):
        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):

2010-06-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        [Qt] Support evaluateScriptInIsolatedWorld()

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add three more non-core Chromium builders to start testing DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=40335

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added 3 builders.

2010-06-18  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Plumbing for top-level frame names
        https://bugs.webkit.org/show_bug.cgi?id=40430

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::reset):
        Changed obsolete call to clearName() to use setName(WebString()) instead.

2010-06-18  Sam Weinig  <weinig@apple.com>

        Rolling http://trac.webkit.org/changeset/61297 back in.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/WebBundle/WebBundleMain.c: Removed.
        * MiniBrowser/mac/WebBundle/WebBundleMain.m: Added.
        (_didClearWindow):
        (_didCreatePage):
        (WKBundleInitialize):

2010-06-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=40803
        TestNetscapePlugin has an incorrect implementation of "property" property

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: (pluginGetProperty): Don't
        pass a static string back, it's going to be released by NPAPI implementation.

2010-06-18  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed.

        Adding myself to the committers list.

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

2010-06-17  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] cleanup redundant DEPS value and remove buildbot cleanup code
        https://bugs.webkit.org/show_bug.cgi?id=40615

        * Scripts/update-webkit-chromium: remove directory removal of third_party in old checkouts

2010-06-17  Ada Chan  <adachan@apple.com>

        Rolling out http://trac.webkit.org/changeset/61297 due to build errors.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/WebBundle/WebBundleMain.c: Copied from MiniBrowser/mac/WebBundle/WebBundleMain.c.
        * MiniBrowser/mac/WebBundle/WebBundleMain.m: Removed.

2010-06-17  Darin Adler  <darin@apple.com>

        One more try at fix for Chromium build.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Use set again instead of =.

2010-06-17  Darin Adler  <darin@apple.com>

        Fix Chromium build.

        I didn't realize that neither Chromium nor Qt share the DumpRenderTree
        code with all the other platforms! Wow, that should be fixed at some point.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Changed back to using "new".
        * DumpRenderTree/chromium/TestShell.h: Changed back to OwnPtr.

2010-06-17  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        LayoutTestController in the Qt DRT is not using refs :)

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

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use adoptRef and create functions in more code paths
        https://bugs.webkit.org/show_bug.cgi?id=40760

        * DumpRenderTree/DumpRenderTree.h: Change gLayoutTestController to a RefPtr.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::create): Added.
        * DumpRenderTree/LayoutTestController.h: Declare the create function.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell): Use create instead of new.
        * DumpRenderTree/chromium/TestShell.h: Use RefPtr instead of OwnPtr.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): Use RefPtr and create instead of OwnPtr and new.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest): Use RefPtr and create instead of OwnPtr and new.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Use create and releaseRef
        instead of new.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Use RefPtr and create instead of OwnPtr and new.

        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        (runTest): Use RefPtr and create instead of OwnPtr and new.
        (MyApp::OnInit): Removed unneeded code to delete the layout
        test controller. This is done during each test.

2010-06-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Fix a bug of Windows pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=40763

        * DumpRenderTree/chromium/TestEventPrinter.cpp:
        (TestShellPrinter::handleImage):

2010-06-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Fix crash on Mac Release
        https://bugs.webkit.org/show_bug.cgi?id=40759

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect): We should not use m_canvas directly because
          it is created lazily in canvas().

2010-06-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after new method addition.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageProperty):

2010-06-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Set current working directory for each of tests
        https://bugs.webkit.org/show_bug.cgi?id=40668

        This change fixes tests with eventSender.beginDragWithFiles().

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

2010-06-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] r60803 broke media/controls-drag-timebar.html
        https://bugs.webkit.org/show_bug.cgi?id=40269

        Only queue events while the mouse button is down, if drag mode is enabled. Some
        tests may disable drag mode, to prevent the queuing of events in this situation.

        * DumpRenderTree/gtk/EventSender.cpp:
        (sendOrQueueEvent): Only queue events here if dragMode is true.

2010-06-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Remove the abuse of GDK_CURRENT_TIME in the DRT
        https://bugs.webkit.org/show_bug.cgi?id=40600

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Remove logic adding an offset to GDK_CURRENT_TIME.

2010-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add a hidden land-cowboy command to webkit-patch to help land quick
        build fixes.

        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2010-06-16  Adam Roben  <aroben@apple.com>

        Convert console messages to UTF-8 before printing them

        Speculative fix for <http://webkit.org/b/40731> REGRESSION (r61234):
        http/tests/security/xssAuditor/embed-tag-null-char.html and
        http/tests/security/xssAuditor/object-embed-tag-null-char.html fail on
        Windows. (I can't test the fix because Apache is crashing on my
        computer.)

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (toUTF8): Extracted the code into an overload that takes a wide string
        and a length, then added an overload that takes a wstring.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Declare the new toUTF8
        overload.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole): Use toUTF8 to convert to
        UTF-8 instead of letting printf convert to the current code page.

2010-06-16  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Plumbing for top-level frame names
        https://bugs.webkit.org/show_bug.cgi?id=40430

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):
        Migrate to new createView() API.
        * DumpRenderTree/chromium/WebViewHost.h:
        Remove obsolete createView() methods, add new createView() API that takes a frameName parameter.

2010-06-16  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Scroll wheel event support to graphics based DRT
        https://bugs.webkit.org/show_bug.cgi?id=40577

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

2010-06-16  Adam Roben  <aroben@apple.com>

        Remove a stray newline from the Windows version of TestNetscapePlugin

        Reviewed by Alexey Proskuryakov.

        Fixes <http://webkit.org/b/40728>
        plugins/geturlnotify-during-document-teardown.html fails on Windows

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_Destroy): Removed extra newline that the Mac version doesn't
        have.

2010-06-16  Adam Roben  <aroben@apple.com>

        Respect LayoutTestController::isPrinting on Windows

        This gets some printing tests closer to passing (like
        printing/page-rule-in-media-query.html).

        Fixes <http://webkit.org/b/40727>.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Pass LayoutTestController::isPrinting to
        IWebFramePrivate::renderTreeAsExternalRepresentation.

2010-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Enable HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=40650

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

2010-06-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement render style selection for pages to support CSS3 Paged Media.
        https://bugs.webkit.org/show_bug.cgi?id=35961

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePagePropertyParameters):
        (pagePropertyCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageProperty):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pageProperty):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pageProperty):

2010-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40630
        WebKit2: Add mechanism to inject code into the WebProcess on startup

        Add initial InjectedBundle support.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/WebBundle-Info.plist: Added.
        Add test InjectedBundle to the project.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        Get the path to the WebBundle from the the main bundle and pass it to the new
        WKContextCreateWithInjectedBundlePath function.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didChangeProgress):
        Fix the build.  This has been broken for a while.

        * MiniBrowser/mac/WebBundle: Added.
        * MiniBrowser/mac/WebBundle/WebBundleMain.c: Added.
        (_didCreatePage):
        (WKBundleInitialize):
        Add really basic InjectedBundle.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create):
        Switch from WKContextCreateWithProcessModel to WKContextCreate and remove commented out code.

2010-06-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Adding myself to the reviewers list.
        https://bugs.webkit.org/show_bug.cgi?id=40693

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

2010-06-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Switch to using GIO methods instead of realpath in GtkLauncher to determine
        the file URI. This should remove warnings about realpath being undefined
        when compiling with '-ansi'.

        * GtkLauncher/main.c:
        (filenameToURL): Use GIO instead of realpath to determine file URI.

2010-06-15  Adam Roben  <aroben@apple.com>

        Remove the redundant set-apple-windows-environment-variables script

        Apparently update-webkit does this for you these days.

        Rubber-stamped by Steve Falkenburg.

        * Scripts/set-apple-windows-environment-variables: Removed.

2010-06-14  Adam Roben  <aroben@apple.com>

        Add a script to set the WebKitOutputDir and WebKitLibrariesDir
        environment variables

        Fixes <http://webkit.org/b/40595>.

        Reviewed by Steve Falkenburg.

        * Scripts/set-apple-windows-environment-variables: Added.
        (to_windows_path): Passes the passed-in path through cygpath to
        generate a Windows-style path.
        (main): Sets the WebKitOutputDir and WebKitLibrariesDir environment
        variables to their defaults, if they aren't already set.

2010-06-14  Adam Roben  <aroben@apple.com>

        Speed up run-safari/debug-safari on Windows

        Fixes <http://webkit.org/b/40586>.

        Reviewed by Steve Falkenburg.

        * Scripts/webkitdirs.pm:
        (runSafari): When debugging, set up the environment to run Safari
        using the built WebKit.dll, then use "devenv /debugexe Safari.exe" to
        actually launch the debugger. When not debugging, just run WebKit.exe
        and it will do the rest for us.

2010-06-15  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT EventSender support to graphics context events
        https://bugs.webkit.org/show_bug.cgi?id=40324

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::contextClick):

2010-06-14  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] checkout chromium third_party directly
        https://bugs.webkit.org/show_bug.cgi?id=40556

        * Scripts/update-webkit-chromium: some migration code for the bots

2010-06-14  Alexey Proskuryakov  <ap@apple.com>

        Chromium build fix.

        * DumpRenderTree/chromium/EventSender.cpp: (EventSender::keyDown): Chromium uses differently
        named constants for Windows virtual key codes, replacing VK_DELETE with VKEY_DELETE.

2010-06-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=40529
        eventSender.keyDown("delete") incorrectly sends a backspace on some platforms

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]): We were sending a broken
        event for "delete" - it had virtual key code from forward delete, and text from backspace.
        Fixed "delete" to mean forward delete.

        * DumpRenderTree/chromium/EventSender.cpp: (EventSender::keyDown):
        * DumpRenderTree/gtk/EventSender.cpp: (keyDownCallback):
        * DumpRenderTree/win/EventSender.cpp: (keyDownCallback):
        Mac DRT confusion has propagated to other platforms, fixing those.

2010-06-14  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Small GtkLauncher build fix for some systems.

        * GtkLauncher/main.c: Add <limit.h> include.

2010-06-14  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] navigator.geolocation support for Qt port
        https://bugs.webkit.org/show_bug.cgi?id=39724

        Implementation for geolocation cases to DumpRenderTreeQt

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::allowGeolocationRequest):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationError):
        (LayoutTestController::setMockGeolocationPosition):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::isGeolocationPermissionSet):
        (LayoutTestController::geolocationPermission):

2010-06-13  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Darin Adler.

        Outside of Xcode (make or WebKitTools/Scripts), there doesn't seem to
        be a way of overwriting the Xcode system path.  Making
        $WEBKITOUTPUTDIR take precedence over the system default would make
        this possible.

        * Scripts/webkitdirs.pm:

2010-06-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: link won't return linked element if URL contains #
        https://bugs.webkit.org/show_bug.cgi?id=40192

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (linkedUIElementAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::linkedUIElementAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::linkedUIElementAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::linkedUIElementAtIndex):

2010-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        webkit-patch should add a bug URL to ChangeLogs if they don't have one yet
        https://bugs.webkit.org/show_bug.cgi?id=39550

        This can cause an extra request to bugs.webkit.org durig upload, but it
        shouldn't be too bad.  Also, this won't work if you remove the
        boilerplate created by prepare-ChangeLog.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py: Added.

2010-06-08  Robert Hogan  <robert@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] Add support for callShouldCloseOnWebView() to DRT
        https://bugs.webkit.org/show_bug.cgi?id=40330

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::callShouldCloseOnWebView):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::setCallCloseOnWebViews):

2010-06-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Daniel Bates.

        do-webcore-rename should have a --verbose option
        https://bugs.webkit.org/show_bug.cgi?id=40497

        * Scripts/do-webcore-rename:
         - Unified how we handle skipping files/directories
           this will allow us to "black list" certain files and
           directories when performing renames.
         - Made do-webcore-rename log what it's skipping when passed --verbose.

2010-06-12  Darin Adler  <darin@apple.com>

        * Scripts/run-bindings-tests: Fixed a typo in a message.

2010-06-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] new-run-webkit-tests --use-drt should work with Chromium checkout
        https://bugs.webkit.org/show_bug.cgi?id=40402

        _build_path() of each Chromium port check existence of build path
        of Chromium checkout first, then check existence of build path of
        WebKit-only checkout.

        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2010-06-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Back-forward list dumping is incorrect

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

        Support dumping child history items in DRT.

        Unskip:

        fast/loader/frame-src-change-added-to-history.html
        fast/loader/frame-src-change-not-added-to-history.html
        fast/loader/frame-location-change-not-added-to-history.html

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::dumpHistoryItem):

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        upload all patches that lack in-rietveld to rietveld
        https://bugs.webkit.org/show_bug.cgi?id=40444

        If it's a patch, then we'll try to upload it as long as it
        doesn't have in-rietveld set. No longer set in-rietveld? since
        it's not needed.

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Fisher.

        Fix rietveld upload when message length > 100 characters
        https://bugs.webkit.org/show_bug.cgi?id=40457

        * Scripts/webkitpy/common/net/rietveld.py:

2010-06-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] There should be a way to enable popups in QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=40427

        * QtTestBrowser/main.cpp:
        (LauncherWindow::toggleJavascriptCanOpenWindows):
        (LauncherWindow::createChrome):

2010-06-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Make SheriffBot more chatty
        https://bugs.webkit.org/show_bug.cgi?id=40463

        People seem to like to talk to SheriffBot, so let's make him chat back.

        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Added.
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2010-06-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Fix the Windows buildbot when WebKitAuxiliaryLibs.zip cannot be found on our server.
        
        Robustify update-webkit-auxiliary-libs to be able to handle the case when WebKitAuxiliaryLibs.zip doesn't exist,
        and allow the script to fall back to an existing file, only failing if there is no fallback file. Also switch to checking
        WEXITSTATUS on $result instead of just comparing $result to 0.

        * Scripts/update-webkit-auxiliary-libs:

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Alexey Proskuryakov.

        don't use Exception.message as it's deprecated in python 2.6+
        https://bugs.webkit.org/show_bug.cgi?id=40449

        * Scripts/webkitpy/tool/commands/queues.py:

2010-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        fix handle_script_error in rietveld upload queue and add testing for handle_script_error
        https://bugs.webkit.org/show_bug.cgi?id=40436

        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-06-10  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] *All* WebGL layout tests fail!
        https://bugs.webkit.org/show_bug.cgi?id=40296

        Added test for WebKitWebGLEnabled to
        LayoutTestController::overridePreference().

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2010-06-10  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT EventSender support to graphics mouse events activation
        https://bugs.webkit.org/show_bug.cgi?id=40017

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::keyDown):
        (EventSender::contextClick):
        (EventSender::sendTouchEvent):
        (EventSender::sendOrQueueEvent):
        (EventSender::eventFilter):
        (EventSender::createGraphicsSceneMouseEvent):
        (EventSender::sendEvent):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender::isGraphicsBased):

2010-06-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        webkit-patch upload fails for security bugs because there's no rietveld flag
        https://bugs.webkit.org/show_bug.cgi?id=40309

        There's probably a more elegant way of seeing whether the form control
        exists, but this seems to work.

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-06-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        make rietveld upload faster and avoid posting to bug on errors
        https://bugs.webkit.org/show_bug.cgi?id=40389

        Only grab the first item of the upload queue instead of trying
        to compute the whole list upfront (which is O(n) bugzilla lookups!).

        Also, don't post comments to the bug when uploading fails.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-06-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        Rietveld upload queue fails when setting in-rietveld flag
        https://bugs.webkit.org/show_bug.cgi?id=40371

        Make the comment arguments to set_flag_on_attachment optional
        and add it to the MockBugzilla.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-06-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Rename FloatArray to Float32Array
        https://bugs.webkit.org/show_bug.cgi?id=40323

        Used do-webcore-rename to perform renaming. Manually undid
        incorrect changes to WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp,
        WebCore/manual-tests/resources/ArrayParameterTestApplet.java and
        ArrayParameterTestApplet.class. Updated LayoutTests. Built and ran
        all layout tests on Safari; built Chromium and ran selected WebGL
        tests.

        * Scripts/do-webcore-rename:

2010-06-08  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] compile linux chromium in WebKit/out instead of WebKit/WebKit/chromium/out
        https://bugs.webkit.org/show_bug.cgi?id=40285

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2010-06-03  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Tamura Kent.

        Bug 40052 - [DRT/Chromium] Upstream test_shell_webthemeengine as WebThemeEngineDRT
        https://bugs.webkit.org/show_bug.cgi?id=40052
        
        Add WebThemeEngineDRT and WebThemeControlDRT ported from Chromium rev. 48907

        * DumpRenderTree/DumpRenderTree.gypi:
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
        * DumpRenderTree/chromium/WebThemeControlDRT.cpp: Added.
        (WebKit::):
        (WebKit::WebThemeControlDRT::WebThemeControlDRT):
        (WebKit::WebThemeControlDRT::~WebThemeControlDRT):
        (WebKit::WebThemeControlDRT::box):
        (WebKit::WebThemeControlDRT::line):
        (WebKit::WebThemeControlDRT::triangle):
        (WebKit::WebThemeControlDRT::roundRect):
        (WebKit::WebThemeControlDRT::oval):
        (WebKit::WebThemeControlDRT::circle):
        (WebKit::WebThemeControlDRT::nestedBoxes):
        (WebKit::WebThemeControlDRT::markState):
        (WebKit::WebThemeControlDRT::draw):
        (WebKit::WebThemeControlDRT::drawTextField):
        (WebKit::WebThemeControlDRT::drawProgressBar):
        * DumpRenderTree/chromium/WebThemeControlDRT.h: Added.
        (WebKit::WebThemeControlDRT::):
        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp: Added.
        (WebKit::):
        (WebKit::WebThemeEngineDRT::paintButton):
        (WebKit::WebThemeEngineDRT::paintMenuList):
        (WebKit::WebThemeEngineDRT::paintScrollbarArrow):
        (WebKit::WebThemeEngineDRT::paintScrollbarThumb):
        (WebKit::WebThemeEngineDRT::paintScrollbarTrack):
        (WebKit::WebThemeEngineDRT::paintTextField):
        (WebKit::WebThemeEngineDRT::paintTrackbar):
        (WebKit::WebThemeEngineDRT::paintProgressBar):
        * DumpRenderTree/chromium/WebThemeEngineDRT.h: Added.
        (WebKit::WebThemeEngineDRT::WebThemeEngineDRT):

2010-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60878.
        http://trac.webkit.org/changeset/60878
        https://bugs.webkit.org/show_bug.cgi?id=40349

        broke linux build (Requested by tony^work on #webkit).

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2010-06-08  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] compile linux chromium in WebKit/out instead of WebKit/WebKit/chromium/out
        https://bugs.webkit.org/show_bug.cgi?id=40285

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:

2010-06-08  Kenneth Russell  <kbr@google.com>

        Unreviewed, build fix.

        Fix build breakage from 38145
        https://bugs.webkit.org/show_bug.cgi?id=40346

        The fix for bug 38145 broke the Chromium Win build because
        Microsoft's cmath doesn't define log2. Suggested fix by zmo is to
        change log2(x) to log(x) / log(2). Built and ran WebGL layout
        tests in Safari on Mac OS X. Changed download mirrors for
        python-irclib to working ones.

        * Scripts/webkitpy/thirdparty/__init__.py:

2010-06-08  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        old-run-webkit-tests should use ensure-valid-python to check if it can run the websockets tests
        https://bugs.webkit.org/show_bug.cgi?id=39058

        * Scripts/old-run-webkit-tests:
         use sourceDir() to find ensure-valid-python in checkPythonVersion()

2010-06-08  Andras Becsi  <abecsi@webkit.org>

        Unreviewed buildfix after r60479.

        [GTK] Move the declaration of getRootCoords higher up to fix the build on GTK
        versions other than 2.17.3.

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

2010-06-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] Mouse movement should not trigger a replay of saved events in the event sender
        https://bugs.webkit.org/show_bug.cgi?id=40267

        When a mouse button is down, automatically queue mouse motion events and
        do not play them back until the mouse button is released. This matches the
        behavior of other ports' EventSenders.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseMoveToCallback): Don't automatically replaySavedEvents for mouse motion.
        (sendOrQueueEvent): Add a shouldReplaySavedEvents argument defaulting to true.

2010-06-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Sam Weinig.

        Add CPP bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=38279

        Integrate CPP bindings in run-bindings-tests.

        * Scripts/run-bindings-tests:

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Ojan Vafai.

        Rename 'svn_merge_base' -> 'remote_merge_base'. This was left out of r60633.
        https://bugs.webkit.org/show_bug.cgi?id=40183

        * Scripts/webkitpy/tool/steps/preparechangelog.py:

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Add my new email and IRC nick to committers.py.

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

2010-06-04  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed.

        Revert changes in json_results_generator.py's _get_svn_revision.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GtkLauncher should support relative file paths
        https://bugs.webkit.org/show_bug.cgi?id=39944

        Allow GtkLauncher to handle relative file paths passed via command-line arguments.

        * GtkLauncher/main.c:
        (filename_to_url): Added.
        (main): Try to resolve arguments as relative file URLs first.

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] EventSender should call gtk_main_do_event instead of invoking signal handlers directly
        https://bugs.webkit.org/show_bug.cgi?id=40182

        Instead of invoking signal handlers directly via g_signal_emit_by_name, call
        gtk_main_do_event. This will allow us to call gtk_get_current_event() in WebKit
        without breaking DRT.

        * DumpRenderTree/gtk/EventSender.cpp:
        (dispatchEvent): Use gtk_main_do_event instead of invoking signal handlers directly.
        (keyDownCallback): Use dispatchEvent here which now uses gtk_main_do_event.

2010-06-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Make the editing/spelling/context-menu-suggestions.html test more robust
        https://bugs.webkit.org/show_bug.cgi?id=40178

        Change the contextClick method to return an array of strings describing the context menu items.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController contextClick]):

2010-06-03  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Clean up chromium-specific code from json_results_generator.py.
        https://bugs.webkit.org/show_bug.cgi?id=39665

        * 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/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Utilize new takeFirst() method where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=40089

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::replaySavedEvents):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::WorkQueue::processWork):
        (LayoutTestController::WorkQueue::reset):

2010-06-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtTestLauncher should allow notifications by default.
        https://bugs.webkit.org/show_bug.cgi?id=40078

        * QtTestBrowser/main.cpp:
        (NotificationsPermissionController::NotificationsPermissionController):
        (NotificationsPermissionController::checkPermission):
        (NotificationsPermissionController::requestPermission):
        (LauncherWindow::LauncherWindow):

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Detect whether the user's environment can open a browser.
        https://bugs.webkit.org/show_bug.cgi?id=40136

        Some environments like cygwin silently fail webbrowser.open() causing
        webkit-patch upload not to display any diff. This detects environments
        where webbrowser.open() would fail by testing if webbrowser.get()
        raises an exception.

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:

2010-06-03  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by David Levin.

        Add dependencies required to link with VS Express 2005.
        https://bugs.webkit.org/show_bug.cgi?id=40038

        Visual Studio implicitly links against these libs.
        VC++ Express does not.

        * WebKitAPITest/WebKitAPITestCommon.vsprops:
        * WinLauncher/WinLauncher.vcproj:

2010-06-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        bad codecs.open in webkitpy/layout_tests/ports/websocket_server.py
        https://bugs.webkit.org/show_bug.cgi?id=40105

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        - kill pywebsocket process when url is not alive and the process is not
          terminated, not to leave pywebsocket server running.
        - fix codecs.open parameters.

2010-06-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        old-run-webkit-tests should use ensure-valid-python to check if it can run the websockets tests
        https://bugs.webkit.org/show_bug.cgi?id=39058

        * Scripts/ensure-valid-python:
          - Perl 5.8 doesn't have File::Temp->newdir().  Use File::Temp->tempdir() instead.
          - Add --check-only and --help option.
          - --check-only option only checks python version and don't try to install Python 2.5.
          - Set executable bit.
        * Scripts/old-run-webkit-tests:
          - Check if it can run the websocket tests by calling ensure-valid-python --check-only.

2010-05-14  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        add a RietveldUploadQueue to upload in-rietveld? patches to rietveld
        https://bugs.webkit.org/show_bug.cgi?id=38918

        Patches with in-rietveld? get uploaded to rietveld and get marked
        in-rietveld+. If the upload fails, they are marked in-rietveld-
        and an error is logged to the bug, like the commit-queue.

        Also, get rid of --fancy-review and the ability to upload to rietveld
        using webkit-patch upload/post.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py:

2010-05-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Chris Jerdonek.

        many webkit-patch commands fail in a non-svn tracking git checkout
        https://bugs.webkit.org/show_bug.cgi?id=38156

        If the svn-tracking-branch (trunk) doesn't exist, fallback to the git remote-tracking-branch (master).
        If neither exists, then error out. This makes webkit-patch work
        for anyone that follows the intructions at http://trac.webkit.org/wiki/UsingGitWithWebKit
        to checkout webkit. The fallback to master is for people who don't
        do the steps on that page for tracking svn.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:

2010-06-03  Mike Fenton  <mifenton@rim.com>

        Unreviewed.

        Reverse e-mail for myself in committers.py to correspond with bugzilla account.

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

2010-06-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: a number of fixes that make InspectorController
        happy with null redirects.

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

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2010-06-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Shinichiro Hamaji.

        [Qt] Fix compilation with QT_NO_PROPERTIES
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * QtTestBrowser/main.cpp:
        (LauncherWindow::init):

2010-06-02  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make possible run DRT with QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=40016

        Make possible to use a environment variable for switching backend.
        Usage: QT_DRT_WEBVIEW_MODE=graphics WebKitTools/Scripts/run-webkit-tests --qt

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebViewGraphicsBased::WebViewGraphicsBased):
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::setGraphicsBased):
        (WebCore::DumpRenderTree::isGraphicsBased):
        (WebCore::WebViewGraphicsBased::graphicsView):
        (WebCore::WebViewGraphicsBased::setPage):
        * Scripts/old-run-webkit-tests:

2010-06-02  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        Slave lost shouldn't be recognized as build failed.
        https://bugs.webkit.org/show_bug.cgi?id=39282

        * Scripts/webkitpy/common/net/buildbot.py: Treat slave lost as green.
        * Scripts/webkitpy/common/net/buildbot_unittest.py: Add unit test for slave lost.

2010-06-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the lifecycle of notification objects
        https://bugs.webkit.org/show_bug.cgi?id=40003

        Remove the dependency of notifications on QWebPage.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::requestPermissionCallback):
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::requestPermission):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60559.
        http://trac.webkit.org/changeset/60559
        https://bugs.webkit.org/show_bug.cgi?id=40055

        It broke python unit test (Requested by Ossy on #webkit).

        * Scripts/webkitpy/common/net/buildbot.py:

2010-06-02  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        Slave lost shouldn't be recognized as build failed.
        https://bugs.webkit.org/show_bug.cgi?id=39282

        * Scripts/webkitpy/common/net/buildbot.py:

2010-06-02  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Fix crash caused when assigned_to is disabled
        https://bugs.webkit.org/show_bug.cgi?id=40039

        * Scripts/webkitpy/common/net/bugzilla.py:

2010-06-02  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Image Resizer Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=39906

        * Scripts/build-webkit:

2010-06-01  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed tests to use QWebSettings::JavascriptCanAccessClipboard instead of QWebSettings::JavaScriptCanAccessClipboard.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        A nicer Tiger build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        Enable GCC_OBJC_CALL_CXX_CDTORS via .xcconfig.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        A real Tiger build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Enable GCC_OBJC_CALL_CXX_CDTORS
        for all configurations, not just debug.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Tiger build fix.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Enable GCC_OBJC_CALL_CXX_CDTORS.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Get more mouse tests passing
        https://bugs.webkit.org/show_bug.cgi?id=39040

        Reproduce the logic from the Windows EventSender for mapping
        button numbers to GDK button numbers. Move this logic to the
        prepareMouseButtonEvent helper.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Reproduce Windows logic.
        (contextClickCallback): Move mapping logic to prepareMouseButtonEvent.
        (mouseDownCallback): Ditto.
        (mouseUpCallback): Ditto.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39434
        REGRESSION (r59811): Geolocation callbacks cannot be created

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added MockGeolocationProvider.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Tell the view to use MockGeolocationProvider. 
        (resetWebViewToConsistentStateBeforeTesting): Make sure that mock notifications don't leak
        into subsequent tests.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setMockGeolocationPosition): Changed to use MockGeolocationProvider.
        (LayoutTestController::setMockGeolocationError): Ditto.

        * DumpRenderTree/mac/MockGeolocationProvider.h: Added.
        * DumpRenderTree/mac/MockGeolocationProvider.mm: Added.
        (+[MockGeolocationProvider shared]):
        (-[MockGeolocationProvider dealloc]):
        (-[MockGeolocationProvider setPosition:]):
        (-[MockGeolocationProvider setError:]):
        (-[MockGeolocationProvider registerWebView:]):
        (-[MockGeolocationProvider unregisterWebView:]):
        (-[MockGeolocationProvider lastPosition]):
        (-[MockGeolocationProvider stopTimer]):
        (-[MockGeolocationProvider timerFired]):

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        This delegate method must send a response. I'm not sure what the two-stage check is supposed
        to achieve, it seems unnecessary.

2010-05-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        WebKit now filters the extra GDK_BUTTON_PRESS before GDK_2BUTTON_PRESS
        and GDK_3BUTTON_PRESS via gdk_event_peek(). Since EventSender bypasses
        the GDK event queue entirely, we simply do not send the extra event.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseDownCallback): Do not send extra event. Send GDK_3BUTTON_PRESS appropriately.
        (dispatchEvent): Properly handle GDK_3BUTTON_PRESS.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Not reviewed. Build fix.

        Fix GTK+ build caused by a bad merge.

        * DumpRenderTree/gtk/EventSender.cpp: 
        (prepareMouseButtonEvent): Use the GdkEvent union as a pointer here.

2010-06-01  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        Small EventSender cleanups. Consolidate some common code. Style fixes.

        * DumpRenderTree/gtk/EventSender.cpp:
        (prepareMouseButtonEvent): Added.
        (contextClickCallback): Use prepareMouseButtonEvent.
        (mouseDownCallback): Use prepareMouseButtonEvent.
        (mouseUpCallback): Use prepareMouseButtonEvent.
        (mouseMoveToCallback): Small style fix.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        Add rudimentary leapForward support to the GTK+ DRT. leapForward allows a test
        to pause for a specified amount of time. It is used in the processing of drag-
        -and-drop data as well as to separate distinct mouse double-clicks in some tests.
        This patch enables tests that rely on the latter behavior to pass.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared): Only initialize the EventSender when loading the top frame.
        * DumpRenderTree/gtk/EventSender.cpp:
        (leapForwardCallback): Add support for adjusting the time offset on leapForward().
        (contextClickCallback): Use sendOrQueueEvent.
        (updateClickCount): Take the time offset into account when counting clicks.
        (mouseDownCallback): Use sendOrQueueEvent.
        (getStateFlags): Change down/currentEventButton into buttonCurrentlyDown/lastClickButton.
        (mouseUpCallback): Use sendOrQueueEvent.
        (mouseMoveToCallback): Ditto.
        (mouseWheelToCallback): Ditto.
        (sendOrQueueEvent): Added.
        (dispatchEvent): Added.
        (replaySavedEvents): Pause when an event has a delay and defer to dispatchEvent.
        (makeEventSender): Only initialize the EventSender when loading the top frame.
        * DumpRenderTree/gtk/EventSender.h: Ditto.

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] css1/color_and_background/background_attachment.html fails on the 32-bit debug bot
        https://bugs.webkit.org/show_bug.cgi?id=39101

        Work around timing issues for render tree dumps by pumping the
        main loop before doing the dump. Resize events are asynchronous
        in GTK+, so sometimes resize requests are still pending when DRT
        dumps the tree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump): Pump the main loop before dumping the render tree.

2010-05-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix crash of a test after another test with multiple windows
        https://bugs.webkit.org/show_bug.cgi?id=39942

        If a test opens multiple windows, focuses on non-main window, and
        the focused window is closed, TestShell::m_focusedWidget points a
        deleted object.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::closeWindow): Clear m_focusedWidget.

2010-05-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        new-run-webkit-tests: Support DRT on Chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=39810

        Add --test-shell flag to DRT/Chromium, and it changes DRT so that
        it behaves like test_shell about command analysis, printing
        format, pixel dumping, and timeout handling.

        chromium.py and chromium_win.py supports the --test-shell flag and
        DRT/Chromium-win binary names.
        
        * DumpRenderTree/DumpRenderTree.gypi: Add new files.
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest): Support for test_shell-style command.
        (main): Introduce --test-shell.
        * DumpRenderTree/chromium/TestEventPrinter.cpp: Added.
        * DumpRenderTree/chromium/TestEventPrinter.h: Added.
          TestEventPrinter class manages stdio output and image output.
          TestEventPrinter.cpp has two implementations; DRTPrinter and
          TestShellPrinter.
        * DumpRenderTree/chromium/TestShell.cpp:
          Some changes for TestEventPrinter.
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::testTimedOut):
        (TestShell::dump):
        (TestShell::dumpImage):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::printer):
        (TestShell::layoutTestTimeout):
        (TestShell::layoutTestTimeoutForWatchDog):
        (TestShell::setLayoutTestTimeout):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (watchDogThread): Use TestShell::layoutTestTimeoutForWatchDog().
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2010-05-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enhance Qt DRT implementation to support platform scroll wheel events.

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

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender): QApplication::setWheelScrollLines(2) in order to match
                                    Scrollbar::pixelsPerLineStep() for DRT testing.
        (EventSender::mouseScrollBy): Added
        (EventSender::continuousMouseScrollBy): Added
        * DumpRenderTree/qt/EventSenderQt.h:

2010-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        webkit-patch should support CHANGE_LOG_EDIT_APPLICATION
        https://bugs.webkit.org/show_bug.cgi?id=39546

        One sublty is that we want to wait for the user to finish editing the
        ChangeLog before moving on to the next step.  That means we want to pass
        -W to open.  However, if the user is using Xcode to edit the ChangeLog,
        we don't want them to have to exit the Xcode application.  For this reason,
        we create a new instance of the application with -n.
        
        Overall, xed seems like a better solution, so we recommend that too.

        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:

2010-05-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: fix handling of Ctrl-C to exit even if some
        threads are wedged. Also, the script will print the results of the
        tests completed when the interrupt occurs.

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

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-05-28  Darin Adler  <darin@apple.com>

        Ignore more Python messiness.

        * Scripts/webkitpy/layout_tests/data/platform/test: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/layout_package: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/test_types: Added property svn:ignore.
        * Scripts/webkitpy/test: Added property svn:ignore.
        * Scripts/webkitpy/thirdparty/simplejson: Added property svn:ignore.

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Adding myself as a reviewer.

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

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Build fix. No review.

        AX: need to catch NSAccessibilityExceptions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=39881

        It looks like Tiger doesn't like seeing a NSMakeRange inside a @try.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::selectedTextRange):

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: need to catch NSAccessibilityExceptions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=39881

        Normally, accessibility exceptions are caught in the AX Runtime on the Mac, but 
        because DRT is its own AX client, no one is there to catch these otherwise innocuous exceptions.
  
        So DRT should wrap exception handlers around its AX related calls.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (attributesOfElement):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::boolAttributeValue):
        (AccessibilityUIElement::isAttributeSettable):
        (AccessibilityUIElement::isAttributeSupported):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::roleDescription):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::helpText):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::valueDescription):
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::isActionSupported):
        (AccessibilityUIElement::isEnabled):
        (AccessibilityUIElement::isRequired):
        (AccessibilityUIElement::isSelected):
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::hierarchicalLevel):
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):
        (AccessibilityUIElement::lineForIndex):
        (AccessibilityUIElement::boundsForRange):
        (AccessibilityUIElement::stringForRange):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        (AccessibilityUIElement::indexInTable):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::setSelectedTextRange):
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):
        (AccessibilityUIElement::showMenu):
        (AccessibilityUIElement::press):
        (AccessibilityUIElement::url):
        (AccessibilityUIElement::hasPopup):

2010-05-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Pass all web notification layout tests
        https://bugs.webkit.org/show_bug.cgi?id=39146

        Mimic Chromium's test_shell security model in Qt's DRT.
        It makes a list of origins which were granted permission to display
        notifications, and only those origins can display notifications.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::checkPermissionCallback):
        (WebCore::requestPermissionCallback):
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::checkPermission):
        (WebCore::DumpRenderTree::requestPermission):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::checkDesktopNotificationPermission):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-05-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style complains about use of NULL in GTK function calls that require sentinels
        https://bugs.webkit.org/show_bug.cgi?id=39372

        Don't warn about NULL in g_*() calls. Zero can't be used instead
        for calls like g_build_filename and g_object_get/set.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-05-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin example
        https://bugs.webkit.org/show_bug.cgi?id=39489

        Exempting directory WebKit/qt/examples/ from style guide.

        * Scripts/webkitpy/style/checker.py:

2010-05-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by David Levin.

        [style] Allow usage of NULL in gst_*_many()
        https://bugs.webkit.org/show_bug.cgi?id=39740

        Don't warn if NULL is used by gst_*_many() functions. Zero can't
        be used for the reason explained in Bug 32858.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update script to run the normal version of the parser tests.

        * Scripts/test-html5-parser:

2010-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add HTML5 parser support to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=39815

        * Scripts/old-run-webkit-tests:

2010-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5 lexer not ASSERT when resuming partial parses
        https://bugs.webkit.org/show_bug.cgi?id=39755

        Add webkit-resumer.html to the HTML5 parser test suite.

        * Scripts/test-html5-parser:

2010-05-24  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] setup fonts on chromium linux DRT
        https://bugs.webkit.org/show_bug.cgi?id=39644

        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (setupFontconfig):
        (platformInit):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintRect):  Fix a bug where in release builds, we didn't initialize m_canvas.
        * DumpRenderTree/chromium/fonts.conf: Added.

2010-05-24  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Re-commit r58765 - it had been rolled out to see if it was causing
        a perf regression (in r59787 and r59789), but that does not seem to
        have been the case.

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

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::show):

2010-05-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Chris Jerdonek.

        remove suppression of rietveld logging
        https://bugs.webkit.org/show_bug.cgi?id=39693

        Now that we only upload to rietveld explicitly, e.g. on the bot
        or via webkit-patch post-attachment-to-rietveld, we should print
        all the rietveld logging. It was suppressed before to avoid making
        webkit-patch upload too noisy.

        * Scripts/webkitpy/common/net/rietveld.py:

2010-05-25  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai.

        [Qt] Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=39680

        Implement LayoutTestController::setEditingBehavior in Qt's DRT.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setEditingBehavior):

2010-05-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after API change and addition of WebCore/platform/text/transcoder dir. 

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setEditingBehavior):
        * wx/build/settings.py:

2010-05-24  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Eric Seidel and Kent Tamura (for the Chromium part).

        editingBehavior settings needs to be set back to a reasonable default between tests
        https://bugs.webkit.org/show_bug.cgi?id=39433

        Similarly to r59861, hard code the default setting during reset for Gtk and Chromium,
        so that the serialized version of the setting stays in sync with expectations.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2010-05-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch land calls scm.changed_files 4 times!
        https://bugs.webkit.org/show_bug.cgi?id=39584

        * Scripts/webkitpy/tool/commands/download_unittest.py:
         - Assert that we don't call modified_changelogs too often.
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
         - Use cached changelogs list instead of calling modified_changelogs directly.
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
         - ditto.

2010-05-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Import layout_test_helper for Windows
        https://bugs.webkit.org/show_bug.cgi?id=39581

        Import Chromium win/layout_test_helper.cc as LayoutTestHelperWin.cpp.
        http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/win/layout_test_helper.cc

        * DumpRenderTree/chromium/LayoutTestHelperWin.cpp: Added.

2010-05-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Reset frame name
        https://bugs.webkit.org/show_bug.cgi?id=39586

        This change fixes about 70 unexpected results.

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

2010-05-24  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Adds WebGeolocationServiceMockImpl to remove public dependency on wtf/HashMap.h
        https://bugs.webkit.org/show_bug.cgi?id=39587

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

2010-05-24  Robert Hogan  <robert@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] DRT Support for removeOriginAccessWhitelistEntry

        Unskips http/tests/xmlhttprequest/origin-whitelisting-removal.html

        [Qt] DRT Support for removeOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=39565

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::removeOriginAccessWhitelistEntry):

2010-05-24  Marcus Bulach  <bulach@google.com>

        Reviewed by Ojan Vafai.

        _svn_branch_has_extra_commits needs to check for ^HEAD instead of ^head.
        https://bugs.webkit.org/show_bug.cgi?id=39603

        * Scripts/webkitpy/common/checkout/scm.py:

== Rolled over to ChangeLog-2010-05-24 ==
