2010-05-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        add tests to ensure that --git-commit ranges are exclusive of the start of the range
        https://bugs.webkit.org/show_bug.cgi?id=39612

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

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

        Reviewed by Adam Barth.

        Add a temporary script for testing the html5 parser until it can run more layout tests
        https://bugs.webkit.org/show_bug.cgi?id=39611

        * Scripts/test-html5-parser: Added.

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

        Reviewed by Chris Jerdonek.

        webkit-patch needs --verbose flag to enable DEBUG logging
        https://bugs.webkit.org/show_bug.cgi?id=39208

        I also added some code to print out how long commands take to run.

        * Scripts/webkit-patch:
         - Add hackish -v/--verbose parsing (similar to check-webkit-style)
        * Scripts/webkitpy/common/system/executive.py:
         - Log how long commands take to run.
        * Scripts/webkitpy/tool/main.py:
         - Add -v/--verbose option to global options.

2010-05-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Daniel Bates.

        Split PatchReader out into its own file
        https://bugs.webkit.org/show_bug.cgi?id=39576

        This is in preparation for making check-webkit-style
        support being passed paths to patch files on the command line.

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/patchreader.py: Added.
        * Scripts/webkitpy/style/patchreader_unittest.py: Added.
        * Scripts/webkitpy/style_references.py:

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

        Reviewed by Daniel Bates.

        webkit-patch should let you add a comment when uploading a patch
        https://bugs.webkit.org/show_bug.cgi?id=39552

        As requested by Dan "the man" Bates.

        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

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

        Reviewed by Eric Seidel.

        webkit-patch should assign newly created bugs to their creator
        https://bugs.webkit.org/show_bug.cgi?id=39548

        As requested on webkit-dev.

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

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

        Reviewed by Eric Seidel.

        Hide prepare and post commands for webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=39539

        It turns out these commands aren't very popular and they confuse new
        users.  They'll still be there for advanced users, however.

        * Scripts/webkitpy/tool/commands/upload.py:

2010-05-23  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] QtTestBrowser has two graphicsview options that aren't enabled correctly
        https://bugs.webkit.org/show_bug.cgi?id=39491

        Making toggleResizesToContents and toggleTiledBackingStore checkable when
        QtTestBrowser is started on graphics view mode.

        * QtTestBrowser/main.cpp:
        (LauncherWindow::createChrome):

2010-05-23  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] QtTestBrowser is still called QtLauncher in the code
        https://bugs.webkit.org/show_bug.cgi?id=39488

        Finish the name change of QtLauncher to QtTestBrowser.

        * QtTestBrowser/main.cpp:
        (LauncherApplication::LauncherApplication):
        (LauncherApplication::handleUserOptions):
        * QtTestBrowser/mainwindow.cpp:
        (MainWindow::MainWindow):
        * QtTestBrowser/useragentlist.txt:

2010-05-23  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Adds Geolocation support to DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=39440

        Existing LayoutTests/fast/dom/Geolocation/* should pass.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setGeolocationPermission):
        (LayoutTestController::setMockGeolocationPosition):
        (LayoutTestController::setMockGeolocationError):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::geolocationService):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-05-22  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Re-order Yong's email addresses because his gmail account is the one he
        uses for bugs.webkit.org.

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

2010-05-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Chris Jerdonek.

        Add infrastructure to parse SVN property changes
        https://bugs.webkit.org/show_bug.cgi?id=38885

        Adds function VCSUtils::parseSvnDiffFooter to parse an SVN footer
        that consists of one or more properties.

        Note, the first line of an SVN footer begins with "Property changes on".

        * Scripts/VCSUtils.pm:
          - Added function parseSvnDiffFooter. Will use this function
            towards resolving Bug #39409 <https://bugs.webkit.org/show_bug.cgi?id=39409>.
          - Removed FIXME comment above function parseSvnProperty, since
            it is being used by parseSvnDiffFooter.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl: Added.
          - Added unit tests.

2010-05-22  Eric Seidel  <eric@webkit.org>

        Unreviewed, fixing test results only.

        Disable compositing tests on the commit-queue as a workaround for  bug 38912
        https://bugs.webkit.org/show_bug.cgi?id=39067

        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Update test results after my previous change.

2010-05-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Disable compositing tests on the commit-queue as a workaround for  bug 38912
        https://bugs.webkit.org/show_bug.cgi?id=39067

        * Scripts/webkitpy/tool/steps/runtests.py:
         - Disable all of compositing, not just compositing/iframes

2010-05-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Link resources and load Ahem font for Windows
        https://bugs.webkit.org/show_bug.cgi?id=39473

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Call platformInit().
        * DumpRenderTree/chromium/TestShell.h:
         Declare platformInit(). It is not related to TestShell class, but the
         implementation of paltformInit() is placed at TestShell*.{cpp,mm}.
        * DumpRenderTree/chromium/TestShellGtk.cpp:
        (platformInit):
        * DumpRenderTree/chromium/TestShellMac.mm:
        (platformInit):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (platformInit):
         - Make stdout/stderr binary mode
         - Load Ahem font

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

        Unreviewed, EWS build fix only.

        QueueStatusServer returns 500 error when EWS bots post empty queues
        https://bugs.webkit.org/show_bug.cgi?id=39523

        Mac python seems to have some built-in timezone support
        however other python installs don't.  So we need to ignore
        timezones in our parsing.

        Date parsing is tested by existing unit tests.

        * QueueStatusServer/handlers/updateworkitems.py:
         - Fix typo causing exception on server.
        * Scripts/webkitpy/common/net/bugzilla.py:
         - Fix exception due to python's lack of timezone support.

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

        Reviewed by Adam Barth.

        QueueStatusServer returns 500 error when EWS bots post empty queues
        https://bugs.webkit.org/show_bug.cgi?id=39523

        updateworkitems handler was raising an exception because
        int() couldn't convert "" to a number.

        I attempted to unit test this but we don't yet have a system by
        which to load unit tests for appengine classes which depend on
        google.appengine libraries which are not in the python default install.

        We'll need to write a wrapper script to load those into the python path
        and then run the unit test files.

        * QueueStatusServer/handlers/statusbubble.py:
         - Hide cr-win-ews since we're not currently running this bot.
        * QueueStatusServer/handlers/updateworkitems.py:
         - Fix the parsing logic to be able to understand "".
        * Scripts/webkitpy/common/net/statusserver.py:
         - Only log the work items posted to the server to the debug log channel.

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

        Unreviewed, fixing the commit-queue to run again.

        Make the EWSes report queue position in white bubbles
        https://bugs.webkit.org/show_bug.cgi?id=39519

        * Scripts/webkitpy/common/net/statusserver.py:
         - Fix exception in _post_work_items_to_server when passed
           integers. Unfortunately we have no good way to mock
           the Browser object yet, and after several attempts I was
           not able to create a good one, so no tests. :(

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

        Reviewed by Eric Seidel.

        webkit-patch land --squash commits too much if branch is not up to date
        https://bugs.webkit.org/show_bug.cgi?id=38852

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

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

        Reviewed by Adam Barth.

        Make the EWSes report queue position in white bubbles
        https://bugs.webkit.org/show_bug.cgi?id=39519

        This also fixes sorting of commit-queue patches
        to be in order of patch attachment.
        https://bugs.webkit.org/show_bug.cgi?id=33395

        This makes the various Queues post what patches they are about to process
        so that we can display a list of patches on status server pages, as well
        as report queue position in status bubbles.

        This is the first step towards creating a control-channel for the queues.
        Next step will be to have them read back the patches in order from the server
        and finally we will add the ability for the server to control that order.

        * Scripts/webkitpy/common/net/bugzilla.py:
         - Teach bugzilla how to parse attach_date for attachments.
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
         - Test that we're parsing dates correctly.
           This may have timezone issues for non-PST contributers, unsure.
        * Scripts/webkitpy/common/net/statusserver.py:
         - Post work items to the status server for display.
        * Scripts/webkitpy/tool/bot/patchcollection.py:
         - Call StatusServer.update_work_items
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
         - Update unit test results now that we're posting work item list.
        * Scripts/webkitpy/tool/commands/queues.py:
         - Call StatusSever.update_work_items
         - Sort patches so that the server's list understands
           that the commit-queue gives priority to rollout patches.
         - I also fixed patch sorting per bug 33395 while I was here.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Update results after update_work_items changes.
         - Test attachment sorting.
        * Scripts/webkitpy/tool/mocktool.py:
         - Add mock for update_work_items

2010-05-21  Robin Cao  <robin.cao@torchmobile.com.cn>

        Reviewed by Adam Roben.

        fast/dom/HTMLObjectElement/children-changed.html times out on Windows run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=31315

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didFailProvisionalLoadWithError): Need to invoke locationChangeDone here as mac port does.

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

        Rubber-stamped by Dan Bernstein.

        <rdar://problem/7848154> Remove the dependency on Foundation's private __COCOA_FORMAL_PROTOCOLS_2__ define.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:

2010-05-20  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Daniel Bates.

        Look in /proc/registry64 for the Platform SDK on 64-bit Windows.
        https://bugs.webkit.org/show_bug.cgi?id=39296

        The build-webkit script failed for me on Vista 64. A web search turned
        up this blog post with a patch that worked for me:
        http://www.nicholaswilson.me.uk/2010/04/hacking-webkit-fail/

        * Scripts/webkitdirs.pm:

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

        Reviewed by Adam Barth.

        ThreadedMessageQueue should use with_statement for exception safety
        https://bugs.webkit.org/show_bug.cgi?id=39233

        * Scripts/webkitpy/common/thread/threadedmessagequeue.py:

2010-05-20  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtTestBrowser does not support websites which requires HTTP Authentication via dialogs
        https://bugs.webkit.org/show_bug.cgi?id=38456

        * QtTestBrowser/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::authenticationRequired):
        * QtTestBrowser/webpage.h:

2010-05-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        editingBehavior settings needs to be set back to a reasonable default between tests
        https://bugs.webkit.org/show_bug.cgi?id=39433

        For now, hard code the default setting during reset, so that the serialized
        version of the setting stays in sync with expectations.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Reset editing behavior to the appropriate platform default.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Ditto.

2010-05-20  Brent Fulgham  <bfulgham@webkit.org>

        Build fix.  No review.

        The WebKitAPITest targets do not use the "_debug" suffix needed
        by the WinCairo port.  Added Debug_Cairo target to correct this.

        * WebKitAPITest/WebKitAPITest.vcproj:

2010-05-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ojan Vafai.

        editing/selection/extend-selection-after-double-click.html crashes on the Leopard Intel release bot
        https://bugs.webkit.org/show_bug.cgi?id=39431

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setEditingBehavior):
        Prevent a double-free by not having this variable be in the auto-release pool.

2010-05-20  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Ojan Vafai.

        Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=38603

        * DumpRenderTree/LayoutTestController.cpp:
        (setEditingBehaviorCallback): Added.
        (LayoutTestController::staticFunctions): Expose the setEditingBehaviorCallback function.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp: Add callback method for setting editing behavior.
        * DumpRenderTree/chromium/LayoutTestController.h: Declaration for this method.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: 
        (LayoutTestController::setEditingBehavior): Implementation of editing behavior control.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setEditingBehavior): Ditto
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setEditingBehavior): Added stub implementation of editing behavior control.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::setEditingBehavior): Add slot for controlling editor behavior.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setEditingBehavior): Implementation of editing behavior control.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setEditingBehavior): Added stub implementation of editing behavior control.

2010-05-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [DRT/Chromium] Increase the time out value
        https://bugs.webkit.org/show_bug.cgi?id=39203

        Change the time out value of Chromium DRT to 30 seconds, which is
        the same as other ports.
        If a DRT process exits before new-run-webkit-tests detects time
        out, new-run-webkit-tests assumes the DRT process crashed.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::layoutTestTimeout):
          Change the time out value from 10 seconds to 30 seconds.

2010-05-20  Chris Evans  <cevans@google.com>

        Unreviewed.

        Marking myself as a committer.

        * Scripts/webkitpy/common/config/committers.py: Add cevans@google.com.

2010-05-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbo.

        [Qt] Weekly binary builds on Mac OS X don't work when launched in the Finder
        https://bugs.webkit.org/show_bug.cgi?id=37273

        * QtTestBrowser/QtTestBrowser.pro: Build QtLauncher as bundle in package builds

2010-05-20  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix for websocket test failures.

        * Scripts/new-run-webkit-websocketserver:
         options is named parameter for factory.get().

2010-05-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Chromium: Add --chromium option to new-run-webkit-websocketserver
        https://bugs.webkit.org/show_bug.cgi?id=37664

        Missed to pass options to factory.get() in r59595

        * Scripts/new-run-webkit-websocketserver:
          Pass options to factory.get().

2010-05-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        WinEWS should build Debug instead of Release
        https://bugs.webkit.org/show_bug.cgi?id=39242

        This is a workaround for
        https://bugs.webkit.org/show_bug.cgi?id=39197
        Adam Roben and Brian Weinstein believe this may
        also make building faster since Debug builds
        take less time to link.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2010-05-19  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        * DumpRenderTree/chromium/NotificationPresenter.cpp:
        (NotificationPresenter::show):

2010-05-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        user.py throws exception when readline module is missing
        https://bugs.webkit.org/show_bug.cgi?id=39239

        * Scripts/webkitpy/common/system/user.py:
         - The error handling path requires the "sys" module,
           so added an import sys at the top of the file.

2010-05-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix a repaint issue and textarea tests
        https://bugs.webkit.org/show_bug.cgi?id=39054

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::canvas): Remove m_paintRect initialization in canvas().
         This line updated m_paintRect unexpectedly during paintRect().
         We don't need to initialize m_paintRect because show() does it.

2010-05-18  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] new-run-webkit-tests --use-drt should run on Linux
        https://bugs.webkit.org/show_bug.cgi?id=37845

        * 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:

2010-05-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix some initialization/reset issues
        https://bugs.webkit.org/show_bug.cgi?id=39281

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::reset): Reset m_userStyleSheetLocation.
        * DumpRenderTree/chromium/LayoutTestController.h:
          Remove unused variable, m_workQueueFrozen.
        (LayoutTestController::WorkQueue::WorkQueue): Initialize m_frozen.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetTestController): Reset WebSettings too.

2010-05-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Ojan Vafai.

        new-run-webkit-tests: implement '--reset-results' flag to complement
        the '--new-baseline' flag. '--new-baseline' will always write the
        results into the platform directory; '--reset-results' will update the
        existing baseline wherever it happens to be. Both sets of behavior
        are useful in different circumstances.

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

        * Scripts/webkitpy/layout_tests/data/image/canvas-bg.html: Added.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/image/canvas-zoom.html: Added.
        * Scripts/webkitpy/layout_tests/data/misc/crash-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/misc/crash.html: Added.
        * Scripts/webkitpy/layout_tests/data/misc/missing-expectation.html: Added.
        * Scripts/webkitpy/layout_tests/data/misc/passing-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/misc/passing.html: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.checksum: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.png: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/image/canvas-bg-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/platform/test/test_expectations.txt: Added.
        * Scripts/webkitpy/layout_tests/data/text/article-element-expected.txt: Added.
        * Scripts/webkitpy/layout_tests/data/text/article-element.html: Added.
        * 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/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.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:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/port/dryrun.py:

2010-05-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Add an --html5-parser option to DumpRenderTree to allow testing the new HTML5Lexer
        https://bugs.webkit.org/show_bug.cgi?id=39311

        This flag allows us to run the new HTML5Lexer code.
        Right now all documents parse as empty documents, but
        now that we're able to run the code we can fix that.

        Once we're able to lex a few basic documents I'll add
        an --html5-parser flag to run-webkit-tests so that we test
        running all of the layout tests with the HTML5 parser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        (initializeGlobalsFromCommandLineOptions):

2010-05-08  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] Fix http/tests/xmlhttprequest/cross-origin-no-authorization.html
             and http/tests/xmlhttprequest/cross-origin-authorization.html

        QHttpNetworkRequest adds Authorization and Cookie headers to XHRs
        without knowing if this is valid behaviour or not. In order to allow
        Qt to decide whether Cookie/Authorization headers should be added
        to an XHR QtWebKit needs to use an attribute added to QNetworkRequest.
        These new attributes are: QNetworkRequest::CookieLoadControlAttribute,
        QNetworkRequest::CookieSaveControlAttribute,and
        QNetworkRequest::AuthenticationReuseControlAttribute.

        In order to properly support the tests, Qt's DRT needs to use one
        NetworkAccessManager for all pages. This allows it to use cached
        credentials where appropriate.

        The tests now pass when run individually but there seems to be a problem with
        leaking the results of requests across tests when run with the others in
        http/tests. This will be addressed in a separate patch.

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


        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:


2010-05-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        run_webkit_tests_unittest fails on SnowLeopard
        https://bugs.webkit.org/show_bug.cgi?id=39279

        * Scripts/webkitpy/layout_tests/port/base.py:
         Return copy of os.environ.
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
         Check os.environ was not modified.

2010-05-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Chromium: new-run-webkit-httpd fails to setup_mount
        https://bugs.webkit.org/show_bug.cgi?id=39257

        * Scripts/webkitpy/common/system/executive.py:
         Assert type of args in run_command.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         Add test_run_command_args_type
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         Executive.run_command takes array for command line.
        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
         Test if setup_environ_for_server() run setup_mount.bat.

2010-05-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        Chromium Windows build system does not rebuild correctly when
        enabling/disabling a feature
        https://bugs.webkit.org/show_bug.cgi?id=38926

        Add a workaround of this issue.

        * Scripts/update-webkit:
          Chromium-Windows only: If WebKit/chromium/features.gyp has been
          updated, remove WebKit/chromium/Debug and WebKit/chromium/Release.

2010-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59631.
        http://trac.webkit.org/changeset/59631
        https://bugs.webkit.org/show_bug.cgi?id=39255

        chromium canaries can no longer run webkit_tests, suspect this
        change. (Requested by atwilson on #webkit).

        * 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-05-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Attempt to make new-run-webkit-tests --help more sane
        https://bugs.webkit.org/show_bug.cgi?id=37836

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - Add a FIXME about options.singly and options.batch_size being different.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add support for hidden options.
         - Add option groupings to attempt to simplify --help.
         - Fix a bunch of option helps to start with a capitalized verb.
         - Hide a bunch of options which make no sense to users.
         - Sort options in --help.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
         - Add tests for option sorting.

2010-05-17  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disable Icon Database by default in Qt DRT

        Unskip:
         http/tests/misc/favicon-loads-with-images-disabled.html
         http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html
         http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html
         http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html

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

        Add support for layoutTestController.setIconDatabaseEnabled and layoutTestController.disableImageLoading().
        The XFrameOptions tests were failing because of an extra resource load callback for favicon.ico requests.
        These extra callbacks are removed by supporting both of the above layoutTestContoller commands.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::drtStoragePath):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::setIconDatabaseEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-05-17  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Chromium: Add --chromium option to new-run-webkit-websocketserver
        https://bugs.webkit.org/show_bug.cgi?id=37664

        os.environ setup and setup_mount for cygwin are moved in ChromiumWinPort.setup_environ_for_server.

        * Scripts/new-run-webkit-httpd:
          Remove passing register_cygwin.
        * Scripts/new-run-webkit-websocketserver:
          Add --chromium flag.
          Remove passing register_cygwin.
          Create port object using options.
        * Scripts/webkitpy/layout_tests/port/base.py:
          Add setup_environ_for_server().
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
          Ditto.
        * Scripts/webkitpy/layout_tests/port/factory_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/http_server.py:
          Remove register_cygwin_parameter.
          Call setup_environ_for_server().
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
          Ditto.

2010-05-16  Daniel Bates  <dbates@rim.com>

        Reviewed by Chris Jerdonek.

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

        Adds function VCSUtils::parseSvnProperty to parse an SVN property with
        either a single-line or multi-line value change.

        * Scripts/VCSUtils.pm:
          - Added function parseSvnProperty. We will use this function
            towards resolving Bug #38885 <https://bugs.webkit.org/show_bug.cgi?id=38885>.
          - Removed FIXME comment above function parseSvnPropertyValue, since
            it is being used by parseSvnProperty.
          - Modified function parseSvnPropertyValue to break out of "while (<$fileHandle>)"
            loop when it encounters the start of the next property so that it can be
            processed by its caller, parseSvnPropertyValue. We reference this bullet below
            by (*).
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl: Added.
          - Added unit tests.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
          - Changed the name of the unit test "simple multi-line '-' change" to
            "single-line '-' change followed by empty line" since the former was an
            incorrect description of this test.
          - Added unit test "single-line '-' change followed by the next property", and
            "multi-line '-' change followed by the next property" to test (*) above.

2010-05-16  Tony Chang  <tony@chromium.org>

        Not reviewed, fixing layout test.

        Don't output Inspect Element since this is not enabled on the bots,
        but most developers probably have it installed.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController contextClick:]):

2010-05-12  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        Spellcheck disabling does not disable context menu
        https://bugs.webkit.org/show_bug.cgi?id=25639

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController contextClick:]): add a bool parameter that
              when true, dumps the context menu items to stdout.

2010-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unskip fast/loader/main-document-url-for-non-http-loads.html

        Update Qt DRT to use frame loader, editor client and notification presenter
        functions in DumpRenderTreeSupportQt.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::dumpFrameLoadCallbacks):
        (LayoutTestController::dumpResourceLoadCallbacks):
        (LayoutTestController::setWillSendRequestReturnsNullOnRedirect):
        (LayoutTestController::setWillSendRequestReturnsNull):
        (LayoutTestController::setWillSendRequestClearHeader):

2010-05-16  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r59571.
        http://trac.webkit.org/changeset/59571
        https://bugs.webkit.org/show_bug.cgi?id=39054

        Broke Cr Win, but we didn't notice immediately due to
        https://bugs.webkit.org/show_bug.cgi?id=38926.  It's possible
        that this didn't actually break Cr Win, but rather that bug
        38926 necessitates a clean compile after this and sucessive
        checkins only produced a partial recompile and thus failed to
        build.

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

2010-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt]Unskip security/set-form-autocomplete-attribute.html

        Add support for layoutTestController.elementDoesAutoCompleteForElementWithId().

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-05-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Fix repaint, WebGL, textarea tests
        https://bugs.webkit.org/show_bug.cgi?id=39054

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::canvas): Remove m_paintRect initialization in canvas().
         This line updated m_paintRect unexpectedly during paintRect().
         We don't need to initialize m_paintRect because show() does it.

2010-05-16  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadStatusNotified):
        (createWebView): added connection to notify::load-status and
        signal callback

2010-05-15  Daniel Bates  <dbates@rim.com>

        Reviewed by Chris Jerdonek.

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

        Add function parseSvnPropertyValue to parse single-line and multi-line
        property values of an SVN property change.

        * Scripts/VCSUtils.pm:
            Added function parseSvnPropertyValue. We will use this as part of
            Bug #38885 <https://bugs.webkit.org/show_bug.cgi?id=38885>.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl: Added.

2010-05-15  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Dmitry Titov.

        Add allowDatabase method to TestWebWorker.
        https://bugs.webkit.org/show_bug.cgi?id=38742

        * DumpRenderTree/chromium/TestWebWorker.h:
        (TestWebWorker::allowDatabase):

2010-05-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Antti Koivisto.

        [Qt] Rename QtLauncher to QtTestBrowser
        https://bugs.webkit.org/show_bug.cgi?id=37665

        Forgot to remove the original directory after the rename.

        * QtLauncher: Removed.

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

        Unreviewed, rolling out r59544.
        http://trac.webkit.org/changeset/59544
        https://bugs.webkit.org/show_bug.cgi?id=39165

        Cased LayoutTest to start crashing (Requested by abarth on
        #webkit).

        * Scripts/old-run-webkit-tests:

2010-05-15  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-05-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add script to check for minimum python version and install if missing on Tiger
        https://bugs.webkit.org/show_bug.cgi?id=38886

        Per Maciej's request on webkit-dev:
        https://lists.webkit.org/pipermail/webkit-dev/2010-May/012785.html
        provide a script which can automatically install Python on Tiger where
        the system provided version is too old to be of use.

        Note this uses the official Mac Python installer from python.org.
        This installs a copy of Python in /Library/Frameworks/Python.framework.
        It also makes symlinks from /usr/local/bin to the Python.framework/bin.

        I have tested this script on Leopard and it worked fine.  I have not
        tested it on Tiger as I do not have access to a Tiger machine.  In
        either case this should provide a great starting point for someone
        wishing to upgrade their copy of Python on Tiger.

        Future patches can make our scripts depend on a success return from this
        script and then they can either skip tests/sections for which python is
        insufficient, or they can fail themselves.

        * Scripts/ensure-valid-python: Added.

2010-05-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Display queue position inside EWS bubbles
        https://bugs.webkit.org/show_bug.cgi?id=38979

        This ended up being a lot of clean-up to our status server code.

        Added a new WorkItems model, a form with which to fill it,
        and taught the Attachment class how to calculate the current queue
        postion for an attachment using the data in WorkItems.

        I also finally made statusbubble.* and dashboard.* not use copy-paste code.

        The Attachment class has this summary() method which is very
        controller/view-like and does not belong in a model class.
        This patch got rid of all direct uses of summary().

        * QueueStatusServer/handlers/dashboard.py:
          - Build row objects to hand off to the view instead of handing off a
            summary object and expecting the view to process it directly.
        * QueueStatusServer/handlers/statusbubble.py:
          - Build bubble object and hand them off to the view.
        * QueueStatusServer/handlers/updatestatus.py:
          - Code cleanup.  Just move some code into _queue_status_from_request
            to make the main put() handler easier to read.
        * QueueStatusServer/handlers/updateworkitems.py: Added.
          - Controller to handle storing WorkItems model objects.
        * QueueStatusServer/main.py:
          - Add route for /update-work-items
        * QueueStatusServer/model/attachment.py:
          - Add new methods to replace direct summary() access.
          - Teach attachment how to calculate queue positions from WorkItems data.
        * QueueStatusServer/model/queues.py:
          - Move name_with_underscores here for easier re-use.
        * QueueStatusServer/model/workitems.py: Added.
         - New model for storing what items are currently queue for any bot.
        * QueueStatusServer/templates/dashboard.html:
         - Kill the copy/paste code!
        * QueueStatusServer/templates/statusbubble.html:
         - Kill the copy/paste code!
        * QueueStatusServer/templates/updateworkitems.html: Added.
         - Simple form for updating a queue's current work items.

2010-05-15  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30500
        [Gtk] Find a way for WebKit to "announce" itself so that ATs can readily distinguish it from true Gtk/Gail

        The "announcement" is now made in the form of an object attribute
        associated with the AtkObject.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::allAttributes):
        (attributeSetToString):

2010-05-15  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        Accessibility: Implement isSelected in DRT for GTK
        https://bugs.webkit.org/show_bug.cgi?id=31018

        Implement AccessibilityUIElement::isSelected() for Gtk

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

2010-05-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        scm.py should use self.run instead of run_command
        https://bugs.webkit.org/show_bug.cgi?id=38957

        We've wanted to do this for a while, but it's a prerequiste for running
        SVN from the cwd instead of the checkout_root.

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

2010-05-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Consider implementing addOriginAccessWhitelistEntry method
        https://bugs.webkit.org/show_bug.cgi?id=37578

        Remove deprecated methods.

        * DumpRenderTree/chromium/LayoutTestController.cpp
        * DumpRenderTree/chromium/LayoutTestController.h

2010-05-14  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Adler.

        Rename WebGLArray types to TypedArray types
        https://bugs.webkit.org/show_bug.cgi?id=39091

        Extended functionality of do-webcore-rename script and used it to
        rename the WebGLArray types to the TypedArray naming convention.
        The only source files which were touched by hand, and which are
        being manually reviewed, are:
            WebCore/page/DOMWindow.idl
            WebCore/bindings/generic/RuntimeEnabledFeatures.h (script's changes undone)
            WebKit/WebCore/bindings/js/JSDOMWindowCustom.cpp
            WebKit/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
        These only needed to be touched to update the aliases between the
        WebGLArray and TypedArray names introduced in bug 39036. (It was
        not feasible to have do-webcore-rename handle this as it would
        introduce circular renamings.) These aliases will be removed in
        roughly a month once existing WebGL content has been updated.

        No new tests; covered under existing WebGL tests. Updated
        constructed-objects-prototypes and prototype-inheritance-2 tests.
        Ran all layout tests in Safari and all WebGL tests in Chromium.

        * Scripts/do-webcore-rename:
          Handle the case where some renames are substrings of others.
          Support renaming files containing custom JS bindings. If
          isDOMTypeRename is non-zero, expand the regexp which rewrites
          the file's contents in order to support custom JS bindings.

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

        Reviewed by Adam Barth.

        webkit-patch rollout throws exception if bug is already open
        https://bugs.webkit.org/show_bug.cgi?id=38803

        This was caused by someone incorrectly wrapping the code. :p
        I'm going to have to start demanding unit tests for wrapping changes...

        I also fixed the code to be able to reopen bugs which were never confirmed.
        Before it regressed, the code would just log in that case.  Now it actually
        will reopen the bug, but there is a FIXME about how the logic is a bit backwards.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
         - Yay testing!

2010-05-14  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Antti Koivisto.

        [Qt] Rename QtLauncher to QtTestBrowser

        * QtTestBrowser: Copied from WebKitTools/QtLauncher.
        * QtTestBrowser/QtLauncher.pro: Removed.
        * QtTestBrowser/QtLauncher.qrc: Removed.
        * QtTestBrowser/QtTestBrowser.pro: Copied from WebKitTools/QtLauncher/QtLauncher.pro.
        * QtTestBrowser/QtTestBrowser.qrc: Copied from WebKitTools/QtLauncher/QtLauncher.qrc.
        * Scripts/run-launcher:
        * Scripts/webkitdirs.pm:

2010-05-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Stop CCing webkit-bot-watchers
        https://bugs.webkit.org/show_bug.cgi?id=39020

        webkit-bot-watchers is somewhat of a failed experiment.  No one
        subscribed to the list (not even me).  Removing it from the code
        because wms says it bounces email sometimes.

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

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

        Reviewed by Adam Barth.

        REGRESSION: webkit-patch commit-message throws exception
        https://bugs.webkit.org/show_bug.cgi?id=38997

        * Scripts/webkitpy/tool/commands/upload.py:
         - Fix to respect and pass the --squash and --git-commit options.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
         - Fix the unit test to use the central MockCheckout instead of
           its own custom Mock which didn't require enough parameters.

2010-05-13  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve QtLauncher user agent dialog resize
        https://bugs.webkit.org/show_bug.cgi?id=39062

        * QtLauncher/main.cpp:
        (LauncherWindow::showUserAgentDialog):

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

        Reviewed by Ojan Vafai.

        Disable compositing/iframes tests on the commit-queue as a workaround for  bug 38912
        https://bugs.webkit.org/show_bug.cgi?id=39067

        Fix yet another typo in my original hack.
        I also added another unit test for this fix.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:

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

        Reviewed by Ojan Vafai.

        Disable compositing/iframes tests on the commit-queue as a workaround for  bug 38912
        https://bugs.webkit.org/show_bug.cgi?id=39067

        My previous (unreviewed) hack didn't actually work due to checking "mac" instead of "Mac".
        This change fixes my hack, and unit tests it.

        * Scripts/webkitpy/tool/mocktool.py:
         - Make it possible to make run_command log too.
        * Scripts/webkitpy/tool/steps/runtests.py:
         - Fix my hack to actually work.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Test my hack (and basic RunTests behavior as well).

2010-05-13  Antonio Gomes  <tonikitoo@webkit.org>, Yi Shen <yi.4.shen@nokia.com>

        Reviewed by Kenneth Christiansen.

        [Qt] Add LayoutTestController interface: computedStyleIncludingVisitedInfo
        https://bugs.webkit.org/show_bug.cgi?id=37759

        WebKitTools:

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-05-10  Adam Roben  <aroben@apple.com>

        Convert status bar text to UTF-8 before logging it on Windows

        We were previously logging the text using printf("%S", bstr). This
        converts the UTF-16 BSTR to a multibyte string using wctomb, which
        uses the codepage for the current locale to perform the conversion.
        The conversion was failing, causing printf to bail and truncate the
        string. By converting to UTF-8 manually before logging, we avoid this
        issue (and also end up with UTF-8 output, which is what the expected
        results contain). We may have to do this in other places in DRT,
        eventually.

        Fixes <http://webkit.org/b/38849> REGRESSION (r59016):
        plugins/set-status.html fails on Windows

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (toUTF8): Moved this here from FrameLoadDelegate. Renamed from
        BSTRtoString.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Added declaration of toUTF8.

        * DumpRenderTree/win/FrameLoadDelegate.cpp: Removed BSTRtoString.
        (descriptionSuitableForTestResult): Updated for rename.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::setStatusText): Convert the status bar text to UTF-8
        before logging it so that Windows won't try (and fail) to convert it
        to the current locale's codepage.

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

        Unreviewed hack, attempting to get the commit-queue running again.

        Disable compositing/iframes tests on the commit-queue as a workaround for bug 38912
        https://bugs.webkit.org/show_bug.cgi?id=39067

        I had this hack locally on the commit-queue, but it's fragile
        and broke this morning.  It will work much better if committed
        to the repository.  In either case it's temporary while we
        work up a real fix for bug 38912.

        * Scripts/webkitpy/common/config/ports.py:
         - Expose an is_leopard() method.
        * Scripts/webkitpy/tool/steps/runtests.py:
         - Don't run compositing/iframes tests on the commit-queue under leopard.

2010-05-13  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.  Revert previous change.

        Even if with-statments are changed in websocket_server.py, it also claims syntax error for with statement in http_server.py.
        Until python 2.5 is installed on tiger bot, skips websocket/tests on tiger.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: use with statement

2010-05-13  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.

        On tiger bot, it claims syntax error for with statement.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: rewrite with statement with try-finally.

2010-05-13  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        WebSocket: pywebsocket 0.5
        https://bugs.webkit.org/show_bug.cgi?id=38034

        Remove pywebsocket from webkitpy/thirdparty.
        Make pywebsocket autoinstalled.

        * Scripts/new-run-webkit-websocketserver:
          Add --output-dir option.
        * Scripts/old-run-webkit-tests:
          Use new-run-webkit-websocketserver, rather than directly run pywebsocket's standalone.py
        * Scripts/run-webkit-websocketserver:
          Ditto.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
          Use autoinstalled pywebsocket.
        * Scripts/webkitpy/thirdparty/__init__.py:
          Autoinstall pywebsocket
        * Scripts/webkitpy/thirdparty/pywebsocket: Removed.

2010-05-12  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Fixed a bug in svn-apply whereby the reviewer would not get set if
        the portion of the patch for the ChangeLog contains "NOBODY (**PS!)"
        in the leading junk.

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

        * Scripts/VCSUtils.pm:
          - Added the $changeLogTimeZone variable from svn-apply.
          - Added setChangeLogDateAndReviewer() from svn-apply.
          - Added a localTimeInProjectTimeZone() subroutine.
          - In setChangeLogDateAndReviewer():
            - Added an $epochTime parameter to make the subroutine more testable.
            - Made the "NOBODY (**PS!)" regular expression more specific so that
              it will not apply to text in the leading junk.
            - Updated to call localTimeInProjectTimeZone().
        * Scripts/svn-apply:
          - Removed the $changeLogTimeZone file variable.
          - Added an $epochTime file variable to represent the current time.
          - Removed the setChangeLogDateAndReviewer() subroutine.
          - Updated patch() to use the new setChangeLogDateAndReviewer() syntax.
        * Scripts/webkitperl/VCSUtils_unittest/setChangeLogDateAndReviewer.pl: Added.
          - Added unit tests.

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

        Reviewed by Adam Barth.

        test-webkitpy fails on windows due to lack of readline module
        https://bugs.webkit.org/show_bug.cgi?id=38884

        Win32 Python does not have a readline module, so we should
        not exit(1) if the import fails.

        Also the failure message is mac-specific and doesn't need to be.
        Only print the mac-specific install instructions on mac.

        * Scripts/webkitpy/common/system/user.py:

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

        Reviewed by Nate Chapin.

        [DRT/Chromium] Add a missing Sans-serif font setting
        https://bugs.webkit.org/show_bug.cgi?id=38981

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
          Set "Helvetica" for Sans-serif. It is the same as the default setting of test_shell.

2010-05-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        webkit-patch upload --fancy-review now uses the bugzilla bug ID as the rietveld ID
        https://bugs.webkit.org/show_bug.cgi?id=38866

        wkrietveld.appspot.com has already been updated to allow you to
        pass --issue for the issue creation as well as subsequent uploads.

        Also, remove the extra code for trying to read out the issue ID
        from the changelog description since we just use the bugzilla ID now.

        * Scripts/webkitpy/common/config/__init__.py:
        * Scripts/webkitpy/common/net/rietveld.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

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

        No review needed.

        Marking myself as a reviewer.

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

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

        Reviewed by Eric Seidel.

        new-run-webkit-tests: add a --print default option so that you can
        easily get the default output plus something (e.g., you can say
        '--print default,config' instead of '--print misc,one-line-progress,
        one-line-summary,unexpected,unexpected-results,updates,config'.

        Also, add more unit tests for --verbose, --print everything, etc.

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

        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:

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

        Reviewed by Adam Barth.

        Qt build failures cause SheriffBot false positives
        https://bugs.webkit.org/show_bug.cgi?id=38969

        Add Qt bots back to the core builders, because bug fixed by r59261.

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

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Slave losts cause build break on bots
        https://bugs.webkit.org/show_bug.cgi?id=38980

        * Scripts/build-webkit: Remove 0 byte sized files from productDir before build.

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

        Unreviewed trivial fix after r59254.

        * Scripts/old-run-webkit-tests:

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

        Reviewed by Eric Seidel.

        run-webkit-tests --exit-after-N-failures should not count new tests as failures
        https://bugs.webkit.org/show_bug.cgi?id=31829

        * Scripts/old-run-webkit-tests:

2010-05-12  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Disable smooth scrolling on OS X when running tests
        https://bugs.webkit.org/show_bug.cgi?id=38964

        Some tests (like fast/repaint/fixed-move-after-keyboard-scroll.html)
        depend on smooth scrolling behavior.  Since this is off by default
        in Leopard and on by default in Snow Leopard, DRT should turn it
        off always to ensure a consistent test environment.

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

2010-05-10  Rodrigo Belem  <rodrigo.belem@openbossa.org>

        Reviewed by Kenneth Christiansen , Simon Hausmann and Gustavo Noronha.

        [Qt, Gtk] Allows build-webkit script to receive an install prefix as parameter
        https://bugs.webkit.org/show_bug.cgi?id=26224

        Added more parameters to build-webkit script, the --prefix for gkt
        and --install-libs, --install-headers for qt. Now it is possible
        to change the install prefix for gtk and install path for qt.

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

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

        Unreviewed, added my IRC nickname.

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

2010-05-11  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Fixed two FIXME's in svn-apply: eliminated the unnecessary %copiedFiles
        variable and changed gitKnowsOfFile() to use exitStatus().

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

        * Scripts/svn-apply:

2010-05-11  Eric Seidel  <eric@webkit.org>

        Unreviewed, just fixing python typo.

        EWS bots should poll more often than every 5 minutes
        https://bugs.webkit.org/show_bug.cgi?id=38968

        Typo in _now(), add a unittest to prove I fixed it.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:

2010-05-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Qt build failures cause SheriffBot false positives
        https://bugs.webkit.org/show_bug.cgi?id=38969

        The Qt buildbot randomly fails to compile occasionally because its
        network connection causes SVn to leave zero-byte files around.  These
        compile failures confuse SheriffBot into thinking someone's patch
        caused a build break.

        In this patch, I've temporarily removed Qt from the list of core
        builders.  Ossy is working on a script to clean up the zero byte files.
        Once that goes in, we can add Qt back to the core builders.

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

2010-05-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        sheriffbot is spammy.
        https://bugs.webkit.org/show_bug.cgi?id=38936

        Reduce sheriffbot spam by not warning about new blameworthy revisions
        that can be explained by previously blamed revisions.  This might cause
        us to not warn about some real failures, but we're getting too much
        spam from slow builders that have large blamelists (and we've already
        poked the responsible folks using data from a fast builder).

        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
            - Removed unneeded import
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
            - The logic change
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
            - Tests of the change
        * Scripts/webkitpy/tool/mocktool.py:
            - Merged two declarations of MockBuilder

2010-05-11  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] detect num processors to pass to make -j on Linux
        https://bugs.webkit.org/show_bug.cgi?id=38833

        * Scripts/webkitdirs.pm:

2010-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        EWS bots should poll more often than every 5 minutes
        https://bugs.webkit.org/show_bug.cgi?id=38968

        We'll make them poll every 2 minutes to start with.
        I'm going to re-write how polling works soon, so this is
        a stop-gap to try and make the bots more responsive.

        If Bill notices any additional load on bugzilla we'll drop
        the polling frequency back to 5 minutes.  He's historically said
        that the EWS bots appear to be a drop in the bucket and thus
        should be able to poll much more frequently w/o causing trouble.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
         - Add a test for sleep_message

2010-05-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should commit rollouts without running tests
        https://bugs.webkit.org/show_bug.cgi?id=38940

        Most of this change is improving our test coverage for the commit-queue.
        The only functional change is removing the --test flag when the commit-queue
        is running in rollouts mode.

        I added test coverage for status updates, and updated the commit-queue status
        messages to distinguish rollout vs. normal landing mode in its empty queue
        and land patch messages.

        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
         - Got rid of a bunch of copy/paste code using _default_expected_stderr
        * Scripts/webkitpy/tool/commands/queues.py:
         - Moved rollout patch filtering out of _validate_patches_in_commit_queue
           so that we only have to check if the builders are green in one place.
         - Make the "empty queue" message note which queue it is referring to.
         - Don't pass --text to land-attachment when in rollout mode.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
         - Update results now that we're testing status updates.
         - Test _can_build_and_test since I made a typo in that call while
           writing this change and the unit tests failed to catch it!
        * Scripts/webkitpy/tool/mocktool.py:
         - Log status updates to make them testable in our unit tests.

2010-05-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Apply recent changes of test_shell to DRT
        https://bugs.webkit.org/show_bug.cgi?id=38895

        Port the changes to test_shell during (r40492, r46810] of Chromium.
        Highlights:
        - Introduce NotificationPresenter
        - Fix parameter mismatch of WebViewClient::startDragging()

        This change fixes dozens of unexpected behaviors.

        * DumpRenderTree/DumpRenderTree.gypi:
          Add NotificationPresenter.{cpp,h}
        * DumpRenderTree/chromium/EventSender.cpp:
        (applyKeyModifier):
        (EventSender::EventSender):
        (EventSender::reset):
        (EventSender::webview):
        (EventSender::doDragDrop):
        (EventSender::keyDown):
        (EventSender::addTouchPoint):
        (EventSender::clearTouchPoints):
        (EventSender::releaseTouchPoint):
        (EventSender::setTouchModifier):
        (EventSender::updateTouchPoint):
        (EventSender::cancelTouchPoint):
        (EventSender::sendCurrentTouchEvent):
        (EventSender::touchEnd):
        (EventSender::touchMove):
        (EventSender::touchStart):
        (EventSender::touchCancel):
        * DumpRenderTree/chromium/EventSender.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::setAuthorAndUserStylesEnabled):
        (LayoutTestController::setScrollbarPolicy):
        (LayoutTestController::setWillSendRequestClearHeader):
        (LayoutTestController::callShouldCloseOnWebView):
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::removeOriginAccessWhitelistEntry):
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/NotificationPresenter.cpp: Added.
        * DumpRenderTree/chromium/NotificationPresenter.h: Added.
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        (TestShell::runFileTest):
        (TestShell::resetTestController):
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::eventSender):
        (TestShell::notificationPresenter):
        (TestShell::showDevTools):
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::createView):
        (WebViewHost::createPopupMenu):
        (WebViewHost::startDragging):
        (WebViewHost::notificationPresenter):
        (WebViewHost::createApplicationCacheHost):
        (WebViewHost::willSendRequest):
        (WebViewHost::updateAddressBar):
        (WebViewHost::updateURL):
        * DumpRenderTree/chromium/WebViewHost.h:
        (WebViewHost::addClearHeader):
        (WebViewHost::clearHeaders):

2010-05-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: fix a path-handling bug that was breaking the
        dryrun ports on windows, and add a comment about why we don't run
        the chromium dryrun tests by default on every port.

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

        * Scripts/webkitpy/layout_tests/port/dryrun.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-05-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <http://webkit.org/b/38941> build-webkit shouldn't always override ENABLE_FOO Xcode configuration settings

        * Scripts/build-webkit: Don't pass the ENABLE setting to xcodebuild if the value matches the default.
        This will lead to xcodebuild picking up the settings from FeatureDefines.xcconfig, and will aid in
        revealing problems that are due to inconsistent values for settings across projects.

2010-05-11  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:

2010-05-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        CheckStyle was eating script errors when there were local-commits and working copy changes
        https://bugs.webkit.org/show_bug.cgi?id=38880

        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/checkstyle_unittest.py: Added.

2010-05-11  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Expose FileReader interface.
        https://bugs.webkit.org/show_bug.cgi?id=38609

        * Scripts/build-webkit: turn on building FileReader for Apple's WebKit.

2010-05-10  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Build DRT when running build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=38730

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Removed.
        * Scripts/build-dumprendertree: This does nothing now.

2010-05-10  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r59100): Added test is broken on many platforms.
        https://bugs.webkit.org/show_bug.cgi?id=38881

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_Destroy):
        Use pluginLog, rather than printf, to match other platforms.

2010-05-10  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix a build failure caused by assuming the default platform in
        a unit test for new-run-webkit-tests instead of specifying
        --platform test.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-05-10  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build-fix

        new-run-webkit-tests: fix test failure caused by me failing to update
        the expected output. Also, run '--platform test' instead of
        'platform dryrun' since the former is guaranteed to work and the
        latter isn't.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-05-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        new-run-webkit-tests: looks like the unicode conversion broke
        --print-last-failures and --retest-last-failures. Fixing.

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

2010-05-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        Re-attempt to fix 38616 - newline handling in new-run-webkit-tests.
        I didn't handle some cases correctly before and the solution was
        confusing. The new patch assumes all calls to the printing module
        don't have newlines, and will append newlines where necessary, just
        like logging does.

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

        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing.py:
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-05-10  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Make tkent a reviewer
        https://bugs.webkit.org/show_bug.cgi?id=38875

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

2010-05-07  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash closing window containing Flash plug-in
        https://bugs.webkit.org/show_bug.cgi?id=38797
        <rdar://problem/7935266>

        Reviewed by Eric Seidel.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginAllocate):
        Initialize new member to false.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        Added a new member.

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New):
        Check whether the element has the "testGetURLOnDestroy" attribute, and
        record that.
        (NPP_Destroy):
        If "testGetURLOnDestroy" is set, perform a load while destroying the
        plug-in.

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

        Reviewed by David Levin.

        Executive.kill_* do not work with windows python
        https://bugs.webkit.org/show_bug.cgi?id=38872

        http://trac.webkit.org/changeset/57444 is where the original
        breakage occurred.
        http://trac.webkit.org/changeset/58314 is where the regression
        started affecting chromium.

        I have since learned that sys.platform has no "windows" value.
        "win32" is always the value, under 32 or 64 bit windows

        The tests for this code are not run anywhere because
        test-webkitpy does not yet work on "win32".  Mostly due to
        depending on unixisms like "cat" and "yes".

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

2010-05-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Fix a bug in rebaseline-chromium-webkit-tests where we would crash
        instead of logging an error and exiting if it couldn't find either a
        debug or a release build of the image diff binary.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py: Added.

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

        Reviewed by Adam Barth.

        new-run-webkit-tests fails when run under sys.platform == "windows" due to undefined signal.SIGKILL
        https://bugs.webkit.org/show_bug.cgi?id=38861

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

2010-05-10  Jer Noble  <jer.noble@apple.com>

        Unreviewed.

        Adding myself as a committer.

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

2010-05-10  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        [Chromium] Add quota parameter to WebViewClient::createSessionStorageNamespace()
        https://bugs.webkit.org/show_bug.cgi?id=38750

        Put a per-origin quota on session storage since it is using memory in
        the browser process, and should not be allowed to grow arbitrarily
        large. See also http://trac.webkit.org/changeset/58828.

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

2010-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Simon Hausmann.

        [Qt] Roll-out r59020 and r59021, because the Qt part of these changes
        haven't been landed in Qt trunk yet. Should be rolled-in again after the merge.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:

2010-05-09  Daniel Bates  <dbates@rim.com>

        Reviewed by Chris Jerdonek.

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

        Make the regular expressions for parsing the start of an SVN
        and Git header global variables since they are used throughout
        VCSUtils.pm.

        * Scripts/VCSUtils.pm:

2010-05-09  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Finished moving the header-parsing logic from svn-apply and -unapply
        to VCSUtils.pm's parsing methods.

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

        * Scripts/VCSUtils.pm:
          - Added to parseGitDiffHeader() the ability to parse and store
            whether a file is new or deleted.
          - Also reordered in parseGitDiffHeader() some of the else statements
            to a more readable ordering.
          - Added to parseSvnDiffHeader() the ability to parse and store
            whether a file is new.
        * Scripts/svn-apply:
          - Changed handleGitBinaryChange() to use the new "isNew" and "isDeletion"
            diffHash key-values.
          - Changed patch() to use the new "isNew" diffHash key-value.
        * Scripts/svn-unapply:
          - Changed patch() to use the new "isNew" and "isDeletion" diffHash key-values.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added unit tests for new and deleted files.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
          - Updated the unit tests as necessary.
          - Added a unit test for a deleted file.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
          - Updated the unit tests as necessary.

2010-05-08  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Added to svn-apply support for git renames and copies with similarity
        index less than 100%.

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

        * Scripts/VCSUtils.pm:
          - Added to parseGitDiffHeader() support for renames and similarity
            index less than 100%.
          - Added to parseDiff() support for processing renames, renames with
            changes, and copies with changes.
          - Added to parsePatch() the ability to process multiple return
            values from parseDiff().
        * Scripts/svn-apply:
          - Added to patch() the ability to process diff hashes with the
            isDeletion key-value set.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated the unit tests as necessary.
          - Added unit tests for rename with similarity index 100%,
            rename with similarity index < 100%, and rename with a change
            to the executable bit.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
          - Added unit tests for rename with similarity index 100%,
            rename with similarity index < 100%, and rename with a change
            to the executable bit.
        * Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl:
          - Updated the unit tests as necessary.
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
          - Simplified the carriage-return unit test to more narrowly test
            only carriage returns.

2010-05-08  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        This revision suppresses the misleading "error: pathspec..." messages
        when using svn-apply to add a binary file from a Git diff.

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

        When adding a new binary file from a Git diff, svn-apply prints
        a misleading error of the form -- "error: pathspec '<filename>' did
        not match any file(s) known to git.  Did you forget to 'git add'?"
        This patch suppresses these messages since they are normal.

        * Scripts/VCSUtils.pm:
          Added the callSilently() subroutine from runPatchCommand.pl, which
          executes a Perl function while suppressing STDERR.
        * Scripts/svn-apply:
          Refactored the Git portion of scmKnowsOfFile() into a
          gitKnowsOfFile(), and called this new subroutine using callSilently().
        * Scripts/webkitperl/VCSUtils_unittest/runPatchCommand.pl:
          Removed callSilently() since it was moved to VCSUtils.pm in this patch.

2010-05-08  Victor Wang  <victorw@chromium.org>

        Reviewed by Adam Barth.

        [chromium]: Upload test results json files to app engine server
        Add an option to run_webkit_tests.py to upload generated
        JSON files to app engine server. These JSON files will be used
        by chromium layout test falkiness dashboard.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_results_uploader.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-05-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Build the ImageDiff tool for all platforms including Windows and Symbian
        https://bugs.webkit.org/show_bug.cgi?id=38706

        Use qmath.h instead of math.h to make it portable.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2010-05-08  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] Fix http/tests/xmlhttprequest/cross-origin-no-authorization.html
             and http/tests/xmlhttprequest/cross-origin-authorization.html

        QHttpNetworkRequest adds Authorization and Cookie headers to XHRs
        without knowing if this is valid behaviour or not. In order to allow
        Qt to decide whether Cookie/Authorization headers should be added
        to an XHR QtWebKit needs to use an attribute added to QNetworkRequest.
        These new attributes are: QNetworkRequest::CookieLoadControlAttribute,
        QNetworkRequest::CookieSaveControlAttribute,and
        QNetworkRequest::AuthenticationReuseControlAttribute.

        In order to properly support the tests, Qt's DRT needs to use one
        NetworkAccessManager for all pages. This allows it to use cached
        credentials where appropriate.

        The tests now pass when run individually but there seems to be a problem with
        leaking the results of requests across tests when run with the others in
        http/tests. This will be addressed in a separate patch.

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


        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:


2010-05-04  Robert Hogan  <robert@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] unskip http/tests/plugins/npapi-response-headers.html

        Turns out this failed because run-webkit-tests was eating the first occurrence
        of 'Content-Type: text/plain' in the test output as a header. Strange but true.
        So do as Chromium does and preface all text dumps with the
        'Content-Type: text/plain' header.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):

2010-05-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Daniel Bates.

        test-webkitpy fails under cygwin
        https://bugs.webkit.org/show_bug.cgi?id=38718

        * Scripts/webkitpy/common/system/executive.py:
         - Add _KILL_PROCESS_KILLED_PROCESS_EXIT_CODE and
           _KILL_ALL_KILLED_PROCESS_EXIT_CODE to store the expected
           exit codes of processes killed by kill_process and kill_all.
           These two constants are only used by the unit tests but are
           stored in executive.py so they can be right next to the platform ifs.
         - Remove unnecessary str() conversion, run_command does that for us.
         - Make os.kill retry on cygwin on EAGAIN.  It's unclear why CYGWIN
           throws EAGAIN, but it only does so sometimes.  3 may not be enough
           retries, but we'll try it to start with.
         - Add _windows_image_name to automatically convert "yes" to "yes.exe"
           for use with taskkill.exe /im.  Various callers to kill_all could
           be updated to remove the .exe, but that can be done in another patch.
         - Use taskkill.exe for killall on cygwin.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         - Use the new *_KILLED_PROCESS_EXIT_CODE constants which are correctly
           set to 0 on windows/cygwin systems where taskkill.exe is used.
         - Test _windows_image_name
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Add FIXME about including mac-snowleopard in baseline_search_path.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Make default_configuration actually read from the Configuration file.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added.
         - Test default_configuration
        * Scripts/webkitpy/layout_tests/port/win.py:
         - Need a basic baseline_search_path if --platform dryrun is to work.

2010-05-08  Eric Seidel  <eric@webkit.org>

        Unreviewed, just reverting commit.

        REGRESSION(59000): r59000 contained all sorts of changes it should not have, needs revert.
        https://bugs.webkit.org/show_bug.cgi?id=38798

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/win.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:

2010-05-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Daniel Bates.

        test-webkitpy fails under cygwin
        https://bugs.webkit.org/show_bug.cgi?id=38718

        * Scripts/webkitpy/common/system/executive.py:
         - Add _KILL_PROCESS_KILLED_PROCESS_EXIT_CODE and
           _KILL_ALL_KILLED_PROCESS_EXIT_CODE to store the expected
           exit codes of processes killed by kill_process and kill_all.
           These two constants are only used by the unit tests but are
           stored in executive.py so they can be right next to the platform ifs.
         - Remove unnecessary str() conversion, run_command does that for us.
         - Make os.kill retry on cygwin on EAGAIN.  It's unclear why CYGWIN
           throws EAGAIN, but it only does so sometimes.  3 may not be enough
           retries, but we'll try it to start with.
         - Add _windows_image_name to automatically convert "yes" to "yes.exe"
           for use with taskkill.exe /im.  Various callers to kill_all could
           be updated to remove the .exe, but that can be done in another patch.
         - Use taskkill.exe for killall on cygwin.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         - Use the new *_KILLED_PROCESS_EXIT_CODE constants which are correctly
           set to 0 on windows/cygwin systems where taskkill.exe is used.
         - Test _windows_image_name
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Add FIXME about including mac-snowleopard in baseline_search_path.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Make default_configuration actually read from the Configuration file.
        * Scripts/webkitpy/layout_tests/port/webkit_unittest.py: Added.
         - Test default_configuration
        * Scripts/webkitpy/layout_tests/port/win.py:
         - Need a basic baseline_search_path if --platform dryrun is to work.

 2010-05-07  Eric Seidel  <eric@webkit.org>

         Reviewed by Nikolas Zimmermann.

         DryrunTest fails on every platform other than mac
         https://bugs.webkit.org/show_bug.cgi?id=38796

         The test uses the port detection logic to find a suitable
         port to use results from.  However that detection logic assumes
         chromium on linux, which requires a chromium checkout which the
         bots don't have.  The test is broken and we'll need to fix it.
         For now I'm just going to disable the test on all platforms besides mac.

         * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

 2010-05-07  Eric Seidel  <eric@webkit.org>

         Reviewed by Daniel Bates.

         Clean up baseline_search_path to use map to reduce copy/paste code
         https://bugs.webkit.org/show_bug.cgi?id=38792

         Reading which portnames a port falls back to is easier if
         we convert port names to paths with map instead of using copy/paste code.

         * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
         * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
         * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         * Scripts/webkitpy/layout_tests/port/mac.py:

 2010-05-07  Eric Seidel  <eric@webkit.org>

         Reviewed by Daniel Bates.

         rollout commands fail when commit is missing bug number
         https://bugs.webkit.org/show_bug.cgi?id=38791

         * Scripts/webkitpy/tool/commands/download.py:
          - _commit_info failed to actually return the CommitInfo in the no-bug-id case.
         * Scripts/webkitpy/tool/commands/download_unittest.py:
          - Test that the fix worked.

2010-05-07  Darin Fisher  <darin@chromium.org>

        Fix build bustage: toElement<T> should be to<T>.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::elementDoesAutoCompleteForElementWithId):

2010-05-07  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Refactored VCSUtils.pm's parse-related methods to leave inapplicable
        hash values unset instead of setting them to "undef".

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

        Preferring "not set" over "undef" keeps the unit tests smaller and
        easier to maintain.  Otherwise, we would have to update every unit
        test case each time we add support for a new key-value pair --
        instead of just the relevant ones.

        * Scripts/VCSUtils.pm:
          - In parseGitDiffHeader(), adjusted the handling of these key-values:
            executableBitDelta and isBinary.
          - In parseSvnDiffHeader(), adjusted the handling of these key-values:
            copiedFromPath, isBinary, and sourceRevision.
          - In parseDiffHeader(), adjusted the handling of these key-values:
            isGit and isSvn.
          - In parseDiff(), adjusted the handling of these key-values:
            isBinary, isGit, isSvn, and sourceRevision.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated the unit tests as necessary.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Updated the unit tests as necessary.

        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
          - Updated the unit tests as necessary.

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
          - Updated the unit tests as necessary.

2010-05-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Exclude leaks due to <rdar://problem/7815391> from the output.

        * Scripts/old-run-webkit-tests:

2010-05-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r58933.
        http://trac.webkit.org/changeset/58933
        https://bugs.webkit.org/show_bug.cgi?id=38717

        "Broke all websocket tests on Tiger" (Requested by eseidel on
        #webkit).

        * Scripts/new-run-webkit-websocketserver:
        * Scripts/old-run-webkit-tests:
        * Scripts/run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/COPYING: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/MANIFEST.in: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/README: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/README.webkit: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/example/echo_client.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/example/echo_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/example/handler_map.txt: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/__init__.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/dispatch.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/handshake.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/headerparserhandler.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/memorizingfile.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/msgutil.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/standalone.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/util.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/setup.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/config.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/mock.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/run_all.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_dispatch.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_handshake.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_memorizingfile.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_mock.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_msgutil.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_util.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/README: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/blank_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/origin_check_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/sub/exception_in_transfer_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/sub/no_wsh_at_the_end.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/sub/non_callable_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/sub/plain_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/sub/wrong_handshake_sig_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/handlers/sub/wrong_transfer_sig_wsh.py: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/hello.pl: Added.

2010-05-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        WebSocket: pywebsocket 0.5
        https://bugs.webkit.org/show_bug.cgi?id=38034

        Remove pywebsocket from webkitpy/thirdparty.
        Make pywebsocket autoinstalled.

        * Scripts/new-run-webkit-websocketserver:
          Add --output-dir option.
        * Scripts/old-run-webkit-tests:
          Use new-run-webkit-websocketserver, rather than directly run pywebsocket's standalone.py
        * Scripts/run-webkit-websocketserver:
          Ditto.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
          Use autoinstalled pywebsocket.
        * Scripts/webkitpy/thirdparty/__init__.py:
          Autoinstall pywebsocket
        * Scripts/webkitpy/thirdparty/pywebsocket: Removed.

2010-05-06  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        svn-apply now understands the Git diff "copy from" syntax when the
        similarity index is 100%.

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

        * Scripts/VCSUtils.pm:
          - Adjusted parseGitDiffHeader() to parse the "copy from" and
            "similarity index" lines.

        * Scripts/svn-unapply:
          - Adjusted the patch() subroutine so that copies are recognized
            as file additions.

        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
          - Added unit tests for the cases of a copy with similarity index
            100% and less than 100%.

2010-05-06  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Removed the need for svn-apply and -unapply to re-parse whether
        a diff is binary or not.

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

        * Scripts/VCSUtils.pm:
          - Adjusted parseGitDiffHeader() to set the isBinary key.
          - Adjusted parseSvnDiffHeader() to set the isBinary key.
          - Adjusted parseDiffHeader() to set the isBinary key.
          - Changed the scmFormat key set by parseDiffHeader() to
            isGit and isSvn keys.
          - Adjusted parseDiff() to set the isBinary, isGit, and isSvn keys.

        * Scripts/svn-apply:
          - Updated the patch() method to use the isBinary, isGit, and
            isSvn keys.

        * Scripts/svn-unapply:
          - Updated the patch() method to use the isBinary and isSvn keys.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated the unit tests as necessary.
          - Added a test case to test that the isBinary key is getting set properly.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Updated the unit tests as necessary.

        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
          - Updated the unit tests as necessary.

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
          - Updated the unit tests as necessary.

2010-05-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add support for resources on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38637

        Repack webkit_chromium_resources.pak, webkit_strings_en-US.pak,
        and webkit_resources.pak, and put them as Mac bundle resource.
        The 'actions' section is almost same as a part of test_shell.gypi.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2010-05-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r58917.

        * DumpRenderTree/qt/LayoutTestControllerQt.h: Missing function declaration added.

2010-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Dan Bernstein..

        REGRESSION (r51617): when plugins are disabled, plugins show up as garbage characters
        https://bugs.webkit.org/show_bug.cgi?id=38698
        <rdar://problem/7942075>

        Add a 'setPluginsEnabled' layoutTestController function for disabling plug-ins. This is only implemented on Mac currently
        because the bug that needs this functionality is mac specific.

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

2010-05-06  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make ImageDiff depend on WebKit. When compiled from within Chromium, WTF is not a standalone dynamic library but depends on WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=38632

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2010-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Replace public inspector url with private property for QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=35340

        Replace the public API with a private dynamic property until this feature
        is ready.

        * QtLauncher/main.cpp:
        (LauncherWindow::init):

2010-05-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: build-webkit --inspector-frontend Should Exclude *.re2js
        https://bugs.webkit.org/show_bug.cgi?id=38449

        * Scripts/webkitdirs.pm:

2010-05-05  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos

        This patch adds WCSS -wap-input-format and -wap-input-required support to WebKit
        Make the test cases in fast/wcss optionional only when  WCSS is enabled.

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

        * Scripts/old-run-webkit-tests:
        * Scripts/webkitperl/features.pm:

2010-05-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [DRT/Chromium] Remove InitWebCoreSystemInterface() call
        https://bugs.webkit.org/show_bug.cgi?id=38624

        Chromium r45167 <http://src.chromium.org/viewvc/chrome?view=rev&revision=45167>
        added InitWebCoreSystemInterface() to webkit/support/platform_support_mac.mm.
        So we don't need to call it from DumpRenderTree.cpp anymore.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (main): Remove InitWebCoreSystemInterface().

2010-05-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: clean up newline handling in printing

        The new printing module seems to handle newlines somewhat
        inconsistently, especially in --verbose mode. This change cleans up
        the code to make things more consistent and adds a bunch of unit tests.

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

        * Scripts/webkitpy/common/array_stream.py: Added.
        * Scripts/webkitpy/common/array_stream_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream_unittest.py: Added.
        * 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:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-05-05  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Ban the single letter 'l' as an identifier name
        http://trac.webkit.org/changeset/58844

        Add a lint rule to ban the single letter 'l' as an identifier name
        since it is very easy to confuse with the numeral '1', especially
        in code like WebCore/css/CSSHelper.cpp.

        See http://trac.webkit.org/changeset/58844 as an example of a bug
        caused by confusing short variable names.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2010-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Shinichiro Hamaji.

        PrettyPatch.pretty_diff("") should not hang
        https://bugs.webkit.org/show_bug.cgi?id=38552

        Also found a bug in PrettyPatch.pretty_diff where it would
        hang when passed "" as input.

        I suspect there may be bugs in prettify.rb (or our use there-of)
        where it can hang, which would then cause the testing thread to hang.

        * Scripts/webkitpy/common/prettypatch.py:
         - Don't hang when passed ""
        * Scripts/webkitpy/common/prettypatch_unittest.py:
         - Test that we don't hang when passed ""
        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add a FIXME that we should share code with prettypatch.rb

2010-05-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: turn off threading on the Chromium Mac port until
        we can stabilize the port more and figure out why it is hanging so
        frequently.

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

        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
          - override default_child_processes() and log a warning
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
          - fix a typo that caused us to print a method object instead of the
            value the method object returns in the case where there is only
            one child process.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
          - Add unit tests for the output of run_webkit_tests - in this case,
            the handling of --child-processes and --print config

2010-05-04  Timothy Hatcher  <timothy@apple.com>

        Fix the find command in extract-localizable-strings so skip
        directories are correctly skipped and header files are searched.

        https://bugs.webkit.org/show_bug.cgi?id=38545
        rdar://problem/7941295

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: Append -o after each -prune
        so -and isn't implied. Surround all the -name arguments so they get
        an implied -print action. Removed check for "icu". Skip any header that
        ends in LocalizableStrings.h, so SafariLocalizableStrings.h is skipped.
        * Scripts/update-webkit-localizable-strings: Add the two icu directories
        to the skip list.

2010-05-04  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Eric Seidel.

        Wrong documentation on 'webkit-patch help land'.
        https://bugs.webkit.org/show_bug.cgi?id=37871

        Small fix on the help documentation for webkit-patch
        land.

        * Scripts/webkitpy/tool/commands/download.py:

2010-05-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage viewMode property
        https://bugs.webkit.org/show_bug.cgi?id=38119

        Rename the property from wrt_viewMode to _q_viewMode.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setViewModeMediaFeature):

2010-05-04  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix typo in run_webkit_tests.py: s/_print\./_printer./
        https://bugs.webkit.org/show_bug.cgi?id=38515

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-05-04  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        This revision completes the terminology change from "processor" to
        "checker" for the CarriageReturnProcessor, CppProcessor,
        PythonProcessor, and TextProcessor classes, etc.

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

        The word "processor" currently has two uses in our code.  This
        revision renames the lower-level use to "checker" and preserves the
        word "processor" for higher-level, more general uses.  This
        revision also makes whatever other name changes that logically
        followed from this change.

        * Scripts/check-webkit-style:
          - Updated references to PatchChecker.

        * Scripts/webkitpy/style/checker.py:
          - Renamed the StyleCheckerConfiguration class to
            StyleProcessorConfiguration.
          - Renamed the ProcessorDispatcher class to CheckerDispatcher, and
            made similar changes for the class's method names.
          - Renamed the PatchChecker class to PatchReader.
          - Updated the file as necessary to accommodate the other class
            renames in this patch.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the unit test code as necessary.

        * Scripts/webkitpy/style/checkers/common.py:
          - Renamed the CarriageReturnProcessor class to CarriageReturnChecker,
            and changed its process() method to check().

        * Scripts/webkitpy/style/checkers/common_unittest.py:
          - Updated the unit test code as necessary.

        * Scripts/webkitpy/style/checkers/cpp.py:
          - Renamed the CppProcessor class to CppChecker, and renamed its
            process() method to check().

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
          - Updated the unit test code as necessary.

        * Scripts/webkitpy/style/checkers/python.py:
          - Renamed the PythonProcessor class to PythonChecker, and renamed
            its process() method to check().

        * Scripts/webkitpy/style/checkers/python_unittest.py:
          - Updated the unit test code as necessary.

        * Scripts/webkitpy/style/checkers/text.py:
          - Renamed the TextProcessor class to TextChecker, and renamed
            its process() method to check().

        * Scripts/webkitpy/style/checkers/text_unittest.py:
          - Updated the unit test code as necessary.

        * Scripts/webkitpy/style/error_handlers.py:
          - Updated the code as necessary.

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Updated the unit test code as necessary.

2010-05-04  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Adjusted svn-apply and -unapply to accept git diffs generated
        using the --no-prefix flag.

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

        * Scripts/VCSUtils.pm:
          - Loosened the regular expression for the "diff --git" line to
            match when the --no-prefix flag is used with "git diff".
          - Also refactored the code parsing the first line so that the
            script exits with an error message if the first line cannot
            be parsed.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
          - Added a unit test case for the --no-prefix case.

2010-05-04  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Changed VCSUtils.pm's parseDiffHeader() to call the new
        parseGitDiffHeader() method.

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

        This revision makes more progress towards adding executable-bit
        support to svn-apply and svn-unapply.  It also makes more progress
        towards refactoring the code into a more maintainable form.

        * Scripts/VCSUtils.pm:
          - Removed gitdiff2svndiff().
          - Removed the Git-specific logic from parseDiffHeader() and
            renamed it parseSvnDiffHeader().
          - Added a new parseDiffHeader() subroutine which calls
            parseSvnDiffHeader() or parseGitDiffHeader() depending on
            the format of the first header line.

        * Scripts/webkitperl/VCSUtils_unittest/gitdiff2svndiff.pl: Removed.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Removed most of the test cases since these cases are now
            covered by the unit tests for parseSvnDiffHeader() and
            parseGitDiffHeader().

        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl: Added.
          - Copied the SVN unit tests from parseDiffHeader.pl and updated
            them as necessary.

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

        Reviewed by Adam Barth.

        Builders should run the perl and python unit tests on every commit
        https://bugs.webkit.org/show_bug.cgi?id=37976

        The unit tests take a few seconds to run, so they should not
        have any noticable effect on builder speed.

        We're running the tests everywhere but Tiger as Tiger's
        Python version is ancient.
        I would have rather have detected the python version of the
        slave but I couldn't find any API to do that, and I didn't want
        to hack version detection into test-webkitpy (at least not yet).

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

2010-05-03  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Fixed a recent REGRESSION that caused svn-apply and -unapply to
        skip over changes to the first file in a diff if leading junk was
        present (like in an e-mail diff) and if the --force option was used.

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

        * Scripts/svn-apply:
          - Removed the bit of code at the beginning of the patch()
            subroutine that checks for the "Index:" line at the beginning
            of a file diff (since the parsePatch() subroutine already
            checks this).

        * Scripts/svn-unapply:
          - Removed the bit of code at the beginning of the patch()
            subroutine that checks for the "Index:" line at the beginning
            of a file diff (since the parsePatch() subroutine already
            checks this).

2010-05-03  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Adjusted the ChangeLog entry below for r58732 (bug 35804) to reflect
        the fact that the change will not become active until the patch
        for bug 38454 lands.

2010-05-03  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Added code for svn-apply and -unapply to display an instructive error
        message if the --binary flag is left off the "git diff" command
        for diffs containing binary file differences.

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

        This change will become active when parseDiffHeader() is modified
        to call parseGitDiffHeader (see bug 38454).

        * Scripts/VCSUtils.pm:
          - Adjusted parseDiffHeader() to exit with an appropriate error message
            if it encounters a line of the form "Binary files <path1> and
            <path2> differ".

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

        Unreviewed, build fix.

        new-run-webkit-tests: r58728 broke the buildbot logic for parsing the
        output of the log; specifying --verbose should basically be equivalent
        to --print everything, but instead it was equivalent to not specifying
        --print and getting the default set. Now, --verbose acts as if
        --print everything was implicitly specified as the default (you can
        still override it if you specify both; this is a somewhat debatable
        call).

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

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

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

        Unreviewed, build fix.

        new-run-webkit-tests: Fix minor precedence bug introduced in r58728 where we printed
        "-\n" 78 times instead of "-" 78 times followed by a single "\n".

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

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

        Reviewed by Eric Seidel.

        new-run-webkit-tests: refactor a large chunk of the printing/logging
        code out of run-webkit-tests py (almost 300 lines out of 1900).

        This change also renames --log to --print (to be slightly more
        descriptive). I've also added better help messages for printing.

        The new code has unit tests!

        There is still more code to be moved, but this patch is big enough as
        it is. Namely, still to move are the printing of the actual results
        and the timing statistics, which should move another 300-400 lines
        out of the file.

        Notable changes to run_webkit_tests.py beyond code simply moving:
        * MeteredStream is now hidden under the new printing.Printer class.
          All the references to self._meter now point to self._printer.
        * All logging configuration is done in printing.configure_logging()
        * Instead of using write() lambdas to control what is and isn't
          printed, we use separate methods on the printer object. This will
          make it easier to grep which print statements are printed
          under protection of each flag.
        * The print_results flag I added a few revs back to suppress printing
          in the unit tests has been replaced with --print nothing.
        * The ResultSummary class now stores the entire TestResult for each
          test, not just the actual result type.
        * summarize_unexpected_results() got moved from a method on TestRunner
          to a standalone function. This should move into a separate file
          along with the ResultSummary class and the TestResult class
        * The --trace option added recently has been replaced by
          '--print trace-everything' and '--print trace-unexpected'

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

        * Scripts/new-run-webkit-tests:
          - update to new entry points in run_webkit_tests.py
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
          - fix a minor nit where we were printing an empty string where
            we didn't need to
        * Scripts/webkitpy/layout_tests/layout_package/printing.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py: Added
        * Scripts/webkitpy/layout_tests/port/test.py:
          - implement relative_test_filename() and expected_filename() so
            we can test printing unexpected results in a platform-neutral
            way
        * Scripts/webkitpy/run_webkit_test.py:
          - move a lot of the printing code into printing.py
          - change the signatures of the exported entry points for easier
            unit testing
        * Scripts/webkitpy/run_webkit_tests_unittest.py:
          - update w/ changes to run_webkit_tests entry points.

2010-05-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Build and use Mac's ComplexTextController to support complex text in wx.
        https://bugs.webkit.org/show_bug.cgi?id=38482

        * wx/build/settings.py:

2010-05-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is enabled in test framework.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        * DumpRenderTree/LayoutTestController.cpp:
        (setJavaScriptCanAccessClipboardCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):

2010-05-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Maui MiniBrowser: Add an option to show/hide the web view
        https://bugs.webkit.org/show_bug.cgi?id=38486

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::createWindow):
        Set the background brush to something other than null.

        (BrowserWindow::onCommand):
        Show and hide the web view accordingly.
        
        * MiniBrowser/win/MiniBrowser.rc:
        * MiniBrowser/win/resource.h:
        Add new menu item.

2010-05-03  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Added a parseGitDiffHeader() subroutine to VCSUtils.pm that
        parses any changes to the executable bit in a Git diff.

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

        This revision is more preparation towards adding "executable bit"
        support to svn-apply and svn-unapply.  No code is going "live" in
        this change except for the new unit tests in test-webkitperl.

        * Scripts/VCSUtils.pm:
          - Added isExecutable() to determine whether a file mode has the
            executable bit set or not.
          - Added parseGitDiffHeader() to parse the header of a Git diff.

        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl: Added.
          - Added unit tests for parseGitDiffHeader().

2010-05-03  Daniel Bates  <dbates@rim.com>

        Reviewed by Chris Jerdonek.

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

        Refactor the unit tests in VCSUtils_unittest/parseDiff.pl to use
        Test::More::is_deeply like we do in VCSUtils_unittest/parseDiffHeader.pl.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:

2010-05-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Corrected a file path in the ChangeLog entry for r58663 (bug 38319) below.

2010-05-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

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

        * Scripts/VCSUtils.pm:
          - In parseDiffHeader()--
            - Added an "scmFormat" hash key to the return value to represent
              whether the diff is Git or SVN formatted.
            - Adjusted the code so the value of "copiedFromPath" will
              be undef rather than "does not exist" if the file was not
              copied.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Added a FIXME to refactor these unit tests to use is_deeply().

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Updated the unit tests to test the "scmFormat" value.
          - Simplified the unit tests by refactoring them to use is_deeply().

2010-05-01  Daniel Bates  <dbates@rim.com>

        Reviewed by Chris Jerdonek.

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

        Adds infrastructure to change the file mode of a file using
        the appropriate SCM-specific routines.

        No functionality was changed, so no new tests.

        * Scripts/VCSUtils.pm: Added subroutines scmToggleExecutableBit,
        scmAddExecutableBit, and scmRemoveExecutableBit.
        * Scripts/svn-apply: Check for the hash key executableBitDelta
        and toggle the executable bit.
        * Scripts/svn-unapply: Ditto.

2010-04-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Enabled accelerated compositing in DRT for Windows
        https://bugs.webkit.org/show_bug.cgi?id=38404

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Try to fix GTK+ build.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_stream):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Timothy Hatcher.

        Next step towards fixing
        
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types

        Use the C99 types everywhere. The "old" types are still around but will be removed
        in a subsequent commit.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (int32VariantToIdentifier):
        (doubleVariantToIdentifier):
        (testIdentifierToInt):
        (testGetIntIdentifier):
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_NewStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_HandleEvent):
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New):
        (NPP_NewStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_HandleEvent):

2010-04-30  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Changed Steve Block from committer to reviewer.

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

2010-04-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        webkit-patch doesn't work if a git repo is tracking multiple svn repos
        https://bugs.webkit.org/show_bug.cgi?id=38290
        
        Getting the tests to pass required getting our SVN repo to more closely
        match the real svn.webkit.org repo by having a trunk directory.
        That involved adding an extra commit at the beginning and thus changing
        all the commit numbers in the tests.

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

2010-04-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests can deadlock with Chromium's TestShell
        https://bugs.webkit.org/show_bug.cgi?id=38298

        Fix _write_command_and_read_line to never send unicode() to
        test_shell, instead to always encode as utf-8.  This was causing
        random hangs because if test_shell ever encounters a \0 in the
        stream it can deadlock with NRWT.

        There is still a deadlock bug to fix in NRWT/test_shell design, however
        this fix should make the deadlock occur less often.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:

2010-04-29  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Refactored svn-apply and svn-unapply to use the new
        parsePatch() subroutine.

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

        * Scripts/VCSUtils.pm:
          - Consolidated %diffHash documentation.
          - Added prepareParsedPatch().

        * Scripts/svn-apply:
          - Replaced main while loop with calls to parsePatch() and
            prepareParsedPatch().

        * Scripts/svn-unapply:
          - Replaced main while loop with calls to parsePatch() and
            prepareParsedPatch().

        * Scripts/test-webkitperl:
          - Changed to render relative test paths rather than absolute
            test paths.

        * Scripts/webkitperl/VCSUtils_unittest/prepareParsedPatch.pl: Added.
          - Added unit tests for prepareParsedPatch().

2010-04-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Added to VCSUtils's parseDiffHeader() support for binary patches.

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

        The parseDiffHeader() function is part of new patch-parsing code
        for svn-apply and svn-unapply that will go live in a subsequent
        revision.

        * Scripts/VCSUtils.pm:
          - Added logic to parseDiffHeader() to recognize the ending of
            the header portion of a binary diff.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Added unit test cases for SVN and Git binary diffs.

2010-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Document that subprocess.poll/wait are not threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=38289

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2010-04-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Daniel Bates.

        Removed the dividing line (i.e. "====...") logic from the code
        called by svn-apply and svn-unapply.

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

        The dividing line logic is unnecessary.  Removing it simplifies the
        code and makes some subsequent changes easier.

        * Scripts/VCSUtils.pm:
          - Removed the logic in gitdiff2svndiff() to convert the git
            "index" line to an SVN dividing line.
          - Adjusted the logic similarly in parseDiffHeader().

        * Scripts/webkitperl/VCSUtils_unittest/gitdiff2svndiff.pl:
          - Updated the unit tests as necessary.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
          - Updated the unit tests as necessary.
          - Corrected an error in the unit tests whereby all elements
            of an array were referencing the same element rather than
            distinct elements -- causing unit test failures to be masked.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Updated the unit tests as necessary.
          - Made the same unit test correction as above for parseDiff.pl.

2010-04-28  Evan Stade  <estade@chromium.org>

        Unreviewed.

        * Scripts/webkitpy/common/config/committers.py: adding myself as a committer

2010-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add MiniBrowser to the lists of modules to build and only build it on
        SnowLeopard and later.

        * Makefile:
        * MiniBrowser/Makefile:

2010-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Make running MiniBrowser.app without explicitly setting DYLD_FRAMEWORK_PATH.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/make-launchable.sh: Added.

2010-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Audit all uses of subprocess in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=38284

        After further discussions with Jeffrey Yasskin
        about http://bugs.python.org/issue2320
        and related issues of using subprocess from
        multiple threads, I have learned that subprocess
        is known to be non-threadsafe through recent
        Python 2.7 builds.

        I'm attempting to lessen our exposure to these
        subprocess bugs by auditing each use of subprocess
        in webkitpy.  I did not find any unsafe calls
        in my audit, but I did remove numerous unneeded
        import subprocess lines.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/system/deprecated_logging_unittest.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2010-04-28  Darin Adler  <darin@apple.com>

        Ignore a directory the Python tools creates.

        * Scripts/webkitpy/style: Modified property svn:ignore.

2010-04-28  Darin Adler  <darin@apple.com>

        * Scripts/extract-localizable-strings: Fix minor mistake in
        argument checking.

2010-04-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage viewMode property
        https://bugs.webkit.org/show_bug.cgi?id=38119

        Replacing method qt_wrt_setViewMode by wrt_viewMode property.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setViewModeMediaFeature):

2010-04-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Adjusted check-webkit-style so that files with file type NONE
        are automatically skipped without warning.

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

        This change simplifies configuring which files to skip.  It also
        addresses an issue whereby check-webkit-style was unintentionally
        checking .vcproj files for carriage returns.

        * Scripts/webkitpy/style/checker.py:
          - Moved the C++, Python, and text file extensions to new
            module-level configuration variables.
          - Removed .pyc from the _SKIPPED_FILES_WITHOUT_WARNING configuration
            variable.
          - Changed the numeric values of the FileType enum so that
            FileType.NONE evaluates to False.
          - For ProcessorDispatcher.should_skip_without_warning():
            - Changed the method to return True for FileType.NONE files.
            - Made ChangeLog files an exception to getting skipped.
          - Changed the StyleProcessor.process() method to raise an
            exception if given a file path that should not be processed.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the unit tests and added more test cases as necessary.

2010-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Jeremy Orlow.

        webkitpy: ScriptError('Failed to run "[u\'taskkill.exe\', u\'/f\', u\'/im\', u\'httpd.exe\']" exit_code: 128',)
        https://bugs.webkit.org/show_bug.cgi?id=38248

        The previous code did not check the return code of taskkill.
        When I moved that callsite from using subprocess.call to
        Executive.run_command having a non-zero return code became an error.

        In this change I've centralized our killall handling in executive,
        and added tests for it to make sure it works.

        Currently kill_process and kill_all swallow exceptions in the cases
        where the process(es) to be killed do(es) not exist.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_unittest.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2010-04-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Shinichiro Hamaji.

        wdiff_text throws ScriptError because wdiff returns non-zero when files differ
        https://bugs.webkit.org/show_bug.cgi?id=38246

        wdiff returns 0 when files are the same, 1 when they differ.
        run_command by default raises ScriptError if the return code is non-zero.
        Fixed this by adding a custom error handler which only raises if the
        return code is not 1.

        I broke up the huge wdiff_text() method into little pieces
        for easier unit testing.  There is only one functional change here
        and that is the addition of the custom error handler.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/base_unittest.py:

2010-04-28  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix.

        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::dumpImage): format '%u' expects type 'unsigned int', but argument 2 has type 'size_t'.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::willSendRequest): too few arguments for format.

2010-04-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler and Eric Seidel.

        Add layoutTestController.setPrinting()
        https://bugs.webkit.org/show_bug.cgi?id=37203

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setPrintingCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::isPrinting):
        (LayoutTestController::setIsPrinting):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):

2010-04-27  Michael Nordman  <michaeln@google.com>

        Reviewed by Dmitry Titov.

        [Chromium] Add two things to the webkit API to support appcaches in workers.
        1) WebURLRequest TargetTypes for worker and shared worker main resources.
        2) Factory method on class WebCommonWorkerClient to
           createApplicationCacheHost() for the associated worker.

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

        * DumpRenderTree/chromium/TestWebWorker.h add a stub impl of the factory method 
        (TestWebWorker::createApplicationCacheHost):

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        run-bindings-tests doesn't work in an SVN checkout
        https://bugs.webkit.org/show_bug.cgi?id=38225

        Previously detect_scm_system needed an absolute path for SVN.  Now we
        accept a relative path.

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

2010-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Stephanie Lewis.

        Always build WebKit2 when building on SnowLeopard and later. 

        * Scripts/build-webkit:

2010-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38238
        Allow both WebKit and WebKit2 to link to the same WebCore.framework

        * Scripts/build-webkit: Remove the UMBRELLA_LDFLAGS override when building
        WebCore for WebKit2, it is no longer necessary.

2010-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by David Levin.

        Fix a typo in chromium.py that causes NRWT to fail in --verbose
        mode in a Chromium checkout.
        https://bugs.webkit.org/show_bug.cgi?id=38234

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

2010-04-27  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Remove deprecated form of didChangeLocationWithinPage
        https://bugs.webkit.org/show_bug.cgi?id=38178

        Switch over to implementing didNavigateWithinPage.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (TestWebViewDelegate::didNavigateWithinPage):
        (WebViewHost::didChangeLocationWithinPage):
        * DumpRenderTree/chromium/WebViewHost.h:

2010-04-27  Evan Martin  <evan@chromium.org>

        Unreviewed.

        Adding myself to commmitters list.

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

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        run-bindings-tests should use --reset-results instead of --overwrite
        https://bugs.webkit.org/show_bug.cgi?id=38200

        As requested by Ojan.

        * Scripts/run-bindings-tests:

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(r58261): webkit-patch edit-changelogs is broken
        https://bugs.webkit.org/show_bug.cgi?id=38204

        In 58261, we added code to abstract step that interrogates the squash
        and git_commit options, but it doesn't declare that it uses those
        options.  That means any command that doesn't happen to declare those
        options might be broken if it uses the cached_lookup mechanism.

        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/applypatch.py:
        * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        * Scripts/webkitpy/tool/steps/createbug.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/update.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

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

        Reviewed by David Levin.

        prepare-ChangeLog --bug fails on some CYGWIN installs due to missing certs
        https://bugs.webkit.org/show_bug.cgi?id=38212

        * Scripts/prepare-ChangeLog:
         - Pass --insecure to curl to work around CYGWIN missing certs.

2010-04-27  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Beth Dakin.

        It is no longer necessary to set ENABLE_EXPERIMENTAL_SINGLE_VIEW_MODE
        or WTF_USE_WEB_THREAD. Remove them.

        * Scripts/build-webkit:

2010-04-27  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by David Levin.

        Changed Chris Jerdonek from committer to reviewer.

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

2010-04-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QGraphicsWebView: Arrow keys scroll the graphics-view instead of the web-page
        https://bugs.webkit.org/show_bug.cgi?id=35834

        The scene should always have the size of the web view otherwhise it is
        possible to scroll the graphics view.

        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::resizeEvent):

2010-04-27  Diego Gonzalez  <diegohcg@webkit.org>

        Unreviewed.

        Adding myself to committers.py

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

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

        Reviewed by Adam Barth.

        [chromium] new-run-webkit-tests hangs on Chromium Bots (OS X and Linux)
        https://bugs.webkit.org/show_bug.cgi?id=37987

        After further research, I believe the hang is caused by:
        http://bugs.python.org/issue2320
        Basically Popen() is not reentrant.
        The workaround is to pass close_fds=True to Popen() on Mac/Linux.

        I fixed our main Popen wrapper "Executive.run_command" to use close_fds=True
        when appropriate.

        I audited all places we call Popen() and either moved them to run_command
        or left a FIXME that they are not thread safe.  A few places I added the
        close_fds workaround there and left an explanitory note.

        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Added note that this Popen use is not threadsafe.
        * Scripts/webkitpy/common/system/executive.py:
         - Fixed our Executive.run_* to workaround python bug 2320.
        * Scripts/webkitpy/common/system/user.py:
         _ Added note that this Popen use is not threadsafe.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: ditto.
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py: ditto.
        * Scripts/webkitpy/layout_tests/port/base.py:
         - Change wdiff back to using run_command now that we believe it
           to be threadsafe.
        * Scripts/webkitpy/layout_tests/port/chromium.py:
         - Fix to use Executive in places.
         - Pass self._executive down to the Driver for easier unit testing.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         - Re-factor to use a _kill_all method.
         - Made the _kill_all method use run_command to be threadsafe.
        * Scripts/webkitpy/layout_tests/port/http_server.py:
         - Add FIXME about using Executive.
        * Scripts/webkitpy/layout_tests/port/server_process.py:
         - Use Executive to be threadsafe.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Pass self._executive down to the Driver.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
         - Add note about Popen not being threadsafe.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
         - Move one caller to run_command add notes about moving others.

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        REGRESSION(r58261): webkit-patch upload does not work in an SVN checkout.
        https://bugs.webkit.org/show_bug.cgi?id=38186

        Unfortunately, we don't have a good way of testing this change because
        our test coverage of the scm.py API is poor...

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

2010-04-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove unused code from text_diff.py
        https://bugs.webkit.org/show_bug.cgi?id=38170

        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
         - Remove is_render_tree_dump which appears unused.

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch pretty-diff is broken
        https://bugs.webkit.org/show_bug.cgi?id=38172

        We need to register for these options because they're used when we look
        up the diff.

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

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add ObjC and GObject to run-bindings-test
        https://bugs.webkit.org/show_bug.cgi?id=38168

        * Scripts/run-bindings-tests:

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add testing infrastructure for JSC bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=38167

        Add support for testing more than one bindings.  Also, converted the
        script to PEP8 style.

        * Scripts/run-bindings-tests:

2010-04-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Refactor results.html generation out into a new method and test it
        https://bugs.webkit.org/show_bug.cgi?id=38164

        Hopefully this results in no change in functionality.

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

2010-04-26  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r58265.
        http://trac.webkit.org/changeset/58265
        https://bugs.webkit.org/show_bug.cgi?id=38021

        This change prevents me from uploading patches.  It also breaks sheriff-bot.

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

2010-04-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        [chromium] new-run-webkit-tests hangs on Chromium Bots (OS X and Linux)
        https://bugs.webkit.org/show_bug.cgi?id=37987

        Rolled out:
        http://trac.webkit.org/changeset/58062
        http://trac.webkit.org/changeset/58060
        http://trac.webkit.org/changeset/58059
        http://trac.webkit.org/changeset/58055
        http://trac.webkit.org/changeset/58054
        and parts of:
        http://trac.webkit.org/changeset/58050

        I also wrote some new comments and a tiny amount of new
        code to help make ChromiumDriver.run_test easier to read.

        In order to unit-test my new code, I had to change ChromiumDriver
        to not automatically start itself when created.  That ended up
        being a lot of plumbing, but is hopefully easier to understand now.

        There are no tests for the (restored) wdiff code.  wdiff does not
        exist on all systems, so for now we will assume it worked since
        it is just old code being reverted.

         * Scripts/webkitpy/layout_tests/driver_test.py:
          - Use create_driver instead of start_driver, and be sure to call .stop()
         * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
          - Use create_driver instead of start_driver
         * Scripts/webkitpy/layout_tests/port/base.py:
          - Added a comment to explain that diffs are binary files.
          - Various patch reverts relating to wdiff
          - Add Driver._command_wrapper to share code between WebKitDriver and ChromiumDriver.
          - Made _command_wrapper use shlex.split to get rid of the FIXME.
         * Scripts/webkitpy/layout_tests/port/base_unittest.py: Added.
          - test the new _command_wrapper
         * Scripts/webkitpy/layout_tests/port/chromium.py:
         - Use _command_wrapper to get rid of a bunch of ugly code.
         - Make __init__ stop auto-starting.
         - Rename create_driver to start_driver.
         - Added _write_command_and_read_line to make it possible to
           put a FIXME next to read_line() w/o having to put it in two places.
         - Moved test_shell command building into _test_shell_command and tested it.
         - Fix comments to say test_shell since ChromiumDriver is test_shell only.
         * Scripts/webkitpy/layout_tests/port/chromium_unittest.py: Added.
          - Test the new test_shell_command method.
         * Scripts/webkitpy/layout_tests/port/dryrun.py:
          - Rename create_driver to start_driver.
         * Scripts/webkitpy/layout_tests/port/test.py:
          - Rename create_driver to start_driver.
         * Scripts/webkitpy/layout_tests/port/webkit.py:
          - Rename create_driver to start_driver.
          - Treat output as binary arrays.
         * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
          - Treat diff files as binary.
         * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
          - Treat diff files as binary.

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move bindings test directory into the scripts directory
        https://bugs.webkit.org/show_bug.cgi?id=38161

        Change script to point to the new location of these data files.

        * Scripts/run-bindings-tests:

2010-04-26  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Mark run-bindings-tests executable so we can execute it.

        * Scripts/run-bindings-tests:

2010-04-26  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        [chromium] build-webkit --chromium should build release by default
        https://bugs.webkit.org/show_bug.cgi?id=38028

        * Scripts/build-dumprendertree: Also should build release by default
        * Scripts/build-webkit: Make sure to pass command line args through
        * Scripts/webkitdirs.pm: Build the right configuration

2010-04-26  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        complete rietveld bugzilla integration
        https://bugs.webkit.org/show_bug.cgi?id=38021

        Makes --fancy-review the default. All this means is that the patch will
        be uploaded to rietveld in addition to bugs.webkit.org. 

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

2010-04-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        For check-webkit-style, renamed the style/processors/ directory
        to style/checkers/.

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

        * Scripts/webkitpy/style/checker.py:
          - Updated import statements.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated import statements.

        * Scripts/webkitpy/style/checkers: Copied from WebKitTools/Scripts/webkitpy/style/processors.
        * Scripts/webkitpy/style/processors: Removed.
        * Scripts/webkitpy/style/processors/__init__.py: Removed.
        * Scripts/webkitpy/style/processors/common.py: Removed.
        * Scripts/webkitpy/style/processors/common_unittest.py: Removed.
        * Scripts/webkitpy/style/processors/cpp.py: Removed.
        * Scripts/webkitpy/style/processors/cpp_unittest.py: Removed.
        * Scripts/webkitpy/style/processors/python.py: Removed.
        * Scripts/webkitpy/style/processors/python_unittest.py: Removed.
        * Scripts/webkitpy/style/processors/python_unittest_input.py: Removed.
        * Scripts/webkitpy/style/processors/text.py: Removed.
        * Scripts/webkitpy/style/processors/text_unittest.py: Removed.

2010-04-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        Include git commits in the diff for webkit-patch upload/land.
        https://bugs.webkit.org/show_bug.cgi?id=36394

        Adds --squash, --no-squash and --git-commit.

        --git-commit will use a specific local commit for land/upload.
        If a commit-range is specified, then that range is treated as
        a single squashed commit.

        --squash will squash all local changes including working copy changes
        into a single patch.

        --no-squash is the legacy behavior (upload only considers the working copy,
        land commits the working copy and then each local commit separately to SVN)

        If neither is specified, then an informative error is raised if there is
        more than one local commit or when there are local commit(s) and working
        copy changes.

        If the webkit-patch.squash git config parameter is set, then
        that will be respected instead of raising an error.

        * 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/style/optparser.py:
        --git-since is removed and --git-commit no longer implies commit_id..
        Instead, it treats that individual commit, but also supports commit ranges
        (e.g. commit_id..) as arguments.
        * Scripts/webkitpy/style/optparser_unittest.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/main.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/commit.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/postdiff.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-04-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Deleted the StyleChecker-related classes that are no longer
        being used.

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

        * Scripts/webkitpy/style/checker.py:
          - Deleted the DeprecatedStyleChecker class.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Deleted the StyleCheckerTest, StyleCheckerCheckFileBase,
            StyleCheckerCheckFileTest, and StyleCheckerCheckPathsTest classes.

2010-04-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Changed the StyleChecker class to use the new TextFileReader class.

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

        This revision separates the code responsible for reading and iterating
        over text files from the rest of check-webkit-style.

        * Scripts/check-webkit-style:
          - Changed the script to use the new StyleProcessor and
            TextFileReader classes instead of the StyleChecker class.

        * Scripts/webkitpy/style/checker.py:
          - Added a FIXME to rename many of uses of the word "processor" to
            "checker".  We did this to clarify the difference between
            ProcessorBase instances passed to the TextFileReader and
            classes that process and check lines for style.
          - Added a FIXME to remove FileType.NONE as a possible return value
            of ProcessorDispatcher._file_type().  This will better consolidate
            the logic of which files should be skipped.
          - Added a FIXME to delete the StyleChecker class.
          - Added the StyleProcessor class which implements ProcessorBase.
            This class is responsible for processing lines to check style
            (but not for reading files).  For each file, this class creates
            creates both a carriage-return checker and a format-specific
            style checker (e.g. one of C++, Python, etc).
          - Updated the PatchChecker class to use a TextFileReader instance
            instead of a StyleChecker.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added the StyleProcessor_EndToEndTest class to do "end-to-end"
            tests of the StyleProcessor class.
          - Added the StyleProcessor_CodeCoverageTest to test the
            StyleProcessor class with more complete code coverage.
            Unlike the StyleProcessor_EndToEndTest class, this class makes
            heavy use of mock parameters.
          - Added FIXME's to delete the unit test classes that are no
            longer needed.
          - Updated the PatchCheckerTest class to use a MockTextFileReader
            instead of a MockStyleChecker.

        * Scripts/webkitpy/style/filereader.py:
          - Updated the TextFileReader class to use the preferred logic
            of checking file existence at the beginning of the process_file()
            method instead of in the except block, per
            https://bugs.webkit.org/show_bug.cgi?id=37122

        * Scripts/webkitpy/style/filereader_unittest.py:
          - In the TextFileReaderTest class:
            - Moved the test_process_file__should_not_process() method.
            - Added a test_process_file__file_stdin() method to test
              the file path "-".

2010-04-20  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add more support for textInputController

        Add support for selectedRange(), setMarkedText(), insertText(),
        and firstRectForCharacterRange().

        Unskip tests:

        fast/forms/input-maxlength-ime-preedit.html
        fast/forms/input-maxlength-ime-completed.html
        fast/text/international/thai-cursor-position.html
        fast/events/ime-composition-events-001.html
        editing/selection/5825350-1.html
        editing/selection/5825350-2.html
        editing/selection/mixed-editability-10.html

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

        * DumpRenderTree/qt/TextInputControllerQt.cpp:
        (TextInputController::setMarkedText):
        (TextInputController::insertText):
        (TextInputController::selectedRange):
        (TextInputController::firstRectForCharacterRange):
        * DumpRenderTree/qt/TextInputControllerQt.h:

2010-04-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        check-webkit-style complains about non-utf8 data in layout test result
        https://bugs.webkit.org/show_bug.cgi?id=38027

        The problem was we were assuming patch files/diff output as utf-8.
        Turns out they're not.  We have to treat them as binary data because
        a single patch may have multiple text files in it with conflicting encodings!

        * Scripts/webkitpy/common/checkout/api.py:
         - contents_at_revision returns a byte array, so decode it to unicode
           before passing it to parse_latest_entry_from_file
        * Scripts/webkitpy/common/checkout/api_unittest.py:
         - Update our mock mock_contents_at_revision to match the encoding
           semantics of the real one.
        * Scripts/webkitpy/common/checkout/scm.py:
         - Be careful not to decode output which may contain file contents
           (like diff, cat or show) as the encoding for that content is unknown.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Update our tests to use both latin1 and utf-8 encoded data.
        * Scripts/webkitpy/common/net/bugzilla.py:
         - _fill_attachment_form should not assume unicode data.  Callers
           may wish to attach other types of files to bugs.
        * Scripts/webkitpy/common/prettypatch.py:
         - Diffs are byte arrays, deal with them as such.
        * Scripts/webkitpy/common/prettypatch_unittest.py:
         - Test to make sure we handle diffs with multiple conflicting encodings.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         - Make sure that our unicode support does not break our
           byte array input support for run_command.

2010-04-23  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38060
        Split up Threading.h

        Add necessary forwarding headers.

        * DumpRenderTree/ForwardingHeaders/wtf/Atomics.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/ThreadSafeShared.h: Added.
        * DumpRenderTree/ForwardingHeaders/wtf/ThreadingPrimitives.h: Added.

2010-04-23  Xiaomei Ji  <xji@chromium.org>

        No need to review.

        Add xji as committer.

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

2010-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add platform stub for new LayoutTestController method.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::markerTextForListItem):

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests: add a "--retry-failures" flag and a
        "--no-retry-failures" flag (the former is the default). Also, rename
        "--print-unexpected-results" and "--retry-unexpected-results" to
        "--print-last-failures" and "--retry-last-failures" because the
        retry flag was confusing. The new flag names aren't great, but
        hopefully they're less confusing.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38022
        Move isMainThread predicate function to MainThread.h

        Added forwarding header for MainThread.h

        * DumpRenderTree/ForwardingHeaders/wtf/MainThread.h: Added.

2010-04-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disable Netscape plugin support for minimal configuration
        https://bugs.webkit.org/show_bug.cgi?id=38026

        Pass the minimal configuration option to Qt build system 
        as part of the CONFIG variable.

        * Scripts/build-webkit:

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: fix NameError: global name 'f' is not defined.

2010-04-22  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Revert 58077 and follow-ups.  It's broken.
        https://bugs.webkit.org/show_bug.cgi?id=37664

        * Scripts/new-run-webkit-httpd:
        * Scripts/new-run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2010-04-22  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        Integrate v8 testing utility with webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=37731

        * Scripts/run-bindings-tests: Added.

2010-04-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        new-run-webkit-tests --verbose shows ever-increasing #EOF lines
        https://bugs.webkit.org/show_bug.cgi?id=37794

        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Remove the assert() since our ServerProcess code does not always
           seem to be reading the full stderr output (or we're not waiting for it to).

2010-04-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add code to help debug new-run-webkit-test hangs on the Chromium bots
        https://bugs.webkit.org/show_bug.cgi?id=38011

        I can see no reasonable way to test this change.
        Stubbing out sys._current_frames() and traceback.extract_stack
        seems folly.  Dumping real data would have line number
        (and possibly other call stack) variance between runs.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add _dump_thread_states and _dump_thread_states_if_necessary
           to have our main thread dump the states of all threads every
           60 seconds when running in verbose mode.
         - Better document what is going on in our main loop.

2010-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38002
        Add rudimentary statistics gathering for WebKit2

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate getCurrentPageNamespace]):
        (-[BrowserAppDelegate _setProcessModel:]):
        (-[BrowserAppDelegate showStatisticsWindow:]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        * MiniBrowser/mac/BrowserStatisticsWindow.xib: Added.
        * MiniBrowser/mac/BrowserStatisticsWindowController.h: Added.
        * MiniBrowser/mac/BrowserStatisticsWindowController.m: Added.
        (-[BrowserStatisticsWindowController initWithThreadedWKContextRef:processWKContextRef:]):
        (-[BrowserStatisticsWindowController dealloc]):
        (-[BrowserStatisticsWindowController windowDidLoad]):
        (-[BrowserStatisticsWindowController refreshStatistics:]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/English.lproj/MainMenu.xib:
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2010-04-22  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add test support for icon changes.

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

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpIconChangesCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpIconChanges):
        (LayoutTestController::setDumpIconChanges):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didChangeIcons):
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * WinLauncher/WinLauncher.h:
        (WinLauncherWebHost::didChangeIcons):

2010-04-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Script fix.  Will ask dpranke to look tomorrow.

        new-run-webkit-tests --verbose shows ever-increasing #EOF lines
        https://bugs.webkit.org/show_bug.cgi?id=37794

        The bots are seeing cases where .error is sometimes empty.
        Lets make the code not crash in that case for now.

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

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: fix NameError: global name 'f' is not defined.

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.

        * Scripts/new-run-webkit-websocketserver: PyWebSocket no longer takes keyword argument 'register_cygwin'.

2010-04-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Restore the Leopard bots to using
        old-run-webkit-tests for now.

        * Scripts/run-webkit-tests:

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.

        * Scripts/webkitpy/layout_tests/port/http_server.py: fix NameError: global name 'env' is not defined.

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed fix.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: fix NameError: global name 'env' is not defined.

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        Chromium: Add --chromium option to new-run-webkit-websocketserver
        https://bugs.webkit.org/show_bug.cgi?id=37664

        Move cygwin setup logic in chromium_win.py.

        * Scripts/new-run-webkit-httpd: remove register_cygwin parameter to pass http_server.
        * Scripts/new-run-webkit-websocketserver: add --chromium flag
        * Scripts/webkitpy/layout_tests/port/chromium_win.py: setup for cygwin
        * Scripts/webkitpy/layout_tests/port/http_server.py: remove cygwin setup logic
        * Scripts/webkitpy/layout_tests/port/websocket_server.py: remove cygwin setup logic

2010-04-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests --verbose shows ever-increasing #EOF lines
        https://bugs.webkit.org/show_bug.cgi?id=37794

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - Fix the log message to explain that this is stderr output, not test output.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Be sure to reset the server_process.error after reading (seems like the wrong
           place to do this, but at least this fixes the bug and dpranke and I can talk
           about better designs later).
         - Also remove the #EOF from the stderr output before returning it.

2010-04-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fixing new-run-webkit-tests on the bots.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Fixing _compat_shim_option to take variable keyword args.
         - Turns out that nargs + callback is ignored unless type is specified.
           So I added the type so that the option was properly consumed.
           This was why new-run-webkit-tests couldn't find any tests, it
           was looking for them under "20" because that was the argument
           which should have been consumed by --exit-after-n-failures.

2010-04-22  Tony Chang  <tony@chromium.org>

        Not reviewed, build fix for chromium Windows.

        [chromium] fix ImageDiff compile on windows
        https://bugs.webkit.org/show_bug.cgi?id=37979

        * DumpRenderTree/chromium/ImageDiff.cpp:

2010-04-22  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r58069.
        http://trac.webkit.org/changeset/58069
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Broke compile on Windows.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2010-04-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just adding logging.

        Adding logging to help debug why the Leopard Bot
        can't find any tests to run.

        * Scripts/webkitpy/layout_tests/layout_package/test_files.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Make it a fatal error to have no tests to run.

2010-04-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is enabled in test framework.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        * DumpRenderTree/LayoutTestController.cpp:
        (setJavaScriptCanAccessClipboardCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::resetWebSettings):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setJavaScriptCanAccessClipboard):

2010-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch can't fetch attachments on security bugs
        https://bugs.webkit.org/show_bug.cgi?id=37975

        Instead of calling CURL, we just need to use our Mechanize object,
        which understand bugs.webkit.org authentication.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/net/bugzilla.py:

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

        Unreviewed.  Temporary commit, will roll-out before morning.

        Turning on new-run-webkit-tests for the Leopard build bot
        for testing of the harness.
        Users should not noctice (except for the results.html difference).

        * Scripts/run-webkit-tests:

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

        Unreviewed.  Fix typo in my previous fix attempt.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        More on-the-bot debugging, sigh.  I wish I had a local build.

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

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

        Unreviewed.  Fix typo in my previous fix attempt.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add self. to class variable access.

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

        Unreviewed.  Another attempt to fix NRWT for chromium.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/layout_tests/port/base.py:
         - wdiff_text was returning a byte array instead of a
           unicode string.  The simple fix was to just decode
           the result.  However, seeing so much duplicated code
           with Executive made me cry, so I re-wrote the function
           to be more like pretty_patch_text and use run_command
           (which already knows how to handle unicode).

2010-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Windows tests buildbots are too slow to be core builders
        https://bugs.webkit.org/show_bug.cgi?id=37970

        It's 10:45.  The Windows test bots are still hours behind.  They're too
        slow to be core builders.  When they get fast, we can add them back.

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

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

        Unreviewed.  Attempt one more time to fix NRWT for chromium.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        I'm debugging in the blind because I don't have a chromium
        build on this laptop.

        * Scripts/webkitpy/layout_tests/port/chromium.py:
         - Apply the previous fix to a second caller.

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

        Unreviewed.  Attempt one more time to fix NRWT for chromium.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/layout_tests/port/chromium.py:
         - Fix handling of test_shell output so that we always
           decode it as utf-8.
           Unlike DumpRenderTree test_shell does not ever return
           pixel data.  It spits out the pixel dumps in a separate
           file, thus all output over stdout is utf-8 text.

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

        Unreviewed.  Attempt one more time to fix NRWT for chromium.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
         - Pass encoding to _save_baseline_data and write_output_files
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
         - Make _save_baseline_data and write_output_files take an encoding.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
        - Pass encoding to _save_baseline_data and write_output_files

2010-04-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher: make FPS measurement accurate
        https://bugs.webkit.org/show_bug.cgi?id=37934

        Instead of counting paints, which are not interchangeable with frames that
        the user sees, we now set an arbitrary timer for FPS measurements. The idea is
        that if the main thread is delayed for any reason, that timer would be delayed
        as well.

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/fpstimer.cpp: Added.
        (FpsTimer::FpsTimer):
        (FpsTimer::numFrames):
        (FpsTimer::start):
        (FpsTimer::stop):
        (FpsTimer::timerEvent):
        * QtLauncher/fpstimer.h: Added.
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::setFrameRateMeasurementEnabled):
        (WebViewGraphicsBased::updateFrameRate):
        (WebViewGraphicsBased::paintEvent):
        * QtLauncher/webview.h:

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

        Unreviewed, just adding missing ":" in python file.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        new-run-webkit-tests --chromium was borked.

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

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

        Reviewed by Adam Barth.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        Third time is the charm.  I've fixed all the
        new-run-webkit-tests regressions from previous attempts.

        I fixed the queue to not ignore Tor as a reviwer in r57531,
        but instead it throws an exception every time his name is in a patch.

        This fixes our Executive.run_command code to work around a Popen
        bug http://bugs.python.org/issue5290 whereby python versions before 2.6
        do not correctly handle unicode objects as input or output to
        Popen.communicate.

        Following the advice of:
        http://farmdev.com/talks/unicode/
        I have changed all of webkitpy to use unicode() objects as strings
        instead of str objects (which in Python 3 are renamed "bytes").

        String literals were left as "foo" instead of converting to u"foo"
        as u"foo" is only required if the string has a non-ascii code point.
        Python is smart about comparing str() and unicode() values and will
        log an error to the console if the comparison is ever invalid.

        Executive.run* now correctly accept and return unicode() objects.
        I attempted to fix all the places that we call .write() to make sure we
        encode any unicode() objects into utf-8.

        I removed several uses of StringIO.  StringIO should generally always be
        passed a unicode() value.

        Likewise I replaced most calls to open() with codecs.open().
        codecs.open() matches Python 3 open semantics in requiring an encoding
        parameter.  Files opened with codecs.open() with a unicode-compatible
        encoding will vend unicode() objects from their read() calls, like how
        StringIO created with a unicode() object will do.

        I also deployed "with" statements wider (now that the project has
        settled on Python 2.5) to close a bunch of file descriptor leaks.

        * Scripts/webkitpy/common/checkout/api_unittest.py:
         - Read/write utf-8 files instead of ascii.
         - Update the tests to use test for proper unicode() handling.
        * Scripts/webkitpy/common/checkout/changelog.py:
         - Document that parse_latest_entry_from_file expects
           file-like objects which return unicode strings.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
         - Use unicode() strings instead of str() byte arrays.
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/common/checkout/commitinfo.py:
         - Remove unneeded import.
        * Scripts/webkitpy/common/checkout/scm.py:
         - Remove use of str().
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Read/write utf-8 files and use unicode() strings in testing.
        * Scripts/webkitpy/common/config/committers.py:
         - Use \u instead of \x to make slightly clearer what we're doing.
        * Scripts/webkitpy/common/net/bugzilla.py:
         - Add a new _string_contents() method and explain why
            we have to call unicode() on the result of soup.string
            and why it's safe to do so w/o needing to pass a codec name.
          - Remove the (unused) support for passing a file object to add_patch_to_bug().
        * Scripts/webkitpy/common/net/buildbot.py:
         - Use unicode() instead of str() when needing to coax a
            NavigableString object into a unicode() object.
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
         - Add a test which contains a unicode builder name.
        * Scripts/webkitpy/common/net/statusserver.py:
         - Remove use of str()
        * Scripts/webkitpy/common/prettypatch.py:
         - Write out the patch file as utf-8.
        * Scripts/webkitpy/common/system/autoinstall.py:
         - Write out files with a explicit encodings.
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/common/system/deprecated_logging.py:
         - Write out log files as utf-8.
        * Scripts/webkitpy/common/system/executive.py:
         - Make run* properly take and return unicode() objects.
         - Cleaned up input handling in run_command a little by adding
           a _compute_input() method which can return early instead of having
           such a long/cluttered if-block.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         - Added a unit test to make sure we don't break Tor again!
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - Write out the test list as utf-8.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
         - Write out json files as utf-8.
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Add Executive.py FIXME.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py: ditto.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py: ditto.
        * Scripts/webkitpy/layout_tests/port/gtk.py: ditto.
        * Scripts/webkitpy/layout_tests/port/mac.py: ditto.
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
         - Make the skipped file parsing test unicode.
        * Scripts/webkitpy/layout_tests/port/qt.py: Add Executive.py FIXME.
        * Scripts/webkitpy/layout_tests/port/server_process.py: ditto.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
         - Make explicit the encodings of log files and pid files.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
         - Make encodings explicit and deploy "with".
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: ditto.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py: ditto.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: ditto.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py: ditto.
        * Scripts/webkitpy/style/filereader_unittest.py: ditto.
        * Scripts/webkitpy/thirdparty/__init__.py: ditto.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
         - Removed extra import.
        * Scripts/webkitpy/tool/commands/queues.py:
         - No need to map args to strings now that run_command does.
         - Update test results to match args changes.
         - Document our global argument hacks.
        * Scripts/webkitpy/tool/commands/upload.py:
         - Pass the diff directly to add_patch_to_bug instead of creating a StringIO file wrapper.
        * Scripts/webkitpy/tool/mocktool.py:
         - Rename add_patch_to_bug argument to match bugzilla.py
        * Scripts/webkitpy/tool/steps/abstractstep.py:
         - Executive.run_* now require lists instead of strings.
           The lack of this change was what broke webkit-patch
           for svn users the first time this was landed.
        * Scripts/webkitpy/tool/steps/postdiff.py:
         - Pass the diff directly to add_patch_to_bug instead of creating a StringIO file wrapper.
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py: ditto
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py: ditto
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Fixed spurious logging seen when running test-webkitpy

2010-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alexey Proskuryakov.

        aria-liveregion-notifications.html fails on leopard release bot
        https://bugs.webkit.org/show_bug.cgi?id=37112

        Change the way that notifications are listened for by forcing clients
        to call a remove listener as well to match the add listener. DRT will
        assert if those are not done in the correct order. 

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (removeNotificationListenerCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::removeNotificationListener):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (-[AccessibilityNotificationHandler initWithPlatformElement:]):
        (-[AccessibilityNotificationHandler dealloc]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        (-[AccessibilityNotificationHandler setCallback:]):
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):
        (AccessibilityUIElement::addNotificationListener):
        (AccessibilityUIElement::removeNotificationListener):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::removeNotificationListener):

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

        Reviewed by Sam Weinig.

        Add debug menu items to show/hide the Web View.
        https://bugs.webkit.org/show_bug.cgi?id=37958

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController showHideWebView:]):
        (-[BrowserWindowController removeReinsertWebView:]):
        (-[BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/English.lproj/MainMenu.xib:

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

        Unreviewed.  Rolling out unicode() changes as they broke NRWT for chromium.
        Rolling out:
        http://trac.webkit.org/changeset/58014
        http://trac.webkit.org/changeset/58016
        http://trac.webkit.org/changeset/58020

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbo
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/common/checkout/api_unittest.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/common/prettypatch.py:
        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/common/system/deprecated_logging.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_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/port/apache_http_server.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/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.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:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

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

        Unreviewed, fixing NRWT for real this time.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
         - Add a hack to fix new-run-webkit-tests
           my understanding of codecs.open(encoding=None)
           must have been wrong.

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

        Unreviewed, just fixing exception seen on builders.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
         - Pass and encoding to _write_into_file_at_path

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

        Reviewed by Adam Barth.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        I fixed the queue to not ignore Tor as a reviwer in r57531,
        but instead it throws an exception every time his name is in a patch.

        This fixes our Executive.run_command code to work around a Popen
        bug http://bugs.python.org/issue5290 whereby python versions before 2.6
        do not correctly handle unicode objects as input or output to
        Popen.communicate.

        Following the advice of:
        http://farmdev.com/talks/unicode/
        I have changed all of webkitpy to use unicode() objects as strings
        instead of str objects (which in Python 3 are renamed "bytes").

        String literals were left as "foo" instead of converting to u"foo"
        as u"foo" is only required if the string has a non-ascii code point.
        Python is smart about comparing str() and unicode() values and will
        log an error to the console if the comparison is ever invalid.

        Executive.run* now correctly accept and return unicode() objects.
        I attempted to fix all the places that we call .write() to make sure we
        encode any unicode() objects into utf-8.

        I removed several uses of StringIO.  StringIO should generally always be
        passed a unicode() value.

        Likewise I replaced most calls to open() with codecs.open().
        codecs.open() matches Python 3 open semantics in requiring an encoding
        parameter.  Files opened with codecs.open() with a unicode-compatible
        encoding will vend unicode() objects from their read() calls, like how
        StringIO created with a unicode() object will do.

        I also deployed "with" statements wider (now that the project has
        settled on Python 2.5) to close a bunch of file descriptor leaks.

        * Scripts/webkitpy/common/checkout/api_unittest.py:
         - Read/write utf-8 files instead of ascii.
         - Update the tests to use test for proper unicode() handling.
        * Scripts/webkitpy/common/checkout/changelog.py:
         - Document that parse_latest_entry_from_file expects
           file-like objects which return unicode strings.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
         - Use unicode() strings instead of str() byte arrays.
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/common/checkout/commitinfo.py:
         - Remove unneeded import.
        * Scripts/webkitpy/common/checkout/scm.py:
         - Remove use of str().
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Read/write utf-8 files and use unicode() strings in testing.
        * Scripts/webkitpy/common/config/committers.py:
         - Use \u instead of \x to make slightly clearer what we're doing.
        * Scripts/webkitpy/common/net/bugzilla.py:
         - Add a new _string_contents() method and explain why
            we have to call unicode() on the result of soup.string
            and why it's safe to do so w/o needing to pass a codec name.
          - Remove the (unused) support for passing a file object to add_patch_to_bug().
        * Scripts/webkitpy/common/net/buildbot.py:
         - Use unicode() instead of str() when needing to coax a
            NavigableString object into a unicode() object.
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
         - Add a test which contains a unicode builder name.
        * Scripts/webkitpy/common/net/statusserver.py:
         - Remove use of str()
        * Scripts/webkitpy/common/prettypatch.py:
         - Write out the patch file as utf-8.
        * Scripts/webkitpy/common/system/autoinstall.py:
         - Write out files with a explicit encodings.
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/common/system/deprecated_logging.py:
         - Write out log files as utf-8.
        * Scripts/webkitpy/common/system/executive.py:
         - Make run* properly take and return unicode() objects.
         - Cleaned up input handling in run_command a little by adding
           a _compute_input() method which can return early instead of having
           such a long/cluttered if-block.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         - Added a unit test to make sure we don't break Tor again!
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - Write out the test list as utf-8.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
         - Write out json files as utf-8.
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Add Executive.py FIXME.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py: ditto.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py: ditto.
        * Scripts/webkitpy/layout_tests/port/gtk.py: ditto.
        * Scripts/webkitpy/layout_tests/port/mac.py: ditto.
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
         - Make the skipped file parsing test unicode.
        * Scripts/webkitpy/layout_tests/port/qt.py: Add Executive.py FIXME.
        * Scripts/webkitpy/layout_tests/port/server_process.py: ditto.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - Deploy "with" to close file descriptor leaks.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
         - Make explicit the encodings of log files and pid files.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
         - Make encodings explicit and deploy "with".
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: ditto.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py: ditto.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: ditto.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py: ditto.
        * Scripts/webkitpy/style/filereader_unittest.py: ditto.
        * Scripts/webkitpy/thirdparty/__init__.py: ditto.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
         - Removed extra import.
        * Scripts/webkitpy/tool/commands/queues.py:
         - No need to map args to strings now that run_command does.
         - Update test results to match args changes.
         - Document our global argument hacks.
        * Scripts/webkitpy/tool/commands/upload.py:
         - Pass the diff directly to add_patch_to_bug instead of creating a StringIO file wrapper.
        * Scripts/webkitpy/tool/mocktool.py:
         - Rename add_patch_to_bug argument to match bugzilla.py
        * Scripts/webkitpy/tool/steps/abstractstep.py:
         - Executive.run_* now require lists instead of strings.
           The lack of this change was what broke webkit-patch
           for svn users the first time this was landed.
        * Scripts/webkitpy/tool/steps/postdiff.py:
         - Pass the diff directly to add_patch_to_bug instead of creating a StringIO file wrapper.
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py: ditto
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py: ditto
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Fixed spurious logging seen when running test-webkitpy

2010-04-21  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed.

        Add myself in committers.py.

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

2010-04-21  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        new-run-webkit-tests: fix a bug in the Chromium port where we would
        try to talk to a crashed test_shell and raise exceptions that weren't
        being caught.

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

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

2010-04-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] [Symbian] Build fix.

        Work around a Qt quirk. Some versions of Symbian port Qt
        QFontDatabase::removeAllApplicationFonts symbol is not available.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed.

        https://bugs.webkit.org/show_bug.cgi?id=37933
        <rdar://problem/7719540> XMLHttpRequest.withCredentials should be better enforced.

        Adding stub implementation of authenticateSession(). Depending on platform loader behavior,
        a real implementation may or may not be necessary for the one test that currently uses it
        to pass.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::authenticateSession):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=37933
        <rdar://problem/7719540> XMLHttpRequest.withCredentials should be better enforced.

        Adding authenticateSession() method that adds credentials to per-process credential storage
        (for platforms that even have such). No Windows implementation, because writing another
        loader for DRT is painful.

        * DumpRenderTree/LayoutTestController.cpp:
        (authenticateSessionCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (-[SynchronousLoader dealloc]):
        (-[SynchronousLoader connectionShouldUseCredentialStorage:]):
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):
        (-[SynchronousLoader connection:didFailWithError:]):
        (-[SynchronousLoader connectionDidFinishLoading:]):
        (+[SynchronousLoader makeRequest:withUsername:password:]):
        (LayoutTestController::authenticateSession):

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::authenticateSession):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::authenticateSession):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::authenticateSession):
        Stub implementations.

2010-04-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Make DRT compilable in Chromium tree
        https://bugs.webkit.org/show_bug.cgi?id=37923

        We need to use different GYPs in a case of WebKit-only checkout
        and a case of whole Chromium checkout because the relative paths
        from webkit/ to WebKit/chromium/features.gypi are different in
        these cases and we can't use 'conditions' for 'includes' in GYPs.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2010-04-21  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Darin Adler.

        List item markers are not always updated after changes in the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=37060

        * DumpRenderTree/LayoutTestController.cpp:
        (markerTextForListItemCallback): A function that returns the marker text for a given list item.
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::markerTextForListItem): Implement it in the GTK port.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::markerTextForListItem): Add a stub.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::markerTextForListItem): Implement it in the Qt port.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::markerTextForListItem): Add a stub.

2010-04-21  Adam Roben  <aroben@apple.com>

        Exclude leaks in CGGradientCreateWithColorComponents from
        run-webkit-tests leaks output

        The leak in CG is covered by <rdar://problem/7888492>.

        Fixes <http://webkit.org/b/37927>.

        Reviewed by Eric Carlson.

        * Scripts/old-run-webkit-tests:
        (sub countAndPrintLeaks): Exclude leaks in
        CGGradientCreateWithColorComponents on certain OSs.

2010-04-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Import MockSpellCheck from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=37910

        Import webkit/tools/test_shell/mock_spellcheck.{cc,h} rev.37241 of Chromium.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
          Add ICU explicitly because WTFString.h includes ICU headers.
          Add MockSpellCheck.{cpp,h}.
        * DumpRenderTree/chromium/MockSpellCheck.cpp: Added.
        * DumpRenderTree/chromium/MockSpellCheck.h: Added.
        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::spellCheck):
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/chromium/config.h: Define JS_EXPORTDATA, which is used
          by wtf/text/AtomicString.h included by wtf/text/WTFString.h.

2010-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add webkit-patch pretty-diff
        https://bugs.webkit.org/show_bug.cgi?id=37892

        This is slightly lame because it asks you whether the diff is correct,
        but it's a starting point.

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/prettydiff.py: Added.
        * Scripts/webkitpy/tool/main.py:

2010-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove mention of non-existant --no-build option
        https://bugs.webkit.org/show_bug.cgi?id=37893

        The option doesn't exist!

        * Scripts/webkitpy/tool/commands/stepsequence.py:

2010-04-21  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Interrupting JavaScript is cumbersome when you use QtLaucher for testing or profiling.
        https://bugs.webkit.org/show_bug.cgi?id=37198

        * QtLauncher/main.cpp:
        (LauncherWindow::toggleInterruptingJavaScriptEnabled):
        (LauncherWindow::newWindow):
        (LauncherWindow::cloneWindow):
        (LauncherWindow::createChrome):
        (main):
        * QtLauncher/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::shouldInterruptJavaScript):
        * QtLauncher/webpage.h:
        (WebPage::setInterruptingJavaScriptEnabled):

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

        Unreviewed, rolling out r57963.
        http://trac.webkit.org/changeset/57963
        https://bugs.webkit.org/show_bug.cgi?id=37759

        Three tests started crashing on the Qt bot.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-21  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Make new-run-webkit-tests work for the Qt port
        https://bugs.webkit.org/show_bug.cgi?id=37588

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

2010-04-21  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: try to detect alternate apache path
        https://bugs.webkit.org/show_bug.cgi?id=37587

        _check_port_build() also needs to return true in the
        base implementation to not fail the check_build step.

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

2010-04-21  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add LayoutTestController interface: computedStyleIncludingVisitedInfo
        https://bugs.webkit.org/show_bug.cgi?id=37759

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

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

        Unreviewed, test fix only.

        new-run-webkit-tests: implement a --log trace message to be able to display detailed output of an individual test run
        https://bugs.webkit.org/show_bug.cgi?id=37726

        This change seems to have broken a test.
        Attempting to handle the case where we don't have any
        timing information.  Dirk may have to correct this change.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests has much higher startup latency than run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=37643

        I got rid of the -expected.checksum reads during startup.
        This makes startup noticably better on my laptop.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - Use image_hash() instead of .image_hash now that expected.checksum
           file reads are done lazily.
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
         - Add debug logging for this sleep call.
           In my testing I never saw this sleep() hit.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
         - Sleep a shorter interval to make websocket server
           startup more responsive.  On my machine startup was
           taking around 1 second.
         - Remove the unconditional .5s delay on startup.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Make image_hash file reads done lazily in a new image_hash() function.
         - Add a "Starting testing ..." meter update after DRT threads have
           been started, but before we get updates from the first one.
         - Rename variable "t" to a full english name to match WebKit style.

2010-04-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Make Sheriffbot more inspirational.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-04-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Import Chromium image_diff as ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=37790

        ImageDiff.cpp is based on tools/imagediff/image_diff.cc r41911 of Chromium.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/ImageDiff.cpp: Added.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:

2010-04-20  Dirk Pranke <dpranke@chromium.org>

        This patch to new-run-webkit-tests adds a --log 'trace' option
        that prints out detailed info about a given test as it executes
        (where the baselines are, what the expectation is, what we got,
        how long it took).

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
          - use the newly exposed TestResult class and implement
            --log trace
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_thread.py:
          - rename TestStats to TestResult and make it more public, resulting
            in cleaner code
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
          - add expectation_to_string() as a separate callable function

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

        Unreviewed, rolling out r57907.
        http://trac.webkit.org/changeset/57907
        https://bugs.webkit.org/show_bug.cgi?id=37765

        Appears to have broken MacEWS and possibly webkit-patch upload
        for svn users.  Needs further investigation.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/api_unittest.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/common/prettypatch.py:
        * Scripts/webkitpy/common/system/autoinstall.py:
        * Scripts/webkitpy/common/system/deprecated_logging.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/executive_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/metered_stream.py:
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2010-04-20  Nate Chapin  <japhet@chromium.org>

        Unreviewed.

        Update my irc handle in committers.py (natechapin -> japhet).

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

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

        Reviewed by Adam Barth.

        REGRESSION(57531): the commit-queue still hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37765

        I fixed the queue to not ignore Tor as a reviwer in r57531,
        but instead it throws an exception every time his name is in a patch.

        This fixes our Executive.run_command code to work around a Popen
        bug http://bugs.python.org/issue5290 whereby python versions before 2.6
        do not correctly handle unicode objects as input or output to
        Popen.communicate.

        Following the advice of:
        http://farmdev.com/talks/unicode/
        I'm attempting to take the python unicode plunge and use unicode()
        objects as strings instead of str() objects everywhere in webkitpy.

        We do not have to use u"" instead of "" because u"a" == "a" as expected
        in Python.  Python will generate a warning to the console in cases where
        a unicode() == str() operation cannot be performed.

        I also cleaned up the input handling in run_command a little by adding
        a new _compute_input() method which can return early instead of having
        such a long/cluttered if-block.

        Executive.run* now correctly accept and return unicode() objects.
        I attempted to fix all the places that we call .write() to make sure we
        encode any unicode() objects into utf-8.

        All places which use StringIO need to be sure to pass StringIO a
        pre-encoded byte-array (str object) instead of unicode so that
        clients which read from the StringIO don't have encoding exceptions.
        To make this easier, I removed the patch_file_object support from
        add_patch_to_bug, and changed the 4 places which previously used
        StringIO to create a fake patch file.

        I attempted to document any places where we are not correctly converting
        to/from bytes (str() objects) to strings (unicode() objects).

        * Scripts/webkitpy/common/checkout/api_unittest.py:
         - Read/write utf-8 files instead of ascii.
         - Update the tests to use test for proper unicode() handling.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
         - Use unicode() strings instead of str() byte arrays.
        * Scripts/webkitpy/common/checkout/scm.py:
         - Remove use of str().
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Read/write utf-8 files and use unicode() strings in testing.
        * Scripts/webkitpy/common/config/committers.py:
         - Use \u instead of \x to make slightly clearer what we're doing.
        * Scripts/webkitpy/common/net/bugzilla.py:
         - Add a new _string_contents() method and explain why
           we have to call unicode() on the result of soup.string
           and why it's safe to do so w/o needing to pass a codec name.
         - Remove the (unused) support for passing a file object to add_patch_to_bug().
        * Scripts/webkitpy/common/net/buildbot.py:
         - Use unicode() instead of str() when needing to coax a
           NavigableString object into a unicode() object.
        * Scripts/webkitpy/common/net/statusserver.py:
         - Remove use of str()
        * Scripts/webkitpy/common/prettypatch.py:
         - Write out the patch file as utf-8.
        * Scripts/webkitpy/common/system/autoinstall.py:
         - Add a FIXME about encoding.
        * Scripts/webkitpy/common/system/deprecated_logging.py:
         - Document that tee() works on bytes, not strings.
        * Scripts/webkitpy/common/system/executive.py:
         - Make run* properly take and return unicode() objects.
        * Scripts/webkitpy/common/system/executive_unittest.py:
         - Added a unit test to make sure we don't break Tor again!
        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - Write out the test list as utf-8.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
         - Write out json files as utf-8.
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
         - Add FIXME about encoding handling.
        * Scripts/webkitpy/tool/commands/upload.py:
         - Pass the diff directly to add_patch_to_bug instead of creating a StringIO file wrapper.
        * Scripts/webkitpy/tool/mocktool.py:
         - Rename add_patch_to_bug argument to match bugzilla.py
        * Scripts/webkitpy/tool/steps/postdiff.py:
         - Pass the diff directly to add_patch_to_bug instead of creating a StringIO file wrapper.
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py: ditto.
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py: ditto.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
         - Fixed spurious logging seen when running test-webkitpy

2010-04-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        For check-webkit-style, implemented __eq__() and __ne__() (the
        built-in equality and inequality methods) for the
        DefaultStyleErrorHandler class.

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

        This will facilitate unit-testing for a subsequent patch,
        namely for https://bugs.webkit.org/show_bug.cgi?id=37850

        * Scripts/webkitpy/style/error_handlers.py:
          - Added __eq__() and __ne__() to the DefaultStyleErrorHandler
            class.

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Added unit tests for __eq__() and __ne__().
          - Also included a minor clean-up refactoring of combining the
            StyleErrorHandlerTestBase class (which has not needed to
            be separate due to previous changes) into the
            DefaultStyleErrorHandlerTest class.

2010-04-20  Jakub Wieczorek  <jwieczorek@webkit.org>

        Unreviewed.

        Add my IRC nick to the committers.py list.

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

2010-04-20  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] Multitouch mocking in QtLauncher doesn't work with QGraphicsView
        https://bugs.webkit.org/show_bug.cgi?id=37816
        
        Fix multi-touch mocking in QtLauncher when using QGraphicsView.
        Test: https://bug-32434-attachments.webkit.org/attachment.cgi?id=44955

        * QtLauncher/main.cpp:
        (LauncherWindow::eventFilter):
        (LauncherWindow::initializeView):

2010-04-20  MORITA Hajime <morrita@google.com>

        Unreviewed, add myself to the committers list.

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

2010-04-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Fix some unexpected results of editing
        https://bugs.webkit.org/show_bug.cgi?id=37843

        This change fixes about 70 unexpected results.
        The original test_webview_delegate.cc doesn't have this bug.
        The bug was introduced when I ported it to WebKit tree.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (printRangeDescription): Replace the latter startContainer() with endContainer().

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Turn off some unit tests for now - the new-run-webkit-tests dryrun
        tests for chromium won't work if you don't have a chromium checkout.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        (Re-)add dryrun.py; this was renamed from passing.py in the previous
        CL but apparently somehow didn't get checked in.

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

        * Scripts/webkitpy/layout_tests/port/dryrun.py: Added.

2010-04-19  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        check-webkit-style: exits when encountering a deleted file
        https://bugs.webkit.org/show_bug.cgi?id=37122

        This reverts the quick fix done by r57119 and makes check_patch
        not call check_file for deleted files.

        Also this change fixes the behavior for "-", which should mean
        stdin.  Before this change, the style checker just ignored "-"
        with a warning message.

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

2010-04-19  Daniel Bates  <dbates@rim.com>

        No review, rolling out 57868.
        http://trac.webkit.org/changeset/57868
        https://bugs.webkit.org/show_bug.cgi?id=37748

        Sheriffbot wasn't very inspirational after this patch.
        Instead, he was silent when you said hi :-(. Rolling
        out this patch so that I can debug/test this some more.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-04-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

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

        Make Sheriffbot more inspirational.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-04-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add missing header.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>
 
         Reviewed by Adam Barth.
 
         new-run-webkit-tests - repurpose the "Passing" port as "Dryrun" port
         that can be used to test platforms other than the one you are running
         on. This can be useful for checking baselines and testing code
         coverage.
 
         Note that running the code on the "wrong" port requires each
         port-specific implementation to actually not require any
         platform-specific python code (e.g., the chromium-win port must
         test for the existence of windows functions before calling them).
 
         https://bugs.webkit.org/show_bug.cgi?id=37782
 
         * Scripts/webkitpy/layout_tests/port/chromium_win.py:
         * Scripts/webkitpy/layout_tests/port/dryrun.py: Renamed from WebKitTools/Scripts/webkitpy/layout_tests/port/passing.py.
         * Scripts/webkitpy/layout_tests/port/factory.py:
         * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: add --build (default) and --no-build
        options to make that step optional. This flag modifies what happens
        in port.check_build().

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        new-run-webkit-tests - fix a typo in r57480 that caused us to stop
        logging the actual list of unexpected results.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-19  Dirk Pranke <dpranke@chromium.org>

        Reviewed by Adam Barth.

        From a patch by Tor Arne Vestbo  <tor.arne.vestbo@nokia.com>

        new-run-webkit-tests: make the retry step more explicit
        https://bugs.webkit.org/show_bug.cgi?id=37606

        It might be confusing to see the test and percent counters
        reset without any notice of what's going on, so we make the
        message that a retry-run is started explicit.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-19  Sam Weinig  <weinig@apple.com>

        Reviewed by Anders Carlsson.

        Add support for opening a new window (File->New Window) to
        Windows MiniBrowser. Accelerator doesn't work.

        * MiniBrowser/win/BrowserView.cpp:
        (createNewPage): Use BrowserView::create.
        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::onCommand): Respond to ID_FILE_NEW_WINDOW
        by creating a new window.
        * MiniBrowser/win/BrowserWindow.h:
        (BrowserWindow::create): Added. Don't allow creating
        BrowserWindows on the stack by making constructor
        private and exposing the create function.
        * MiniBrowser/win/MiniBrowser.cpp:
        (MiniBrowser::createNewWindow): Move new window creation
        logic here.
        * MiniBrowser/win/MiniBrowser.h:
        * MiniBrowser/win/MiniBrowser.rc: 
        * MiniBrowser/win/main.cpp:
        (_tWinMain): Use the new MiniBrowser::createNewWindow().

2010-04-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: aria-haspopup needs to be exposed
        https://bugs.webkit.org/show_bug.cgi?id=37808

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::hasPopup):

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Submit a better workaround for r57806 than the one in r57831 - log
        an error and exit if you try to run new-run-webkit-tests with --use-drt
        on Windows.

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

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

2010-04-19  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Unreviewed.

        Just adding myself as a committer.

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

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Add slightly better logging to the websocket python wrapper script,
        including a --verbose flag for debug output.

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

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/new-run-webkit-websocketserver:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: add a way (--print-unexpected-results) to
        (re-)print out the tests that produced unexpected results in the
        last run. Also add a way (--retry-unexpected-results) to
        automatically re-test them.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Restructure the logging in new-run-webkit-tests so that many of log
        messages that were logged to the MeteredStream also get logged in
        --verbose mode.

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

        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests: add 'summary' and 'unexpected-results' options
        to the --log flag. Also add a 'progress' flag to enable the regular
        progress bar (as opposed to 'detailed-progress', which enables the
        dots). Also add a 'nothing' flag to allow you to be explicit that
        you don't want any logging on the command line.

        The default is
        '--log detailed-progress,summary,unexpected,unexpected-results'

        (The default logging is unchanged by this patch, this just makes things
        properly configurable).

        Note that 'nothing' doesn't work properly yet; I need a couple other
        patches to land to avoid rewriting things several different ways.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make the URL change on committed load.

        * QtLauncher/mainwindow.cpp:
        (MainWindow::buildUI):
        (MainWindow::setAddressUrl):
        * QtLauncher/mainwindow.h:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Fix a typo in the rebaselining tool that causes us to use "debug"
        instead of "Debug" in a directory path, which fails on platforms with
        case-sensitive filesystems.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-04-19  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix.

        Fix breakage of chromium-win canary bots caused by r57806. That patch
        introduced the option of using Chrome's new port of DumpRenderTree,
        but unfortunately that port relies on the webkit.py class
        implementation which uses non-blocking I/O that isn't available on
        Windows. This patch turns off that option and doesn't import the
        class if we're running on Windows.

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

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

2010-04-19  James Robinson  <jamesr@chromium.org>

        Reviewed by abarth.

        Fix a typo

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-04-19  Adam Roben  <aroben@apple.com>

        Fix run-webkit-tests when there are spaces in the path

        Fixes <http://webkit.org/b/37809>

        Reviewed by Adam Barth.

        * Scripts/run-webkit-tests: Use an "indirect object" to specify the
        path to the harness to exec(). According to perldoc, this usage will
        prohibit perl from parsing the arguments to exec() via the shell,
        which would incorrectly split paths with spaces in them, etc.

2010-04-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Roben.

        WinLauncher.h should use LF line-endings and use native line-endings style.
        https://bugs.webkit.org/show_bug.cgi?id=37807

        * WinLauncher/WinLauncher.h: Added property svn:eol-style, converted to LF line-endings.

2010-04-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [DRT/Chromium] Fix a test initialization problem
        https://bugs.webkit.org/show_bug.cgi?id=37791

        * DumpRenderTree/chromium/DumpRenderTree.cpp:
        (runTest): Call resetTestController() before runFileTest(). Some
          controllers initialize their fields in reset() and not in their
          constructors.

2010-04-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] new-run-webkit-tests should use WebKitDriver for --use-drt
        https://bugs.webkit.org/show_bug.cgi?id=37793

        We need to use WebKitDriver instead of ChromiumDriver for Chromium
        DRT because its interface is different from test_shell.

        Chromium DRT has no UI.  So we can't use it to show test results.

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

2010-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Make failure-reason more forgiving
        https://bugs.webkit.org/show_bug.cgi?id=37525

        Removed search_limit, which wasn't very useful anyway.
        Added a log about the long load time loading from the builders.
        Prompt the user for what revision to start walking from (makes it easy to restart upon failure).

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-04-18  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Created a class for check-webkit-style that encapsulates iterating
        over text files and reading them.

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

        This revision is an intermediate step towards separating our
        style-checking code from the logic of iterating over files and
        reading them.

        * Scripts/webkitpy/common/system/logtesting.py:
          - Added a logMessages() method to the LoggingTestCase class.
            This method provides unit tests with access to the raw list
            of log messages in case the tester needs to do something more
            than simply assert the list of existing messages.

        * Scripts/webkitpy/style/checker.py:
          - Added a ProcessorBase class that processors of lists of lines
            should eventually inherit from.
          - Also added a FIXME to use the ProcessorBase class and the
            TextFileReader class added below.

        * Scripts/webkitpy/style/filereader.py: Added.
          - Created a TextFileReader class that encapsulates reading
            and iterating over text files.

        * Scripts/webkitpy/style/filereader_unittest.py: Added.
          - Added a TextFileReaderTest class to unit-test the
            new TextFileReader class.

2010-04-15  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] new-run-webkit-tests should be able to use chromium DRT
        https://bugs.webkit.org/show_bug.cgi?id=37645

        Make sure that the lack of a chromium checkout doesn't cause the script to
        fail.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py: Fix up a few paths
            to be relative to an upstream output dir.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Add --use-drt flag.

2010-04-18  Eric Seidel  <eric@webkit.org>

        Unreviewed, fixing the Qt bot.

        Add a layer of indirection when calling run-webkit-tests to allow testing new-run-webkit-tests on various platforms
        https://bugs.webkit.org/show_bug.cgi?id=37632

        * Scripts/run-webkit-tests:
         - Exit non-zero of launching the harness fails.

2010-04-18  Eric Seidel  <eric@webkit.org>

        Unreviewed, fixing the Qt bot.

        Add a layer of indirection when calling run-webkit-tests to allow testing new-run-webkit-tests on various platforms
        https://bugs.webkit.org/show_bug.cgi?id=37632

        * Scripts/run-webkit-tests:
         - Fix the wrapper to work for users who do not
           have WebKitTools/Scripts in their path.

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

        Reviewed by Adam Barth.

        Add a layer of indirection when calling run-webkit-tests to
        allow testing new-run-webkit-tests on various platforms.
        https://bugs.webkit.org/show_bug.cgi?id=37632

        This will let us test and fix bugs in new-run-webkit-tests
        without needing to restart the buildbot master between tests.

        Currently this change leaves run-webkit-tests as-is, but once
        its landed we will easily be able to turn on/off
        new-run-webkit-tests for various ports/configurations.

        I will send a note out to webkit-dev about how we will
        be using this launcher script to test on the bots.

        * Scripts/old-run-webkit-tests: Copied from WebKitTools/Scripts/run-webkit-tests.
        * Scripts/run-webkit-tests:
         - A new script which decides whether to run new- or old-
           run-webkit-tests based on the platform.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
         - Add some dummy argument handling for arguments which
           old-run-webkit-tests supports but new-run-webkit-tests
           does not yet.

2010-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Gtk bots to the list of "core builders" (builders which stop the commit-queue when they turn red)
        https://bugs.webkit.org/show_bug.cgi?id=33295

        The Gtk builders have been green every time I've looked
        at them in the last 5 days or so.  It would appear webkit
        is now keeping them green and we should update the core
        builder list to match reality.

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

2010-04-18  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add support for LayoutTestController commands:
                   setSmartInsertDeleteEnabled
                   setSelectTrailingWhitespaceEnabled
                   execCommand
                   isCommandEnabled

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setSmartInsertDeleteEnabled):
        (LayoutTestController::setSelectTrailingWhitespaceEnabled):
        (LayoutTestController::execCommand):
        (LayoutTestController::isCommandEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove steps_references and commands_references
        https://bugs.webkit.org/show_bug.cgi?id=37758

        We tried using the mumble_references convention to manage our
        dependencies, but it doesn't seem to be providing much value for the
        steps and commands module because these modules are small pieces of the
        larger tool module.  In this patch, I've removed the references file
        for these modules.
 
        I've left the style_references file for the style module because that
        module seems better isolated from the rest of webkitpy and the
        style_references file appears to be providing some value.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/commands_references.py: Removed.
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py:
        * Scripts/webkitpy/tool/steps_references.py: Removed.

2010-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        WebKit needs a Chromium Mac EWS Builder
        https://bugs.webkit.org/show_bug.cgi?id=37742

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2010-04-17  Adam Barth  <abarth@webkit.org>

        Fix expected results for unit test broken by
        http://trac.webkit.org/changeset/57772

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

2010-04-17  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Teach windows MiniBrowser how to work with window.open()
        and targeted links.

        * MiniBrowser/win/BrowserView.cpp:
        (createNewPage): Create a new BrowserWindow and return its page.
        (showPage): Show the page.
        (closePage): Empty implementation.
        (runJavaScriptAlert): Empty implementation.
        (BrowserView::create): Register a UIClient.
        * MiniBrowser/win/BrowserView.h:
        (BrowserView::webView): Added.
        Change create to take a BrowserWindow instead of an HWND.

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::wndProc): Respond to WM_NCDESTROY.
        (BrowserWindow::goToURL): Added. Forwards to BrowserView.
        (BrowserWindow::onCreate): Don't always go to the default
        url. Let the caller do this.
        (BrowserWindow::onNCDestroy): Delete the window.
        * MiniBrowser/win/BrowserWindow.h:
        (BrowserWindow::view): Added.
        (BrowserWindow::window): Added.

        * MiniBrowser/win/main.cpp:
        (_tWinMain):
        Go to the default URL for the initial page. Allocate the initial
        window on the heap for correctness.

2010-04-16  Adam Roben  <aroben@apple.com>

        Add the Windows Debug (Test) builder to the list of core builders

        It's been green for a few days now, and all the known Windows
        flakiness is Release-only.

        Rubber-stamped by Mark Rowe.

        * Scripts/webkitpy/common/net/buildbot.py:
        (BuildBot.core_builder_name_regexps): Added a regular expression to
        match the "Windows Debug (Test)" builder.

2010-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix window.open() and targeted links.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_createNewPage): Use the correct initializer to and load the window.

2010-04-16  Adam Roben  <aroben@apple.com>

        Fix links to layout test results from build status pages

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ExtractTestResults.finished): Prepend "/" on the URL of the test
        results page so that it is treated as an absolute URL.

2010-04-16  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] build DRT on Linux
        https://bugs.webkit.org/show_bug.cgi?id=37690

        * Scripts/build-dumprendertree: Add support for win and linux

2010-04-16  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Use the threaded process model for MiniBrowser if holding down
        the shift key on startup.

        * MiniBrowser/win/BrowserView.cpp:
        (BrowserView::create): 

2010-04-15  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Add TestShellGtk.cpp so we can link on Linux
        https://bugs.webkit.org/show_bug.cgi?id=37561

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Add new file and
            add platform file exceptions.
        * DumpRenderTree/chromium/TestShellGtk.cpp: Added.
        (AlarmHandler):
        (TestShell::waitTestFinished):

2010-04-15  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        build DRT on chromium mac
        https://bugs.webkit.org/show_bug.cgi?id=37639

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * Scripts/build-dumprendertree: enable build-dumprendertree --chromium

2010-04-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add LayoutTestHelper for Mac
        https://bugs.webkit.org/show_bug.cgi?id=37668

        LayouTestHelper.mm is based on webkit/tools/test_shell/mac/layout_test_helper.mm
        of Chromium.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/LayoutTestHelper.mm: Added.

2010-04-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=37494
        <rdar://problem/7857060> REGRESSION (r57340): fast/events/mouse-drag-from-frame-to-other-frame.html
        fails on Windows

        * DumpRenderTree/win/EventSender.cpp: (makeEventSender):
        * DumpRenderTree/win/EventSender.h:
        Tell EventSender if it's being created for a top frame.
        
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObjectForFrameInStandardWorld): We only want to reset
        EventSender machinery when a new test is loaded, not when an iframe (or just its global
        object) is created.

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

        Fix Windows WebKit2 build.

        * MiniBrowser/win/MiniBrowser.cpp:

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

        Reviewed by Adam Barth.

        Include codereview issue number in patch description
        https://bugs.webkit.org/show_bug.cgi?id=37677

        This lets us know which rietveld issue this patch is tied to.

        Also, make it so that --fancy-review overrides --no-review.

        * Scripts/webkitpy/tool/steps/postcodereview.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:

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

        Make --exit-after-n-failures work when all tests are timing out or crashing

        Fixes <http://webkit.org/b/37679>.

        Reviewed by Jon Honeycutt.

        * Scripts/run-webkit-tests:
        (top level): When a test crashes or times out, break out of the main loop if
        stopRunningTestsEarlyIfNeeded returns true. Moved some code from the bottom of the main loop
        from here...
        (stopRunningTestsEarlyIfNeeded): ...to here.

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

        Reviewed by Anders Carlsson.

        Add WebHistoryClient support.
        https://bugs.webkit.org/show_bug.cgi?id=37671

        Add HistoryClient logging.

        * MiniBrowser/mac/BrowserWindowController.m:
        (_didNavigateWithNavigationData):
        (_didPerformClientRedirect):
        (_didPerformServerRedirect):
        (_didUpdateHistoryTitle):
        (-[BrowserWindowController awakeFromNib]):

2010-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start the mini browser in threaded mode if shift is pressed during startup.
        https://bugs.webkit.org/show_bug.cgi?id=37670

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):

2010-04-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AXHelp is being appended from ancestors incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=37659

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getHelpTextCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::helpText):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::helpText):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::helpText):

2010-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Re-format run-webkit-tests to fit in 80-columns for PEP-8 compliance.
        (broken by r57463 and r57381, at least). I've also filed bug 37477
        to fix check-webkit-style to catch these things.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add a way to override the user-visible name for the test binary since
        some ports don't call it DumpRenderTree (e.g., Chromium Win uses
        test_shell, Chromium Mac uses TestShell) by adding a driver_name()
        method to the Port interface.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add "Force Repaint" to debug menu.
        https://bugs.webkit.org/show_bug.cgi?id=37627

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController forceRepaint:]):
        * MiniBrowser/mac/English.lproj/MainMenu.xib:

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

        Reviewed by Adam Roben.

        Add debug-minibrowser script.

        * Scripts/debug-minibrowser: Copied from Scripts/run-minibrowser.
        * Scripts/webkitdirs.pm:

2010-04-15  Roland Steiner  <rolandsteiner@chromium.org>
 
        Reviewed by Dimitri Glazkov.

        Bug 37636 - [DRT/Chromium] Implement DRT/Chromium for Windows
        https://bugs.webkit.org/show_bug.cgi?id=37636
 
        Second patch: add Windows-specific implementation parts
        of TestShell.

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
        * DumpRenderTree/chromium/TestShell.h:
        (TestShell::finishedEvent):
        * DumpRenderTree/chromium/TestShellWin.cpp:
        (watchDogThread):
        (TestShell::waitTestFinished):

2010-04-15  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 37636 - [DRT/Chromium] Implement DRT/Chromium for Windows
        https://bugs.webkit.org/show_bug.cgi?id=37636

        First patch: fix compiler errors.

        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::reset):
        (EventSender::dispatchMessage):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/chromium/TestWebWorker.h:
        * DumpRenderTree/chromium/TextInputController.cpp:
        * DumpRenderTree/chromium/WebViewHost.h:
        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2010-04-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Moving setViewMode from DumpRenderTreeSupportQt to qwebpage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37622

        Method qt_wrt_setViewMode was removed from qwebpage.cpp by mistake in r57433
        (bug 35844). Moving it back.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setViewModeMediaFeature):

2010-04-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Add some very minimal unit tests for new-run-webkit-tests. This should
        be enough to catch egregious brokenness like syntax errors and import
        declaration issues.

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

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

2010-04-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Add a way for the buildbot to kill any old processes that are running. This
        is useful because the Windows bots can get in states where a process remains
        running (httpd.exe, DumpRenderTree.exe), which causes the bots to get in a red
        state, and the processes must be killed manually.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: If we are on Windows, kill
            the old processes that might be running.
        * BuildSlaveSupport/win/kill-old-processes: Added.

2010-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Tear down WebKit more completely on window closing and application
        termination. We still don't block application termination for pending
        close, but this is a step in the right direction.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationWillTerminate:]):
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController dealloc]):
        (-[BrowserWindowController windowWillClose:]):
        (-[BrowserWindowController applicationTerminating]):

2010-04-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Use pretty patch for confirming webkit-patch diffs
        https://bugs.webkit.org/show_bug.cgi?id=37489

        * Scripts/webkitpy/common/prettypatch.py: Added.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:

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

        Reviewed by Adam Barth.

        Teach webkit-patch how to handle revisions missing ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=37519

        Make commit_info_for_revision return None when revision
        is missing a ChangeLog.  Previously we would throw an array index
        exception.
        Teach callers how to handle None.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/api_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:

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

        Reviewed by Adam Roben.

        Add Qt Bot to the list of "core builders" (builders which block the commit-queue when red)
        https://bugs.webkit.org/show_bug.cgi?id=33297

        This is an experiment.  The bots have been green for
        a while.  We'll see if adding them under sheriff-bot protection
        will keep them green.

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

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

        Unreviewed, just fixing a constant in the Rietveld unit test.

        * Scripts/webkitpy/common/net/rietveld_unittest.py

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

        Unreviewed, just adding missing Mock to fix python tests.

        * Scripts/webkitpy/tool/mocktool.py:

2010-04-13  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        Add experimental prototype Rietveld integration to webkit-patch upload
        https://bugs.webkit.org/show_bug.cgi?id=37418

        This patch adds bare-bones integration with Rietveld for code reviews.
        The behavior is hidden behind the --fancy-review command line flag.
        Currently, there's no support for uploading more than one patch per
        issue (which is a nice feature of Rietveld).  The plan is to play with
        this for a bit and see if it's useful.

        Modified from Adam's original patch to autoinstall the rietveld upload script.

        * Scripts/webkitpy/common/config/__init__.py:
        * Scripts/webkitpy/common/net/rietveld.py: Added.
        * Scripts/webkitpy/common/net/rietveld_unitttest.py: Added.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/postcodereview.py: Added.
        * Scripts/webkitpy/tool/steps/postdiff.py:

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

        Rubber-stamped by Mark Rowe.

        Add Makefile to MiniBrowser.

        * MiniBrowser/Makefile: Added.

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

        Unreviewed, just adding a sanity check.

        Add check to make sure commit-queue can never commit too short a message
        https://bugs.webkit.org/show_bug.cgi?id=37528

        The commit-queue made bogus messages here:
        http://trac.webkit.org/changeset/57532
        http://trac.webkit.org/changeset/57534

        This was a regression caused by adding unicode parsing for
        our ChangeLog files.  Popen does not seem to play nice with
        unicode strings.

        I'm also adding an "assert" to make sure short ChangeLogs never happen again.

        * Scripts/webkitpy/common/system/executive.py:
         - Cast input to strings before passing to POpen
        * Scripts/webkitpy/tool/steps/commit.py:
         - Validate that commit messages are not to short.

2010-04-13  Adam Roben  <aroben@apple.com>

        Robustify new-run-webkit-tests against paths with spaces in them

        Reviewed by Eric Seidel.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Quote all paths that we pass to
        Apache to ensure that paths with spaces in them are interpreted
        correctly.

2010-04-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r57537.

        * DumpRenderTree/qt/LayoutTestControllerQt.h: Declaration of removeOriginAccessWhitelistEntry() added.

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

        Reviewed by Maciej Stachowiak.

        Make building new webkit API and MiniBrowser a little easier.

        * Scripts/build-webkit: Make building with --webkit2 build the 
        MiniBrowser as well and tell you how to use it.
        * Scripts/run-minibrowser: Copied from Scripts/run-safari.
        * Scripts/webkitdirs.pm: Add runMiniBrowser function.

2010-04-12  Timothy Hatcher  <timothy@apple.com>

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * DumpRenderTree/LayoutTestController.cpp:
        (removeOriginAccessWhitelistEntryCallback): Added. Call LayoutTestController::removeOriginAccessWhitelistEntry.
        (LayoutTestController::staticFunctions): Added removeOriginAccessWhitelistEntry.
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::removeOriginAccessWhitelistEntry): Added. FIXME to implement.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::removeOriginAccessWhitelistEntry): Added.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::removeOriginAccessWhitelistEntry): Added. FIXME to implement.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::removeOriginAccessWhitelistEntry): Added.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::whiteListAccessFromOrigin): FIXME to implement.
        (LayoutTestController::removeOriginAccessWhitelistEntry): Added. FIXME to implement.

2010-04-13  Timothy Hatcher  <timothy@apple.com>

        Rename SecurityOrigin::whiteListAccessFromOrigin to addOriginAccessWhitelistEntry.
        And LayoutTestController.whiteListAccessFromOrigin to addOriginAccessWhitelistEntry.
        And SecurityOrigin::resetOriginAccessWhiteLists to resetOriginAccessWhitelists.

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * DumpRenderTree/LayoutTestController.cpp:
        (addOriginAccessWhitelistEntryCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::addOriginAccessWhitelistEntry):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::addOriginAccessWhitelistEntry):

2010-04-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Remove duplicate function for new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=37517

        The version() function was already implemented.

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

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

        Reviewed by David Levin.

        the commit-queue hates Tor Arne Vestbø
        https://bugs.webkit.org/show_bug.cgi?id=37511

        We were failing to read reviewers out of ChangeLogs
        when the reviewer has unicode characters in his/her name.
        I fixed this by explicitly decoding from utf8 every time we
        read in a ChangeLog file (they are always UTF8).

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2010-04-13  Adam Roben  <aroben@apple.com>

        Fix run-webkit-tests on Windows with spaces in the path

        Fixes <http://webkit.org/b/37509>.

        Reviewed by Steve Falkenburg.

        * Scripts/run-webkit-tests:
        (convertPathUsingCygpath): Remove spaces from the path before passing
        them to cygpath, then add them back in after conversion, as some
        versions of cygpath seem to convert spaces into newlines.

2010-04-13  Adam Barth  <abarth@webkit.org>

        Unreviewed, but approved by Dumitru Daniliuc.  (This patch is intended
        to fix the downstream Chromium build bots.  Hopefully it will work!)

        Add a driver script for the new websocket server
        https://bugs.webkit.org/show_bug.cgi?id=37495

        websocket_server.py can't be run directly because its a module and not
        a standalone script.  This used to work by accident because it didn't
        depend on any other modules.

        * Scripts/new-run-webkit-websocketserver: Added.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

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

        Reviewed by Adam Barth.

        Make new-run-webkit-test PrettyPatch failure reporting more awesome
        https://bugs.webkit.org/show_bug.cgi?id=37487

        I also fixed an Executive/executive typo.

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

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

        Reviewed by Adam Barth.

        new-run-webkit-tests should only build java support files on Mac
        https://bugs.webkit.org/show_bug.cgi?id=37482

        Only the mac needs java support files, so I pushed _build_java
        down into the Mac port using a new hook "_check_port_build".
        In the process I noticed a bunch of code which could be shared
        between all ports and thus got rid of _tests_for_disabled_features
        and version() copy/paste between all webkit ports.
        I also made check_build only bother to check for ImageDiff if we're
        using pixel tests.

        * Scripts/webkitpy/layout_tests/port/gtk.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/qt.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2010-04-12  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, trying to make scripts work on machines without
        Ruby...

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

2010-04-12  Tor Arne Vestbø <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Add stub files for running new-run-webkit-tests for the Qt port

        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/qt.py: Added.

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

        Reviewed by Eric Seidel.

        Modify run_webkit_tests.py to not call sys.exit() at the end of test
        run; doing so makes it more difficult to embed the routine for,
        among other things, unit tests. We push the exit calling up into
        new-run-webkit-tests.

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

        * Scripts/new-run-webkit-tests:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

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

        Unreviewed.

        Add stub Gtk implementation for new-run-webkit-tests.

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

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

        Reviewed by Adam Barth.

        new-run-webkit-tests fails with exception on systems missing ruby
        https://bugs.webkit.org/show_bug.cgi?id=37441

        * Scripts/webkitpy/layout_tests/port/base.py:
         - Catch failures similar to how wdiff code path does.
         - After one failure, stop trying.

2010-04-12  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Fix how we import simplejson based on how it's used in this file.
        This fixes exceptions raised when trying to write the simplejson output.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-11  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored check-webkit-style so that the StyleChecker class
        has no dependencies on patch-related concepts.

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

        This patch is an intermediate step towards making the StyleChecker
        class a generalized file processor that can do arbitary operations
        on the files corresponding to a list of paths.  This patch
        also simplifies the unit-testing of patch-checking code.

        * Scripts/check-webkit-style:
          - Updated to use the new PatchChecker class.

        * Scripts/webkitpy/style/checker.py:
          - Refactored the StyleChecker.check_patch() method into the
            check() method of a new PatchChecker class.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Refactored the unit tests as necessary, changing the
            StyleCheckerCheckPatchTest class to a PatchCheckerTest class.

2010-04-11  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix new-run-webkit-tests regressions cased by Eric's option parsing patch
        https://bugs.webkit.org/show_bug.cgi?id=37430

        We need some basic unit testing of this script, or we're going to keep
        breaking it like this.  Added missing namespace qualifiers and
        propagated renaming of an option.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/layout_tests/driver_test.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Break new-run-webkit-tests options into groups for easier re-use and possible relocation
        https://bugs.webkit.org/show_bug.cgi?id=37408

        new-run-webkit-tests currently has one huge function for
        dealing with all options-parsing. 
        This patch is a first attempt at trying to split that large
        function down into smaller (hopefully more readable?) chunks
        dealing with the different areas of options.
        For example, it would make sense to move configuration
        options off into some module which deals with the vagries of
        WebKit's configuration system.  It would also make sense to move
        Chromium options off onto the Chromium port object (where they are used).
        It may make sense to move results.json options over to the results.json code.
        This change is a first iteration, and we will certainly need more
        refinement to this code over time.  Hopefully I didn't make things
        harder to read here.

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

2010-04-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        create-rollout copy needs to be updated to reflect removal of --no-build
        https://bugs.webkit.org/show_bug.cgi?id=37425

        Removed --no-build and --no-test from the instructions because these
        don't exist anymore.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
            - Updated the expected results to reflect the new copy.
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:

2010-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57460.
        http://trac.webkit.org/changeset/57460
        https://bugs.webkit.org/show_bug.cgi?id=37424

        broke chromium builders (Requested by tony^work on #webkit).

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:

2010-04-11  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] update chromium DEPS for upstream compile
        https://bugs.webkit.org/show_bug.cgi?id=36578

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Small fix to avoid a circular dependency between
          WebKit.gyp and webkit.gyp.

2010-04-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Seidel.

        svn-apply errors out when removing directories in git
        https://bugs.webkit.org/show_bug.cgi?id=34871

        * Scripts/svn-apply:
        (isDirectoryEmptyForRemoval): early break if the directory doesn't exist
        (scmRemove): have git ignore unmatched files

2010-04-11  Daniel Bates  <dbates@rim.com>

        No review, rolling out 57440.
        http://trac.webkit.org/changeset/57440
        https://bugs.webkit.org/show_bug.cgi?id=27204

        Did not handle Git patches that included both file and property
        changes to the same file. Rolling this change out while I look
        into this.

        * Scripts/VCSUtils.pm:
        * Scripts/svn-apply:
        * Scripts/svn-unapply:
        * Scripts/webkitperl/VCSUtils_unittest/appendSVNExecutableBitChangeToPatch.pl: Removed.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitFileMode.pl: Removed.
        * Scripts/webkitperl/VCSUtils_unittest/parseStartOfPatchOrPropertyChangeAndEndOfPropertyChange.pl: Removed.

2010-04-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix typo in log path for AbstractQueue
        https://bugs.webkit.org/show_bug.cgi?id=37414

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

2010-04-11  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Add missing import statement.

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

2010-04-11  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add setWillSendRequestReturnsNull and setWillSendRequestClearHeader

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setWillSendRequestReturnsNull):
        (LayoutTestController::setWillSendRequestClearHeader):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix for --debug build after r57433.

        Refactor Qt DRT support in QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=35844

        * QtLauncher/main.cpp: qt_drt_garbageCollector_collect(); renamed to DumpRenderTreeSupportQt::garbageCollectorCollect();
        (launcherMain):

2010-04-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Mark Rowe.

        Make commit-log-editor Rubber-stamp aware. And other minor cleanups.
        https://bugs.webkit.org/show_bug.cgi?id=37407

        * Scripts/commit-log-editor:

2010-04-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add PrettyPatch links to new-run-webkit-tests output
        https://bugs.webkit.org/show_bug.cgi?id=37406

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
         - We're leaking a file handle here, add a FIXME.
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
         - Add pretty diff links.
        * Scripts/webkitpy/layout_tests/port/base.py:
         - Add support for generating pretty diffs using PrettyPatch.
        * Scripts/webkitpy/layout_tests/port/webkit.py:
         - We're leaking another file handle here, another FIXME.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
         - Update write_output_files signature.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
         - Remove unused arguments from write_output_files.
         - Add support for dumping pretty diffs to write_output_files.
         - Fix a bunch of file descriptor leaks in this file.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
         - Update write_output_files signature.

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        kill_process is copy/pasted in five places
        https://bugs.webkit.org/show_bug.cgi?id=37405

        We shouldn't replicate the kill_process logic in every port.  Instead,
        we should move the process interaction to Executive.

        Dirk mentioned that he wanted this abstraction to make it easier to
        mock things out for testing.  It turns out this function is only used
        in one place where it can't be used as a mock point for testing because
        the corresponding create process actually creates a real process.  In
        the long term, we should indirect both these calls through a non-static
        Executive as a mock point.  However, we should wait on that until we
        actually want to write the test.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests shouldn't alter its path to import packages
        https://bugs.webkit.org/show_bug.cgi?id=37404

        * Scripts/new-run-webkit-tests:
        * 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/test_expectations.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
        * Scripts/webkitpy/thirdparty/simplejson/decoder.py:

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

        Reviewed by Adam Barth.

        new-run-webkit-tests should store results to a directory under the build tree
        https://bugs.webkit.org/show_bug.cgi?id=37380

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

2010-04-10  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Implement support for changing the executable bit of a file.
        The executable bit is among the most changed file properties.
        Future support can include other property changes.

        Currently, if a patch changes the executable bit of a file
        it is not respected by svn-apply or svn-unapply. Since the
        commit-queue bot uses these tools as part of its workflow,
        such patches cannot be committed by it. That is, such patches
        need to be committed by hand. Instead, we should add support
        for the executable bit so that such patches can be committed
        by the commit-queue bot.

        * Scripts/VCSUtils.pm: Also change reference to Apple Computer, Inc.
        in copyright to Apple, Inc.
        * Scripts/svn-apply:
        * Scripts/svn-unapply:
        * Scripts/webkitperl/VCSUtils_unittest/appendSVNExecutableBitChangeToPatch.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitFileMode.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/parseStartOfPatchOrPropertyChangeAndEndOfPropertyChange.pl: Added.

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

        Reviewed by Adam Barth.

        WinEWS bot fails to svn update because scm.clean_working_directory leaves files around
        https://bugs.webkit.org/show_bug.cgi?id=37401

        The Git-based bots don't have this trouble because
        Git.clean_working_directory fully removes files that were
        marked as "add".  SVN.clean_working_directory previously just
        called "svn revert" which would leave added files in the
        working directory untracked.  This patch makes
        SVN.clean_working_directory function more like
        Git.clean_working_directory by removing added files after revert.

        * Scripts/webkitpy/common/checkout/scm.py:
         - Add SCM.absolute_path for easy conversion between
           repository-relative paths and absolute paths.
         - Add SCM.add and SCM.added_files
         - Make SVN.clean_working_directory remove any added_files after svn revert.
         - The new unit tests found a bug in Git.status_command, change to use git diff --name-status instead.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Add tests for added code.

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests can't find ImageDiff on Windows
        https://bugs.webkit.org/show_bug.cgi?id=37403

        It turns out the build directory on Windows is structured differently
        than it is on other platforms.  Instead of assuming the normal
        structure, we should just ask perl to figure it out for us.

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

2010-04-10  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Change "Gathering files" status line to "Collecting tests".  Gathering
        the files sounds silly to me.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix bugs to make new-run-webkit-tests almost run on windows
        https://bugs.webkit.org/show_bug.cgi?id=37400

        Fix some minor bugs that prevent new-run-webkit-tests from being run on
        Windows.  I still haven't run it to completion, but I'm getting
        further.

        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:

2010-04-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Refactor Qt DRT support in QtWebKit

        Update Qt DRT to use new DumpRenderTreeSupportQt static class.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::dumpFramesAsText):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/GCControllerQt.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/qt/GCControllerQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::counterValueForElementById):
        (LayoutTestController::setViewModeMediaFeature):
        (LayoutTestController::setMediaType):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        (LayoutTestController::setFrameFlatteningEnabled):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setTimelineProfilingEnabled):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::whiteListAccessFromOrigin):
        (LayoutTestController::setCaretBrowsingEnabled):
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        (LayoutTestController::workerThreadCount):
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move global queue log to the logs directory so it survives git clean -f
        https://bugs.webkit.org/show_bug.cgi?id=37395

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

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        SheriffBot should spam when it encounters errors
        https://bugs.webkit.org/show_bug.cgi?id=37329

        We need to always update the status server so we don't get stuck in a
        spam loop.  I tried writing a test for this change, but it kind of
        got out of control.  We need a better way to do failure injection.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the Chromium Mac canary.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Add the Apache bits to win.py for new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=37397

        I still have run this yet, but I looked around to figure out what the
        various paths appear to be.  I'll figure out a way to remove the
        copy/paste code in a future patch.

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out the win port for new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=37393

        I haven't tried running this yet, but we've got to start somewhere.

        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py:
        * Scripts/webkitpy/layout_tests/port/win.py: Added.

2010-04-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        webkit-patch land should not build and test by default
        https://bugs.webkit.org/show_bug.cgi?id=33631

        Reverse the sense of --no-build and --no-test to be --build and --test.
        Also, decoupled the build and test options so you can test without
        building.

        (Patch manngled by Adam Barth.  All bugs are his fault.)

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/runtests.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor WebKitPort out of MacPort to allow for WinPort
        https://bugs.webkit.org/show_bug.cgi?id=37388

        The split is a bit of a guess.  We might have to adjust things once we
        actually have a second port to work with.

        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/webkit.py: Added.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2010-04-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        run_webkit_tests.py shouldn't have platform-specific logic
        https://bugs.webkit.org/show_bug.cgi?id=37387

        Dirk Pranke pointed out that my last patch was wrong because I
        introduced platform-specific logic into run_webkit_tests.py, limiting
        the parallelism in Chromium to work around a bug in the main Mac port.

        * Scripts/webkitpy/common/system/executive.py:
            - Fix a typo pointed out by Chris Jerdonek.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-10  Robert Hogan  <robert@webkit.org>

        Unreviewed fix to regressions in r57416.

        [Qt] Fix regressions in http/tests/navigation from r57416

        Reset willSendRequestReturnsNullOnRedirect after each test to
        prevent it leaking to subsequent tests.

        Error pointed out by Jakub Wieczorek.

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

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):

2010-04-11  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Update layoutTestController.DumpResourceLoadCallbacks to match other ports.

        Add support for layoutTestController.setWillSendRequestReturnsNullOnRedirect to Qt DRT.
        Prevent dumping resource load callbacks once layout test has dumped.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setWillSendRequestReturnsNullOnRedirect):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement Desktop Notifications API for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=35503

        DRT stubs for notification. Enables to run and pass
        3 (currently disabled) tests.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::checkDesktopNotificationPermission):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-04-09  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, another change to executive.py to make it run with
        python 2.4.

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

2010-04-09  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, attempting to make executive.py run with python 2.4
        (which is still used on Chromium's Windows canary bot).

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

2010-04-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Eric Seidel.

        [wx] Basic implementation of SVG support for wx port.

        * wx/build/settings.py:

2010-04-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't reinvent Executive.cpu_count for every port
        https://bugs.webkit.org/show_bug.cgi?id=37377

        mac.py and chromium_mac.py had some copy/paste code.  This code doesn't
        actually have anything to do with WebKit ports.  It's really just
        something in the multiprocessing package.  The lame bit is that package
        isn't available in older versions of Python, so we need to implement a
        fallback.  However, we already have the fallback in common.  We don't
        need to reinvent it specificly for layout_tests.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests --release fails to build release DRT when global configuration is Debug
        https://bugs.webkit.org/show_bug.cgi?id=37376

        We need to explicitly pass the --release flag.  I bet there are more
        instances of this bug.

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2010-04-09  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] DRT compile fix on win/linux
        https://bugs.webkit.org/show_bug.cgi?id=37314

        Looks like this was missed when upstreaming.

        * DumpRenderTree/chromium/EventSender.cpp:
        (applyKeyModifier):

2010-04-09  Adam Barth  <abarth@webkit.org>

        Unreviewed, but approved by Dirk Pranke.

        rename test_expectations_test.py to test_expectations_unittest.py so it actually gets run
        https://bugs.webkit.org/show_bug.cgi?id=37372

        We need to end unit tests with _unittest.py for them to be autodetected
        by the test harness.  +6 tests.

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py: Renamed from WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_test.py.

2010-04-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should talk about DumpRenderTree not test_shell
        https://bugs.webkit.org/show_bug.cgi?id=37371

        test_shell is some strange Chromium thing.
        DumpRenderTree (tm) is the real deal.

        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py: Removed.
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Fix 2 issues (what were introduced in r56524) in svn-create-patch's generateDiff()
        https://bugs.webkit.org/show_bug.cgi?id=32582

        Add missing return variable. Initialize $patch variable and remove unnecessary condition.

        * Scripts/svn-create-patch:

2010-04-09  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after addition of LayoutTestController method.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):

2010-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=37368
        Add MiniBrowser.

        * MiniBrowser: Added.
        * MiniBrowser/MiniBrowser.vcproj: Added.
        * MiniBrowser/MiniBrowser.xcodeproj: Added.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Added.
        * MiniBrowser/mac: Added.
        * MiniBrowser/mac/AppDelegate.h: Added.
        * MiniBrowser/mac/AppDelegate.m: Added.
        * MiniBrowser/mac/BrowserWindowController.h: Added.
        * MiniBrowser/mac/BrowserWindowController.m: Added.
        * MiniBrowser/mac/English.lproj: Added.
        * MiniBrowser/mac/English.lproj/BrowserWindow.xib: Added.
        * MiniBrowser/mac/English.lproj/InfoPlist.strings: Added.
        * MiniBrowser/mac/English.lproj/MainMenu.xib: Added.
        * MiniBrowser/mac/MiniBrowser-Info.plist: Added.
        * MiniBrowser/mac/MiniBrowser_Prefix.pch: Added.
        * MiniBrowser/mac/main.m: Added.
        * MiniBrowser/win: Added.
        * MiniBrowser/win/BrowserView.cpp: Added.
        * MiniBrowser/win/BrowserView.h: Added.
        * MiniBrowser/win/BrowserWindow.cpp: Added.
        * MiniBrowser/win/BrowserWindow.h: Added.
        * MiniBrowser/win/MiniBrowser.cpp: Added.
        * MiniBrowser/win/MiniBrowser.h: Added.
        * MiniBrowser/win/MiniBrowser.rc: Added.
        * MiniBrowser/win/Resources: Added.
        * MiniBrowser/win/main.cpp: Added.
        * MiniBrowser/win/resource.h: Added.
        * MiniBrowser/win/stdafx.cpp: Added.
        * MiniBrowser/win/stdafx.h: Added.

2010-04-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch attached my patch to the wrong bug
        https://bugs.webkit.org/show_bug.cgi?id=37015

        The problem here is that SVN was violating SCM's implicit
        contract of always returning paths relative to the repository root.
        That can easily be fixed by telling SVN that the CWD is the repository root.

        When fixing this I realized there are a large number of places in SCM.py where
        we want to consider explicitly passing self.checkout_root as the CWD.
        That would allow scm methods to be executed even when the CWD is not inside
        the scm tree at all, and would also make sure (in the case of SVN) that paths
        returned are relative to the root.  Git (almost always) returns paths relative
        to the repository root.

        * Scripts/webkitpy/common/checkout/scm.py:
         - Explicitly pass self.checkout_root as cwd in run_status_and_extract_filenames
         - Add a ton of FIXMEs about the need to go back and decide which methods require cwd=self.checkout_root
           and which do not.  We'll probably add a helper function to scm (likely SCM._run) which
           always passes cwd=self.checkout_root to Executive.run_command
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
         - Add a test for this change.
        * Scripts/webkitpy/tool/commands/upload.py:
         - Removed the explicit os.chdir to the repository root, since scm.py methods
           should be robust against the cwd not being equal to the root.

2010-04-09  Adam Roben  <aroben@apple.com>

        Don't return 0 as a JSValueRef

        That is an illegal use of the JSC API.

        Fixes <http://webkit.org/b/37333> REGRESSION (r57292): :visited tests
        are asserting on debug Windows and GTK builds

        Reviewed by Anders Carlsson.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::computedStyleIncludingVisitedInfo):
        Return an "undefined" JSValueRef instead of 0.

2010-04-09  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        Make DumpRenderTree parallelizable
        https://bugs.webkit.org/show_bug.cgi?id=36899

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree): Use DUMPRENDERTREE_TEMP if exist.
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Use DUMPRENDERTREE_TEMP if exist.
        * Scripts/run-webkit-tests:
          - Create a unique temporary directory and pass its path to
          DumpRenderTree with DUMPRENDERTREE_TEMP environment variable.

2010-04-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <http://webkit.org/b/37326> IDL files are being copied in to the WebCore framework again

        Add a script to detect the presence of inappropriate files in the frameworks.  At present
        it only looks for .css, .idl and .in files in the top level of WebCore.framework/Resources,
        as these are the only cases we've encountered recently.  It can be extended to check the
        other frameworks or for other inappropriate files in the future.

        * Scripts/check-for-inappropriate-files-in-framework: Added.

2010-04-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add option to build WebKit2 to build-webkit.

        * Scripts/build-webkit:

2010-04-08  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        run-webkit-tests should respect argument order
        https://bugs.webkit.org/show_bug.cgi?id=37257

        * Scripts/run-webkit-tests: Changed so that sorting is done only
        on the results of iterating directories. Test order is based on
        what's passed on the command line. Removed code that aimed to
        eliminate duplicates since it can be useful to run the same test
        more than once.

2010-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=24300, don't expose history info via CSS.  Add a new method for
        obtaining computed style with :visited info included.  This allows layout tests to actually tell that
        :visited is in effect.

        * DumpRenderTree/LayoutTestController.cpp:
        (computedStyleIncludingVisitedInfoCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::computedStyleIncludingVisitedInfo):

2010-04-07  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Enable rebaseline-chromium-webkit-tests to run from a webkit-only
        checkout (i.e., you don't need anything from the Chromium tree checked
        out). This requires us to introduce the concept of a "target"
        port/platform that we use to get configuration information from as well
        as the "running" port that we use to make directories and diff images
        and the "rebaselining" port we use to actually manage baselines.

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

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-04-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
        https://bugs.webkit.org/show_bug.cgi?id=29431

        Added stubs for Mac, win, gtk and wx DRTs to implement setScrollbarPolicy method.

        * DumpRenderTree/LayoutTestController.cpp:
        (setScrollbarPolicyCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setScrollbarPolicy):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setScrollbarPolicy):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setScrollbarPolicy):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setScrollbarPolicy):

2010-04-01  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by David Hyatt.

        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
        https://bugs.webkit.org/show_bug.cgi?id=29431

        Make possible to DRT to set scrollbar policies (on, off or auto).

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setScrollbarPolicy):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * QtLauncher/main.cpp:
        (LauncherWindow::toggleScrollbars):
        (LauncherWindow::createChrome):

2010-04-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should give a percent complete indication
        https://bugs.webkit.org/show_bug.cgi?id=37258

        Because it's awesome.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-08  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Add back the --target option because it's needed by the downstream
        Chromium bots.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        new-run-webkit-tests should understand set-webkit-configuration
        https://bugs.webkit.org/show_bug.cgi?id=37252

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename target to configuration in new-run-webkit-tests to match the rest of WebKit
        https://bugs.webkit.org/show_bug.cgi?id=37251

        The rest of our tools call --debug or --release the configuration.
        It's confusing to call it target in this script.

        * Scripts/webkitpy/layout_tests/driver_test.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.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-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove depricated op.popen2 call in new-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=37249

        Python complains that this API is depricated.  We already solved this
        problem in executive.py.

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

2010-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests crashes when run on a 64-bit machine
        https://bugs.webkit.org/show_bug.cgi?id=37248

        * Scripts/webkitpy/layout_tests/port/mac.py:
         - The code was trying to always run the 32-bit intel version
           of the DumpRenderTree binary.  DRT does not build 32-bit on 64-bit
           machines so that makes no sense.  This may have made sense for test_shell
           at some point, but I think we should just remove this for DRT.

2010-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        WebKit Apache configs only listen on IPv4 addresses, causing random timeouts
        https://bugs.webkit.org/show_bug.cgi?id=37104

        Add warnings that the partial support for specifying what port numbers
        apache should bind to is even more broken after this fix.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2010-04-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        LayoutTestController::m_handlesAuthenticationChallenges isn't initialized
        https://bugs.webkit.org/show_bug.cgi?id=37190

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

2010-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add webkit-patch command to crawl buildbot history and find when tests
        started to fail.
        https://bugs.webkit.org/show_bug.cgi?id=36911

        This is a very bare-bones implementation, which works, but isn't pretty.
        We will need further re-factoring and improvement to this code, but
        after long discussions with Adam, I think it's best that we land this
        and iterate from there.

        * Scripts/webkitpy/common/net/buildbot.py:
         - Add revision_build_pairs_with_results for cleaner code and possible
           optimization of this command.
         - Return None if a build number can't be found for a revision in
           build_for_revision
         - Separate out suspect_revisions_for_transition for re-use by
           FailureReason
         - Add LayoutTestResults.failing_tests() and make our parsing code
           explict about what tables it accepts.
        * Scripts/webkitpy/tool/commands/queries.py:
         - Move _print_blame_information_for_commit out of WhatBroke for re-use
           by FailureReason.
         - Add FailureReason command which can crawl a given builder and explain
           why it is currently red on a per-test basis.

2010-04-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add DumpRenderTree.gyp, and some small fixes
        https://bugs.webkit.org/show_bug.cgi?id=37137

        - Add DumpRenderTree.gyp
        - Remove some dependencies to base/string_util.h,
          base/compiler_specific.h, base/file_path.h, base/file_util.h,
          base/message_loop.h, base/sys_string_conversions.h,

        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp: Added.
        * DumpRenderTree/chromium/CppVariant.cpp:
        (CppVariant::toStringVector):
        * DumpRenderTree/chromium/EventSender.cpp:
        (EventSender::EventSender):
        (EventSender::keyDown):
        (EventSender::scheduleAsynchronousClick):
        (EventSender::beginDragWithFiles):
        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/chromium/TextInputController.cpp:
        (TextInputController::markedRange):
        (TextInputController::selectedRange):

2010-04-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Write stack traces into the results directory for new-run-webkit-tests,
        instead of writing them alongside the test file.

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

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

2010-04-06  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed build fix.

        Enable pixel tests by default in new-run-webkit-tests unless
        explicitly set by the port or by the command line. This was broken in
        the fix for bug 36801 (rev. 57173).

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-06  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Disable pixel tests on the mac port by default.

        Also, revamp the way we check for pixel tests being enabled or
        disabled. We now look for options.pixel_tests instead of
        options.no_pixel_tests, and we have the "--pixel-tests" (force enable)
        and "--no-pixel-tests" (force disable) flags.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_test.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-04-06  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Laszlo Gombos.

        [Qt] Added the iPhone and iPad latest user agent in QtLauncher UA switcher
        https://bugs.webkit.org/show_bug.cgi?id=37159

        * QtLauncher/useragentlist.txt:

2010-04-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add current user-agent string for Symbian for QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=37131

        * QtLauncher/useragentlist.txt:

2010-04-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Explain how to handle rollout patches
        https://bugs.webkit.org/show_bug.cgi?id=37139

        We need to set expectations for how long landing rollout patches with
        the commit-queue takes.  The commit-queue is optimized for safety, not
        performance.  Also, give folks an alternative way to land patches
        quickly.

        In addition, improve our testing of add_patch_to_bug by having
        MockBugzilla log.  This caused me to tighten a bunch of tests and
        notice that one of our tests wasn't being run.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:

2010-04-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Turns out commit_info.committer() can be None
        https://bugs.webkit.org/show_bug.cgi?id=37106

        When the committer isn't in committers.py, the committer() property on
        commit_info can be None.  We need to handle that case gracefully.

        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-04-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Symbian] Build fix for Dumprendertree if Qt printing is not supported
        https://bugs.webkit.org/show_bug.cgi?id=37082

        Use the QT_NO_PRINTER guard to flag QPrinter dependent code.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dryRunPrint):

2010-04-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        SheriffBot should force_build builders that are idle and have failed exactly once
        https://bugs.webkit.org/show_bug.cgi?id=37059

        We can get into a deadlocked state where the commit-queue is stopped
        because the builders are red but the SheriffBot hasn't taken action
        because the builder has failed only once.  The SheriffBot should force
        build idle builders that have failed exactly once to either turn the
        tree green again (if the test was flaky) or trigger the "failed twice"
        remedies (IRC and bug posts).

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-04-05  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Fixed check-webkit-style issue where the script was prematurely
        exiting when encountering deleted files in patches.

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

        * Scripts/webkitpy/style/checker.py:
          - Changed non-existent file message from ERROR to WARN.
          - StyleChecker.check_file() no longer raises an exception when
            a file is not found.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated unit tests as necessary.

2010-04-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        SheriffBot should include blamelist when posting to bugs
        https://bugs.webkit.org/show_bug.cgi?id=37113

        When posting on bugs, we should include the full list of SVN revisions
        that caused the regression to folks have a better sense of whether they
        are to blame.

        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriff_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-04-05  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed after discussion with Adam, Darin, and Eric.

        Deleted the auto-install directory since it is no longer needed in
        source control (it is auto-generated).

        Also added webkitpy/thirdparty/autoinstalled to webkitpy/thirdparty's
        svn:ignore property.

        * Scripts/webkitpy/thirdparty/autoinstalled: Removed.

2010-04-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        Test case for <http://webkit.org/b/37115> / <rdar://problem/7829331>.
        REGRESSION(r56989): Crash in Mail in WebCore::Position::isCandidate when deleting block using block deletion UI

        Add a JavaScript hook in DRT to call through to WebView's -setEditable:.  This is required in order to reproduce
        the crash.

        * DumpRenderTree/LayoutTestController.cpp:
        (setWebViewEditableCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setWebViewEditable):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setWebViewEditable):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWebViewEditable):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setWebViewEditable):
        (LayoutTestController::layerTreeAsText):

2010-04-05  Darin Adler  <darin@apple.com>

        Ignore more files the Python tools strew about the working directory.

        * Scripts/webkitpy: Added property svn:ignore.
        * Scripts/webkitpy/common: Added property svn:ignore.
        * Scripts/webkitpy/common/checkout: Added property svn:ignore.
        * Scripts/webkitpy/common/config: Added property svn:ignore.
        * Scripts/webkitpy/common/net: Added property svn:ignore.
        * Scripts/webkitpy/common/thread: Added property svn:ignore.
        * Scripts/webkitpy/python24: Added property svn:ignore.
        * Scripts/webkitpy/thirdparty/autoinstalled: Modified property svn:ignore.
        * Scripts/webkitpy/tool/bot: Added property svn:ignore.

2010-04-05  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Add Vitaly Repeshko as a committer.

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

2010-04-05  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Update kenne's IRC nick to his registered nick.

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

2010-04-05  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        assorted helper functions and cleanup of git utilities
        https://bugs.webkit.org/show_bug.cgi?id=37103

        * Scripts/webkitpy/common/checkout/scm.py:
        No code currently uses the optional dry_run argument. So removing it.
        Change all uses of "trunk" to read the correct value out of the git config.
        Made the dcommit call actually get called when dry_run==true.
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/net/credentials.py:
        Move the git config call into scm.
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/system/executive.py:
        If return_exit_code==true, don't error out, just return the exit_code.

2010-04-05  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        prepare-ChangeLog should take a merge-base for which git branch to diff against.
        https://bugs.webkit.org/show_bug.cgi?id=36394

        * Scripts/prepare-ChangeLog:

2010-04-05  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Removed the PatchStyleErrorHandler class and incorporated its
        functionality into the DefaultStyleErrorHandler class.

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

        * Scripts/webkitpy/style/checker.py:
          - In the StyleChecker class:
            - Added a line_number parameter to the check_file() method.
            - Renamed the handle_style_error parameter to
              mock_handle_style_error to be consistent with the other mock_*
              parameter names.
            - Added a mock_check_file parameter to the check_patch() method
              to facilitate unit testing the changes in this patch.
            - Rewrote the check_patch() method with the patch-parsing logic
              taken from the PatchStyleErrorHandler class.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added a StyleCheckerCheckFileBase class and sub-classed the
            existing StyleCheckerCheckFileTest class from it.
          - Added a StyleCheckerCheckPatchTest class to unit-test the
            rewritten check_patch() method.
          - Removed the vestigial __main__ code at the bottom of the file.
            This is left over from when check-webkit-style was implemented
            as a module and a wrapper module.

        * Scripts/webkitpy/style/error_handlers.py:
          - Added an optional line_numbers parameter to the
            DefaultStyleErrorHandler class constructor and adjusted the
            __call__() method as necessary.
          - Removed the PatchStyleErrorHandler class.

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Removed the PatchStyleErrorHandlerTest class which unit-tested
            the PatchStyleErrorHandler class which is being removed in this
            patch.
          - Added a test_line_numbers() test method to the
            DefaultStyleErrorHandlerTest class to test use of the
            DefaultStyleErrorHandler's new line_numbers attribute.

2010-04-05  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Tighten SheriffBot's flaky test detector
        https://bugs.webkit.org/show_bug.cgi?id=37063

        Instead of just looking for two sequential red builds, look for two
        sequential failures of the same test.  This should reduce sheriffbot
        false positive substantially.

        I'm landing this change unreviewed because I've noticed SheriffBot
        triggering a lot more false positives now that we've expanded the set
        of core builders.  I've tried to take Eric's comments on Bug 37063 into
        account.  I'm happy to iterate on this patch tomorrow once Eric wakes
        up.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-04-04  John Gregg  <johnnyg@google.com>

        Unreviewed, add myself to the committers list.

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

2010-04-04  Robert Hogan  <robert@webkit.org>

        Unreviewed, add myself to the committers list.

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

2010-04-04  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, adding my IRC nickname to committers.py

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

2010-04-04  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored check-webkit-style's option-parsing code.

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

        * Scripts/check-webkit-style:
          - Moved the "WebKit checkout not found" check from
            ArgumentParser.parse() to the calling code.
          - Moved the --git-commit argument validation from the calling
            code to ArgumentParser.parse().

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated a unit test as necessary.

        * Scripts/webkitpy/style/optparser.py:
          - Renamed ArgumentParser._exit_with_help() to _parse_error()
            and made its error_message parameter required.
          - Removed the found_checkout parameter from ArgumentParser.parse().
          - Removed the "WebKit checkout not found" check and moved it
            to the calling code.
          - Added --git-commit argument checking.

        * Scripts/webkitpy/style/optparser_unittest.py:
          - Adjusted the import statements to be fully qualified.
          - Changed the ArgumentParserTest class to inherit from
            LoggingTestCase, and updated the class as necessary.
          - Added a unit-test for the --git-commit validation.
          - Added unit tests for the --git-diff and --git-since variants
            of --git-commit.

2010-04-03  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        The check-webkit-style script now logs an ERROR and exits when
        encountering a file path that does not exist.  Previously, it failed
        silently on such paths.

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

        * Scripts/webkitpy/common/system/logtesting.py:
          - Added a FIXME to rename the LoggingTestCase class to
            LoggingTestCaseBase.

        * Scripts/webkitpy/style/checker.py:
          - In the StyleChecker.check_file() method:
            - Added a mock_os_path_exists parameter.
            - Renamed the process_file parameter to mock_process_file.
            - Added logic to log an error and exist if the given path does
              not exist.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Refactored the StyleCheckerCheckFileTest class slightly to
            inherit from LoggingTestCase.
          - Added a test method to unit-test the case of a file that
            does not exist.
          - Adjusted the other test methods as necessary.

2010-04-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add Tiger Bot to the list of "core builders" (builders which block the commit-queue when red)
        https://bugs.webkit.org/show_bug.cgi?id=33289

        Add Tiger and SnowLeopard Tests to the core builders.  This is a bit of
        an experiment now that the bots are green.  Hopefully we can keep them
        on the list and have the tree stay greener.

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

2010-04-02  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Have Eric and Adam watch the SheriffBot
        https://bugs.webkit.org/show_bug.cgi?id=37054

        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        commit-queue should ignore builders when landing rollouts
        https://bugs.webkit.org/show_bug.cgi?id=37051

        When we moved the "builders are red" check into the master process, we
        forgot about rollouts.  I thought we had a test covering this case, but
        looking at the test, it was a bit too loose.  I added a new test and
        introduced some new logging technology into MockTool to make the test
        tighter.

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

2010-04-02  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        sherrifbot should ensure that the rollout reason doesn't start with - (and fix webkit-patch upload).
        https://bugs.webkit.org/show_bug.cgi?id=37030

        * Scripts/webkitpy/tool/bot/sheriff.py: Ensure that the rollout reason doesn't
          start with -.
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: A test with a rollout
          reason which starts with -.
        * Scripts/webkitpy/tool/steps/createbug.py: Fix webkit-patch upload.

2010-04-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Fixed check-webkit-style to recognize the short form of the
        --verbose option, as stated in --help.

        * Scripts/check-webkit-style:
          - Tweaked one line.

2010-04-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for DumpRenderTree after addition of layerTreeAsText.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::layerTreeAsText):

2010-04-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Accept XHTML-MP content type as XHTML content
        https://bugs.webkit.org/show_bug.cgi?id=34262

        Register xhtmlmp file extension as the new type
        for XHTML-MP test content.

        * Scripts/run-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py:
        * Scripts/webkitpy/layout_tests/port/lighttpd.conf:

2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        create-rollout doesn't fill out ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=37010

        The contract between apply_reverse_diff and PrepareChangeLogForRevert
        was unclear.  I broke filling out the ChangeLog during rollout earlier
        when I changed apply_reverse_diff to revert the ChangeLogs because
        PrepareChangeLogForRevert thought that it was supposed to do that.
        I've now taught PrepareChangeLogsForRevert the new contract.

        It's unclear to me how to test this change because it's essentially an
        integration issue that requires the file system.  At some point we
        should think about a testing strategy for integration.  As the system
        becomes larger, we're running into more of these issues.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:

2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add cr-win-ews to QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=37004

        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/statusbubble.html:

2010-04-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Unit-test networktransaction.py's log messages, and add a base
        class to make unit-testing log messages even easier.
        
        https://bugs.webkit.org/show_bug.cgi?id=36958

        The purpose of this patch is also to provide a mini-tutorial on
        how to unit-test Python logging.py messages.

        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
          - Unit-tested the log messages in test_retry().

        * Scripts/webkitpy/common/system/logtesting.py:
          - Adjusted the LogTesting class by moving the code that clears
            the array of log messages into a finally block.  This prevents
            redundant AssertionErrors from getting rendered to the screen
            while running unit tests.
          - Added a LoggingTestCase class so the setUp() and tearDown()
            methods do not need to be implemented in order to test logging.
            Rather, TestCase classes can simply inherit from this class.

2010-04-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Re-wrote check-webkit-style's argument parsing code to use
        Python's optparser module and more uniform error-handling logic.

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

        * Scripts/webkitpy/style/optparser.py:
          - Removed "option help" from check-webkit-style's usage string
            since that is provided separately by the OptionParser class.
          - Also changed the usage string from a function to a constant
            string _USAGE.
          - Added an _EPILOG string which renders after OptionParser's
            usage string and option help.
          - In the ArgumentParser class:
            - Changed the constructor's stderr_write parameter to a
              mock_stderr since the OptionParser accepts a sys.stderr
              substitute rather than a sys.stderr.write substitute.
            - Changed the constructor to set a _parser data attribute with
              an OptionParser instance.
            - Added a _create_option_parser() method which instantiates
              the OptionParser.
            - Updated _exit_with_help() to interact with the OptionParser's
              help method.
            - Updated the parse() method as necessary.  Also changed the
              raising of ValueErrors to calls to _exit_with_help().

        * Scripts/webkitpy/style/optparser_unittest.py:
          - Removed the CreateUsageTest class since the create_usage method
            was replaced by a constant string.
          - Added a _MockStdErr class to the ArgumentParserTest class.
          - Updated the unit tests as necessary.


2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The master commit-queue process should take responsibility for checking that the builders are green
        https://bugs.webkit.org/show_bug.cgi?id=37009

        We had a failure where the child process noticed that the builders were
        red.  We've always had this race condition, but the new optimistic
        design made it easier to trigger.

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

2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Tweak rollout changelog to pass ValidateReviewer check
        https://bugs.webkit.org/show_bug.cgi?id=37019

        We need to use the magic word "unreviewed" to make the commit-queue
        happy when landing rollouts.

        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:

2010-04-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Removed duplicate ChangeLog entry.

2010-04-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Rubber-stamped by Eric Seidel.

        To the Python 2.4 error message, added a link to the wiki page
        that contains instructions on how to upgrade.

        * Scripts/test-webkitpy:
          - Eliminated a use of the ternary operator in configure_logging()
            to let the version warning display in case of Python 2.4.

        * Scripts/webkitpy/python24/versioning.py:
          - Added this link to the error text:
            http://trac.webkit.org/wiki/PythonGuidelines

        * Scripts/webkitpy/python24/versioning_unittest.py:
          - Updated unit test text.

2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Record the IRC nick of folks who request rollouts
        https://bugs.webkit.org/show_bug.cgi?id=36999

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add cr-win-ews
        https://bugs.webkit.org/show_bug.cgi?id=36974

        Adds support for an Early Warning System for Chromium on Linux.  The
        interface to the Chromium port is the same on every platform, so we
        don't need to create a new Port object for this queue.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Using a failure exit code when failing to load a required import
        https://bugs.webkit.org/show_bug.cgi?id=37000

        Well spotted by Mark Rowe.

        * Scripts/webkitpy/common/system/user.py:

2010-04-01  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Rewrote the revision (r56942) to disable the 79 character line
        length limit Python/PEP8 style check.

        https://bugs.webkit.org/show_bug.cgi?id=33639#c39

        This rewrite puts the disabling not in the PythonProcessor but
        in the calling code's default filter rule configuration.  This
        allows the user to check line-length style from the command-line
        if desired.

        * Scripts/webkitpy/style/checker.py:
          - Added "-pep8/E501" to the _BASE_FILTER_RULES configuration
            variable to disable the line-length check.
          - Added "-pep8/E501" to the list of recognized style categories
            to permit the category to be checked from the command line.

        * Scripts/webkitpy/style/processors/python.py:
          - Reverted r56942: http://trac.webkit.org/changeset/56942

2010-04-01  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dmitry Titov.

        Add FileThread for async file operation support in FileReader and FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=36896

        Add options to enable FILE_READER and FILE_WRITER support.

        * Scripts/build-webkit:

2010-04-01  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Add missing license header.

        * DumpRenderTree/chromium/TestShellMac.mm:

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Improve the error handling in rollout a bit
        https://bugs.webkit.org/show_bug.cgi?id=36995

        This patch does a few things to make the error handling in rollout a
        bit more robust.

        * Scripts/webkitpy/common/checkout/api.py:
            The old logic here was wrong.  We don't want to resolve the
            ChangeLogs (that would remove the old ChangeLog entry).  Instead,
            we want to revert the ChangeLogs so we can fill them with the new
            message.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
            Update test expectations because we're using a different mock object.
        * Scripts/webkitpy/tool/commands/download.py:
            - Added an update command to make updating from the SheriffBot more
              robust.
            - Now that we have CommitInfo, we can automatically CC the
              responsible parties on the bug we create.
            - Re-ordered the steps in create-rollout.  Our original thinking
              was that we always wanted to create the bug, but that's not
              really true given how things appear to be playing out.  If we
              fail to apply the reverse diff, we don't want to create the bug.
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
            - Use the new, more robust update command.
        * Scripts/webkitpy/tool/steps/createbug.py:
            Allow commands to pre-load who they want to be CCed on a new bug.

2010-04-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add TestShell and WebViewHost class, main(), and so on
        https://bugs.webkit.org/show_bug.cgi?id=36814

        This change introduces:
        - WebViewHost class
          It's an implementation of some delegates required by Chromium
          WebKit API, and manages painting of a WebView. It's base on
          src/webkit/tools/test_shell/test_webview_delegate.{cc,h} of
          Chromium rev.40492.
        - TestShell class
          The TestShell instance holds global states of DumpRenderTree process.
          Unlike TestShell class of Chromium test_shell, TestShell instance is
          created just once.
        - DumpRenderTree.cpp
          The program entry.

        * DumpRenderTree/chromium/DumpRenderTree.cpp: Added.
        * DumpRenderTree/chromium/TestShell.cpp: Added.
        * DumpRenderTree/chromium/TestShell.h: Added.
        * DumpRenderTree/chromium/TestShellMac.mm: Added.
        * DumpRenderTree/chromium/WebViewHost.cpp: Added.
        * DumpRenderTree/chromium/WebViewHost.h: Added.
        * DumpRenderTree/chromium/config.h: Added.

2010-04-01  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        sheriffbot rollout should verify that the svn revision is a number.
        https://bugs.webkit.org/show_bug.cgi?id=37001

        * Scripts/webkitpy/common/net/bugzilla.py: Allow for the message to be None.
        * Scripts/webkitpy/tool/bot/sheriff.py: Did verification that svn revision
         is a number. Fixed the imports (since the files uses ScriptError and log)
         and a typo.
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Added a test to verify
         the behavior.

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Print an error message for readline bogosity in MacPorts
        https://bugs.webkit.org/show_bug.cgi?id=36979

        * Scripts/webkitpy/common/system/user.py:

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't pass --non-interactive to create-rollout
        https://bugs.webkit.org/show_bug.cgi?id=36989

        It turns out you can't pass --non-interactive to create-rollout.  Also,
        improve our error reporting slighly to catch the case where we error
        out after creating the rollout bug.

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

2010-04-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        webkit-patch can incorrectly think the working directory is modified
        https://bugs.webkit.org/show_bug.cgi?id=36985

        If a file's modification time is modified, but the contents are not,
        then diff-index will think the file has been modified unless you do
        some crazy update-index call. Instead, call diff --name-only, which
        has the index update builtin.

        Tried to write a test, but could not reproduce this in a unittest.
        To test manually:
            touch file-in-repo
            git diff-index HEAD
            git diff HEAD --name-only

        The diff-index call incorrectly shows file-in-repo as modified.

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

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add rollout command to sheriffbot
        https://bugs.webkit.org/show_bug.cgi?id=36986

        This IRC command creates a new bug an attaches a rollout patch.  To
        actually commit the rollout, a committer needs to mark the patch
        commit-queue+ in bugs.webkit.org.

        Also, factored out some of the logic from the queue into a separate
        object for easier testing.

        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriff.py: Added.
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py: Added.
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2010-04-01  Eric Seidel  <eric@webkit.org>

        Unreviewed, only ignoring chatty style errors.

        check-webkit-style: WebKit needs a python style checker
        https://bugs.webkit.org/show_bug.cgi?id=33639

        Remove the 79 char line limit by ignoring 
        pep8/E501.  Because we have our own report_error
        implementation we have to ignore E501 by hand
        instead of passing --ignore=E501.

        Right now over 1400 lines of our existing python
        fail E501 so this rule just generates needless noise.
        The rest of WebKit has no wrapping rule so it makes
        little sense for our Python to differ here.

        * Scripts/webkitpy/style/processors/python.py:

2010-04-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Add cmarrin's IRC nickname.

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

2010-04-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        EWS spins hot when unable to build
        https://bugs.webkit.org/show_bug.cgi?id=36981

        The problem is that the queue engine things we have more work to do,
        but the bot isn't actually able to do anything.  After this change, we
        back off the usual amount.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2010-04-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Added layerTreeAsText function to DRT (for Mac)
        https://bugs.webkit.org/show_bug.cgi?id=36782

        This is the DRT side. It exposes the call to JavaScript
        through the LayoutTestController.

        * DumpRenderTree/LayoutTestController.cpp:Platform independent JavaScript shim
        (layerTreeAsTextCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:Mac specific plumbing to WebKit
        (LayoutTestController::layerTreeAsText):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:Windows specific plumbing to WebKit
        (LayoutTestController::layerTreeAsText):

2010-04-01  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after addition of JavaScriptCore/wtf/text directory.

        * wx/build/settings.py:

2010-04-01  Jian Li  <jianli@chromium.org>

        Rubber-stamped by David Levin.

        Add myself to the reviewers list.

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

2010-04-01  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Turns out the Chromium Windows bots don't have pdevenv installed.

        * Scripts/webkitdirs.pm:

2010-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Let Chromium Windows build with Visual Studio Express
        https://bugs.webkit.org/show_bug.cgi?id=36919

        This is horrible, horrible copy/paste code, but that seems to be the
        way of webkitdirs.pm.  :(

        Someone needs to go through an cleanup this code, but I don't have the
        heart to do it in this patch.

        * Scripts/webkitdirs.pm:

2010-04-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Add myself to the committers list.
        https://bugs.webkit.org/show_bug.cgi?id=36953

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

2010-04-01  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Add Snow Leopard Release bot to the list of "core builders" (builders which stop the commit-queue when they turn red)
        https://bugs.webkit.org/show_bug.cgi?id=33292

        Just adding the "Build" builder for now.
        We'll add the "Test" builders when the tests
        are less flaky.

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

2010-04-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by David Levin.

        Add myself to the reviewers list.

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

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

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Dave Levin.

        Added Python style checking to check-webkit-style using
        the third-party pep8 module (via autoinstall).

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

        * Scripts/webkitpy/style/checker.py:
          - Added PYTHON to FileType.
          - Updated ProcessorDispatcher to return a PythonProcessor
            for *.py files.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the ProcessorDispatcher unit tests for *.py files.

        * Scripts/webkitpy/style/processors/python.py: Added.
          - Added PythonProcessor class.

        * Scripts/webkitpy/style/processors/python_unittest.py: Added.
          - Added PythonProcessor unit tests.

        * Scripts/webkitpy/style/processors/python_unittest_input.py: Added.
          - Added a sample Python file to test the PythonProcessor.process()
            code path (since pep8 accepts a file path).

        * Scripts/webkitpy/style/unittests.py:
          - Updated the style unit test file to import python_unittest.py.

        * Scripts/webkitpy/style_references.py:
          - Adjusted style references to import pep8.

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Dave Levin.

        Rewrote autoinstall.py to support unzipping *.zip files after
        download, unzipping and extracting *.tar.gz files after download,
        and copying installed files to a given destination directory.

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

        These changes will let us autoinstall pep8.py from the web and put
        our third-party autoinstalled code in an explicit directory like
        webkitpy/thirdparty/autoinstalled. These changes should also speed
        up the execution of autoinstalled *.zip packages slightly since
        *.pyc files cannot be generated when importing from zipped
        packages using the current autoinstall.

        * Scripts/test-webkitpy:
          - Addressed the FIXME to enable auto-install logging once
            autoinstall was rewritten not to log as verbosely.

        * Scripts/webkitpy/common/net/bugzilla.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/common/net/buildbot.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/common/net/irc/ircbot.py:
          - Updated ircbot and irclib import statements.

        * Scripts/webkitpy/common/net/networktransaction.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/common/net/statusserver.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/common/system/autoinstall.py: Added.
          - Added AutoInstaller class.
          - Added sample/testing usage to the __main__ block.

        * Scripts/webkitpy/thirdparty/__init__.py:
          - Updated the autoinstall lines to use the new autoinstall methods.
          - Added pep8.py to the list of auto-installed packages.
          - Added a README file to the target autoinstallation directory
            so users know that the directory is safe to delete.

        * Scripts/webkitpy/thirdparty/autoinstall.py: Removed.
          - This is replaced by the rewritten autoinstall
            webkitpy/common/system/autoinstall.py.

        * Scripts/webkitpy/thirdparty/autoinstalled/__init__.py: Removed.
          - The target autoinstallation directory is now auto-generated.

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Tweak webkitpy's logtesting.LogTesting class to get more mileage out
        of our unit tests that test log messages.

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

        This patch adds to the LogTesting class's tearDown() method a line
        asserting that the array of remaining log messages is empty.  This
        ensures that no extra log messages are getting logged that the caller
        might not be aware of or may have forgotten to check for.

        * Scripts/webkitpy/common/system/logtesting.py:
          - Modified the tearDown() method as described above.
          - Also modified the assertMessages() method to clear the array
            of log messages after asserting.

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Added support for a --verbose-logging flag to test-webkitpy.

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

        Verbose logging is useful for debugging test-webkitpy code that
        runs before the actual unit tests -- things like autoinstalling and
        unit-test auto-detection logic.  This is different from verbose
        logging of the unit tests themselves (which corresponds to the
        unittest module's --verbose flag).

        * Scripts/test-webkitpy:
          - In the configure_logging() method--
            - Added an is_verbose_logging parameter that sets the logging
              level to logging.DEBUG instead of logging.INFO.
            - Changed the method to throttle the logging level on the
              root logger's handler instead of directly on the root logger
              itself.
            - Enabled logging of the autoinstall module when the flag is set.

        * Scripts/webkitpy/thirdparty/autoinstalled/__init__.py:
          - Added a work-around for a bug in Python 2.6's logging module
            that was discovered while working on this patch.

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Enabled Python's logging module for webkit-patch, and replaced
        deprecated_logging with Python logging in networktransaction.py.
        This eliminates some spurious output when running test-webkitpy.

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

        * Scripts/webkit-patch:
          - Replaced the configure_logging() function with a call to
            the new logutils.configure_logging() function.

        * Scripts/webkitpy/common/net/networktransaction.py:
          - Replaced the use of deprecated_logging with Python logging.

        * Scripts/webkitpy/common/system/logutils.py:
          - Added _default_handlers() which creates the default logging
            handler for webkitpy.
          - Added configure_logging() which configures default logging
            for webkitpy.

        * Scripts/webkitpy/common/system/logutils_unittest.py:
          - Added unit tests for logutils.configure_logging().

        * Scripts/webkitpy/style/checker.py:
          - Refactored check-webkit-style's configure_logging() method
            to call the new logutils.configure_logging().

        * Scripts/webkitpy/style_references.py:
          - Updated references as necessary.

2010-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch land fails if not run from the root directory
        https://bugs.webkit.org/show_bug.cgi?id=35822

        The root of the problem was that ChangeLog.__init__ expects a path
        relative to the current working directory, and SCM expects to
        return paths relative to the SCM root.  Fix it by converting from
        SCM-relative to absolute paths in Checkout.modified_changelogs

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

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

        Reviewed by Eric Seidel.

        Add more tests for webkitpy.common.checkout
        https://bugs.webkit.org/show_bug.cgi?id=36926

        We don't have a great way of testing checkout, sadly.

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

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

        Reviewed by Eric Seidel.

        REGRESSION: EWS crashes on failure
        https://bugs.webkit.org/show_bug.cgi?id=36924

        Turns out we need to pass one more argument.  My test is kind of lame,
        but at least it's there.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Fixed typo in WebKitTools/ChangeLog: opsys -> ospath.

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

        Reviewed by Eric Seidel.

        Make the EWS go faster by being optimistic
        https://bugs.webkit.org/show_bug.cgi?id=36916

        Have the EWS be optimistic that a patch will correctly build.  This
        should speed up the common case by not requiring two builds for every
        patch.

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

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

        Reviewed by Eric Seidel.

        Add the ability to restart sheriffbot from IRC
        https://bugs.webkit.org/show_bug.cgi?id=36909

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:

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

        Reviewed by Eric Seidel.

        Add win-ews to QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=36876

        The win-ews is still experimental, but it seems to be more or less
        running.  We should show its results to the people.

        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/statusbubble.html:

2010-03-30  Victor Wang  <victorw@chromium.org>

        Reviewed by Eric Seidel.

        Update rebaseline tool to check the release image diff binary and
        fallback to debug if the release version does not exist.

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach buildbot.py how to parse builder activity from /one_box_per_builder
        https://bugs.webkit.org/show_bug.cgi?id=36898

        I also removed some obsolete FIXMEs and
        refactored one_box_per_builder parsing into multiple
        methods for easier reading.

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

2010-03-31  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Fix logging in new-run-webkit-tests so that we don't report IMAGE
        expected failures as unexpected passes when we run with pixel tests
        disabled.

        This change splits some of the logic embedded into the TestExpectations
        classes out into separate pure functions (result_was_expected,
        remove_image_failures) to make them easier to test. This also adds
        a parameter to matches_an_expected_result() to indicate whether or
        not pixel test results should be included in the expectations.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-03-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        In webkitpy, refactored two calls to os.path.relpath() replacements
        to use a common method.

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

        * Scripts/webkitpy/common/net/bugzilla.py:
          - Replaced the relpath implementation with a call to
            webkitpy.common.system.ospath.relpath().

        * Scripts/webkitpy/common/system/ospath.py: Added.
          - Moved the relpath() implementation from style/main.py.

        * Scripts/webkitpy/common/system/ospath_unittest.py: Added.
          - Moved the relpath() unit tests from style/main_unittest.py.

        * Scripts/webkitpy/style/main.py:
          - Replaced the relpath implementation with a call to
            webkitpy.common.system.ospath.relpath().

        * Scripts/webkitpy/style/main_unittest.py:
          - Moved the relpath unit tests to ospath_unittest.py.

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

        Reviewed by Eric Seidel.

        Add a Builder.force_build method
        https://bugs.webkit.org/show_bug.cgi?id=36875

        We plan to eventually use this in SheriffBot to break deadlocks created
        by flaky tests.

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

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

        Reviewed by Eric Seidel.

        webkit-patch reads wrong bug url from unified diff context
        https://bugs.webkit.org/show_bug.cgi?id=36477

        Instead of trying to figure out the bug_id from the diff, we should
        just get the information from the Checkout object, which understands
        these concepts.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/mocktool.py:

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

        Reviewed by Eric Seidel.

        webkit-patch commit-queue should land patches optimistically
        https://bugs.webkit.org/show_bug.cgi?id=34187

        This patch adds an optimistic path to commit-queue and a "fail twice"
        requirement for rejecting patches.  That means we'll land good patches
        faster (via the optmistic first run) and we'll reject many fewer
        patches due to flaky tests.

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

2010-03-31  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Custom user agent for user agent switcher
        https://bugs.webkit.org/show_bug.cgi?id=36757

        * QtLauncher/main.cpp:
        (LauncherWindow::showUserAgentDialog):

2010-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        path to committers.py in commit-queue rejection message is wrong
        https://bugs.webkit.org/show_bug.cgi?id=36865

        This fix would have only been 3 lines long if we had
        1. Had access to an SCM object or tool to give us the checkout root
        2. Been able to depend on Python 2.6
        Instead I've added a bunch of hack code, but at least now
        we should never have to update this string again as the location
        of committers.py is fully dynamically discovered. :p

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

2010-03-31  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed test fix for r56809.

        webkit-patch what-broke throws exception
        https://bugs.webkit.org/show_bug.cgi?id=36852

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

2010-03-30  Chris Jerdonek  <cjerdonek@webkit.org>

        Rubber stamped by Dave Levin.

        Made check-webkit-style less chatty.

        Examples include:
         - https://bugs.webkit.org/show_bug.cgi?id=36866#c4
         - https://bugs.webkit.org/show_bug.cgi?id=36472#c9

        * Scripts/webkitpy/style/checker.py:
          - Changed unrecognized file type log message from info to debug.

2010-03-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after new method added.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::callShouldCloseOnWebView):

2010-03-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch what-broke throws exception
        https://bugs.webkit.org/show_bug.cgi?id=36852

        * Scripts/webkitpy/common/checkout/api.py: Add missing import StringIO.
        * Scripts/webkitpy/common/checkout/api_unittest.py: Test the function which previously threw and exception.

2010-03-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36616
        Dvorak-Qwerty keyboard layout gives unexpected results in javascript keydown

        https://bugs.webkit.org/show_bug.cgi?id=36797
        For non-Roman layouts, keydown Event.keyCode is always 0

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]): Generate a correct keyCode
        for keys used in tests (we used to always pass 0 for 'A').

2010-03-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement win-ews
        https://bugs.webkit.org/show_bug.cgi?id=36809

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:

2010-03-30  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Adjusted test-webkitpy to delete all orphaned *.pyc files
        from webkitpy/ prior to importing any modules from webkitpy.
        This ensures that no import statements in webkitpy falsely
        succeed because of leftover *.pyc files.

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

        * Scripts/test-webkitpy:
          - Added _clean_pyc_files() to delete orphaned *.pyc files
            from a directory.
          - Added _clean_webkitpy_with_test() to call and test
            _clean_pyc_files().
          - Moved the "import webkitpy.python24.versioning" statement
            from the top of the module to the init() method -- immediately
            after the call to _clean_webkitpy_with_test().

2010-03-30  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [Chromium-Win] subprocess.call should be called with stdin=open(os.devnull,'r')
        https://bugs.webkit.org/show_bug.cgi?id=36811

        subproess.Popen() on Python 2.4/Windows with stdout,stdout, but no stdin will fail, because it uses return value of GetStdHandle(STD_INPUT_HANDLE), but DuplicateHandle requires integer, not the handle.
        We don't need stdin, so use devnull as stdin.
        Same as https://bugs.webkit.org/show_bug.cgi?id=36586

        * Scripts/webkitpy/layout_tests/port/chromium_win.py: open os.devnull for stdin

2010-03-29  Eric Seidel  <eric@webkit.org>

        Unreviewed, build fix only.

        * Scripts/webkitpy/tool/steps/validatereviewer.py: Add missing import.

2010-03-29  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Remove '_flymake' suffix from base part of file name so that
        check-webkit-style uses a correct header guard name when it is called from Emacs's flymake.

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

        * Scripts/webkitpy/style/processors/cpp.py:
        * Scripts/webkitpy/style/processors/cpp_unittest.py:

2010-03-29  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Get the following test-webkitpy unit test working again:
        scm_unittest.SVNTest.test_svn_apply().

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

        * Scripts/webkitpy/common/checkout/scm_unittest.py:
          - Add leading spaces to the empty lines of the ChangeLog strings.
          - Manually set the _reviewer attribute on the Attachment object
            to get the tests to pass.

2010-03-29  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Holger Freyther.

        [GTK] suppress (un)desired launcher output that can make layout test to fail with stderr
        https://bugs.webkit.org/show_bug.cgi?id=36390

        Suppress debugging messages sent to the GLib logger during DRT runs.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (logHandler): Added.
        (main): Use logHandler as the default GLib log message handler.

2010-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        sheriff-bot should comment on bugs when builders break
        https://bugs.webkit.org/show_bug.cgi?id=36786

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
         - Add a new _post_blame_comment_to_bug and all it from process_work_item
         - Move commit-queue logic into _post_rollout_patch to make its api match the other _post commands.
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
         - Test the new _post_blame_comment_to_bug call

2010-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        sheriff-bot fails to get information about certain builds
        https://bugs.webkit.org/show_bug.cgi?id=36768

        This seems to be caused by:
        http://buildbot.net/trac/ticket/753
        I have no work-around, but for now at least we're logging
        the error better.  I also added allow_none to our ServerProxy
        creation in case that fixes things for other versions of python.

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

2010-03-29  Victor Wang  <victorw@chromium.org>

        Reviewed by Adam Barth.

        Add sign in/out link to TestResults appengine

        Add a link to main menu for sign in/out to this appengine.
        People signed in with admin privilege could perform
        actions that are only allowed to admins like deleting files.

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

        * TestResultServer/handlers/menu.py:
        * TestResultServer/stylesheets/menu.css:
        (.sign):
        * TestResultServer/templates/menu.html:

2010-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        ValidateReviewer step is draconian and un-tested
        https://bugs.webkit.org/show_bug.cgi?id=36792

        ValidateReviewer logic was commented out in
        http://trac.webkit.org/changeset/56744
        That was a symptom of the fact that validatereviewer.py
        is too inflexible to be used when real humans are driving webkit-patch.
        For now we just disable ValidateReviewer when humans are at the keyboard.

        * Scripts/webkitpy/tool/steps/validatereviewer.py:
         - Only run when in non-interactive mode.
        * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py: Added.
         - Test our validation logic to make sure it's sane.

2010-03-29  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Eliminate explicit slash characters from check-webkit-style's
        _rel_path() method to make its implementation more platform
        independent.

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

        * Scripts/webkitpy/style/main.py:
          - Changed to use os.sep instead of slash_chars "/\\".  This can
            be done since os.path.abspath() converts slashes to os.sep.

2010-03-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Change new-run-webkit-tests to not use more than four threads by
        default on the mac port until
        https://bugs.webkit.org/show_bug.cgi?id=36622 is fixed.

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

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

2010-03-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Reformat port/mac.py to fit witin 80 columns for PEP-8 compliance.

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

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

2010-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        new-run-webkit-tests fails java/lc3 on a clean checkout
        https://bugs.webkit.org/show_bug.cgi?id=36078

        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Build the java support files in check_build
         - Unwrap a line which would still fit under 80col

2010-02-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Add support for Widgets 1.0: View Mode Media Feature
        https://bugs.webkit.org/show_bug.cgi?id=35446

        Add hooks to the Qt DRT for testing the view mode media feature.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setViewModeMediaFeature):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-03-29  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Update expected results for unit tests.

        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:

2010-03-29  Adam Barth  <abarth@webkit.org>

        Unreviewed.  I think Eric meant svn_revision.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2010-03-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkit-patch commit-queue should notice if it breaks builders (and roll out its own changes)
        https://bugs.webkit.org/show_bug.cgi?id=29311

        Now that we have sheriff-bot watching the tree, it can post
        rollout patches on behalf of the commit queue.

        * Scripts/webkitpy/common/checkout/commitinfo.py: add responsible_parties()
        * Scripts/webkitpy/common/checkout/commitinfo_unittest.py: test responsible_parties()
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
         - Break IRC logic out into _post_irc_warning for easier testing.
         - Add _post_rollout_patch for posting rollout patches to bugzilla.
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
         - Test _rollout_reason
        * Scripts/webkitpy/tool/grammar.py:
         - Fix join_with_separators to not add Adam's "oxford comma" for two item lists.
        * Scripts/webkitpy/tool/grammar_unittest.py:
         - Test join_with_separators

2010-03-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sheriffbot should actually run commands
        https://bugs.webkit.org/show_bug.cgi?id=36776

        Some minor changes to Sheriffbot:

        1) We should actually run commands (by giving control back to the
        command processing object.

        2) Use URLs instead of just numbers to represent SVN revisions (making
        it easier to folks in IRC ot followup).

        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:

2010-03-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Renaming of frame flattening LayoutTestController method
        to setFrameFlatteningEnabled(bool)

        * DumpRenderTree/LayoutTestController.cpp:
        (setFrameFlatteningEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setFrameFlatteningEnabled):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setFrameFlatteningEnabled):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setFrameFlatteningEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setFrameFlatteningEnabled):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setFrameFlatteningEnabled):

2010-03-28  Gustavo Noronha Silva  <gns@gnome.org>

        No review, rolling out r56679.
        http://trac.webkit.org/changeset/56679
        https://bugs.webkit.org/show_bug.cgi?id=36454

        Lots of tests broken.

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

2010-03-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Fixed typo in deprecated_logging_unittest.py, which is masking
        sys.stderr while running test-webkitpy.

        See also-- https://bugs.webkit.org/show_bug.cgi?id=36725#c3

        * Scripts/webkitpy/common/system/deprecated_logging_unittest.py:

2010-03-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Renamed check-webkit-style's --debug flag to --verbose to be more
        in line with other WebKit scripts.  Also renamed the current
        --verbose flag to --min-confidence to allow the --debug rename.

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

        We also renamed the internal "verbose" variables to "confidence" or
        "min_confidence," as appropriate, to avoid confusion with the
        --verbose flag, and because the new names are more accurate.

        * Scripts/check-webkit-style:
          - Renamed is_debug to is_verbose.

        * Scripts/webkitpy/style/checker.py:
          - Renamed _DEFAULT_VERBOSITY to _DEFAULT_CONFIDENCE.
          - Renamed "verbosity" parameters to "min_confidence" throughout.
          - Renamed configure_logging()'s is_debug parameter to is_verbose.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the unit tests as necessary.

        * Scripts/webkitpy/style/error_handlers.py:
          - Updated the call to StyleCheckerConfiguration.write_style_error().

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Updated the unit tests as necessary.

        * Scripts/webkitpy/style/optparser.py:
          - Updated the usage string with the new flag names.
          - Renamed the verbosity parameter to min_confidence throughout.
          - Renamed the is_debug parameter to is_verbose throughout.

        * Scripts/webkitpy/style/optparser_unittest.py:
          - Updated the unit tests as necessary.

        * Scripts/webkitpy/style/processors/cpp.py:
          - Renamed the verbosity parameter to min_confidence throughout.

        * Scripts/webkitpy/style/processors/cpp_unittest.py:
          - Updated the unit tests as necessary.

2010-03-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Added back a line that accidentally got deleted in r56690.

        * Scripts/check-webkit-style:

2010-03-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Add to check-webkit-style support for checking directories.

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

        * Scripts/check-webkit-style:
          - Replaced the call to check_file() with a call to check_paths().

        * Scripts/webkitpy/style/checker.py:
          - In the StyleChecker class:
            - Added a check_paths() method that accepts a list of paths
              to files and directories.
            - Added a _check_directory() method that checks the files
              in a directory.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added a StyleCheckerCheckPathsTest to unit-test the new
            check_paths() method.

        * Scripts/webkitpy/style/optparser.py:
          - Updated the usage string.

2010-03-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Changed check-webkit-style to convert paths to paths relative to
        the checkout root when invoking check-webkit-style with path
        arguments.  Also added warning messages where appropriate.

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

        Converting paths to paths relative to the checkout root ensures
        that style checking will behave as expected (since path-specific
        rules assume input paths are relative to a source root).

        * Scripts/check-webkit-style:
          - Added debug logging of whether the current directory was found
            to be in a WebKit checkout.
          - Added the found_checkout parameter to the call to parser.parse().
          - Renamed the files variable to paths.
          - Added a call to change_directory() prior to checking style.

        * Scripts/webkitpy/style/checker.py:
          - For StyleChecker.check_file():
            - Updated the docstring.
            - Added two log messages.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated a call to parser.parse() with the found_checkout parameter.

        * Scripts/webkitpy/style/main.py: Added.
          - Added a new file so the code in this patch could be unit-tested,
            as opposed to adding new code to check-webkit-style.
          - Added the method _rel_path() as a substitute for os.path.relpath(),
            which is available only in Python 2.6.
          - Added the method change_directory(), which contains most of the
            new functionality in this patch.

        * Scripts/webkitpy/style/main_unittest.py: Added.
          - Added RelPathTest to test main._rel_path().
          - Added ChangeDirectoryTest to test main.change_directory().

        * Scripts/webkitpy/style/optparser.py:
          - Updated check-webkit-style's usage string.
          - For the ArgumentParser.parse() method:
            - Added a found_checkout parameter.
            - Renamed filenames to paths.
            - Added logic so that an error is raised if no paths are passed
              if found_checkout is False.

        * Scripts/webkitpy/style/optparser_unittest.py:
          - Updated the ArgumentParser.parse() unit tests to include
            coverage for the new found_checkout parameter.

        * Scripts/webkitpy/style/unittests.py:
          - Added an import statement for main_unittest.

        * Scripts/webkitpy/style_references.py:
          - Renamed SimpleScm to WebKitCheckout.
          - Added a detect_checkout() function to allow returning None
            instead of a WebKitCheckout instance if no checkout is found.
          - Renamed checkout_root to root_path.

2010-03-27  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Eric Seidel.

        Print didHandleOnloadEventsForFrame in the callback of
        onload-event signal comming from frame loader

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewOnloadEvent):
        (createWebView): added connection to signal::onload-event and
        signal callback

2010-03-27  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Eric Seidel.

        Print didCommitLoadForFrame in the callback of signal::load-committed

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadCommitted):
        (createWebView): added connection to sinal::load-committed and
        signal callback

2010-03-27  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Eric Seidel.

        Print didStartProvisionalLoadForFrame in the callback of
        notify::load-status property change notification

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorCloseWindow):
        (webInspectorInspectWebView):
        (createWebView): added connection to notify::load-status and
        signal callback

2010-03-27  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In webkitpy/, deleted the /unittests.py files since test-webkitpy
        now auto-detects all *_unittest.py files.

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

        * Scripts/webkitpy/common/net/irc/unittests.py: Removed.
        * Scripts/webkitpy/common/system/unittests.py: Removed.
        * Scripts/webkitpy/common/thread/unittests.py: Removed.
        * Scripts/webkitpy/common/unittests.py: Removed.
        * Scripts/webkitpy/python24/unittests.py: Removed.
        * Scripts/webkitpy/style/unittests.py: Removed.
        * Scripts/webkitpy/tool/unittests.py: Removed.
        * Scripts/webkitpy/unittests.py: Removed.

2010-03-27  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Eric Seidel.

        Add a CR after printing didFinishDocumentLoadForFrame

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

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

2010-03-27  Chris Jerdonek  <cjerdonek@webkit.org>

        Rubber-stamped by Adam Barth.

        Fixed the name of a unit test file in webkitpy.

        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py: Copied from WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittests.py.
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittests.py: Removed.

2010-03-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        The test-webkitpy script now automatically detects all unit-test
        files in webkitpy/.  This lets us eliminate the need to have and
        maintain all of the unittests.py files.

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

        * Scripts/test-webkitpy:
          - Replaced the "from webkitpy.unittests import *" with a call
            to webkitpy.test.main.Tester().run_tests().

        * Scripts/webkitpy/test/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
          - Required file for the new webkitpy/test/ directory.

        * Scripts/webkitpy/test/main.py: Added.
          - Added a Tester class that contains the following methods:
            - _find_unittest_files() to detect all the unit-test files.
            - _modules_from_paths() to convert the paths to the unit-test
              files to fully-qualified module names.
            - run_tests() which calls the above two methods and then passes
              the module names to Python's unittest module.

2010-03-27  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Fraser.

        [Qt/Win] Add support to unix and windows NS plugin for executing scripts on setWindow.

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

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance): Add onSetWindow.
        (webkit_test_plugin_destroy_instance): Add onSetWindow.
        (webkit_test_plugin_set_window): Add onSetWindow.
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New): Add onSetWindow.
        (NPP_Destroy): Add onSetWindow.
        (NPP_SetWindow): Add onSetWindow.

2010-03-26  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
         when pluginsEnabled is false.

        Add support for LayoutTestController.WebKitPluginsEnabled

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

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (copyWebSettingKey):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2010-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add some basic IRC commands to sheriffbot
        https://bugs.webkit.org/show_bug.cgi?id=36684

        Adds support for sheriffbot to respond to a "hi" command and a
        "last-green-revision" command.  It's lame that we're rebuilding
        MultiCommandTool, but as discussed in person we'll intergrate the two
        once we see what the requirements are.

        * Scripts/webkitpy/tool/bot/irc_command.py: Added.
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Added.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/unittests.py:

2010-03-26  Adam Barth  <abarth@webkit.org>

        Unreviewed.  More errors in the IRC module.  I have no idea how to test
        ircbot.py, which is too bad.  Hopefully we've abstracted it away enough
        that we don't have to touch it very much after this patch.

        * Scripts/webkitpy/common/net/irc/ircbot.py:

2010-03-26  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Add a missing "_".

        * Scripts/webkitpy/common/net/irc/ircproxy.py:
        * Scripts/webkitpy/common/net/irc/ircproxy_unittest.py: Added.
        * Scripts/webkitpy/common/net/irc/unittests.py:

2010-03-26  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix a the commit queue after my recent change.

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

2010-03-26  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed fix.

        Fix the return value for port/base.diff_image (changed from 1/0 to
        True/False in bug 34826.

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

2010-03-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Change the Mac port of new-run-webkit-tests to look for a
        test_expectations.txt file in addition to the Skipped files, so we
        can track pixel failures.

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

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

2010-03-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Implement pixel tests (image diff) properly on the Mac port.

        This change introduces a new "ServerPocess" class that can be used
        to manage processes that the run-webkit-tests harness forks off and
        expects to stay up for longer than a single request/response session.
        Both DumpRenderTree and ImageDiff use this style of communication,
        although the current code forks off a new ImageDiff for each diff
        (We need to restructure other parts of the code to be able to do this
        safely in a multi-threaded environment).

        Also, now that the ServerProcess abstraction exists, we can probably
        clean up and simplify some of the thread management logic in
        test_shell_thread as well.

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

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/server_process.py:
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:

2010-03-26  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Eric Seidel.

        Print didFinishLoadForFrame outcome in DRT

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

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

2010-03-26  Eric Seidel  <eric@webkit.org>

        Unreviewed test fix.
        My change conflicted with one of Adam's causing test-webkitpy to fail.

        Move commit_message_for_this_commit from scm to checkout
        https://bugs.webkit.org/show_bug.cgi?id=36629

        * Scripts/webkitpy/common/checkout/api_unittest.py:
         - modified_changelogs is now on Checkout instead of scm.

2010-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Refactor IRCBot controller logic to allow for commands
        https://bugs.webkit.org/show_bug.cgi?id=36676

        We need to move the controller logic into the tool package so it can
        know about commands.  The changes to queueengine could go in a
        different patch, but we're going to need it anyway.

        * Scripts/webkitpy/common/config/irc.py: Added.
        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/common/net/irc/ircproxy.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot.py: Added.
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2010-03-26  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        Move the threading code into its own module.  (It has nothing to do with IRC.)

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/common/net/irc/ircproxy.py:
        * Scripts/webkitpy/common/net/irc/messagepump.py: Removed.
        * Scripts/webkitpy/common/net/irc/messagepump_unittest.py: Removed.
        * Scripts/webkitpy/common/net/irc/threadedmessagequeue.py: Removed.
        * Scripts/webkitpy/common/net/irc/threadedmessagequeue_unittest.py: Removed.
        * Scripts/webkitpy/common/net/irc/unittests.py:
        * Scripts/webkitpy/common/thread: Added.
        * Scripts/webkitpy/common/thread/__init__.py: Added.
        * Scripts/webkitpy/common/thread/messagepump.py: Copied from Scripts/webkitpy/common/net/irc/messagepump.py.
        * Scripts/webkitpy/common/thread/messagepump_unittest.py: Copied from Scripts/webkitpy/common/net/irc/messagepump_unittest.py.
        * Scripts/webkitpy/common/thread/threadedmessagequeue.py: Copied from Scripts/webkitpy/common/net/irc/threadedmessagequeue.py.
        * Scripts/webkitpy/common/thread/threadedmessagequeue_unittest.py: Copied from Scripts/webkitpy/common/net/irc/threadedmessagequeue_unittest.py.
        * Scripts/webkitpy/common/thread/unittests.py: Added.
        * Scripts/webkitpy/common/unittests.py:

2010-03-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move commit_message_for_this_commit from scm to checkout
        https://bugs.webkit.org/show_bug.cgi?id=36629

        Finally add some basic unit testing for Checkout.commit_message_for_this_commit

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

2010-03-26  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        [Qt] User Agent Switcher on QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=36451

        Patch by Diego Gonzalez <diego.gonzalez@openbossa.org> on 2010-03-26
        Reviewed by Simon Hausmann.

        Make possible to change the QtLauncher user agent via
        a predefined list.

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/QtLauncher.qrc: Added.
        * QtLauncher/main.cpp:
        (LauncherWindow::showUserAgentDialog):
        (LauncherWindow::createChrome):
        * QtLauncher/useragentlist.txt: Added.
        * QtLauncher/webpage.cpp:
        (WebPage::userAgentForUrl):
        * QtLauncher/webpage.h:
        (WebPage::setUserAgent):

2010-03-26  Victor Wang  <victorw@chromium.org>

        Reviewed by Adam Barth.

        Host layout test flakiness dashboard in TestResultServer appengine.

        Flakiness dashboard is a tool to monitor layout test status and
        help layout test regression diagnostics.

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

        * TestResultServer/handlers/dashboardhandler.py: Added.
         - New handler to handle dashboard request
        * TestResultServer/handlers/menu.py:
         - Add new dashboard links
        * TestResultServer/handlers/testfilehandler.py:
         - Request routes refactory
        * TestResultServer/index.yaml:
        * TestResultServer/main.py:
         - Add new dashboard request routes and refactor test result file rountes.
        * TestResultServer/model/dashboardfile.py: Added.
         - Model to access datastore for dashboard files
        * TestResultServer/model/testfile.py:
        * TestResultServer/stylesheets/dashboardfile.css: Added.
        * TestResultServer/templates/dashboardfilelist.html: Added.
        * TestResultServer/templates/showfilelist.html:

2010-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove some evil statics from CommitInfo
        https://bugs.webkit.org/show_bug.cgi?id=36637

        These methods should really be on checkout.  You can tell because they
        know about ChangeLogs and take an SCM as an argument.  :)

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2010-03-23  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Simon Hausmann.

        Add an option to QtLauncher to enable/disable a QGLWidget as Viewport
        of the QGraphicsView when the launcher is running on graphicsview mode.

        [Qt] QtLauncher needs an option to Enable/Disable a QGLWidget as Viewport
        https://bugs.webkit.org/show_bug.cgi?id=36270

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        (LauncherWindow::toggleQGLWidgetViewport):
        (LauncherWindow::createChrome):

2010-03-26  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [Chromium-Win] websocket_server.py failed to start
        https://bugs.webkit.org/show_bug.cgi?id=36586
        
        subproess.Popen() on Python 2.4/Windows with stdout,stdout, but no stdin will fail, because it uses return value of GetStdHandle(STD_INPUT_HANDLE), but DuplicateHandle requires integer, not the handle.
        We don't need stdin, so use devnull as stdin.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: open os.devnull for stdin

2010-03-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add TestNavigationController and TestWebWorker
        https://bugs.webkit.org/show_bug.cgi?id=36520

        Add LayoutTestController class, which is going to be used by
        DumpRenderTree Chromium port. These files are based on:
        - src/webkit/tools/test_shell/layout_test_controller.cc
        - src/webkit/tools/test_shell/layout_test_controller.h
        of Chromium rev.40492.

        * DumpRenderTree/chromium/LayoutTestController.cpp: Added.
        * DumpRenderTree/chromium/LayoutTestController.h: Added.

2010-03-25  Charlie Reis  <creis@chromium.org>

        Reviewed by Adam Barth.

        onbeforeunload not called at window close + frame or iframe focused
        https://bugs.webkit.org/show_bug.cgi?id=27481

        Adds a callShouldCloseOnWebView method to LayoutTestController,
        to allow automated testing for bug 27481.

        * DumpRenderTree/LayoutTestController.cpp:
        (callShouldCloseOnWebViewCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::callShouldCloseOnWebView):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::callShouldCloseOnWebView):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::callShouldCloseOnWebView):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::callShouldCloseOnWebView):

2010-03-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add webkit-patch lkgr for finding last known good revision
        https://bugs.webkit.org/show_bug.cgi?id=36626

        This is rather slow for now because the command
        has to compute this information from the buildbot.
        A better long-term solution would be to have a server
        somewhere store a pre-computed LKGR and then any
        script (like webkit-patch) could just fetch it.

        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/tool/commands/queries.py:

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

        Reviewed by Eric Seidel.

        Move modified_changelogs (and friends) from scm to checkout
        https://bugs.webkit.org/show_bug.cgi?id=36636

        These functions know about ChangeLogs, which is forbidden knowledge in
        scm.py.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/revertrevision.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

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

        Reviewed by Eric Seidel.

        Move apply_patch from scm to checkout
        https://bugs.webkit.org/show_bug.cgi?id=36635

        SCM shouldn't have any knowledge of WebKit scripts.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/applypatch.py:

2010-03-25  Eric Seidel  <eric@webkit.org>

        Unreviewed build fix to un-break webkit-patch land.
        Test-case coming in follow-up commit.

        Move commit_message_for_this_commit from scm to checkout
        https://bugs.webkit.org/show_bug.cgi?id=36629

        * Scripts/webkitpy/common/checkout/api.py: import scm.CommitMessage

2010-03-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7728903> Support color bitmap fonts

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added ColorBits.ttf
        and ColorBits-A.png.
        * DumpRenderTree/fonts/ColorBits-A.png: Copied from WebCore/inspector/front-end/Images/successGreenDot.png.
        * DumpRenderTree/fonts/ColorBits.ttf: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFonts): Activate ColorBits.ttf.

2010-03-25  Mark Rowe  <mrowe@apple.com>

        Remove a printf that was causing commit-log-editor to spew the name of the editor
        to the terminal many times during a commit.

        * Scripts/commit-log-editor:

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

        Reviewed by Eric Seidel.

        Move commit_message_for_this_commit from scm to checkout
        https://bugs.webkit.org/show_bug.cgi?id=36629

        This function requires knowledge of ChangeLogs, but scm shouldn't know
        about ChangeLogs.

        * Scripts/webkitpy/common/checkout/api.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
        * Scripts/webkitpy/tool/steps/commit.py:

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

        Reviewed by Eric Seidel.

        REGRESSION: webkit-patch land can't land "rubber-stamped" patches
        https://bugs.webkit.org/show_bug.cgi?id=36582

        Allow a "-" in rubber stamped.

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

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

        Unreviewed.  Fix some copyright lines to remove extraneous comma and
        python directive.

        * Scripts/webkitpy/tool/bot/patchcollection.py:
        * Scripts/webkitpy/tool/bot/patchcollection_unittest.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/comments.py:
        * Scripts/webkitpy/tool/grammar.py:
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler, Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=36631
        Allow the test plugin to run scripts in response to NPP_SetWindow calls
        
        Hook up the ability for the TestNetscapePlugIn to run JavaScript in
        response to NPP_SetWindow.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):

2010-03-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix.

        [Qt] Fix QtLauncher guards.

        * QtLauncher/main.cpp:
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):

2010-03-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Allow running tests with enabled developer extras and closed Web Inspector. Tests that have inspector-enabled/ in their path/url will have developer extras enabled.

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

        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldEnableDeveloperExtras):
        (runTest):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setDeveloperExtrasEnabled):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldEnableDeveloperExtras):
        (runTest):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setDeveloperExtrasEnabled):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::shouldEnableDeveloperExtras):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::setDeveloperExtrasEnabled):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldEnableDeveloperExtras):
        (runTest):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setDeveloperExtrasEnabled):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):

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

        Rubber stamped by Eric Seidel.

        Tweaks to sheriffbot to improve latency by keeping the working copy up
        to date even when there's no build break.  Also, officially move
        sheriffbot to #webkit.

        (Also teach ValidateReviewer to understand rubber stamps.)

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

2010-03-22  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Simon Hausmann.

        Not displaying FPS info on the terminal. On S60 and Maemo the
        Window title will be used and Status bar will used on desktop.

        [Qt] QtLauncher's FPS info should not be displayed on the terminal
        https://bugs.webkit.org/show_bug.cgi?id=36244

        * QtLauncher/main.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::showFPS):
        (LauncherWindow::updateFPS):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::setFrameRateMeasurementEnabled):
        (WebViewGraphicsBased::updateFrameRate):
        * QtLauncher/webview.h:
        (WebViewGraphicsBased::frameRateMeasurementEnabled):

2010-03-25  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Christiansen.

        Added missing frame flattening activation on
        fast/frames/flattening/frameset-flattening-grid.html;
        removed unnecessary CONSOLE MESSAGE from the expected file;
        reset the setFrameSetFlatteningEnabled for each test.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Moved deprecated_logging unit test import statement from
        webkitpy/unittests.py to webkitpy/common/system/unittests.py.

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

        This is part of the master bug to reorganize webkitpy.

        * Scripts/webkitpy/common/system/unittests.py:
        * Scripts/webkitpy/unittests.py:

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Moved webkit_logging.py to common/system/deprecated_logging.py
        inside webkitpy.

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

        This is part of the master bug to reorganize webkitpy.

        * Scripts/validate-committer-lists:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/buildbot.py:
        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/common/net/irc/ircproxy.py:
        * Scripts/webkitpy/common/net/networktransaction.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        * Scripts/webkitpy/common/system/deprecated_logging.py: Copied from WebKitTools/Scripts/webkitpy/webkit_logging.py.
        * Scripts/webkitpy/common/system/deprecated_logging_unittest.py: Copied from WebKitTools/Scripts/webkitpy/webkit_logging_unittest.py.
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/openbugs.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/tool/steps/applypatch.py:
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/update.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        * Scripts/webkitpy/unittests.py:
        * Scripts/webkitpy/webkit_logging.py: Removed.
        * Scripts/webkitpy/webkit_logging_unittest.py: Removed.

2010-03-25  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        commit-log-editor can call itself in an infinite loop
        https://bugs.webkit.org/show_bug.cgi?id=35291

        if $editor ends up being commit-log-editor, the script will exec itself
        in an infinite loop.

        To avoid this, we now check that the $editor variable is not
        commit-log-editor to avoid this case.

        * Scripts/commit-log-editor: Added an isCommitLogEditor method and
        reworked the $editor setting to add this check.

2010-03-25  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add a Toggle Frame Flattening option to QtLauncher.
        It will be enabled by default on Maemo5 and S60 platforms.

        [Qt] Add enable/disable Frame Flattening option to QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=36558

        * QtLauncher/main.cpp:
        (LauncherWindow::applyPrefs):
        (LauncherWindow::toggleFrameFlattening):
        (LauncherWindow::createChrome):

2010-03-25  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        svn-create-patch prints a warning for large patches
        https://bugs.webkit.org/show_bug.cgi?id=32582

        svn-create-patch prints a warning message for larger patches than 20k.

        * Scripts/svn-create-patch:

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

        Unreviewed.  Renamed early_warning_system.py to earlywarningsystem.py.
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/tool/commands/early_warning_system.py: Removed.
        * Scripts/webkitpy/tool/commands/early_warning_system_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py: Copied from Scripts/webkitpy/tool/commands/early_warning_system.py.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Copied from Scripts/webkitpy/tool/commands/early_warning_system_unittest.py.
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/unittests.py:

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In webkitpy, pushed the unit test import statements in
        webkitpy/unittests.py into appropriate unittests.py files in the
        new root-level packages beneath webkitpy.

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

        This is part of the master bug to reorganize webkitpy.

        * Scripts/webkitpy/common/system/unittests.py:
        * Scripts/webkitpy/common/unittests.py: Added.
        * Scripts/webkitpy/python24/unittests.py: Added.
        * Scripts/webkitpy/tool/unittests.py: Added.
        * Scripts/webkitpy/unittests.py:

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

        Unreviewed.  Move WebKitCheckout into the webkitpy.common.checkout
        package.
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/common/checkout/api.py: Copied from Scripts/webkitpy/webkitcheckout.py.
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/webkitcheckout.py: Removed.

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

        Unreviewed.  Move OutputCapture to webkitpy.common.system.
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/system/outputcapture.py: Copied from Scripts/webkitpy/outputcapture.py.
        * Scripts/webkitpy/outputcapture.py: Removed.
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittests.py:

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

        Unreviewed.  Move user.py to webkitpy.common.system.

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/common/system/user.py: Copied from Scripts/webkitpy/user.py.
        * Scripts/webkitpy/common/system/user_unittest.py: Copied from Scripts/webkitpy/user_unittest.py.
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/unittests.py:
        * Scripts/webkitpy/user.py: Removed.
        * Scripts/webkitpy/user_unittest.py: Removed.

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

        Unreviewed.  Move executive.py to webkitpy.common.system.
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/common/checkout/scm.py:
        * Scripts/webkitpy/common/checkout/scm_unittest.py:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/system/executive.py: Copied from Scripts/webkitpy/executive.py.
        * Scripts/webkitpy/common/system/executive_unittest.py: Copied from Scripts/webkitpy/executive_unittest.py.
        * Scripts/webkitpy/executive.py: Removed.
        * Scripts/webkitpy/executive_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/early_warning_system.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/unittests.py:
        * Scripts/webkitpy/webkit_logging_unittest.py:

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

        Unreviewed.  Move grammary.py into webkitpy.tool.
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/grammar.py: Removed.
        * Scripts/webkitpy/grammar_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/grammar.py: Copied from Scripts/webkitpy/grammar.py.
        * Scripts/webkitpy/tool/grammar_unittest.py: Copied from Scripts/webkitpy/grammar_unittest.py.
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/unittests.py:

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In webkitpy, moved init/ to common/system/.

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

        This is part of the master bug to reorganize webkitpy.

        * Scripts/webkitpy/common/system: Copied from WebKitTools/Scripts/webkitpy/init.
        * Scripts/webkitpy/common/system/logutils.py:
        * Scripts/webkitpy/common/system/logutils_unittest.py:
        * Scripts/webkitpy/init: Removed.
        * Scripts/webkitpy/init/__init__.py: Removed.
        * Scripts/webkitpy/init/logtesting.py: Removed.
        * Scripts/webkitpy/init/logutils.py: Removed.
        * Scripts/webkitpy/init/logutils_unittest.py: Removed.
        * Scripts/webkitpy/init/unittests.py: Removed.
        * Scripts/webkitpy/python24/versioning_unittest.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/unittests.py:

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

        Unreviewed.  Move stepsequence to webkitpy.tool.commands.
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/stepsequence.py: Removed.
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/stepsequence.py: Copied from Scripts/webkitpy/stepsequence.py.

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

        Unreviewed.  Create webkitpy.common.checkout as described in
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/changelogs.py: Removed.
        * Scripts/webkitpy/changelogs_unittest.py: Removed.
        * Scripts/webkitpy/commitinfo.py: Removed.
        * Scripts/webkitpy/commitinfo_unittest.py: Removed.
        * Scripts/webkitpy/common/checkout: Added.
        * Scripts/webkitpy/common/checkout/__init__.py: Copied from Scripts/webkitpy/common/__init__.py.
        * Scripts/webkitpy/common/checkout/changelog.py: Copied from Scripts/webkitpy/changelogs.py.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Copied from Scripts/webkitpy/changelogs_unittest.py.
        * Scripts/webkitpy/common/checkout/commitinfo.py: Copied from Scripts/webkitpy/commitinfo.py.
        * Scripts/webkitpy/common/checkout/commitinfo_unittest.py: Copied from Scripts/webkitpy/commitinfo_unittest.py.
        * Scripts/webkitpy/common/checkout/diff_parser.py: Copied from Scripts/webkitpy/diff_parser.py.
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py: Copied from Scripts/webkitpy/diff_parser_unittest.py.
        * Scripts/webkitpy/common/checkout/scm.py: Copied from Scripts/webkitpy/scm.py.
        * Scripts/webkitpy/common/checkout/scm_unittest.py: Copied from Scripts/webkitpy/scm_unittest.py.
        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/diff_parser.py: Removed.
        * Scripts/webkitpy/diff_parser_unittest.py: Removed.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/scm.py: Removed.
        * Scripts/webkitpy/scm_unittest.py: Removed.
        * Scripts/webkitpy/stepsequence.py:
        * Scripts/webkitpy/style_references.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/comments.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        * Scripts/webkitpy/unittests.py:
        * Scripts/webkitpy/webkitcheckout.py:

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In webkitpy, moved init/versioning.py to python24/.

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

        This is part of the master bug to reorganize webkitpy.

        * Scripts/test-webkitpy:
        * Scripts/webkit-patch:
        * Scripts/webkitpy/init/unittests.py:
        * Scripts/webkitpy/init/versioning.py: Removed.
        * Scripts/webkitpy/init/versioning_unittest.py: Removed.
        * Scripts/webkitpy/python24: Added.
        * Scripts/webkitpy/python24/__init__.py: Copied from WebKitTools/Scripts/webkitpy/tool/__init__.py.
        * Scripts/webkitpy/python24/versioning.py: Copied from WebKitTools/Scripts/webkitpy/init/versioning.py.
        * Scripts/webkitpy/python24/versioning_unittest.py: Copied from WebKitTools/Scripts/webkitpy/init/versioning_unittest.py.
        * Scripts/webkitpy/unittests.py:

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

        Unreviewed.

        Create webkitpy.common.net as described in
        https://bugs.webkit.org/show_bug.cgi?id=36093

        * Scripts/webkitpy/bugzilla.py: Removed.
        * Scripts/webkitpy/bugzilla_unittest.py: Removed.
        * Scripts/webkitpy/buildbot.py: Removed.
        * Scripts/webkitpy/buildbot_unittest.py: Removed.
        * Scripts/webkitpy/commitinfo.py:
        * Scripts/webkitpy/common/net: Added.
        * Scripts/webkitpy/common/net/__init__.py: Added.
        * Scripts/webkitpy/common/net/bugzilla.py: Copied from Scripts/webkitpy/bugzilla.py.
        * Scripts/webkitpy/common/net/bugzilla_unittest.py: Copied from Scripts/webkitpy/bugzilla_unittest.py.
        * Scripts/webkitpy/common/net/buildbot.py: Copied from Scripts/webkitpy/buildbot.py.
        * Scripts/webkitpy/common/net/buildbot_unittest.py: Copied from Scripts/webkitpy/buildbot_unittest.py.
        * Scripts/webkitpy/common/net/credentials.py: Copied from Scripts/webkitpy/credentials.py.
        * Scripts/webkitpy/common/net/credentials_unittest.py: Copied from Scripts/webkitpy/credentials_unittest.py.
        * Scripts/webkitpy/common/net/irc: Copied from Scripts/webkitpy/irc.
        * Scripts/webkitpy/common/net/irc/ircbot.py:
        * Scripts/webkitpy/common/net/irc/ircproxy.py:
        * Scripts/webkitpy/common/net/irc/messagepump_unittest.py:
        * Scripts/webkitpy/common/net/irc/threadedmessagequeue_unittest.py:
        * Scripts/webkitpy/common/net/irc/unittests.py:
        * Scripts/webkitpy/common/net/networktransaction.py: Copied from Scripts/webkitpy/networktransaction.py.
        * Scripts/webkitpy/common/net/networktransaction_unittest.py: Copied from Scripts/webkitpy/networktransaction_unittest.py.
        * Scripts/webkitpy/common/net/statusserver.py: Copied from Scripts/webkitpy/statusserver.py.
        * Scripts/webkitpy/credentials.py: Removed.
        * Scripts/webkitpy/credentials_unittest.py: Removed.
        * Scripts/webkitpy/irc: Removed.
        * Scripts/webkitpy/irc/__init__.py: Removed.
        * Scripts/webkitpy/irc/ircbot.py: Removed.
        * Scripts/webkitpy/irc/ircproxy.py: Removed.
        * Scripts/webkitpy/irc/messagepump.py: Removed.
        * Scripts/webkitpy/irc/messagepump_unittest.py: Removed.
        * Scripts/webkitpy/irc/threadedmessagequeue.py: Removed.
        * Scripts/webkitpy/irc/threadedmessagequeue_unittest.py: Removed.
        * Scripts/webkitpy/irc/unittests.py: Removed.
        * Scripts/webkitpy/networktransaction.py: Removed.
        * Scripts/webkitpy/networktransaction_unittest.py: Removed.
        * Scripts/webkitpy/scm_unittest.py:
        * Scripts/webkitpy/statusserver.py: Removed.
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/queries_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/upload.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:
        * Scripts/webkitpy/unittests.py:

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In webkitpy, renamed MockBugzillaTool to MockTool.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittests.py:

2010-03-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In Scripts/webkitpy, moved webkitport.py and committers.py into
        common/config/ (also creating common/config/).

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

        This is part of the master bug to reorganize webkitpy.

        * Scripts/validate-committer-lists:
        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/bugzilla_unittest.py:
        * Scripts/webkitpy/changelogs.py:
        * Scripts/webkitpy/commitinfo.py:
        * Scripts/webkitpy/commitinfo_unittest.py:
        * Scripts/webkitpy/committers.py: Removed.
        * Scripts/webkitpy/committers_unittest.py: Removed.
        * Scripts/webkitpy/common: Added.
        * Scripts/webkitpy/common/__init__.py: Copied from WebKitTools/Scripts/webkitpy/style/__init__.py.
        * Scripts/webkitpy/common/config: Added.
        * Scripts/webkitpy/common/config/__init__.py: Copied from WebKitTools/Scripts/webkitpy/style/__init__.py.
        * Scripts/webkitpy/common/config/committers.py: Copied from WebKitTools/Scripts/webkitpy/committers.py.
        * Scripts/webkitpy/common/config/committers_unittest.py: Copied from WebKitTools/Scripts/webkitpy/committers_unittest.py.
        * Scripts/webkitpy/common/config/ports.py: Copied from WebKitTools/Scripts/webkitpy/webkitport.py.
        * Scripts/webkitpy/common/config/ports_unittest.py: Copied from WebKitTools/Scripts/webkitpy/webkitport_unittest.py.
        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/tool/commands/early_warning_system.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/steps/abstractstep.py:
        * Scripts/webkitpy/unittests.py:
        * Scripts/webkitpy/webkitport.py: Removed.
        * Scripts/webkitpy/webkitport_unittest.py: Removed.

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

        Unreviewed.  Move mock_bugzillatool.py to tool/mocktool.py.

        * Scripts/webkitpy/mock_bugzillatool.py: Removed.
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py: Copied from Scripts/webkitpy/mock_bugzillatool.py.
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittests.py:

2010-03-24  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Move comments.py and multicommandtool.py to their new
        home.

        * Scripts/webkitpy/comments.py: Removed.
        * Scripts/webkitpy/multicommandtool.py: Removed.
        * Scripts/webkitpy/multicommandtool_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        * 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/upload.py:
        * Scripts/webkitpy/tool/comments.py: Copied from Scripts/webkitpy/comments.py.
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/multicommandtool.py: Copied from Scripts/webkitpy/multicommandtool.py.
        * Scripts/webkitpy/tool/multicommandtool_unittest.py: Copied from Scripts/webkitpy/multicommandtool_unittest.py.
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        * Scripts/webkitpy/tool/steps/closepatch.py:
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        * Scripts/webkitpy/unittests.py:

2010-03-24  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fixup one import statement I didn't find because the .pyc
        masked the error.

        * Scripts/webkitpy/stepsequence.py:

2010-03-24  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Move queueengine.py to its new home.

        * Scripts/webkitpy/queueengine.py: Removed.
        * Scripts/webkitpy/queueengine_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot/queueengine.py: Copied from Scripts/webkitpy/queueengine.py.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py: Copied from Scripts/webkitpy/queueengine_unittest.py.
        * Scripts/webkitpy/tool/commands/early_warning_system.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/unittests.py:

2010-03-24  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Move patchcollection.py to its new home.

        * Scripts/webkitpy/patchcollection.py: Removed.
        * Scripts/webkitpy/patchcollection_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot: Added.
        * Scripts/webkitpy/tool/bot/__init__.py: Added.
        * Scripts/webkitpy/tool/bot/patchcollection.py: Copied from WebKitTools/Scripts/webkitpy/patchcollection.py.
        * Scripts/webkitpy/tool/bot/patchcollection_unittest.py: Copied from WebKitTools/Scripts/webkitpy/patchcollection_unittest.py.
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/unittests.py:

2010-03-24  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In Scripts/webkitpy, moved steps_references.py and the steps
        folder into webkitpy/patch.

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

        * Scripts/webkitpy/steps: Removed.
        * Scripts/webkitpy/steps/__init__.py: Removed.
        * Scripts/webkitpy/steps/abstractstep.py: Removed.
        * Scripts/webkitpy/steps/applypatch.py: Removed.
        * Scripts/webkitpy/steps/applypatchwithlocalcommit.py: Removed.
        * Scripts/webkitpy/steps/build.py: Removed.
        * Scripts/webkitpy/steps/checkstyle.py: Removed.
        * Scripts/webkitpy/steps/cleanworkingdirectory.py: Removed.
        * Scripts/webkitpy/steps/cleanworkingdirectorywithlocalcommits.py: Removed.
        * Scripts/webkitpy/steps/closebug.py: Removed.
        * Scripts/webkitpy/steps/closebugforlanddiff.py: Removed.
        * Scripts/webkitpy/steps/closebugforlanddiff_unittest.py: Removed.
        * Scripts/webkitpy/steps/closepatch.py: Removed.
        * Scripts/webkitpy/steps/commit.py: Removed.
        * Scripts/webkitpy/steps/confirmdiff.py: Removed.
        * Scripts/webkitpy/steps/createbug.py: Removed.
        * Scripts/webkitpy/steps/editchangelog.py: Removed.
        * Scripts/webkitpy/steps/ensurebuildersaregreen.py: Removed.
        * Scripts/webkitpy/steps/ensurelocalcommitifneeded.py: Removed.
        * Scripts/webkitpy/steps/metastep.py: Removed.
        * Scripts/webkitpy/steps/obsoletepatches.py: Removed.
        * Scripts/webkitpy/steps/options.py: Removed.
        * Scripts/webkitpy/steps/postdiff.py: Removed.
        * Scripts/webkitpy/steps/postdiffforcommit.py: Removed.
        * Scripts/webkitpy/steps/postdiffforrevert.py: Removed.
        * Scripts/webkitpy/steps/preparechangelog.py: Removed.
        * Scripts/webkitpy/steps/preparechangelogforrevert.py: Removed.
        * Scripts/webkitpy/steps/promptforbugortitle.py: Removed.
        * Scripts/webkitpy/steps/reopenbugafterrollout.py: Removed.
        * Scripts/webkitpy/steps/revertrevision.py: Removed.
        * Scripts/webkitpy/steps/runtests.py: Removed.
        * Scripts/webkitpy/steps/steps_unittest.py: Removed.
        * Scripts/webkitpy/steps/update.py: Removed.
        * Scripts/webkitpy/steps/updatechangelogswithreview_unittests.py: Removed.
        * Scripts/webkitpy/steps/updatechangelogswithreviewer.py: Removed.
        * Scripts/webkitpy/steps/validatereviewer.py: Removed.
        * Scripts/webkitpy/steps_references.py: Removed.
        * Scripts/webkitpy/stepsequence.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/steps: Copied from WebKitTools/Scripts/webkitpy/steps.
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/applypatch.py:
        * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
        * Scripts/webkitpy/tool/steps/build.py:
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectory.py:
        * Scripts/webkitpy/tool/steps/cleanworkingdirectorywithlocalcommits.py:
        * Scripts/webkitpy/tool/steps/closebug.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/closepatch.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        * Scripts/webkitpy/tool/steps/createbug.py:
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        * Scripts/webkitpy/tool/steps/ensurebuildersaregreen.py:
        * Scripts/webkitpy/tool/steps/ensurelocalcommitifneeded.py:
        * Scripts/webkitpy/tool/steps/metastep.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        * Scripts/webkitpy/tool/steps/postdiff.py:
        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        * Scripts/webkitpy/tool/steps/revertrevision.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/update.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittests.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        * Scripts/webkitpy/tool/steps_references.py: Copied from WebKitTools/Scripts/webkitpy/steps_references.py.
        * Scripts/webkitpy/unittests.py:

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

        Unreviewed, build fix only.

        Abstract LayoutTestResults logic for easier reuse
        https://bugs.webkit.org/show_bug.cgi?id=36579

        * Scripts/webkitpy/buildbot_unittest.py: Add a missing import.

2010-03-24  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix a stray comma to test landing an patch without review.

        * Scripts/webkitpy/commitinfo.py:

2010-03-24  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        In Scripts/webkitpy, moved commands_references.py and the commands
        folder into webkitpy/patch.

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

        This is part of master bug 36093 to organize webkitpy.

        * Scripts/webkitpy/commands: Removed.
        * Scripts/webkitpy/commands/__init__.py: Removed.
        * Scripts/webkitpy/commands/abstractsequencedcommand.py: Removed.
        * Scripts/webkitpy/commands/commandtest.py: Removed.
        * Scripts/webkitpy/commands/download.py: Removed.
        * Scripts/webkitpy/commands/download_unittest.py: Removed.
        * Scripts/webkitpy/commands/early_warning_system.py: Removed.
        * Scripts/webkitpy/commands/early_warning_system_unittest.py: Removed.
        * Scripts/webkitpy/commands/openbugs.py: Removed.
        * Scripts/webkitpy/commands/openbugs_unittest.py: Removed.
        * Scripts/webkitpy/commands/queries.py: Removed.
        * Scripts/webkitpy/commands/queries_unittest.py: Removed.
        * Scripts/webkitpy/commands/queues.py: Removed.
        * Scripts/webkitpy/commands/queues_unittest.py: Removed.
        * Scripts/webkitpy/commands/queuestest.py: Removed.
        * Scripts/webkitpy/commands/sheriffbot.py: Removed.
        * Scripts/webkitpy/commands/sheriffbot_unittest.py: Removed.
        * Scripts/webkitpy/commands/upload.py: Removed.
        * Scripts/webkitpy/commands/upload_unittest.py: Removed.
        * Scripts/webkitpy/commands_references.py: Removed.
        * Scripts/webkitpy/tool/commands: Copied from WebKitTools/Scripts/webkitpy/commands.
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/early_warning_system.py:
        * Scripts/webkitpy/tool/commands/early_warning_system_unittest.py:
        * Scripts/webkitpy/tool/commands/openbugs_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/commands_references.py: Copied from WebKitTools/Scripts/webkitpy/commands_references.py.
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/unittests.py:

2010-03-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename webkitpy.patch to webkitpy.tool
        https://bugs.webkit.org/show_bug.cgi?id=36580

        This is in preparation for the great webkitpy naming cleanup.

        * Scripts/webkit-patch:
        * Scripts/webkitpy/patch: Removed.
        * Scripts/webkitpy/patch/__init__.py: Removed.
        * Scripts/webkitpy/patch/patcher.py: Removed.
        * Scripts/webkitpy/tool: Copied from WebKitTools/Scripts/webkitpy/patch.
        * Scripts/webkitpy/tool/main.py: Copied from WebKitTools/Scripts/webkitpy/patch/patcher.py.
        * Scripts/webkitpy/tool/patcher.py: Removed.

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

        Reviewed by Adam Barth.

        Abstract LayoutTestResults logic for easier reuse
        https://bugs.webkit.org/show_bug.cgi?id=36579

        * Scripts/webkitpy/buildbot.py:
         - Split out logic into new LayoutTestResults class.
        * Scripts/webkitpy/buildbot_unittest.py:
         - Rename the testing class to match.
        * Scripts/webkitpy/commands/queries.py:
         - Use the new LayoutTestResults class.

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

        Reviewed by Eric Seidel.

        Move Bugzilla.prompt_for_component to User.prompt_with_list for re-use
        https://bugs.webkit.org/show_bug.cgi?id=36577

        * Scripts/webkitpy/bugzilla.py:
         - Move prompt_for_component to User
        * Scripts/webkitpy/commands/queries.py:
         - Add a missing argument_names declaration.
        * Scripts/webkitpy/user.py:
         - Add prompt_with_list
         - Make staticmethods classmethods for easier mocking

2010-03-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36572> commit-log-editor: thinks mergeChangeLogs.pl is a ChangeLog file

        Reviewed by Eric Seidel.

        Fixes the following error when committing a file with
        "ChangeLog" in the name that isn't a ChangeLog (like
        mergeChangeLogs.pl from r56471 and r56472):

            $ git commit .
            Can't open WebKitTools/Scripts/webkitperl/VCSUtils_unittest/mergeChangeLog at commit-log-editor line 132.
            error: There was a problem with the editor 'commit-log-editor'.
            Please supply the message using either -m or -F option.

        * Scripts/commit-log-editor: Added '$' to anchor "ChangeLog" to
        the end of the file name when searching for ChangeLog files in a
        commit.

2010-03-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36570> resolve-ChangeLogs: fall back to git-merge-file if ChangeLog can't be merged

        Reviewed by Eric Seidel.

        * Scripts/resolve-ChangeLogs: Switched to exec git-merge-file if
        the merge attempt fails.

2010-03-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        webkit-patch or pre-commit hook should validate reviewer lines before committing
        https://bugs.webkit.org/show_bug.cgi?id=26927

        Validate that patches have valid reivewers listed in their ChangeLogs
        before landing.  For patches without reviewers can be landed if their
        ChangeLogs state that they are unreviewed.

        * Scripts/webkitpy/changelogs.py:
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commitinfo.py:
        * Scripts/webkitpy/commitinfo_unittest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/steps/__init__.py:
        * Scripts/webkitpy/steps/validatereviewer.py: Added.

2010-03-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by David Levin.

        Undefined names reported by pyflakes in python scripts
        https://bugs.webkit.org/show_bug.cgi?id=36403

        Attempt to use names that exist or can exist in the lexical
        scope instead of not being available at all.

        * Scripts/webkitpy/changelogs.py: Use self._content.
        * Scripts/webkitpy/layout_tests/port/base.py: Use os.stat
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.py: Use self._port
        * Scripts/webkitpy/style/processors/cpp_unittest.py: Use expected_message_re

2010-03-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36560> resolve-ChangeLogs: git-rebase fails when resolve-ChangeLogs can't merge

        Reviewed by Eric Seidel.

        When resolve-ChangeLogs fails to merge a patch while running as
        a git merge driver, it deletes the original file, which causes
        an internal failure and stops git mid-merge:

            fatal: Failed to execute internal merge

        The fix is to use the --force switch with patch so that it will
        always attempt to apply the patch.  (The change in
        mergeChangeLogs() for the previous commit also fixed this, but
        adding --force also prevents any potential user interaction that
        patch may want to display.)

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs): Added --force switch to patch command.  Also
        changed to use the exit status from the patch command to
        determine the return value for this method.
        * Scripts/webkitperl/VCSUtils_unittest/mergeChangeLogs.pl: Added
        test to cover this bug.

2010-03-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36560> resolve-ChangeLogs: move mergeChanges() into VCSUtils package

        Reviewed by Eric Seidel.

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs): Copied from mergeChanges() in
        resolve-ChangeLogs and renamed.  Added method documentation.
        Fixed bug found by new tests where the original file to be
        patched was deleted when cleaning up after a traditinal rejected
        patch failed to apply.
        * Scripts/resolve-ChangeLogs: Switched to using
        mergeChangeLogs().
        (mergeChanges): Moved to VCSUtils.pm and renamed to
        mergeChangeLogs().
        * Scripts/webkitperl/VCSUtils_unittest/mergeChangeLogs.pl: Added.

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

        Reviewed by Adam Barth.

        Add support for qt's unassigned list to webkit-patch assign-to-committer
        https://bugs.webkit.org/show_bug.cgi?id=36559

        * Scripts/webkitpy/bugzilla.py:
         - Move Bugzilla.unassigned_email into Bug and make it a set.
        * Scripts/webkitpy/bugzilla_unittest.py:
         - Test the new Bug.is_unassigned method
        * Scripts/webkitpy/commands/upload.py:
         - Use the new Bug.is_unassigned method instead of an explicit ==
        * Scripts/webkitpy/mock_bugzillatool.py:
         - Bugzilla.unassigned_email no longer needs mocking

2010-03-24  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Rename QWebSettings::XSSAuditorEnabled to XSSAuditingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=36522

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setXSSAuditorEnabled): Use the new name.

2010-03-24  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Added to check-webkit-style support for a --debug flag.

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

        The --debug flag adjusts the logging level to DEBUG and
        includes the logger name and level in each log message.

        * Scripts/check-webkit-style:
          - Changed the code to check for the --debug flag and pass
            the result to the configure_logging() method.
        * Scripts/webkitpy/style/checker.py:
          - Added an is_debug parameter to configure_logging().
          - Refactored configure_logging() by adding calls to
            the following two methods: _create_log_handlers() and
            _create_debug_log_handlers().
        * Scripts/webkitpy/style/checker_unittest.py:
          - Added unit tests for configure_logging() with is_debug True
            by splitting the ConfigureLoggingTest class into
            ConfigureLoggingTest and ConfigureLoggingTestBase, and
            adding ConfigureLoggingDebugTest.
        * Scripts/webkitpy/style/optparser.py:
          - Updated the usage string.
          - Added an is_debug data attribute to the CommandOptionValues
            class.
          - Added support for the --debug flag to the ArgumentParser.parse()
            method.
          - Also added extra error information to the parse() method in
            the case of an invalid flag.
        * Scripts/webkitpy/style/optparser_unittest.py:
          - Updated the unit tests as necessary.
          - Also fixed an issue with the CommandOptionValuesTest.test_eq()
            unit test.

2010-03-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add TestNavigationController and TestWebWorker
        https://bugs.webkit.org/show_bug.cgi?id=36489

        Add TestNavigationController and TestWebWorker classes, which are
        going to be used by DumpRenderTree Chromium port. These files are
        based on:
        - src/webkit/tools/test_shell/test_navigation_controller.{cc,h}
        - src/webkit/tools/test_shell/test_web_worker.h
        of Chromium rev.40492.

        TestNavigationController has non-style changes.
        - Change ContentState type: binary string -> WebHistoryItem
        - Remove TestShell dependency by introducing NavigationHost interface.

        * DumpRenderTree/chromium/TestNavigationController.cpp: Added.
        * DumpRenderTree/chromium/TestNavigationController.h: Added.
        * DumpRenderTree/chromium/TestWebWorker.h: Added.

2010-03-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add support for revision -> build lookup in buildbot.py and layout test result parsing
        https://bugs.webkit.org/show_bug.cgi?id=36474

        * Scripts/webkitpy/bugzilla_unittest.py: Added a FIXME about sharing code.
        * Scripts/webkitpy/buildbot.py: 
         - Add support for looking up builds by revision number.
         - Add support for fetching and parsing results.html files from buildbot.
         - build_for_revision has an allow_failed_lookups option to work around the fact that
           our buildbot's xmlrpc calls return failure on old revision numbers.
         - Add parsing support for twisted directory listings.
        * Scripts/webkitpy/buildbot_unittest.py:
         - Unit test all the new code.
        * Scripts/webkitpy/commands/queries.py:
         - Add a new results-for command which prints all the results for a given revision (very slow due to slow revision lookup)

2010-03-23  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

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

        Detect if the Windows Platform SDK is missing when building with
        Visual C++ Express Edition and inform the user to download it.

        * Scripts/webkitdirs.pm:

2010-03-23  Darin Adler  <darin@apple.com>

        Tell Subversion about more directories that expect to have .pyc files.

        * Scripts/webkitpy: Modified property svn:ignore.
        * Scripts/webkitpy/irc: Added property svn:ignore.

2010-03-23  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

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

        Import the GNU readline interface to modify the behavior
        of raw_input so as to provide line editing support. In
        particular this will prevent "delete" characters from
        appearing in the returned value for function raw_input.

        * Scripts/webkitpy/user.py:

2010-03-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.4
        https://bugs.webkit.org/show_bug.cgi?id=36389

        * DumpRenderTree/qt/main.cpp:
        (main):
        * QtLauncher/mainwindow.cpp:
        (MainWindow::MainWindow):

2010-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Barth.

        Make build_webkit_command() pass MAKEFLAGS environment variable to make.
        https://bugs.webkit.org/show_bug.cgi?id=36440

        * Scripts/webkitpy/webkitport.py:
        * Scripts/webkitpy/webkitport_unittest.py:

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

        Reviewed by Dimitri Glazkov.

        Change baseline_path() to point to the upstream locations for the
        Chromium ports. Also change the reabselining scripts to use the
        correct functions to get the baseline directories, and fix the
        script's sys.path to pull in simplejson correctly.

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

        * Scripts/rebaseline-chromium-webkit-tests:
          - fix sys.path to pick up simplejson properly
        * Scripts/webkitpy/layout_tests/port/chromium.py:
          - change baseline_path() to use webkit_baseline_path()
          - error out correctly if we can't find the chromium base dir
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
          - call baseline_path(), not chromium_baseline_path()

2010-03-22  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Refactored the cpu_count() code in executive.py.

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

        * Scripts/webkitpy/executive.py:
          - Moved the import of the multiprocessing module to the top
            of the file rather than importing from within a function.

2010-03-22 Antonio Gomes <tonikitoo@webkit.org>

        Unreviewed.

        Rolling out r56183: http://trac.webkit.org/changeset/56183

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

        Need to roll out because this patch will be re-worked by the author
        and other reviewers agreed on it.

2010-03-22  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Created a function for getting a module-specific logging.logger
        based on the __file__ value of the module.

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

        This function allows us to get the module-specific logger for
        a module without having to hard-code the fully-qualified name
        of the module in the module itself.  The code can be the same
        in every case: "_log = logutils.get_logger(__file__)".

        * Scripts/webkitpy/init/logutils.py: Added.
          - Added a module with a get_logger() function to return
            a module-specific logger based on the module's __file__
            variable.

        * Scripts/webkitpy/init/logutils_unittest.py: Added.
          - Added unit tests for logutils.py.

        * Scripts/webkitpy/init/unittests.py:
          - Added logutils_unittest to the list of imports.

2010-03-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] REGRESSION (r56209): fast/media/print-restores-previous-mediatype.htm crashes
        https://bugs.webkit.org/show_bug.cgi?id=36386

        Fix the regression by implementing a null printer for Qt DRT.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::NullPrinter::NullPaintEngine::begin):
        (WebCore::NullPrinter::NullPaintEngine::end):
        (WebCore::NullPrinter::NullPaintEngine::type):
        (WebCore::NullPrinter::NullPaintEngine::drawPixmap):
        (WebCore::NullPrinter::NullPaintEngine::updateState):
        (WebCore::NullPrinter::paintEngine):
        (WebCore::DumpRenderTree::dryRunPrint):

2010-03-20  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] eventSender.zoomPageOut() bug?
        https://bugs.webkit.org/show_bug.cgi?id=30575

        Make zoomPage{In/Out}Callback respect the 1.2f zoom factor that DRT should be using.

        * DumpRenderTree/gtk/EventSender.cpp:
        (zoomIn): Added.
        (zoomOut): Added.
        (textZoomInCallback): Use zoomIn helper function.
        (textZoomOutCallback): Use zoomOut helper function.
        (zoomPageInCallback): Use zoomIn helper function, which respects zoom factor.
        (zoomPageOutCallback): Use zoomOut helper function, which respects zoom factor.

2010-03-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after recent database API change.

        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2010-03-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Renamed UnitTestLogStream to TestLogStream in webkitpy.

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

        TestLogStream is more concise and more consistent with the name of
        the module (logtesting rather than logunittesting) and its main
        class (LogTesting rather than LogUnitTesting).

        * Scripts/webkitpy/init/logtesting.py:
          - Renamings.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Renamings.

        * Scripts/webkitpy/style_references.py:
          - Renamings.

2010-03-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for new method in LayoutTestController.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setSpatialNavigationEnabled):
        * wx/build/settings.py:

2010-03-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, tool fix.

        Remove vestiges of downstream directory names to unbreak rebaselining tool.

        * Scripts/webkitpy/layout_tests/port/chromium.py: Changed paths to use WebKit repo.

2010-03-20  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Re-enable the downstream test_expectations overrides file that was
        disabled in bug 36396 / r56287.

        https://bugs.chromium.org/show_bug.cgi?id=36401

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

2010-03-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Disable the downstream override expectations temporarily to allow
        us to test that we've upstreamed everything correctly. Also, stop
        looking at the downstream baselines at all (now you will only be
        able to update baselines upstream). In theory this should work, but
        if we need to we can always add the downstream dirs back in.

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

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:

2010-03-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        fix typo in chromium test expectations overrides routine
        https://bugs.webkit.org/show_bug.cgi?id=36397

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

2010-03-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Flip the Chromium ports to look first for the test expectations
        in LayoutTests/platform/chromium and only afterwards look in the
        Chromium repo downstream for overrides.

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

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

2010-03-19  James Hawkins  <jhawkins@chromium.org>

        Unreviewed.

        Add myself to the committers list.

        * Scripts/webkitpy/committers.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix SheriffBot exception lock when we can't retrieve the first build
        from buildbot.  (I'll ask Eric to review this change after the fact,
        but he's at lunch and I want to get the bot unlocked.)

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

2010-03-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36380
        websocket/tests/frame-lengths.html times out on Tiger bot

        https://bugs.webkit.org/show_bug.cgi?id=35041
        websocket/tests/frame-lengths.html / websocket/tests/simple-stress.html fail on Windows bot

        Double the timeout (from 15 seconds to 30 seconds). We can increase it more, if necessary -
        sampling the DRT process on Mac OS X takes much longer anyway, so it's better to avoid
        timing out than to detect it early.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setWaitToDump):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::waitUntilDone):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        * Scripts/run-webkit-tests:

2010-03-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        Buildfix for Qt v4.5.

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::applyZoom):

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Operational tweaks to SheriffBot
        https://bugs.webkit.org/show_bug.cgi?id=36385

        These changes aren't pretty, but they're helpful to make SheriffBot
        work operationally.  I plan to iterate in these areas, but I wanted to
        get this patch landed so I could be running the bot against TOT.

        * Scripts/webkitpy/commands/sheriffbot.py:
        * Scripts/webkitpy/irc/ircbot.py:
        * Scripts/webkitpy/thirdparty/autoinstalled/__init__.py:

2010-03-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Help sheriff-bot avoid warning about flaky tests (and add more unit testing)
        https://bugs.webkit.org/show_bug.cgi?id=36354

        * Scripts/webkitpy/buildbot.py:
         - Make Build creation easier to Mock and test
        * Scripts/webkitpy/buildbot_unittest.py:
         - Test finding green to red transitions and suspect revisions
        * Scripts/webkitpy/commands/queries.py:
         - Make what-broke note when builders have only failed once.

2010-03-19  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix the rebaselining tool, which was broken by r36324 when I
        added the concept of overridding expectations.

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

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

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Misc bug fixes to make the SheriffBot actually work
        https://bugs.webkit.org/show_bug.cgi?id=36355

        With these changes, I can actually run the sheriff-bot from start to
        finish.

        * Scripts/webkitpy/irc/ircproxy.py:
        * Scripts/webkitpy/patch/patcher.py:
        * Scripts/webkitpy/statusserver.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Actually import the sheriff-bot command so we can run it.  Also, move
        the bot to #webkit-test so it doesn't cause a ruckus while we test it.

        * Scripts/webkitpy/patch/patcher.py:
        * Scripts/webkitpy/irc/ircbot.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Second cut at SheriffBot
        https://bugs.webkit.org/show_bug.cgi?id=36353

        This patch should contain a complete SheriffBot that's capable of
        saying reasonable things on IRC.  I had to refactor the use of
        CommitInfo to make the SheriffBot testable, but I did the minimum
        necessary.  We should grow webkitcheckout over time to contain the
        knowledge of ChangeLogs from scm.

        * Scripts/webkitpy/commands/sheriffbot.py:
        * Scripts/webkitpy/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/patch/patcher.py:
        * Scripts/webkitpy/webkitcheckout.py: Added.

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix Hyatt's IRC nickname.

        * Scripts/webkitpy/committers.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Add IRC nicknames for the non-reviewer committers.

        * Scripts/webkitpy/committers.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        More reviewer IRC nicknames.

        * Scripts/webkitpy/committers.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Add a bunch of IRC nicknames for reviewers.

        * Scripts/webkitpy/committers.py:

2010-03-19  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Oliver Hunt.

        Added USE_SYSTEM_MALLOC flag to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=21272

        Add system-alloc flag to build-webkit. It makes easy to switch
        between system allocator and TCmalloc.

        * Scripts/build-webkit:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.

        Of course, I caused a regression in the file that isn't tested.  :(

        * Scripts/webkitpy/statusserver.py:

2010-03-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic "who-broke-it" command and revision -> broken builder association code
        https://bugs.webkit.org/show_bug.cgi?id=36352

        The "what-broke" command prints builders and what revisions we suspect
        broke them.  who-broke-it prints revisions and what builders we suspect
        they broke.  The sheriff-bot needs this revision to broken builder mapping
        so this change adds it!

        * Scripts/webkitpy/buildbot.py:
        * Scripts/webkitpy/commands/queries.py:

2010-03-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Simplify BuildBot core builder code for easier re-use
        https://bugs.webkit.org/show_bug.cgi?id=36350

        I simply couldn't see anything through all this Yak-hair.

        * Scripts/webkitpy/buildbot.py:
        * Scripts/webkitpy/commands/queries.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        committers.py should know IRC nicknames
        https://bugs.webkit.org/show_bug.cgi?id=36349

        I'll add the actual nicknames in another patch.

        * Scripts/webkitpy/committers.py:
        * Scripts/webkitpy/committers_unittest.py:

2010-03-18  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Simon Hausmann.

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

        QtLauncher runs as a GuiClient by default in Qt Embedded which will
        make it try to connect to an existing GuiServer. This patch makes it
        run like a stand-alone app.

        * QtLauncher/main.cpp:
        (LauncherApplication::LauncherApplication):

2010-03-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move find_green_to_red_transition out of "what-broke" onto Builder for easier re-use
        https://bugs.webkit.org/show_bug.cgi?id=36345

        * Scripts/webkitpy/buildbot.py:
        * Scripts/webkitpy/commands/queries.py:

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Barth.

        Actually pass the IRC password to the IRC object
        https://bugs.webkit.org/show_bug.cgi?id=36346

        I wanted to do this before, but both patches were in flight.  This
        patch finally closes the loop and makes the IRCProxy system complete.

        * Scripts/webkitpy/patch/patcher.py:

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

        Reviewed by Eric Seidel.

        Add a StatusServer front end to the SVNRevision table on QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=36344

        No test because Browser was too hard to mock.  :(  I couldn't figure
        out how to make Mock be a dictionary as well as an object.

        * Scripts/webkitpy/statusserver.py:

2010-03-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out CommitInfo class and add unit tests
        https://bugs.webkit.org/show_bug.cgi?id=36343

        Move more logic out of "what-broke" into a shared CommitInfo
        class so that it can be used by other commands and unit tested.

        * Scripts/webkitpy/commands/queries.py:
        * Scripts/webkitpy/commitinfo.py: Added.
        * Scripts/webkitpy/commitinfo_unittest.py: Added.
        * Scripts/webkitpy/unittests.py:

2010-03-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix LayoutTests/http/tests/appcache/max-size.html
        https://bugs.webkit.org/show_bug.cgi?id=36207

        Implement setAppCacheMaximumSize() for Qt.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAppCacheMaximumSize):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

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

        Reviewed by Eric Seidel.

        QueueStatusServer should be able to log broken bots
        https://bugs.webkit.org/show_bug.cgi?id=36341

        We need to add a new table to the QueueStatusServer to store persistent
        information for the SheriffBot.  The new table will keep track of which
        bots each SVN revision broke.

        * QueueStatusServer/handlers/__init__.py:
        * QueueStatusServer/handlers/svnrevision.py: Added.
        * QueueStatusServer/handlers/updatebase.py: Added.
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/handlers/updatesvnrevision.py: Added.
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/__init__.py:
        * QueueStatusServer/model/svnrevision.py: Added.
        * QueueStatusServer/templates/updatesvnrevision.html: Added.

2010-03-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Darin Adler.

        Add a new method to the Qt LayoutTestController for
        changing media type and make the DRT support dry-run printing.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::dryRunPrint):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setMediaType):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-03-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add upstream LayoutTests/platform/chromium* directories to the
        baseline search path for new-run-webkit-tests in preparation for
        upstreaming all of the Chromium baselines. Note that this does
        not actually create the directories themselves, but that's okay.

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

        * 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-03-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=36327
        Test that a plug-in can override Node methods of its element

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (normalizeOverride):
        (pluginInvoke):
        Override "normalize", and call back to let a test know that the plug-in was called.

2010-03-17  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add the concept of an "overrides" file for expectations so that we
        can store test_expectations both upstream and downstream for a port
        that runs both in webkit.org and in a separate repository (like
        Chromium). Also add some unit tests for the expectations module.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations_test.py: Added.
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-03-18  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add an overlay QGraphicsTextItem to QtLauncher so we can display FPS info
        on the launcher and not on the terminal anymore.

        [Qt] QtLauncher's FPS info should be displayed on an overlay text item
        https://bugs.webkit.org/show_bug.cgi?id=36244

        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::setFrameRateMeasurementEnabled):
        (WebViewGraphicsBased::updateFrameRate):
        * QtLauncher/webview.h:

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

        Reviewed by Eric Seidel.

        First cut at SheriffBot
        https://bugs.webkit.org/show_bug.cgi?id=36253

        This patch contains a first attempt at writing a sheriff bot.
        Currently, we're missing the logic that actually finds the SVN revision
        numbers to complain about, but once we have that, we'll have the rest
        of the infrustructure to ping IRC and to file bugs.

        There's a lot to fill in for the SheriffBot, but this patch give us the
        framework in which to do it.

        This patch required a bit of refactoring of AbstractQueue because
        SheriffBot is the first bot that doesn't process patches (it processes
        SVN revisions).  Accordingly, I've factored out AbstractPatchQueue to
        hold the parts of AbstractQueue that are specific to dealing with
        patches.  Some of the choices here might not be obvious yet, but we can
        tweak them as our needs become clearer.

        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/commands/queues_unittest.py:
        * Scripts/webkitpy/commands/sheriffbot.py: Added.
        * Scripts/webkitpy/commands/sheriffbot_unittest.py: Added.
        * Scripts/webkitpy/mock_bugzillatool.py:
            Added a MockIRC object to the mock tool.
        * Scripts/webkitpy/multicommandtool.py:
            Added a finalize method so the tool can disconnect from IRC
            cleanly instead of just droping the socket.
        * Scripts/webkitpy/multicommandtool_unittest.py:
        * Scripts/webkitpy/patch/patcher.py:
            Added support for talking to IRC.
        * Scripts/webkitpy/unittests.py:
            We should add a commands/unittests.py file at some point to make
            the commands module more self-contained.

2010-03-18  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36102
        [Qt] Scaling control API for tiled backing store
        
        Add animated smooth zooming to Qt launcher when in tiled mode.

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::zoomAnimationFinished):
        (LauncherWindow::applyZoom):
        (LauncherWindow::zoomIn):
        (LauncherWindow::zoomOut):
        * QtLauncher/webview.h:
        (WebViewGraphicsBased::graphicsWebView):

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

        Reviewed by Eric Seidel.

        Support using IRC accounts with a password
        https://bugs.webkit.org/show_bug.cgi?id=36287

        Add a global option to specify an IRC password so we can use the
        sheriffbot account (which needs a password).

        * Scripts/webkitpy/irc/ircbot.py:
        * Scripts/webkitpy/irc/ircproxy.py:
        * Scripts/webkitpy/patch/patcher.py:

2010-03-18  Eric Seidel  <eric@webkit.org>

        Just fixing missing parenthesis typo, no review.

        * Scripts/webkitpy/commands/queries.py: '%' has higher precedence than 'or', use parentheses.

2010-03-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben and Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=36210
        plugins/resize-from-plugin.html fails on some platforms

        Turns out that most platforms don't use "cross-platform" main.cpp. Copied code added for
        the test to their versions of the file.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_set_window):
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_SetWindow):

2010-03-18  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add support to run-launcher to open the EFL example browser.
        http://webkit.org/b/36181

        * Scripts/webkitdirs.pm:
        * Scripts/run-launcher:

2010-03-18  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Failing tests http/tests/misc/image-blocked-src-change.html
        & http/tests/misc/image-blocked-src-no-change.html
        https://bugs.webkit.org/show_bug.cgi?id=36227

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewConsoleMessage): print only the file name instead of the
        whole URI when printing messages with local URI's

2010-03-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach what-broke how to look up reviewer and author Committer objects by name
        https://bugs.webkit.org/show_bug.cgi?id=36264

        * Scripts/webkitpy/commands/queries.py:
         - Add committer_by_name lookups for both reviewer and author
         - Improve printing in the cases where lookups fail.
        * Scripts/webkitpy/committers.py:
         - Add committer_by_name
        * Scripts/webkitpy/committers_unittest.py:
         - Test committer_by_name

2010-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        create-rollout should actually fill out the description
        https://bugs.webkit.org/show_bug.cgi?id=36261

        * Scripts/webkitpy/commands/download.py:
            The % operator was applied to the wrong string.
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:
            Add support for seeing what we actually do with create_bug.

2010-03-17  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Accelerated Compositing is now default on QtWebKit so the option
        in QtLauncher must be true as default.

        [Qt] QtLauncher's Accelerated Compositing option must be true as default
        https://bugs.webkit.org/show_bug.cgi?id=36234

        * QtLauncher/main.cpp:
        (LauncherWindow::applyPrefs):
        (LauncherWindow::toggleAcceleratedCompositing):
        (LauncherApplication::handleUserOptions):

2010-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Commit queue should ignore (probably red) builders when landing rollouts
        https://bugs.webkit.org/show_bug.cgi?id=36169

        When landing a rollout, the builders are probably red, so we need to
        ignore them in the subprocess too.  Also, we might as well update the
        working copy because we haven't validated anything about the current
        revision prior to trying to land.

        This change is testable, but it requires changing the mock executive to
        log its arguments.  That will generate a lot of expectation changes, so
        I'd like to do that in a separate patch.

        * Scripts/webkitpy/commands/queues.py:

2010-03-17  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Laszlo Gombos.

        https://bugs.webkit.org/show_bug.cgi?id=36139
        [Qt] Clean up cache each time DumpRenderTree starts. This behavior 
        matches other platforms, such as mac and gtk.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2010-03-17  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Turns out this needs to be a string.

        * Scripts/webkitpy/bugzilla.py:

2010-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add more infrastructure for sheriff-bot, including making what-broke more awesome
        https://bugs.webkit.org/show_bug.cgi?id=36254

        * Scripts/webkitpy/bugzilla.py:
         - Made the various URL methods return None when passed None.
        * Scripts/webkitpy/bugzilla_unittest.py:
         - Test that the url methods work as expected.
        * Scripts/webkitpy/buildbot.py:
         - Add a static Build.build_url so that its possible to generate a build url without a Build object.
         - Give users a URL in _fetch_xmlrpc_build_dictionary error message.
        * Scripts/webkitpy/changelogs.py:
         - Add a new ChangeLogEntry class to encapsulate entry-parsing logic.
         - Add is_path_to_changelog to greatly simplify SCM.modified_changelogs code.
         - Make ChangeLog.parse_latest_entry_from_file a public method.
        * Scripts/webkitpy/changelogs_unittest.py:
         - Add tests for new ChangeLog entry parsing.
        * Scripts/webkitpy/commands/queries.py:
         - Make "what-broke" not print "ok" builders, only failing ones.
         - Print much more information on failing builders, including links and authorship/reviewer information.
        * Scripts/webkitpy/commands/queues_unittest.py:
         - Use a fake_checkout path since fixing the cwd (as part of fixing scm_unittests.py) was breaking tests.
        * Scripts/webkitpy/mock_bugzillatool.py:
         - Move MockSCM away from using os.getcwd() as that was fragile (and wrong).
        * Scripts/webkitpy/patch/patcher.py:
         - Remove code which was broken now that this file has moved.
         - Code was also redundant now that SCM.find_checkout_root() exists.
        * Scripts/webkitpy/scm.py:
         - Greatly simplify modified_changelogs now that I understand list comprehensions.
         - Expect ChangeLogEntry objects instead of raw strings.
         - Add changed_files_for_revision, committer_email_for_revision and contents_at_revision
         - Add commit_with_message argument to all sites since someone half-added it before. :(
         - Get rid of copy/paste code using _status_regexp()
        * Scripts/webkitpy/scm_unittest.py:
         - Fix these tests!
         - Add new tests for new scm code.
         - Fix spelling of "awsome" to "awesome".

2010-03-17  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by David Levin.

        Add myself to the list of reviewers.

        * Scripts/webkitpy/committers.py:

2010-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Change post-rollout to create-rollout and have it make a new bug
        instead of posting the rollout to the old bug.
        https://bugs.webkit.org/show_bug.cgi?id=36250

        The new bug blocks the old bug instead of adding more complexity to the
        old bug.  One tricky question is whether to create the bug if we're
        unable to create a rollout patch.  In this patch, we do create the bug,
        but we might revist this question in the future.

        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/steps/createbug.py:

2010-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a way for the bots to send messages to IRC
        https://bugs.webkit.org/show_bug.cgi?id=36235

        We'll use these classes to notify #webkit about bad SVN revisions.
        This patch just has some skeleton code for us to play with.

        * Scripts/webkitpy/irc/__init__.py: Added.
        * Scripts/webkitpy/irc/ircbot.py: Added.
            A bot that knows how to talk to IRC.
        * Scripts/webkitpy/irc/ircproxy.py: Added.
            We need to run the bot on its own thread because the irclib needs
            its own mainloop.  This class provides an abstraction of the
            threading.
        * Scripts/webkitpy/irc/messagepump.py: Added.
        * Scripts/webkitpy/irc/messagepump_unittest.py: Added.
        * Scripts/webkitpy/irc/threadedmessagequeue.py: Added.
            A thread-safe message queue for sending messages from the main
            thread to the IRC thread.
        * Scripts/webkitpy/irc/threadedmessagequeue_unittest.py: Added.
        * Scripts/webkitpy/irc/unittests.py: Added.
        * Scripts/webkitpy/thirdparty/autoinstalled/__init__.py:
            Autoinstall irclib
        * Scripts/webkitpy/unittests.py:

2010-03-17  Victor Wang  <victorw@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix image_diff syntax in webkitpy/port/base.py.
        The syntax is wrong if diff_filename is specified.

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

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

2010-03-16  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Christiansen.

        Provide to QtLauncher a way to change the ViewportUpdateMode
        when it's in graphics based mode.

        [Qt] Make QtLaucher able to select the ViewportUpdateMode
        https://bugs.webkit.org/show_bug.cgi?id=36175

        * QtLauncher/main.cpp:
        (LauncherWindow::selectViewportUpdateMode):
        (LauncherWindow::createChrome):

2010-03-17  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Ambiguous error message when building for unspecified platform
        https://bugs.webkit.org/show_bug.cgi?id=30203

        Add an extra line information to the error message.

        * Scripts/webkitdirs.pm:

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

        No review, rolling out r56044.
        http://trac.webkit.org/changeset/56044
        https://bugs.webkit.org/show_bug.cgi?id=36048

        This patch broke Windows Debug (Tests)

        * Scripts/webkitdirs.pm:

2010-03-16  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Give keyboard focus to PluginDocuments by default
        https://bugs.webkit.org/show_bug.cgi?id=36147

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_SetWindow):
        (handleEventCarbon):
        (handleEventCocoa):

2010-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix run-webkit-httpd on Windows.

        * Scripts/webkitperl/httpd.pm:

2010-03-16  Alexey Proskuryakov  <ap@apple.com>

        Tiger build fix.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: (pluginGetProperty):
        Added more type casts to shut down warnings.

2010-03-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36184
        YouTube video resizing doesn't work with OOP plug-ins

        Added a resizeTo() method, which calls resizePlugin() in JS with the same arguments,
        and a lastSetWindowArguments property, which returns a string describing the last NPWindow
        passed to NPN_SetWindow.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginGetProperty):
        (testResizeTo):
        (pluginInvoke):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_SetWindow):

2010-03-16  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=35504
        [Gtk] Evaluate and fix AtkTable for layout tables

        Implements rowCount and columnCount for Gtk in DRT.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):

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

        Reviewed by Adam Barth.

        Add "what-broke" command for debugging when the tree broke
        https://bugs.webkit.org/show_bug.cgi?id=36157

        This is another step towards automated sheriffing of the webkit tree.
        With this logic our scripts are able to determine what revision broke the
        tree.  Buildbot should do this for us, but unfortunately buildbot doesn't
        expose this kind of aggregate information.

        * Scripts/webkitpy/buildbot.py:
         - Add new Builder and Build classes (which will eventually replace the custom dictionaries previously used).
         - Split out more network logic into _fetch methods which will eventually be their own class for mocking.
         - Use XMLRPC to communicate with the buildbot master instead of scraping build pages.
        * Scripts/webkitpy/buildbot_unittest.py:
         - Test the newly added buildbot classes.
        * Scripts/webkitpy/commands/queries.py:
         - Add an experimental what-broke command.

2010-03-15  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Detect if the Windows Platform SDK is missing when building with
        Visual C++ Express Edition and inform the user to download it.

        * Scripts/webkitdirs.pm:

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

        Reviewed by Eric Seidel.

        Let commit-queue land rollout patches even when the tree is red
        https://bugs.webkit.org/show_bug.cgi?id=36155

        Now the commit-queue will land patches whose name begins with "ROLLOUT "
        even if the tree is red.  The patches still go through the usual build
        and test process, but they can be landed while the tree is on fire.

        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/commands/queues_unittest.py:
        * Scripts/webkitpy/commands/queuestest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:

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

        Reviewed by Eric Seidel.

        Add webkit-patch post-rollout to upload rollouts to bugs.webkit.org for easy committing
        https://bugs.webkit.org/show_bug.cgi?id=36154

        This new command is a mashup of prepare-rollout and post.  This command
        will be used by an experimental bot to post rollouts of patches that
        break things to bugs.webkit.org where they can be landed with the
        greatest of ease.

        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/steps/__init__.py:
        * Scripts/webkitpy/steps/postdiffforrevert.py: Added.

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

        Reviewed by Eric Seidel.

        webkit-patch rollout should error out on conflicts
        https://bugs.webkit.org/show_bug.cgi?id=36151

        Instead of blindingly plowing ahead, we now throw an exception if there
        are conflicts after applying a reverse diff.

        * Scripts/webkitpy/scm.py:

2010-03-15  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed layout test fix.

        VO not able to perform a VO-spacebar on facebook links
        https://bugs.webkit.org/show_bug.cgi?id=36132

        GTK needs to implement press for this test to work.
     
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::press):

2010-03-15  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed layout test fix.

        VO not able to perform a VO-spacebar on facebook links
        https://bugs.webkit.org/show_bug.cgi?id=36132

        Windows needs to implement press in DRT.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::press):

2010-03-15  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed. Fix break of layout tests on win and gtk.

        VO not able to perform a VO-spacebar on facebook links
        https://bugs.webkit.org/show_bug.cgi?id=36132

        Attempting to implement press action for windows and gtk.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::press):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::press):

2010-03-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VO not able to perform a VO-spacebar on facebook links
        https://bugs.webkit.org/show_bug.cgi?id=36132

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (pressCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::press):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::press):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::press):

2010-03-15  Mark Rowe  <mrowe@apple.com>

        Add a new build slave to replace the existing SnowLeopard Leaks build slave which
        appears to be suffering a slow and painful death at the hands of its graphics hardware.

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

2010-03-15  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix a minor case where we'd deference a null pointer if we tried
        to run new-run-webkit-tests on an unsupported platform (e.g.
        Cygwin's python version).

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

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

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

        Tell Subversion about more directories that expect to have .pyc files.

        * Scripts/webkitpy/layout_tests: Added property svn:ignore.
        * Scripts/webkitpy/layout_tests/port: Added property svn:ignore.

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

        Reviewed by Darin Adler.

        Operational scripts from running the EWS
        https://bugs.webkit.org/show_bug.cgi?id=36097

        These are the scripts I use to manage the EWS on EC2.  If someone other
        than me wants to run the EWS, these scripts might be helpful.

        * EWSTools/boot.sh: Added.
        * EWSTools/create-webkit-git: Added.
        * EWSTools/screen-config: Added.
        * EWSTools/start-queue.sh: Added.

2010-03-14  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix the webkit-patch bots.  Turns out they need the path of the main
        script to run properly.

        * Scripts/webkit-patch:
        * Scripts/webkitpy/patch/patcher.py:

2010-03-14  Darin Adler  <darin@apple.com>

        Tell Subversion about more directories that expect to have .pyc files.

        * Scripts/webkitpy/init: Added property svn:ignore.
        * Scripts/webkitpy/patch: Added property svn:ignore.
        * Scripts/webkitpy/thirdparty: Added property svn:ignore.
        * Scripts/webkitpy/thirdparty/autoinstalled: Added property svn:ignore.

2010-03-14  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=35146
        Support tiled backing store

        QtLauncher support and build flag in build-webkit.

        * QtLauncher/main.cpp:
        (LauncherWindow::applyPrefs):
        (LauncherWindow::toggleTiledBackingStore):
        (LauncherWindow::toggleResizesToContents):
        (LauncherWindow::createChrome):
        (LauncherApplication::handleUserOptions):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::setResizesToContents):
        (WebViewGraphicsBased::resizeEvent):
        * QtLauncher/webview.h:
        * Scripts/build-webkit:

2010-03-13  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        The webkit-patch script now displays a warning if run using
        a version of Python less than 2.5.  This will help users
        understand why webkit-patch is erroring out if they are
        using Python 2.4, for example.

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

        * Scripts/webkit-patch:
          - Moved most of the file contents to webkitpy/patch/patcher.py
            so the Python version can be checked before interpreting
            any code that can cause the script to error out.
          - Added a configure_logging() method to enable any version
            warnings to show up.
          - Added a main() method with calls to configure_logging(),
            check_version(), and the main webkit patch method.

        * Scripts/webkitpy/patch/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
          - This file is required to make a folder a package.

        * Scripts/webkitpy/patch/patcher.py: Added.
          - Moved code from Scripts/webkit-patch.

2010-03-13  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Changed test-webkitpy so that messages logged as a side-effect
        of unit-testing code do not get displayed to the screen.  These
        messages clutter up the unit test results if not filtered out.

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

        * Scripts/test-webkitpy:
          - Adjusted the configure_logging() method to filter out any
            log messages from webkitpy.
          - Also added an INFO message stating that most console logging
            is getting suppressed.

        * Scripts/webkitpy/init/versioning.py:
          - Added a log parameter to the check_version() method.

        * Scripts/webkitpy/init/versioning_unittest.py:
          - Qualified a call to check_version() with the parameter names.

2010-03-13  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        The test-webkitpy script now warns the user if the script is
        being run using a Python version different from the minimum
        version the webkitpy package was meant to support.

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

        Warning developers if their Python version is too low will help
        them understand why test-webkitpy is failing.  Secondly, warning
        developers if their Python version is higher than the minimum will
        help them understand that their changes may not be okay for the
        minimum supported version, even if test-webkitpy is passing.

        * Scripts/test-webkitpy:
          - Moved the "from ..._unittest import *" lines to the new
            file Scripts/webkitpy/unittests.py.  This will allow the
            version-check warning to be displayed even if an error occurs
            while interpreting (i.e. importing) the unit test code.
          - Added configure_logging() to configur logging for test-webkitpy.
          - Added an init() method to configure logging and check the
            current Python version.

        * Scripts/webkitpy/init/unittests.py: Added.
          - Added a file to import all unit test modules in the
            webkitpy.init package.

        * Scripts/webkitpy/init/versioning.py: Added.
          - Added a _MINIMUM_SUPPORTED_PYTHON_VERSION variable and set
            it equal to 2.5.
          - Added a compare_version() method to compare the current Python
            version against a target version.
          - Added a check_version() method to check the current Python
            version against the current minimum supported version, and to
            log a warning message if the check fails.

        * Scripts/webkitpy/init/versioning_unittest.py: Added.
          - Added unit tests for the functions in versioning.py.

        * Scripts/webkitpy/style/unittests.py:
          - Fixed/updated a code comment.

        * Scripts/webkitpy/unittests.py: Added.
          - Moved the "from ..._unittest import *" lines from test-webkitpy.

2010-03-13  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Moved all code in webkitpy/__init__.py to another location.

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

        Keeping webkitpy/__init__.py free of non-trivial code allows
        calling code to import initialization code from webkitpy
        before any errors or log messages occur due to code in
        __init__.py.  Such initialization code can include things like
        version checking code and logging configuration code.  This
        also lets us move the autoinstall initialization code to a
        location where it only executes if it is needed -- something
        we have done in this patch.

        * Scripts/webkitpy/__init__.py:
          - Moved all executable code to the following location:
            webkitpy/thirdparty/autoinstalled/__init__.py
          - Added a code comment to keep this file free of non-trivial
            code.

        * Scripts/webkitpy/bugzilla.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/networktransaction.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/networktransaction_unittest.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/statusserver.py:
          - Updated mechanize import statement.

        * Scripts/webkitpy/thirdparty/autoinstalled/__init__.py: Added.
          - Copied the code from webkitpy/__init__.py and updated it
            as necessary.

2010-03-13  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Moved webkitpy/mock.py into webkitpy/thirdparty since it is
        third-party code.

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

        Updated the import statement in all of the below except where noted.

        * Scripts/webkitpy/bugzilla_unittest.py:
        * Scripts/webkitpy/commands/commandtest.py:
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/commands/early_warning_system_unittest.py:
        * Scripts/webkitpy/commands/queries_unittest.py:
        * Scripts/webkitpy/commands/queues_unittest.py:
        * Scripts/webkitpy/commands/queuestest.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/commands_references.py: Added.
          - Added a file containing an absolute import of Mock so that
            the imports in the commands folder can import from this file
            (similar to style_references.py).  This helps limit the
            number of affected files in future refactorings.

        * Scripts/webkitpy/credentials_unittest.py:
        * Scripts/webkitpy/mock.py: Removed.
          - Moved to Scripts/webkitpy/thirdparty.

        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/patchcollection_unittest.py:
        * Scripts/webkitpy/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/steps/steps_unittest.py:
        * Scripts/webkitpy/steps/updatechangelogswithreview_unittests.py:
        * Scripts/webkitpy/steps_references.py: Added.
          - Added a file containing an absolute import of Mock so that
            the imports in the steps folder can import from this file
            (similar to style_references.py).  This helps limit the
            number of affected files in future refactorings.

        * Scripts/webkitpy/thirdparty/mock.py: Copied from WebKitTools/Scripts/webkitpy/mock.py.
          - Also eliminated trailing white space and carriage returns.

2010-03-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Amend incorrect typo patch for QtLauncher.

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

        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::setFrameRateMeasurementEnabled):

2010-03-13  Victor Wang  <victorw@chromium.org>

        Add appengine app to host and serve webkit layout test results.

        The app allows you post test result files (json) and serve them up.
        Chromium flakiness dashboard will first use this app to host results.json
        and expectations.json, but the files hosted by this app are not limited
        to chromium results or json files. It can be used to host other files if needed.

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

        * TestResultServer: Added.
        * TestResultServer/app.yaml: Added.
        * TestResultServer/handlers: Added.
        * TestResultServer/handlers/__init__.py: Added.
        * TestResultServer/handlers/menu.py: Added.
        * TestResultServer/handlers/testfilehandler.py: Added.
        * TestResultServer/index.yaml: Added.
        * TestResultServer/main.py: Added.
        * TestResultServer/model: Added.
        * TestResultServer/model/__init__.py: Added.
        * TestResultServer/model/testfile.py: Added.
        * TestResultServer/stylesheets: Added.
        * TestResultServer/stylesheets/form.css: Added.
        * TestResultServer/stylesheets/menu.css: Added.
        * TestResultServer/stylesheets/testfile.css: Added.
        * TestResultServer/templates: Added.
        * TestResultServer/templates/menu.html: Added.
        * TestResultServer/templates/showfilelist.html: Added.
        * TestResultServer/templates/uploadform.html: Added.

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

        Reviewed by David Levin.

        new-run-webkit-tests fails with --debug option.
        https://bugs.webkit.org/show_bug.cgi?id=36067

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

2010-03-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add "Show FPS" menu option to QtLauncher.

        [Qt] QtLauncher need a menu option to show/hide FPS
        https://bugs.webkit.org/show_bug.cgi?id=35794

        * QtLauncher/main.cpp:
        (LauncherWindow::showFPS):
        (LauncherWindow::createChrome):

2010-03-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add a "Toggle FullScreen" option to QtLauncher Menu.

        [Qt] QtLauncher needs an option to toggle FullScreen Mode
        https://bugs.webkit.org/show_bug.cgi?id=35755

        * QtLauncher/main.cpp:
        (LauncherWindow::init):
        (LauncherWindow::eventFilter):
        (LauncherWindow::initializeView):
        (LauncherWindow::toggleFullScreenMode):
        (LauncherWindow::createChrome):

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

        Reviewed by Dimitri Glazkov.

        Fix typo in websocket_server (path_from_base instead of 
        path_from_chromium_base).

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

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

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

        Reviewed by Adam Barth.

        new-run-webkit-tests --new-baseline doesn't work at all.

        It attempts to call a method that isn't defined. To fix it, I
        removed the unnecessary and unnecessarily confusing 'platform'
        argument to the test_type constructor and use the Port object that
        is passed in instead, since we are only ever generating a baseline
        from the port that is currently executing.

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

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:

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

        Reviewed by Adam Barth.

        Fix new-run-webkit-tests --run-singly

        This script option is currently broken - the script attempts to
        dereference methods and variables that don't exist, which causes
        the Chromium Linux valgrind bot to be quite unhappy. This has been
        broken since r54449 when I renamed Port.start_test_driver to
        Port.start_driver.

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

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

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Fix critical being printed to stderr on every test. This is
        because the jar is only being created when soup hits the HTTP
        path. We should reconsider the time of its creation.

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

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

        Teach prepare-ChangeLog to find modified selectors in CSS files

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/36064> prepare-ChangeLog should extract
        modified selectors from CSS files

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges): Call get_selector_line_ranges_for_css for
        .css files.
        (get_selector_line_ranges_for_css): Added. Finds selectors and their
        line ranges and returns them.

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix (for EWS). Make sure the new code builds on older soup.

        Thanks to Dan Winship.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAlwaysAcceptCookies):

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Carlson.

        [GTK] DRT does not handle cookie policy setting
        https://bugs.webkit.org/show_bug.cgi?id=36056

        Implement cookie accept policy setting for GTK+'s LayoutTestController.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAlwaysAcceptCookies):

2010-03-12  Adam Langley  <agl@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium]: update Linux layout test scripts for RedHat like systems.

        (Tested on Fedora 12.)

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

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

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

        Make svn-create-patch's diffs of ObjC header files more readable

        Fixes <http://webkit.org/b/36055>.

        Reviewed by John Sullivan.

        * Scripts/svn-create-patch:
        (diffOptionsForFile): Added. Returns the options that should be passed
        to diff for the given file. All the options are the same for all
        files, except for the option to specify which lines should be used as
        hunk headers.
        (generateDiff): Use diffOptionsForFile to get the options to pass to
        diff.
        (hunkHeaderLineRegExForFile): Added. Returns the regular expression
        that should be used by diff to identify lines that should be included
        after the "@@" in the hunk header lines of the diff. For ObjC[++]
        source files, we use any lines starting with -, +, or
        @implementation/@interface/@protocol. For ObjC[++] header files (which
        we assume to be any .h files in a mac/ or objc/ directory), we use any
        lines starting with @implementation/@interface/@protocol.

2010-03-12  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Introduce setWillSendRequestClearHeader to LayoutTestController to selectively remove headers in willSendRequest. Used in http/tests/security/no-referrer.html
        https://bugs.webkit.org/show_bug.cgi?id=35920

        * DumpRenderTree/LayoutTestController.cpp:
        (setWillSendRequestClearHeaderCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::willSendRequestClearHeaders):
        (LayoutTestController::setWillSendRequestClearHeader):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):

2010-03-11  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed.

        Fix typo in websocket_server.py

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

2010-03-11  Garret Kelly  <gdk@chromium.org>

        Reviewed by Darin Adler.

        Fixing minor typo in the commit queue status page.
        https://bugs.webkit.org/show_bug.cgi?id=35979

        * Scripts/webkitpy/commands/queues.py:

2010-03-11  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed.

        Fix for WebSocket layout test runner on chromium/win port.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: register_cygwin and set CYGWIN_PATH

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2010-03-11  Victor Wang  <victorw@chromium.org>

        Reviewed by dglazkov@chromium.org.

        rebaseline_chromium_webkit_tests can generate new baselines for
        all platforms so it needs to know two ports in order to work correctly:
        the port that the script is running on and the port that it generates
        new baselines for. Update rebaselining tool to handle both port correctly.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted.  It defaults to the
        current Mac OS X version unless otherwise specified.

        Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.

        Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
        may not be usable when targetting a different Mac OS X version.

        Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
        MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm: Wrap the include of mach-o/getsect.h in 'extern "C"' as some versions of the
        header in older SDKs do not do this inside the header.

2010-03-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35965
        <rdar://problem/7742771> Crash when passing an object returned from plug-in back to the plug-in

        Made rememberedObject a member of PluginObject. A plug-in must not use its references
        to browser NPObjects after being destroyed, but this wasn't the case with static variable.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):
        (pluginInvalidate):
        (pluginAllocate):
        (pluginDeallocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:

2010-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=35905
        REGRESSION(55699?): media/video-no-autoplay.html times out on Leopard Commit Bot

        Make sure we reset the WebGL preference, so that WebGL doesn't get left
        on after being enabled via layoutTestController.overridePreference(),
        which in turn causes accelerated compositing to be enabled on Leopard
        when we don't want it to be.
        
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):

2010-03-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        rebaseline_chromium_webkit_tests doesn't handle other plaforms
        correctly (e.g., if you run on the Mac platform and try to
        rebaseline the WIN results, the result gets written into
        platform/mac instead of platform/chromium-win). Also, this script
        doesn't work on non-Chromium ports, so we need to fix that at some
        point.

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

        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

2010-03-10  Daniel Bates  <dbates@rim.com>

        Reviewed by Simon Hausmann.

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

        Updates the subroutine builtDylibPathForName() so that it adds the "d" suffix to
        the QtWebKit library name on Windows. This change makes run-launcher work again
        under Windows. Moreover, this change corresponds to the change made in change-
        set 53924 <http://trac.webkit.org/changeset/53924>.

        * Scripts/webkitdirs.pm:

2010-03-10  Adam Roben  <aroben@apple.com>

        Roll out the prepare-ChangeLog part of r55870

        This change wasn't needed (prepare-ChangeLog calls svn-create-patch
        when it's asked to print out diffs for the user) and was screwing up
        its ability to find changed function names.

        * Scripts/prepare-ChangeLog:
        (diffCommand): Change the options we pass to svn-diff back to their
        pre-r55870 form.

2010-03-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add Support for WebKitEnableCaretBrowsing to Qt DRT

        Unskip test fast/events/multiline-link-arrow-navigation.html

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):
        (LayoutTestController::setCaretBrowsingEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-03-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Holger Freyther.

        QtLauncher: Fix typo in conditional statement in
                    WebViewGraphicsBased::setFrameRateMeasurementEnabled.

        '=' should be '=='!

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

        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::setFrameRateMeasurementEnabled):

2010-03-10  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored and cleaned up the code for unit-testing logging.

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

        * Scripts/webkitpy/init/logtesting.py:
          - Added more information to the module docstring.
          - Added an assertMessages() method to the UnitTestLogStream
            class.  This simplifies the calling code.
          - Renamed the UnitTestLog class to LogTesting, and reformulated
            it as follows:
              - Moved the logging configuration code from the __init__
                method to a new static setUp() method.
              - Documented the __init__ method to be private.
              - Improved the code so that the root logger does not have
                its logging level changed.  Instead we set the handler's
                level.  This makes the unit testing more unintrusive.
              - Updated the assertMessages() method to call the
                UnitTestLogStream class's assertMessages() method.
              - More fully documented the class.

        * Scripts/webkitpy/style/checker.py:
          - Added a logger parameter to the configure_logging() method.
            This allows us to prevent test messages from being sent
            to the root logger during unit testing, which may be
            rendering to the screen, etc.
          - Simplified the code by removing the _LevelLoggingFilter class.
          - Replaced the _LevelLoggingFilter class with a one-line lambda
            expression in configure_logging().

        * Scripts/webkitpy/style/checker_unittest.py:
          - Changed relative imports to absolute to comply more with PEP8.
          - In the ConfigureLoggingTest class:
            - Changed the setUp() method to prevent test messages from
              being propagated to the root logger.
            - Changed the _log() method to a data attribute.
            - Updated to accommodate changes to logtesting.py.

        * Scripts/webkitpy/style_references.py:
          - Updated an import statement.

2010-03-10  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Python code for GDB 7 to support native printing of some WebCore types.

        * gdb/webcore.py: Added.

2010-03-10  Adam Roben  <aroben@apple.com>

        Make svn-create-patch and prepare-ChangeLog show better section
        headings for ObjC files

        This makes the text at the end of each "@@" line in a diff actually
        show the ObjC method or interface that contains the change, rather
        than whatever the most-recently-defined C function was.

        Fixes <http://webkit.org/b/35970>.

        Reviewed by John Sullivan.

        * Scripts/svn-create-patch: Pass -F'^[-+@]' to diff so that it will
        treat any lines starting with -, +, or @ as section heading lines.
        This works well for ObjC files, and shouldn't affect other types of
        files.

        * Scripts/prepare-ChangeLog: Changed the options passed to diff to
        match those used in svn-create-patch.

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

        Reviewed by Tor Arne Vestbø.

        Link QtLauncher against the WebKit library using a relative rpath.

        This makes the launcher and the lib relocatable.

        * QtLauncher/QtLauncher.pro:

2010-03-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Simon Hausmann.

        [iExploder] Add new CSS Properties and HTML Attributes

        The update-iexploder-cssproperties script was used to update
        the various input files. The autobuffer HTML Attribute was removed
        from WebKit and I manually added it back to the htmlattrs.in like
        we have done it for other attributes in the past.

        * iExploder/htdocs/cssproperties.in:
        * iExploder/htdocs/htmlattrs.in:
        * iExploder/htdocs/htmltags.in:

2010-03-09  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed.

        Obvious fix for --cgi-paths of pywebsocket.

        * Scripts/run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

2010-03-09  Jakub Wieczorek  <jwieczorek@webkit.org>

        Unreviewed.

        Adding myself to committers.py.

        * Scripts/webkitpy/committers.py:

2010-03-09  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Nate Chapin.

        Fix --clobber-old-results in new-run-webkit-tests.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        Add the ability to dispatch scroll wheel events in DRT.  This was
        necessary in order to write a test for
        https://bugs.webkit.org/show_bug.cgi?id=34700.

        * DumpRenderTree/mac/EventSendingController.mm: Add support for two
        new methods to EventSender: mouseScrollBy(x, y) and
        continuousMouseScrollBy(x, y).  The API to generate scroll events on
        the mac was added in 10.5, so these methods are NOOPs on Tiger.
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        Regiester mouseScrollByX:andY: and continuousMouseScrollByX:andY:
        (+[EventSendingController webScriptNameForSelector:]): Map JavaScript
        method names to ObjC selectors.
        (-[EventSendingController mouseScrollByX:andY:continuously:]): Generate
        a scroll wheel event using CGEventCreateScrollWheelEvent() and dispatch
        it to WebKit.
        (-[EventSendingController continuousMouseScrollByX:andY:]): Generate a
        continuous scrolling event by x and y pixels.
        (-[EventSendingController mouseScrollByX:andY:]): Generate a notchy
        scrolling event by x and y lines.

2010-03-09  Chris Fleizach  <cfleizach@apple.com>

        DRT build fix for Tiger. No review.

        AX: hit testing a list box doesn't work anymore
        https://bugs.webkit.org/show_bug.cgi?id=35893

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::elementAtPoint):

2010-03-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: hit testing a list box doesn't work anymore
        https://bugs.webkit.org/show_bug.cgi?id=35893

        * DumpRenderTree/AccessibilityController.cpp:
        (getElementAtPointCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::elementAtPoint):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::elementAtPoint):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::elementAtPoint):

2010-03-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        pywebsocket should support html and cgi in the same directory.
        https://bugs.webkit.org/show_bug.cgi?id=34879

        Import pywebsocket 0.4.9.2
        Specify --server-host 127.0.0.1, so that it only binds listening socket
        to 127.0.0.1 to prevent access from non-localhost.
        Change --cgi-paths from /websocket/tests/cookies to /websocket/tests,
        because pywebsocket 0.4.9.2 supports html and cgi in the same directory
        and only executable (httponly-cookies.pl) will be handled as cgi
        script.

        * Scripts/run-webkit-tests:
        * Scripts/run-webkit-websocketserver:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/README.webkit:
        * Scripts/webkitpy/thirdparty/pywebsocket/example/echo_client.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/example/handler_map.txt: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/standalone.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/mod_pywebsocket/util.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/setup.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/test/test_util.py:
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/README: Added.
        * Scripts/webkitpy/thirdparty/pywebsocket/test/testdata/hello.pl: Added.

2010-03-09  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Simplified check-webkit-style's argument parsing code by removing
        support for the vestigial "extra flag values" parameter.

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

        The "extra flag values" parameter was needed before WebKit
        forked check-webkit-style from Google.  It was used to pass
        through the option parser those command-line flags that WebKit
        required but that Google's parser did not support (the --git-commit
        flag in particular).
            We can remove the parameter now because it is no longer
        needed and unnecessarily clutters the argument-parsing code.

        * Scripts/webkitpy/style/optparser.py:
          - Removed the extra_flag_values parameter from the
            CommandOptionValues class's constructor.
          - Removed the extra_flags parameter from the ArgumentParser
            class's parse() method.

        * Scripts/webkitpy/style/optparser_unittest.py:
          - Removed from the unit tests all references to the
            extra_flag_values variable.

2010-03-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add EventSender
        https://bugs.webkit.org/show_bug.cgi?id=35859

        Add EventSender classes, which are going to be used by
        DumpRenderTree Chromium port. These files are based on:
        - src/webkit/tools/test_shell/event_sending_controller.cc
        - src/webkit/tools/test_shell/event_sending_controller.h
        of Chromium rev.40492.

        * DumpRenderTree/chromium/EventSender.cpp: Added.
        * DumpRenderTree/chromium/EventSender.h: Added.

2010-03-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add PlainTextController and TextInputController
        https://bugs.webkit.org/show_bug.cgi?id=35852

        Add PlainTextController and TextInputController classes, which are going
        to be used by DumpRenderTree Chromium port. These files are based on:
        - src/webkit/tools/test_shell/plain_text_controller.{cc,h} and
        - src/webkit/tools/test_shell/text_input_controller.{cc,h}
        of Chromium rev.40492.

        * DumpRenderTree/chromium/PlainTextController.cpp: Added.
        * DumpRenderTree/chromium/PlainTextController.h: Added.
        * DumpRenderTree/chromium/TextInputController.cpp: Added.
        * DumpRenderTree/chromium/TextInputController.h: Added.

2010-03-08  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, Chromium build fix.

        Reverting r55689.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-03-08  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        Fix webkit-patch post and land to work well with security bug
        https://bugs.webkit.org/show_bug.cgi?id=35733

        Bugzilla requires authentication to access security bug page,
        so call authenticate() if it failed to fetch bug page.

        * Scripts/webkitpy/bugzilla.py:

2010-03-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitry Glazkov.

        Fix --clobber-old-results in new-run-webkit-tests.

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

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-03-08  Brady Eidson  <beidson@apple.com>

        Reviewed by NOBODY (but suggested by Steve Falkenburg and fixing a boneheaded mistake on my part last week)

        Followup to https://bugs.webkit.org/show_bug.cgi?id=35532

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::apiTestGoToCurrentBackForwardItem): Can't pass in a null BOOL to WebKit APIs.

2010-03-08  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Fixed incorrect import statement in validate-committer-lists:
        webkitpy.BeautifulSoup -> webkitpy.thirdparty.BeautifulSoup.

        * Scripts/validate-committer-lists:

2010-03-08  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Blob.slice support.
        https://bugs.webkit.org/show_bug.cgi?id=32993

        Add ENABLE_BLOB_SLICE feature define and  flag for build-webkit. It is
        currently only turned on for Mac.

        * Scripts/build-webkit:

2010-03-08  Gustavo Noronha Silva  <gns@gnome.org>

        No review, rolling out r55662.
        http://trac.webkit.org/changeset/55662
        https://bugs.webkit.org/show_bug.cgi?id=35863

        Need to be coordinated with bots setup

        * Scripts/run-webkit-tests:

2010-03-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] Tests fail when running with ipv6 addresses available, on Debian systems
        https://bugs.webkit.org/show_bug.cgi?id=35863

        If running on a Debian-based system, also listen on the ipv6 address.

        * Scripts/run-webkit-tests:

2010-03-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        [iexploder] Automatically update htmltags.in and htmlattrs.in too
        https://bugs.webkit.org/show_bug.cgi?id=33755

        Change the update-iexploder-cssproperites script to update
        the htmlattrs.in and htmltags.in of WebKitTools/iExploder/htdocs
        automatically as well.

        Change the reading and writing code to work with parameters
        and extend the method that is parsing the .in files to handle
        the HTMLTagNames.in and the HTMLAttributeNames.in files.

        Remove custom code to determine the revision of files with a
        utility of VCUtils.pm to determine the revision of the directory
        these files are located in. This will also work with git checkout.

        * Scripts/update-iexploder-cssproperties:

2010-03-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: false positive for empty loop
        https://bugs.webkit.org/show_bug.cgi?id=35717

        * Scripts/webkitpy/style/processors/cpp.py:
        * Scripts/webkitpy/style/processors/cpp_unittest.py:

2010-03-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add AccessibilityController and AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=35774

        Add AccessibilityController and AccessibilityUIElement classes,
        which are going to be used by DumpRenderTree Chromium port. These
        files are based on:
        - src/webkit/tools/test_shell/accessibility_controller.{cc,h} and
        - src/webkit/tools/test_shell/accessibility_ui_element.{cc,h}
        of Chromium rev.40492.

        * DumpRenderTree/chromium/AccessibilityController.cpp: Added.
        * DumpRenderTree/chromium/AccessibilityController.h: Added.
        * DumpRenderTree/chromium/AccessibilityUIElement.cpp: Added.
        * DumpRenderTree/chromium/AccessibilityUIElement.h: Added.

2010-03-06  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Typing into Flash with wmode = opaque|transparent and
        non-latin language active outputs as if US keyboard layout active

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

        To test keyboard events on the test plugin, this change implements
        NPCocoaEventKeyDown and NPCocoaEventKeyUp handlers so the plugin
        can write log messages.

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (handleEventCocoa): Implemented the event handlers for NPCocoaKeyDown
        and NPCocoaEventKeyUp.

2010-03-05  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Eric Seidel.

        Fix Print option on QtLauncher by calling print directly from QWebFrame.

        [Qt] QtLauncher Print option is not working on QGraphicsView mode
        https://bugs.webkit.org/show_bug.cgi?id=35769

        * QtLauncher/main.cpp:
        (LauncherWindow::print):

2010-03-05  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Changed the logging code for new-run-webkit-tests to use
        module-specific loggers rather than the root logger. This is
        a standard practice that allows logging specific to a package
        to be configured independently of other modules.

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

        Added a line of the form "_log = logging.getLogger(<module>)"
        to each module below, where <module> is the fully-qualified
        name of the module, and updated the log lines to use the new
        _log logger.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.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-03-05  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        Split the command-line invocation of the Chromium/python LigHTTPd
        server implementation out into its own top level script to make it
        a more "public" interface and to resolve some awkward layering
        issues. This script will be called directly by other test scripts in
        the Chromium tree.

        At some point this script should be made to work with Apache-based
        implementations and on other ports. I have filed
        https://bugs.webkit.org/show_bug.cgi?id=35820 for this.

        Also fix a bug in port/factory where options.chromium could be
        dereferenced even if it wasn't set, raising an exception.

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

        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/new-run-webkit-httpd: Added

2010-03-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Holger Freyther
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        [Gtk] Implement setSpatialNavigationEnabled in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=35705

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSpatialNavigationEnabled):

2010-02-23  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Add toggle on/off stub methods for Spatial Navigation in win, gtk and mac LayoutTestController class implementations.
        https://bugs.webkit.org/show_bug.cgi?id=35699

        * DumpRenderTree/LayoutTestController.cpp:
        (setSpatialNavigationEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setSpatialNavigationEnabled):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setSpatialNavigationEnabled):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setSpatialNavigationEnabled):

2010-02-18  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Add toggle on/off mechanism for Spatial Navigation in QtLauncher.

        * QtLauncher/main.cpp:
        (LauncherWindow::toggleSpatialNavigation):
        (LauncherWindow::setupUI):

2010-03-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        [Qt] Add setSpatialNavigationEnabled method DRT
        https://bugs.webkit.org/show_bug.cgi?id=33715

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setSpatialNavigationEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

        Unskipped fast/events/spatialnavigation/

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Alice Liu.

        Find the framework relative to TARGET_BUILD_DIR as that has a more obvious value during production builds.

        * Scripts/check-for-webkit-framework-include-consistency:

2010-03-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Add CppVariant and CppBoundClass
        https://bugs.webkit.org/show_bug.cgi?id=35634

        Add CppVariant and CppBoundClass classes, which are going to be
        used by DumpRenderTree Chromium port. These files are based on:
        - src/webkit/glue/cpp_variant.{cc,h} and
        - src/webkit/glue/cpp_bound_class.{cc,h}
        of Chromium rev.40492.

        * DumpRenderTree/chromium/CppBoundClass.cpp: Added.
        * DumpRenderTree/chromium/CppBoundClass.h: Added.
        * DumpRenderTree/chromium/CppVariant.cpp: Added.
        * DumpRenderTree/chromium/CppVariant.h: Added.

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Build fix for older versions of Ruby.

        * Scripts/check-for-webkit-framework-include-consistency:

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Add a script to verify that WebKit framework headers are internally consistent.

        This script detects the following problematic situations:
        * An exported WebKit header that includes a header from WebCore.
        * An exported WebKit header that includes a header that does not exist in the WebKit framework.
        * A public WebKit header that includes a private WebKit header.

        * Scripts/check-for-webkit-framework-include-consistency: Added.

2010-03-04  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Roben.

        Making sure that the correct path is set before invoking
        DumpRenderTree on cygwin.

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

        * Scripts/run-webkit-tests:

2010-03-04  Simon Fraser  <simon.fraser@apple.com>

        Revert the exceptions I just added, and make the error clearer.

        * Scripts/check-for-global-initializers:

2010-03-04  Simon Fraser  <simon.fraser@apple.com>

        Build fix: add exceptions to the check-for-global-initializers script
        for FocusController and SpatialNavigation, and improve the script
        to actually print out the globals found.

        * Scripts/check-for-global-initializers:

2010-03-04  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix dangling reference to "port" instead of "self._port_obj" that
        was preventing the http_server from starting on Windows.

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

2010-03-04  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Simon Hausmann.

        Make Qt DumpRenderTree EventSender able to send double click events

        LayoutTests:
            fast/events/dblclick-addEventListener.html

        [Qt] DRT: Send double click event from EventSender
        https://bugs.webkit.org/show_bug.cgi?id=35255

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::mouseDown):
        * DumpRenderTree/qt/EventSenderQt.h:
        (EventSender::resetClickCount):

2010-03-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make the OUTPUT_DIR variable in qmake projects independent of build-webkit's logic.

        This also allows shadow builds relying only on qmake to work properly.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * QtLauncher/QtLauncher.pro:

2010-03-04  Gabor Rapcsanyi  <rgabor@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Enable to use built-product-archive on Qt platform.

        * BuildSlaveSupport/built-product-archive:

2010-03-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Simon Hausmann.

        Add a missing 'm_' to class variables names.

        [Qt] QtLauncher is not respecting class variable names
        https://bugs.webkit.org/show_bug.cgi?id=35542

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::init):
        (LauncherWindow::sendTouchEvent):
        (LauncherWindow::eventFilter):
        (LauncherWindow::zoomIn):
        (LauncherWindow::zoomOut):
        (LauncherWindow::resetZoom):
        (LauncherWindow::setEditable):
        (LauncherWindow::setTouchMocking):
        (LauncherWindow::initializeView):
        (LauncherWindow::createChrome):

2010-03-03  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Mark Rowe.

        Exclude leaks in Java that build bot complains about.

        * Scripts/run-webkit-tests:

2010-03-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Additional change to separate Accelerated Compositing test from 3D Rendering test
        https://bugs.webkit.org/show_bug.cgi?id=35610
        
        I am now using #if ENABLED(3D_RENDERING) to emit the 3DRendering string from
        DRT or not. This allows these flags to set independently. I also improved
        the code flow in run-webkit-tests a bit.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * Scripts/run-webkit-tests:

2010-03-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Added ability to print supported features to console to DRT
        https://bugs.webkit.org/show_bug.cgi?id=35610
        
        This currently only prints whether or not Accelerated Compositing 
        and 3D Rendering are supported, which is the only way to tell if you 
        can run the compositing LayoutTests on Windows. But it can be expanded 
        to give more information as needed. Currently it prints that both
        AcceleratedCompositing and 3DRendering are available if accelerated compositing
        is enabled since both have to be turned on together. This allows me to maintain
        separate checks for them.

        * DumpRenderTree/win/DumpRenderTree.cpp:Added --print-supported-features flag
        (main):
        * Scripts/run-webkit-tests:Runs DRT and enabled compositing tests if HW comp is available on Windows

2010-03-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Simon Hausmann.

        Refactor QtLauncher so it respects command line arguments
        and inherits settings when you clone or create a new window.

        Implemented with help of Kenneth Rohde Christiansen.

        [Qt] QtLauncher must be refactored to fix command line arguments usage
        https://bugs.webkit.org/show_bug.cgi?id=35536

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::init):
        (LauncherWindow::isGraphicsBased):
        (applySetting):
        (LauncherWindow::applyPrefs):
        (LauncherWindow::initializeView):
        (LauncherWindow::newWindow):
        (LauncherWindow::cloneWindow):
        (LauncherWindow::createChrome):
        (main):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::setFrameRateMeasurementEnabled):
        * QtLauncher/webview.h:
        (WebViewGraphicsBased::itemCacheMode):
        (WebViewGraphicsBased::frameRateMeasurementEnabled):

2010-03-02  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] implements ChromeClient::requestGeolocationPermissionForFrame
        https://bugs.webkit.org/show_bug.cgi?id=35210

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (geolocationPolicyDecisionRequested):
        (createWebView):

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

        Reviewed by David Levin.

        Revert r55339 - the Chromium codebase downstream had a temporary
        need for WebKitTools/pywebsocket to still exist after Chris Jerdonek
        had moved it (scripts still referenced the old location). Those
        scripts have been updated to the new location, so it should be safe
        to delete this now.

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

        * pywebsocket/mod_pywebsocket/standalone.py: Removed.

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

        Reviewed by Dimitri Glazkov.

        new-run-webkit-tests on chromium-linux tests to see if
        layout_test_helper exists, but we don't use layout_test_helper on
        linux. The test derefences a None object, and we crash. This fixes
        that.

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

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

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

        Reviewed by Dimitri Glazkov.

        r55388 (bug 35553) worked around a bug in Python's subprocess.Popen()
        that was causing DRT to hang on exit in new-run-webkit-tests.
        Unfortunately, that workaround doesn't work on chromium-win
        (and the script fails completely). The good news is that the check
        isn't actually necessary, and so this change makes it conditional.

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

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

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Bug 35576: WebKit should tell plug-in instances when private browsing state changes
        <http://webkit.org/b/35576>

        TestNetscapePlugin is another bit of plug-in code where copy-paste was heavily used
        when porting.  Update the Windows and UNIX implementations of NPP_New and NPP_SetValue
        to provide the expected behavior related to NPNVprivateModeBool.  Hopefully this code
        duplication can be cleaned up in the future.

        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_value):
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New):
        (NPP_SetValue):

2010-03-02  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        Test plugin still has issues with releasing objects, and variants
        https://bugs.webkit.org/show_bug.cgi?id=35587

        Fix the conditions for releasing the variants after calling
        invoke, and avoid having a number of objects leak.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testDocumentOpen):
        (testWindowOpen):

2010-03-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored the StyleChecker class's file-processing method
        _process_file().  This will make it easier to add new
        file-processing capabilities to check-webkit-style.

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

        * Scripts/webkitpy/style/checker.py:
          - Added a _read_lines() method to the StyleChecker class
            that extracts the lines from a file.
          - Replaced part of _process_file() with a call to the new
            _read_lines() method.
          - Replaced another part of _process_file() with a call
            to the new CarriageReturnProcessor.process() method.

        * Scripts/webkitpy/style/processors/common.py:
          - Replaced the check_no_carriage_return() function with a
            new CarriageReturnProcessor class.

        * Scripts/webkitpy/style/processors/common_unittest.py:
          - Renamed the CarriageReturnTest class to
            CarriageReturnProcessorTest and updated it as necessary.

2010-03-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Started using the logging module in check-webkit-style.
        This provides more options for debugging and a more flexible,
        uniform way to report messages to the end-user.

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

        Also included classes in a central location to facilitate
        the unit testing of logging code (setUp and tearDown of unit
        test logging configurations, etc).

        * Scripts/check-webkit-style:
          - Added a call to configure_logging() in the beginning of main().
          - Replaced two calls to sys.stderr.write() with appropriate
            logging calls.

        * Scripts/webkitpy/init/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.

        * Scripts/webkitpy/init/logtesting.py: Added.
          - Added a UnitTestLogStream class to capture log output
            during unit tests.
          - Added a UnitTestLog class that provides convenience methods
            for unit-testing logging code.

        * Scripts/webkitpy/style/checker.py:
          - Added a configure_logging() method.
          - Added a _LevelLoggingFilter class to filter out log messages
            above a certain logging level.
          - Removed the _stderr_write() method from the StyleChecker class
            and replaced its use with appropriate logging calls.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added a ConfigureLoggingTest class to unit test the
            configure_logging() method.
          - Updated the StyleCheckerCheckFileTest class as necessary.

        * Scripts/webkitpy/style_references.py:
          - Added references to logtesting.UnitTestLog and
            logtesting.UnitTestLogStream.

2010-03-01  Chris Fleizach  <cfleizach@apple.com>

        Fixing broken DRT on Leopard/Tiger. Second try.

        AX: changes to WAI-ARIA grid aren't perceived correctly by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=35514

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:

2010-03-01  Chris Fleizach  <cfleizach@apple.com>

        Fixing broken DRT on Leopard/Tiger.

        AX: changes to WAI-ARIA grid aren't perceived correctly by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=35514

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:

2010-03-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] plugins/setProperty.html fails on 64bit Release
        https://bugs.webkit.org/show_bug.cgi?id=35425

        Check invoke's return code before releasing the variant, since
        there's a chance it won't be properly initialized, leading to
        memory corruption, in some cases.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testCallback):
        (testEnumerate):
        (testDocumentOpen):
        (testWindowOpen):
        (handleCallback):

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

        Reviewed by nobody. Build bustage :(

        Fix stupid typo that I committed even after David Levin pointed
        it out to me :(

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

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

2010-03-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: changes to WAI-ARIA grid aren't perceived correctly by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=35514

        Add rowCount, columnCount for tables.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (rowCountCallback):
        (columnCountCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::rowCount):
        (AccessibilityUIElement::columnCount):

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

        Reviewed by Eric Seidel.

        Work around a bug in Python's subprocess.Popen() that keeps us from
        cleaning up DumpRenderTree / test_shell properly when we finish the
        tests in new-run-webkit-tests.

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

        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:

2010-03-01  Arno Renevier  <arno@renevier.net>

        Reviewed by Xan Lopez.

        webkit-build could pass unknown arguments to autogen.sh
        https://bugs.webkit.org/show_bug.cgi?id=35454

        * Scripts/build-webkit:

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

        Rubber-stamped by Dimitri Glazkov.

        Fix breakage from r55372.

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

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

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

        Reviewed by Eric Seidel.

        EWS can hang for five hours when compile output is too big
        https://bugs.webkit.org/show_bug.cgi?id=35545

        * Scripts/webkitpy/commands/queues.py: Limit uploads to 1MB instead of
        5MB.  AppEngine seems to not like 5MB uploads.  I'm not sure what the
        limit is.  Let's try 1MB for a while and see how it goes.
        * Scripts/webkitpy/networktransaction.py: Tune the default parameters
        to our exponential backoff.  I'm not sure why I picked five hours as
        the retry limit.  That seems way too large.

2010-03-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Telling a WebView to go to its current WebHistoryItem is broken.
        <rdar://problem/7699371> and https://bugs.webkit.org/show_bug.cgi?id=35532

        * DumpRenderTree/LayoutTestController.cpp:
        (apiTestGoToCurrentBackForwardItemCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::apiTestGoToCurrentBackForwardItem):

        Stubs for now:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::apiTestGoToCurrentBackForwardItem):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::apiTestGoToCurrentBackForwardItem):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::apiTestGoToCurrentBackForwardItem):

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

        Reviewed by David Levin.

        General cleanup of error handling in new-run-webkit-tests.

        Add Port.check_build() call that is separate from Port.check_sys_deps()
        (and add a --nocheck-build flag to skip). This breaks a circular
        dependency where you would start the layout test helper before
        checking sys deps, but checking sys deps was the thing that told
        you if your binaries where there.

        Also, made Port.check_sys_deps(), start_helper() and stop_helper()
        optional by providing default implementations in the base class
        rather than requiring ports to implement the routines regardless
        of whether or not they were needed.

        Lastly, tweak a bunch of log messages to be cleaner, including
        changing messages in thirdparty/autoinstall.py to be silent at
        the default log level.

        http://bugs.webkit.org/show_bug.cgi?id=35416

        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/passing.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/thirdparty/autoinstall.py

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

         Reviewed by David Levin.

         new-chromium-webkit-tests --platform=mac-leopard diffs are backwards
         https://bugs.webkit.org/show_bug.cgi?id=35265

         Some parts of the code passed arguments as
         "actual, expected" and some passed as "expected, actual".
         As you might imagine, this lead to great confusion and wrongness.
         Standardize on "expected, actual" as that's the order which is
         passed to the underlying diff tool.

         Based on a patch by Eric Siedel <eric@webkit.org>.

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

2010-03-01  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Rolling out: http://trac.webkit.org/changeset/55348

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

        Rolling out since the changes to autoinstall do not work
        with Python 2.4. In particular, ZipFile.extractall() was
        added in Python 2.6.

        * Scripts/webkitpy/__init__.py:
        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/init/__init__.py: Removed.
        * Scripts/webkitpy/init/autoinstall.py: Removed.
        * Scripts/webkitpy/networktransaction.py:
        * Scripts/webkitpy/networktransaction_unittest.py:
        * Scripts/webkitpy/statusserver.py:
        * Scripts/webkitpy/thirdparty/autoinstall.py: Added.

2010-03-01  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Rolling out r55350: http://trac.webkit.org/changeset/55350

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

        Need to roll out because this patch (pep8) depends on the newly
        rewritten autoinstall.py (r55348), which is breaking for people
        with Python 2.4:

        https://bugs.webkit.org/show_bug.cgi?id=35163#c21

        That revision also needs to be rolled out and will be rolled out next.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/processors/python.py: Removed.
        * Scripts/webkitpy/style/processors/python_unittest.py: Removed.
        * Scripts/webkitpy/style/processors/python_unittest_input.py: Removed.
        * Scripts/webkitpy/style/unittests.py:
        * Scripts/webkitpy/style_references.py:

2010-02-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Exempted WebKitTools/Scripts/webkitpy/thirdparty from all
        style checks except for the whitespace/carriage_return check
        and the pep8 tab and trailing white space checks.

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

        * Scripts/webkitpy/style/checker.py:
          - Adjusted the _PATH_RULES_SPECIFIER configuration as necessary.
          - Added enough pep8 categories to _all_categories() for the
            unit tests to pass.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the test_path_rules_specifier() unit test.

2010-02-27  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by David Levin.

        Added Python style checking to check-webkit-style using
        the third-party pep8 module (via autoinstall).

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

        * Scripts/webkitpy/style/checker.py:
          - Added PYTHON to FileType.
          - Updated ProcessorDispatcher to return a PythonProcessor
            for *.py files.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the ProcessorDispatcher unit tests for *.py files.

        * Scripts/webkitpy/style/processors/python.py: Added.
          - Added PythonProcessor class.

        * Scripts/webkitpy/style/processors/python_unittest.py: Added.
          - Added PythonProcessor unit tests.

        * Scripts/webkitpy/style/processors/python_unittest_input.py: Added.
          - Added a sample Python file to test the PythonProcessor.process()
            code path (since pep8 accepts a file path).

        * Scripts/webkitpy/style/unittests.py:
          - Updated the style unit test file to import python_unittest.py.

        * Scripts/webkitpy/style_references.py:
          - Adjusted style references to import pep8.

2010-02-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by David Levin.

        Rewrote autoinstall.py to support unzipping *.zip files after
        download, unzipping and extracting *.tar.gz files after download,
        and copying installed files to a destination directory.

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

        These changes will allow us to autoinstall pep8.py from the web
        and to put our third-party autoinstalled code in an explicit
        directory like webkitpy/thirdparty/autoinstalled. They should
        also speed up imports from autoinstalled *.zip packages slightly
        since *.pyc files cannot be generated when importing from
        zipped packages.

        * Scripts/webkitpy/__init__.py:
          - Updated the autoinstall lines to use the new autoinstall methods.
          - Added pep8.py to the list of auto-installed packages.

        * Scripts/webkitpy/bugzilla.py:
          - Updated mechanize import path.

        * Scripts/webkitpy/init/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.

        * Scripts/webkitpy/init/autoinstall.py: Added.
          - Added AutoInstaller class.
          - Added sample testing usage to __main__.

        * Scripts/webkitpy/networktransaction.py:
          - Updated mechanize import path.

        * Scripts/webkitpy/networktransaction_unittest.py:
          - Updated mechanize import path.

        * Scripts/webkitpy/statusserver.py:
          - Updated mechanize import path.

        * Scripts/webkitpy/thirdparty/autoinstall.py: Removed.
          - Replaced with rewritten autoinstall in init/autoinstall.py.

2010-02-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Adam Barth.

        Change the default port for new-run-webkit-tests when running on
        a Mac from 'chromium-mac' to 'mac'. Add a '--chromium' switch to
        pick up the default platform-specific version of chromium instead.

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

        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2010-02-26  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, build fix

        third time's the charm getting this path right?

        * pywebsocket/mod_pywebsocket/standalone.py:

2010-02-26  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, build fix.

        * pywebsocket/mod_pywebsocket/standalone.py:

2010-02-26  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Moving the script to the right location.

        * pywebsocket/mod_pywebsocket: Added.
        * pywebsocket/mod_pywebsocket/standalone.py: Copied from WebKitTools/pywebsocket/standalone.py.
        * pywebsocket/standalone.py: Removed.

2010-02-26  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, fixing the license.

        * pywebsocket/standalone.py:

2010-02-26  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding pywebsocket/standalone.py back to fix the Chromium webkit
        canaries. Once all layout tests pass, we can get in the patch that
        moves this directorty to WebKitTools/Scripts, update all Chromium
        scripts, and revert this patch.

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

        * pywebsocket: Added.
        * pywebsocket/standalone.py: Added.

2010-02-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Needs proper reporting of frame loader callbacks, in DRT
        https://bugs.webkit.org/show_bug.cgi?id=32170

        Fix reporting of unload handlers, so that it is emitted where
        needed, not after it.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewLoadFinished):
        (webViewDocumentLoadFinished):
        (createWebView):

2010-02-26  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Gustavo Noronha.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        [Gtk] Make DRT EventSender::keyDown to consider 'hardware_keycode' field when synthesizing an event.
        https://bugs.webkit.org/show_bug.cgi?id=35432

        When a directional key-press event (arrow keys, End, Home, PageUp,
        PageDown, etc) is synthesized by DRT's EventSender and it targets
        an editor (e.g. <input type=text>, <textare>, etc), event is processed
        by WebCore::EventHandler. On the other hand, if event target is not
        an editor, event is bubbled up to Gtk+ for processing. In such cases,
        if 'hardware_keycode' is not provided at event synthesize time
        its processing fails (at some point in gtk_bindings_activate_event),
        and no scroll action is performed.

        Unskip fast/events/node-event-anchor-lock.html

        * DumpRenderTree/win/EventSender.cpp:
        (keyDownCallback):
        * platform/gtk/Skipped:

2010-02-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        new-webkit-run-tests: Extraneous parenthesis in websocket_server.py
        https://bugs.webkit.org/show_bug.cgi?id=35436

         * Scripts/webkitpy/layout_tests/port/websocket_server.py: Removed extra paren.

2010-02-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by David Levin.

        Moved pywebsocket into the webkitpy/thirdparty directory and added
        an associated README.webkit file to the pywebsocket directory.
        This makes pywebsocket more consistent with the other third-party
        Python code in our repository.

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

        * Scripts/run-webkit-tests:
          - Updated paths to pywebsocket.

        * Scripts/run-webkit-websocketserver:
          - Updated paths to pywebsocket.

        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
          - Updated paths to pywebsocket.

        * Scripts/webkitpy/thirdparty/pywebsocket: Copied from WebKitTools/pywebsocket.
        * Scripts/webkitpy/thirdparty/pywebsocket/README.webkit: Added.
          - Added a file containing information about the contents
            of the pywebsocket directory. This will make it easier to
            understand where the third-party code came from and what
            local changes have been made.

        * pywebsocket: Removed.
        * pywebsocket/COPYING: Removed.
        * pywebsocket/MANIFEST.in: Removed.
        * pywebsocket/README: Removed.
        * pywebsocket/example: Removed.
        * pywebsocket/example/echo_client.py: Removed.
        * pywebsocket/example/echo_wsh.py: Removed.
        * pywebsocket/mod_pywebsocket: Removed.
        * pywebsocket/mod_pywebsocket/__init__.py: Removed.
        * pywebsocket/mod_pywebsocket/dispatch.py: Removed.
        * pywebsocket/mod_pywebsocket/handshake.py: Removed.
        * pywebsocket/mod_pywebsocket/headerparserhandler.py: Removed.
        * pywebsocket/mod_pywebsocket/memorizingfile.py: Removed.
        * pywebsocket/mod_pywebsocket/msgutil.py: Removed.
        * pywebsocket/mod_pywebsocket/standalone.py: Removed.
        * pywebsocket/mod_pywebsocket/util.py: Removed.
        * pywebsocket/setup.py: Removed.
        * pywebsocket/test: Removed.
        * pywebsocket/test/config.py: Removed.
        * pywebsocket/test/mock.py: Removed.
        * pywebsocket/test/run_all.py: Removed.
        * pywebsocket/test/test_dispatch.py: Removed.
        * pywebsocket/test/test_handshake.py: Removed.
        * pywebsocket/test/test_memorizingfile.py: Removed.
        * pywebsocket/test/test_mock.py: Removed.
        * pywebsocket/test/test_msgutil.py: Removed.
        * pywebsocket/test/test_util.py: Removed.
        * pywebsocket/test/testdata: Removed.
        * pywebsocket/test/testdata/handlers: Removed.
        * pywebsocket/test/testdata/handlers/blank_wsh.py: Removed.
        * pywebsocket/test/testdata/handlers/origin_check_wsh.py: Removed.
        * pywebsocket/test/testdata/handlers/sub: Removed.
        * pywebsocket/test/testdata/handlers/sub/exception_in_transfer_wsh.py: Removed.
        * pywebsocket/test/testdata/handlers/sub/no_wsh_at_the_end.py: Removed.
        * pywebsocket/test/testdata/handlers/sub/non_callable_wsh.py: Removed.
        * pywebsocket/test/testdata/handlers/sub/plain_wsh.py: Removed.
        * pywebsocket/test/testdata/handlers/sub/wrong_handshake_sig_wsh.py: Removed.
        * pywebsocket/test/testdata/handlers/sub/wrong_transfer_sig_wsh.py: Removed.

2010-02-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Changed the diff_parser module to log to a module-specific
        logging.logger rather than the root logger.

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

        * Scripts/webkitpy/diff_parser.py:

2010-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] LayoutTestController.numberOfPages() should have default parameters
        https://bugs.webkit.org/show_bug.cgi?id=35428

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp: maxViewWidth and maxViewHeight moved to
        LayoutTestController to converge to platform independent implementation.
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Initialization of maxViewWidth and maxViewHeight added.
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
         - Default parameters for LayoutTestController.numberOfPages() added.
         - maxViewWidth and maxViewHeight members added.

2010-02-26  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] added QWebSettings::setInspectorUrl() and QWebSettings::inspectorUrl()

        Enables the use of alternate Web Inspector frontends by changing
        the location of the frontend. The location is specified by providing 
            -inspector-url url
        as an argument to QtLauncher.

        This is required so that the Web Inspector may be run from an
        external process or an external tool such as Eclipse or Aptana may
        be used instead of the in-process Web Inspector UI.
        
        https://bugs.webkit.org/show_bug.cgi?id=35340

        * QtLauncher/main.cpp:
        (LauncherWindow::init):
        (LauncherApplication::handleUserOptions):

2010-02-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Add a 'passing' port implementation to new-run-webkit-tests that
        acts as a wrapper around an existing implementation but stubs out
        the actual test invocations (instead, the expected results are echoed
        back to the harness). This is useful for coverage and perf testing
        of the harness (especially perf testing as it essentially provides
        a lower bound on how fast the harness can run).

        Also added a --nostart-helper flag to new-run-webkit-tests so that
        you can skip starting the layout_test_helper and actually run the
        harness even if you don't have a build of that port.

        Also fix a bug in the 'test' port implementation to actually
        create the results directory under /tmp instead of /.

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

        * Scripts/webkitpy/layout_tests/port/factory.py: Modified.
        * Scripts/webkitpy/layout_tests/port/passing.py: Added.
        * Scripts/webkitpy/layout_tests/port/test.py: Added.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Modified.

2010-02-25  Eric Seidel  <eric@webkit.org>

        Fix typo in my last change.  No review.

        Rename run-chromium-webkit-tests to new-run-webkit-tests to stop confusion
        https://bugs.webkit.org/show_bug.cgi?id=35408

        * Scripts/new-run-webkit-tests:

2010-02-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename run-chromium-webkit-tests to new-run-webkit-tests to stop confusion
        https://bugs.webkit.org/show_bug.cgi?id=35408

        * Scripts/new-run-webkit-tests: Added.
        * Scripts/run-chromium-webkit-tests: Removed.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Renamed from WebKitTools/Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py.

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

        Reviewed by David Levin.

        EWS leaks memory slowly
        https://bugs.webkit.org/show_bug.cgi?id=35395

        The EWS bots leak memory very slowly.  If you run them for about a
        month, each one will take up around 1 GB of virutal memory.  If you run
        several of them on one machine, you'll eventually exhaust all available
        memory and grind the bots to a halt.

        This patch introduces a --exit-after-iteration option to the queues so
        that we run them for a finite amount of time.  Once they exit and
        restart, they'll reclaim the leaked memory.  I'm not sure how many
        iterations I'll end up running them for.  I'll need to sort that out
        operationally, but my initial guess is around 1000.

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

2010-02-25  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        Qt WebGL support

        Adds toggling of WebGL support to QtLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=35153

        * QtLauncher/main.cpp:
        (LauncherWindow::toggleWebGL):
        (LauncherWindow::setupUI):

2010-02-25  Ben Murdoch  <benm@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        The target element of a Touch should be the target where that touch originated, not where it is now.
        https://bugs.webkit.org/show_bug.cgi?id=34585

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint): Fix a bug where touch points were not being given unique ids.

2010-02-24  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher has a border when running on QGraphicsView mode
        https://bugs.webkit.org/show_bug.cgi?id=35352

        Fix 2-pixels frame on each border of QtLauncher when running on QGraphicsView mode.

        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):

2010-02-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by David Levin.

        When the run-chromium-webkit-tests code was landed and the code was
        refactored into the 'port' package, I accidentally broke using
        http_server.py or websocket_server.py as command-line scripts
        (the constructors needed a port object they weren't getting). This
        change fixes them so that --server start|stop actually works.

        As a part of this, the two files need to be able to call port.get(),
        but doing that is awkward from a file inside the package, so I moved
        get() into factory.py and imported that into __init__.py so that
        http_server.py and websocket_server.py can just import factory.

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

        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/factory.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

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

        Reviewed by David Levin.

        Fix the function signature for check_sys_deps on the mac port, and
        fix the ordering of port_obj.check_sys_deps() and
        port_obj.start_helper() (helper needs to be started before we check
        the system configuration).

        http://bugs.webkit.org/show_bug.cgi?id=35367

        * Scripts/webkitpy/layout_tests/port/mac.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py:

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

        Reviewed by Eric Seidel.

        Provide default username parameter to SVN.commit_with_message().

        * Scripts/webkitpy/scm.py:

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

        Reviewed by Eric Siedel.

        Check the proper directory for a WebKit SVN version (Chromium does
        not check out the entire WebKit tree directly, but rather pulls
        individual subdirectories. So, checking for the SVN version in
        WebKit/WebCore rather than just in WebKit works more reliably across
        different ports).

        http://bugs.webkit.org/show_bug.cgi?id=35321

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

2010-02-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35357
        Two editing tests fail after DumpRenderTree run loop changes

        AppKit decided that it wanted to group all editing commands for some reason (and thus undo
        reverted them all at once).

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Reverted the change that made DumpRenderTree use -[NSApplication run].
        (runTest): Ditto.
        (-[DumpRenderTreeApplication isRunning]): Override isRunning with a function that always
        returns YES. This is another way to make the Java plug-in work.

2010-02-23  Adam Roben  <aroben@apple.com>

        Make commit-log-editor find just-added ChangeLog files

        Fixes <http://webkit.org/b/35294> commit-log-editor doesn't find
        just-added ChangeLog files

        Reviewed by Dave Levin.

        * Scripts/commit-log-editor:
        (top level): Modified the regular expression that's used to find
        modified ChangeLog files to also look for just-added ChangeLog files.

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

        Reviewed by Darin Adler.

        check-webkit-style false positive for WebCore forwarding header
        https://bugs.webkit.org/show_bug.cgi?id=34604

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

2010-02-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=22602
        Enable Java in DumpRenderTree (on Mac)

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (exitApplicationRunLoop):
        (dump):
        (runTest):
        DumpRenderTree now runs an NSApplication, not just an event loop. This way, the Java plug-in
        can start without freezing.

        * Scripts/run-webkit-tests: Compile java sources in LayputTests/java.

2010-02-23  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Need a final integration between QtLauncher and QGVLauncher
        https://bugs.webkit.org/show_bug.cgi?id=35292

        WebKit coding style fixes.

        * QtLauncher/main.cpp:
        (LauncherWindow::resetZoom):

2010-02-23  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Need a final integration between QtLauncher and QGVLauncher
        https://bugs.webkit.org/show_bug.cgi?id=35292

        Add cloneWindow feature to QtLauncher, when running on QGraphicsView mode.

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::init):
        (LauncherWindow::cloneWindow):
        (LauncherWindow::setupUI):

2010-02-23  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix handling of check_wdiff_install when wdiff isn't installed.

        http://bugs.webkit.org/show_bug.cgi?id=35304

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

2010-02-23  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by NOBODY.

        Fix false positives for 'delete *pointer' statements.
        http://webkit.org/b/35235

        * WebKitTools/Scripts/webkitpy/style/processors/cpp.py:

2010-02-23  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Gtk] Implement layoutTestController.numberOfPages
        https://bugs.webkit.org/show_bug.cgi?id=35228

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

2010-02-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher should not use internal JavaScriptCore and WebCore interfaces
        https://bugs.webkit.org/show_bug.cgi?id=35248

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/utils.h:

2010-02-23  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Prompts a person for their SVN username if not already cached (by Subversion).

        Currently, webkit-patch is unable to commit to the SVN repo. unless the
        WebKit SVN username is already cached (from of a prior commit by hand)
        because "svn commit" (called by webkit-patch) defaults to using the system
        login name unless the username is already cached or specified on the
        command line.

        * Scripts/webkitpy/scm.py: Added methods SVN.has_authorization_for_realm and
        modified SVN.commit_with_message to call it. Added optional username parameter
        to method SVN.commit_with_message.
        * Scripts/webkitpy/scm_unittest.py: Added unit test methods: SVNTest.test_commit_with_username,
        SVNTest.test_has_authorization_for_realm, and SVNTest.test_not_have_authorization_for_realm.

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

        Reviewed by Eric Siedel.

        Add more checking for missing binaries and packages to check_sys_deps()

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

        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py:

2010-02-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        [Gtk] check-webkit-style: GTK style should be allowed in WebKitTools/DumpRenderTree/gtk
        https://bugs.webkit.org/show_bug.cgi?id=35229

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

2010-02-22  James Robinson  <jamesr@chromium.org>

        Unreviewed. Adding myself to committers list.

        * Scripts/webkitpy/committers.py:

2010-02-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Remove DRT hack that turns off hardware acceleration with older QuickTimes
        https://bugs.webkit.org/show_bug.cgi?id=35275
        
        Now that WebKit does a version check to avoid a QuickTime-related
        crash (r55100), DumpRenderTree does not need to.

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

2010-02-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Build the DRT in debug on Mac OS X

        * DumpRenderTree/qt/DumpRenderTree.pro:

2010-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add support for layout tests on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=31589

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/main.cpp:
        (main):

2010-02-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Moved simplejson into webkitpy/thirdparty directory.

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

        * Scripts/run-chromium-webkit-tests:
          - Added webkitpy/thirdparty to the script's search path.

        * Scripts/webkitpy/thirdparty/simplejson: Copied from WebKitTools/simplejson.
          - Copied simplejson directory.

        * simplejson: Removed.
        * simplejson/LICENSE.txt: Removed.
        * simplejson/README.txt: Removed.
        * simplejson/__init__.py: Removed.
        * simplejson/_speedups.c: Removed.
        * simplejson/decoder.py: Removed.
        * simplejson/encoder.py: Removed.
        * simplejson/jsonfilter.py: Removed.
        * simplejson/scanner.py: Removed.

2010-02-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Moved BeautifulSoup to webkitpy/thirdparty directory.

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

        * Scripts/webkitpy/BeautifulSoup.py: Removed.
          - Moved to webkitpy/thirdparty.

        * Scripts/webkitpy/bugzilla.py:
          - Updated import statement.

        * Scripts/webkitpy/bugzilla_unittest.py:
          - Updated import statement.

        * Scripts/webkitpy/buildbot.py:
          - Updated import statement.

        * Scripts/webkitpy/buildbot_unittest.py:
          - Updated import statement.

        * Scripts/webkitpy/statusserver.py:
          - Updated import statement.

        * Scripts/webkitpy/thirdparty/BeautifulSoup.py: Copied from WebKitTools/Scripts/webkitpy/BeautifulSoup.py.

2010-02-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Created a directory for third-party Python code, and moved
        autoinstall.py into it.

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

        * Scripts/webkitpy/__init__.py:
          - Updated "import autoinstall" statement.

        * Scripts/webkitpy/autoinstall.py: Removed.
          - Moved to thirdparty/autoinstall.py.

        * Scripts/webkitpy/thirdparty: Added.
        * Scripts/webkitpy/thirdparty/__init__.py: Added.
        * Scripts/webkitpy/thirdparty/autoinstall.py: Copied from WebKitTools/Scripts/webkitpy/autoinstall.py.

2010-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed, obvious fix for the python failure in our new buildbot
        step:

        http://build.webkit.org/builders/GTK Linux 32-bit Release/builds/9075/steps/API tests/logs/err.text

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

2010-02-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
        https://bugs.webkit.org/show_bug.cgi?id=35147

        * Scripts/build-webkit: Handle new flag.

2010-02-19  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Shinichiro Hamaji.

        [style-queue] should not complain about identifier names with underscores under WebKit/efl/ewk/
        https://bugs.webkit.org/show_bug.cgi?id=35091

        White list unix_hacker_style names in WebKit/efl/ewk because these
        are used in the EFL API.

        * Scripts/webkitpy/style/checker.py:
         - Filter out readability/naming on WebKit/efl/ewk.

2010-02-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out "prepare-rollout" from "rollout" and make --complete-rollout default
        https://bugs.webkit.org/show_bug.cgi?id=33745

        * Scripts/webkitpy/commands/download.py:
         - Add a new AbstractRolloutPrepCommand to share code between PrepareRollout and Rollout
         - Add PrepareRollout
        * Scripts/webkitpy/commands/download_unittest.py: Test PrepareRollout, remove CompleteRollout tests.
        * Scripts/webkitpy/steps/__init__.py: include ReopenBugAfterRollout step.
        * Scripts/webkitpy/steps/completerollout.py: Removed.
        * Scripts/webkitpy/steps/options.py: remove complete_rollout
        * Scripts/webkitpy/steps/reopenbugafterrollout.py: Added.

2010-02-19  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Need a final integration between QtLauncher and QGVLauncher
        https://bugs.webkit.org/show_bug.cgi?id=35161

        Add animated flip support to QtLauncher when running on QGraphicsView mode.

        * QtLauncher/main.cpp:
        (LauncherWindow::initializeView):
        (LauncherWindow::setupUI):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::animatedFlip):
        (WebViewGraphicsBased::animatedYFlip):
        * QtLauncher/webview.h:
        (WebViewGraphicsBased::setYRotation):
        (WebViewGraphicsBased::yRotation):

2010-02-19  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement textZoomIn() and textZoomOut() in DRT's EventSender, add results
        for passing new tests and unskip the passing ones from the Skipped list.
        https://bugs.webkit.org/show_bug.cgi?id=35159

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

2010-02-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Clean-up the handling of HTML5 persistent data for LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=35004

        DumpRenderTreeQt.cpp calls QWebSettings::enablePersistentStorage which sets up 
        and enables all HTML5 persistent data. All the other calls for setting the 
        persistent path or enabling the persistent feature are redundant. 

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage): No need to enable AppCache again.
        * DumpRenderTree/qt/main.cpp:
        (main): No need to setup and enable HTML5 LocalStorage again.

2010-02-19  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Send the context menu event from contextClick() of EventSender
        and do not show context menu in DRT.

        LayoutTests:
            fast/events/contextmenu-scrolled-page-with-frame.html

        [Qt] DRT: Send context menu event from EventSender
        https://bugs.webkit.org/show_bug.cgi?id=35131

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::contextClick):

2010-02-18  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Moved parsing-related code to a separate file. Also increased
        the unit test coverage in some affected areas.

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

        This revision contains no new functionality.

        * Scripts/check-webkit-style:
          - Adjusted to call check_webkit_style_parser().

        * Scripts/webkitpy/style/checker.py:
          - Added check_webkit_style_parser() to pass checker.py
            configuration settings to optparser.py.
          - Moved _create_usage() and the CommandOptionValues,
            DefaultCommandOptionValues, ArgumentPrinter, and
            ArgumentParser classes to optparser.py.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Moved the ProcessorOptionsTest, ArgumentPrinterTest, and
            ArgumentParserTest classes to optparser.py.
          - Added the CheckWebKitStyleFunctionTest class to check
            the check_webkit_style_configuration() and
            check_webkit_style_parser() code paths.

        * Scripts/webkitpy/style/optparser.py: Added.
          - From checker.py, added _create_usage() and the
            CommandOptionValues, DefaultCommandOptionValues,
            ArgumentPrinter, and ArgumentParser classes.
          - In the ArgumentParser constructor--
            - Added all_categories as a required parameter.
            - Removed the default value from the default_options parameter.

        * Scripts/webkitpy/style/optparser_unittest.py: Added.
          - From checker_unittest.py, added the ProcessorOptionsTest,
            ArgumentPrinterTest, and ArgumentParserTest classes.
          - Added the CreateUsageTest class to test _create_usage().

        * Scripts/webkitpy/style/unittests.py:
          - Added optparser_unittest import.

2010-02-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35134
        <rdar://problem/7246280> Crash when a plugin calls NPN_SetStatus(0)

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testSetStatus):
        (pluginInvoke):
        Added a setStatus() method.

2010-02-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Particularly constructed WebFrames can try to access a null HistoryItem
        <rdar://problem/7638892> and https://bugs.webkit.org/show_bug.cgi?id=35063

        Add the specific ability to test this API pattern. 

        For now only on Mac, perhaps on the main Windows port later, probably not relevant for other ports.

        * DumpRenderTree/LayoutTestController.cpp:
        (apiTestNewWindowDataLoadBaseURLCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (-[APITestDelegate initWithCompletionCondition:]):
        (-[APITestDelegate webView:didFailLoadWithError:forFrame:]):
        (-[APITestDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[APITestDelegate webView:didFinishLoadForFrame:]):
        (LayoutTestController::apiTestNewWindowDataLoadBaseURL): Create a WebView, do a loadData: in its
          mainFrame, and synchronously wait for main load completion.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::apiTestNewWindowDataLoadBaseURL):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::apiTestNewWindowDataLoadBaseURL):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::apiTestNewWindowDataLoadBaseURL):

2010-02-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Teach resolve-ChangeLogs to act as a merge-driver for Git

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

        To enable automatic merging of ChangeLog files, use the following command:

        git config merge.changelog.driver "resolve-ChangeLogs --merge-driver %O %A %B"

        The driver always works in "downstream" merge mode, meaning
        it will always put the user's changelog entries on top.

        * Scripts/resolve-ChangeLogs:

2009-12-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Eric Seidel.

        Enable running of GTK+ API tests.

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

2010-02-18  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adam Barth.

        debug-safari doesn't pass --debug option to gdb-safari on MacOSX
        https://bugs.webkit.org/show_bug.cgi?id=34411

        * Scripts/webkitdirs.pm:

2010-02-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        run-chromium-webkit-tests --platform=mac-leopard needs to run build-dumprendertree
        https://bugs.webkit.org/show_bug.cgi?id=35053

        * Scripts/webkitpy/layout_tests/port/base.py: Add script_path() function for finding scripts.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Remove unused argument.
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Make sure that calling webkit-build-directory works even if Scripts/ is not in the user's path.
         - Call build-dumprendertree (and make sure it succeeds) before running the tests.

2010-02-16  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored check-webkit-style's ProcessorOptions class into two
        classes. This revision contains no new functionality.

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

        Divided the ProcessorOptions class into a CommandOptionValues
        class (the result of parsing the command-line options) and
        a StyleCheckerConfiguration class (which configures the main
        StyleChecker).

        * Scripts/check-webkit-style:
          - Updated main() to convert the parsed command option values
            to a StyleCheckConfiguration instance prior to constructing
            a StyleChecker.

        * Scripts/webkitpy/style/checker.py:
          - Added check_webkit_style_configuration() to convert a
            CommandOptionValues instance into a StyleCheckerConfiguration
            instance.
          - Renamed the ProcessorOptions class to CommandOptionValues.
          - In the CommandOptionValues class--
            - Replaced the filter_configuration attribute with the
              simpler filter_rules attribute.
            - Removed the max_reports_per_error attribute.
            - Moved the is_reportable() method to the new
              StyleCheckerConfiguration class.
          - Removed the base_filter_rules attribute from the
            DefaultCommandOptionValues class.
          - In the ArgumentParser class--
            - Added base_filter_rules to the constructor.
            - Changed the parse() method to return a CommandOptionValues
              instance instead of a ProcessorOptions instance.
          - Created a StyleCheckerConfiguration class.
            - Added the data attributes max_reports_per_category,
              stderr_write, and verbosity.
            - Added is_reportable() (moved from the ProcessorOptions
              class) and write_style_error() (moved from the
              DefaultStyleErrorHandler class).
          - In the StyleChecker class--
            - Replaced the ProcessorOptions options attribute with the
              StyleCheckerConfiguration _configuration attribute.
            - Removed the _stderr_write attribute.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the existing unit test classes as necessary.
          - Added a StyleCheckerConfigurationTest class.

        * Scripts/webkitpy/style/error_handlers.py:
          - Updated the DefaultStyleErrorHandler class to accept a
            StyleCheckerConfiguration instance instead of a ProcessorOptions
            instance and an stderr_write method.

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Updated the unit test classes as necessary.

        * Scripts/webkitpy/style/filter.py:
          - Addressed the FIXME in the FilterConfiguration class to change
            the user_rules attribute to _user_rules (since it is now
            accessed only internally).

        * Scripts/webkitpy/style/filter_unittest.py:
          - Updated to reflect the change from user_rules to _user_rules.

2010-02-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Share the DRT values maxViewWidth/Height among ports
        https://bugs.webkit.org/show_bug.cgi?id=34474

        * DumpRenderTree/LayoutTestController.cpp:
        (pageNumberForElementByIdCallback):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::maxViewWidth):
        (LayoutTestController::maxViewHeight):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (sizeWebViewForCurrentTest):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump):
        (createWebViewAndOffscreenWindow):

2010-02-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Win] Implement test functions for printing
        https://bugs.webkit.org/show_bug.cgi?id=34570

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pageNumberForElementById):
        (LayoutTestController::numberOfPages):

2010-02-17  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        websocket/tests/cookies/httponly-cookie.pl fails every time under run-chromium-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=35001

        * Scripts/webkitpy/layout_tests/port/websocket_server.py: add -x flag to run pywebsocket.

2010-02-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style: Misses variables that contain underscores.
        https://bugs.webkit.org/show_bug.cgi?id=33724

        - Check identifiers whose types are unsigned.
        - Check bitfields properly.

        * Scripts/webkitpy/style/processors/cpp.py:
        * Scripts/webkitpy/style/processors/cpp_unittest.py:

2010-02-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        check-webkit-style should report the number of files checked
        https://bugs.webkit.org/show_bug.cgi?id=34971

        * Scripts/check-webkit-style:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:

2010-02-17  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Ariya Hidayat.

        Make possible Qt DRT to get total number of pages to be printed

        LayoutTests:
            printing/numberOfPages.html

        [Qt] DRT: Get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34955

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update to use new property name.

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

2010-02-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Ariya Hidayat.

        Remove some warnings seen when building Qt
        https://bugs.webkit.org/show_bug.cgi?id=35017

        Using a machine without the needed tools to build WebKit leads to
        several errors and warnings.

        * Scripts/webkitdirs.pm: Refactored the code testing the command's
        presence into a commandExists routine. While doing so removed, stderr
        output as it usually does not give anything more than our message. Also
        added a Qt check for qmake that was missing.

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Gustavo Noronha.

        Disable Java by default in DRT.

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

2010-02-15  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Some minor check-webkit-style code clean-ups.  This revision
        contains no new functionality.

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

        * Scripts/check-webkit-style:
          - Replaced the call to webkit_argument_defaults() with a
            default parameter in the ArgumentParser constructor.

        * Scripts/webkitpy/style/checker.py:
          - Removed the WEBKIT prefix from the default global variables.
          - Prefixed several of the global variables with an underscore
            to reflect that they are used internally.
          - Renamed _DEFAULT_FILTER_RULES to _BASE_FILTER_RULES.
          - Addressed a FIXME by changing the _PATH_RULES_SPECIFIER
            configuration from list-tuple pairs to list-list pairs.
          - Renamed style_categories() to _all_categories().
          - Renamed webkit_argument_defaults() to _check_webkit_style_defaults().
          - Renamed the ArgumentDefaults class to DefaultCommandOptionValues.
          - In the ArgumentParser class--
            - Renamed the doc_print attribute to stderr_write.
            - Other minor updates.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated the import statements and unit test classes as necessary.
          - Added assertions to test _PATH_RULES_SPECIFIER more fully.

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Updated the unit test classes as necessary.
          - Changed StyleErrorHandlerTestBase to store a list of error
            messages rather than just the last one.

        * Scripts/webkitpy/style/filter.py:
          - Altered FilterConfiguration._path_rules_from_path()
            to convert the path_rules list to a tuple.

        * Scripts/webkitpy/style/filter_unittest.py:
          - Updated the unit tests to reflect the change from tuples to
            lists in the _PATH_RULES_SPECIFIER configuration variable.

2010-02-16  Mark Rowe  <mrowe@apple.com>

        Let's not check garbage in to common build scripts and hose the world now eh guys?

        * Scripts/webkitdirs.pm:

2010-02-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        re-factor Skipped list parsing code into multiple functions and unit test it
        https://bugs.webkit.org/show_bug.cgi?id=34986

        * Scripts/test-webkitpy: Add new unit test.
        * Scripts/webkitpy/layout_tests/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
        * Scripts/webkitpy/layout_tests/port/mac.py: Split parsing function into multiple functions for testing.
        * Scripts/webkitpy/layout_tests/port/mac_unittest.py: Added.

2010-02-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Enable 'auto-resize-window' in our DRT.

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

2010-02-15  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Darin Adler.

        check-webkit-style should not complain about NULL sentinel in calls to g_strconcat and g_strjoin
        https://bugs.webkit.org/show_bug.cgi?id=34834

        * Scripts/webkitpy/style/processors/cpp.py:
        * Scripts/webkitpy/style/processors/cpp_unittest.py:

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7130641> Browser objects identity is not preserved by Safari

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke): Added methods for checking object identity (via refcount).

2010-02-15  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] DRT: Support evaluateInWebInspector(), setTimelineProfilingEnabled().

        Support LayoutTestController.evaluateInWebInspector(), setTimelineProfilingEnabled() in Qt DRT.

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

        This allows the following tests to pass:

        inspector/console-format-collections.html
        inspector/styles-iframe.html
        inspector/syntax-highlight-css.html
        inspector/syntax-highlight-javascript.html
        inspector/timeline-enum-stability.html
        inspector/timeline-layout.html
        inspector/timeline-mark-timeline.html
        inspector/timeline-paint.html
        inspector/timeline-parse-html.html
        inspector/timeline-recalculate-styles.html
        inspector/timeline-script-tag-1.html
        inspector/timeline-script-tag-2.html
        inspector/timeline-trivial.html
        inspector/cookie-resource-match.html
        inspector/elements-img-tooltip.html
        inspector/elements-panel-selection-on-refresh.html
        inspector/inspected-objects-not-overriden.html
        inspector/timeline-event-dispatch.html
        inspector/timeline-network-resource.html
        inspector/elements-panel-rewrite-href.html
        inspector/console-dir.html
        inspector/console-dirxml.html
        inspector/console-format.html
        inspector/console-tests.html
        inspector/elements-panel-structure.html
        inspector/evaluate-in-frontend.html
        inspector/console-clear.html

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::isWebInspectorTest):
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        (WebCore::DumpRenderTree::display):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::showWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        (LayoutTestController::setTimelineProfilingEnabled):
        (LayoutTestController::display):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-02-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Update rebaseline-chromium-webkit-tests to work with the new code
        structure (port objects instead of path_utils and platform_utils).

        Added a path_to_test_expectations_file() to the Port interface.
  
        Fixed a bug in the chromium_* platform implementations where the
        'target' option was assumed to be set.

        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/test.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:

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

        Reviewed by Darin Adler.

        webkit-build-directory misuses terms
        https://bugs.webkit.org/show_bug.cgi?id=34822

        * Scripts/webkit-build-directory:
         - Add --top-level and --configuration options and make using one of them required.
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Use --top-level instead of --base.

2010-02-14  Chang Shu  <Chang.Shu@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Enable appcache feature.
        https://bugs.webkit.org/show_bug.cgi?id=34713

        Re-land r54543 without the change in DumpRenderTree/qt/main.cpp.
        Persistent storage for AppCache is already initialized in
        DumpRenderTreeQt.cpp.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):

2010-02-12  Chang Shu  <Chang.Shu@nokia.com>

        Not Reviewed.

        Change case of my email address as a work-around for the following bug.
        https://bugs.webkit.org/show_bug.cgi?id=34717

        * Scripts/webkitpy/committers.py:

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

        Ignore compiled Python in more of webkitpy.

        * Scripts/webkitpy/style/processors: Added property svn:ignore.

2010-02-12  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Qt DRT now dump the frame loader callbacks when LayoutTestController()
        method is called.

        LayoutTests:
            http/tests/security/mixedContent/data-url-script-in-iframe.html
            http/tests/security/mixedContent/empty-url-plugin-in-frame.html
            http/tests/security/mixedContent/insecure-css-in-iframe.html
            http/tests/security/mixedContent/insecure-iframe-in-iframe.html
            http/tests/security/mixedContent/insecure-image-in-iframe.html
            http/tests/security/mixedContent/insecure-plugin-in-iframe.html
            http/tests/security/mixedContent/insecure-script-in-iframe.html
            http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html
            http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html

        [Qt] Make possible Qt DRT dump frame load callbacks
        https://bugs.webkit.org/show_bug.cgi?id=34702

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::dumpFrameLoadCallbacks):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-02-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Antti Koivisto.

        Make QtLauncher somewhat useable on S60.

        Show the window fullscreen to make scrollbars appear, resize
        the toolbar buttons to 16x16 to give more screen space to
        web content and moved the location lineedit into a separate
        line.

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        * QtLauncher/mainwindow.cpp:
        (MainWindow::buildUI):

2010-02-12  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Support frameset flattening
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add FrameSet Flattening support to Mac DRT.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setFrameSetFlatteningEnabled):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setFrameSetFlatteningEnabled):
        * DumpRenderTree/LayoutTestController.cpp:
        (setFrameSetFlatteningEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setFrameSetFlatteningEnabled):

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

        Reviewed by Eric Seidel.

        Fix typos in driver_test.py 

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

        * Scripts/webkitpy/layout_tests/driver_test.py:

2010-02-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make it possible to toggle the use of QGraphicsView in QtLauncher at run-time
        https://bugs.webkit.org/show_bug.cgi?id=34844

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::initializeView):
        (LauncherWindow::setupUI):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket ignores HttpOnly cookies, but should use in Handshake.
        https://bugs.webkit.org/show_bug.cgi?id=34289

        Update pywebsocket to 0.4.8, which supports cgi directories.
        run-webkit-tests and run-webkit-websocketserver will run
        pywebsocket, specifying /websocket/test/cookies as cgi directory.

        * Scripts/run-webkit-tests:
        * Scripts/run-webkit-websocketserver:
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:

2010-02-11  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Dan Bernstein.

        [Mac] Duplicated setXSSAuditorEnabled preference at Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=34798

        Remove duplicated setXSSAuditorEnabled preference at Mac DRT

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

2010-02-11  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        webkitdirs.pm has a crazy amount of duplicated feature detection code
        https://bugs.webkit.org/show_bug.cgi?id=34869

        * Scripts/build-webkit: Fix typo which broke bots.

2010-02-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        webkitdirs.pm has a crazy amount of duplicated feature detection code
        https://bugs.webkit.org/show_bug.cgi?id=34869

        * Scripts/build-webkit: Use the new hotness.
        * Scripts/run-webkit-tests: ditto
        * Scripts/webkitdirs.pm: Remove a bunch of bad duplicate code.
        * Scripts/webkitperl/features.pm: Added.
         - Simplified the 10 methods in webkitdirs.pm into 2 exported methods in this new file.

2010-02-11  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

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

        Makes method User.prompt static and adds the parameter repeat
        to prompt the user up to repeat times.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/bugzilla.py: Substituted method User.prompt for method raw_input.
        * Scripts/webkitpy/commands/upload.py: Ditto
        * Scripts/webkitpy/credentials.py: Ditto
        * Scripts/mock_bugzillatool.py: Updated prototype of MockUser.prompt to match User.prompt.
        * Scripts/webkitpy/user.py: Made method prompt static and added parameter repeat.
        * Scripts/webkitpy/user_unittest.py: Added.

2010-02-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Allow underscored identifiers in CSSParser.cpp

        Flex (http://flex.sourceforge.net/) uses identifiers named as yy_*.
        WebCore/css/CSSParser.cpp needs to handle some such identifiers.
        We should relax the style rule for the file to allow underscored identifiers.

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

        * Scripts/webkitpy/style/checker.py:

2010-02-11  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Remove DrawTest, the application I used when bringing up SVG support on the Mac.
        The code hasn't been touched (or used) in years.  No sense in keeping it in trunk.

        * Scripts/build-drawtest: Removed.
        * Scripts/run-drawtest: Removed.
        * DrawTest: Removed.

2010-02-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Need a command to clear r+ on obsolete patches in the pending-commit queue.
        https://bugs.webkit.org/show_bug.cgi?id=34863

        Unfortunately our http://webkit.org/pending-commit bugzilla query is not
        smart enough to ignore obsolete patches, so bugs show up there which are
        still open, but do not have patches ready for landing on them.
        This new command "clean-pending-commit" will remove r+ from obsolete patches
        in the pending-commit list.

        * Scripts/test-webkitpy: Add grammar_unittest
        * Scripts/webkitpy/commands/upload.py: Add clean-pending-commit and make assign-to-committer ignore cq+'d patches.
        * Scripts/webkitpy/grammar.py: Add join_with_separators
        * Scripts/webkitpy/grammar_unittest.py: Added.

2010-02-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        run-chromium-webkit-tests fails random pixel tests on Mac
        https://bugs.webkit.org/show_bug.cgi?id=34862

        This is due to the fact that the Mac port has an
        invalid path to the image diff tool.  Currently it points
        to image_diff even though ImageDiff would be correct.  We
        can't change it to the right path yet without causing the
        script to hang.  ImageDiff expects to be long-running and
        be passed image data over stdin.  image_diff (chromium's fork)
        expects to be passed command line arguments.
        This fix works around the random failures by disabling pixel
        tests on mac and logging if the user was trying to run with pixel
        tests enabled.

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

2010-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Adam Roben.
        Try to fix build breakage from r54665.
        
        * Scripts/check-for-global-initializers:

2010-02-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Make it possible to toggle accelerated compositing from the menu
        at run-time.

        * QtLauncher/main.cpp:
        (LauncherWindow::toggleAcceleratedCompositing):
        (LauncherWindow::setupUI):

2010-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * Scripts/build-webkit:

2010-02-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Fix various minor bugs keeping run-chromium-webkit-tests from actually
        working on the linux and win ports of Chromium.

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

        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/base.py:
        * Scripts/webkitpy/layout_tests/port/chromium.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:

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

        Reviewed by David Levin.

        run-chromium-webkit-tests --platform=mac-leopard crashes when using a custom build directory
        https://bugs.webkit.org/show_bug.cgi?id=34817

        This doesn't fix the root cause of us not
        correctly failing when support binaries are missing.
        This only causes the DumpRenderTree binary not to be
        missing in the custom build directory case.
        Later patches will make us correctly fail fast when
        support binaries (like DumpRenderTree or ImageDiff) are missing.

        * Scripts/webkit-build-directory: Added.
         - Need a way to re-use the perl logic for finding build directories in non-perl scripts.
        * Scripts/webkitpy/layout_tests/port/base.py: Add a FIXME.
        * Scripts/webkitpy/layout_tests/port/mac.py:
         - Call webkit-build-directory to find the build directory instead of assuming "WebKitBuild"
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Add FIXMEs.

2010-02-10  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Add Windows complex text support.
        
        https://bugs.webkit.org/show_bug.cgi?id=34759

        * wx/build/settings.py:

2010-02-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. Add stub for new LayoutTestController method.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::numberOfPages):

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

        Unreviewed. Roll out r54626, because it broke GTK and Win build.
        https://bugs.webkit.org/show_bug.cgi?id=32717

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:

2010-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Support frameset flattening
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add FrameSet Flattening support to Mac DRT.

        * DumpRenderTree/LayoutTestController.cpp:
        (setFrameSetFlatteningEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setFrameSetFlatteningEnabled):

2010-02-08  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7436875> Crash in Flash when visiting
        http://www.cctv.com/default.shtml (WER ID 819298200) [watson 2502260]

        Reviewed by Darin Adler.

        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (executeScript):
        Moved to an earlier point in the file.
        (NPP_New):
        If the plug-in has an onDestroy attribute, store its value.
        (NPP_Destroy):
        If the plug-in has code to run on destruction, run it and free it.

2010-02-10  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Implement pageNumberForElementById() method in Qt DRT LayoutTestController,
        to make Qt DRT able to get page number.

        LayoutTests:
            printing/page-break-always.html
            printing/pageNumerForElementById.html
            printing/css2.1/page-break-before-000.html
            printing/css2.1/page-break-after-000.html
            printing/css2.1/page-break-after-004.html
            printing/css2.1/page-break-before-001.html
            printing/css2.1/page-break-after-001.html
            printing/css2.1/page-break-after-002.html
            printing/css2.1/page-break-before-002.html
            printing/css2.1/page-break-inside-000.html

        [Qt] Make possible Qt DRT get a page number for element by ID
        https://bugs.webkit.org/show_bug.cgi?id=34777

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::pageNumberForElementById):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-02-10  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Adam Barth.

        Make run-iexploder-tests work on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=34748

        Extract the platform dependant Apache configuration checking code in httpd.pm to a separate function
        called getHTTPDConfigPathForTestDirectory and use run-launcher instead of run-safari if run on Linux.

        * Scripts/run-iexploder-tests:
        * Scripts/webkitperl/httpd.pm:

2010-02-09  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed. Roll-out r54543, because layout tests crash in debug mode.
        https://bugs.webkit.org/show_bug.cgi?id=34713

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/main.cpp:
        (main):

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

        Unreviewed; added myself to committers

        * Scripts/webkitpy/committers.py:

2010-02-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Webkit in Qt does not have window.showModalDialog
        https://bugs.webkit.org/show_bug.cgi?id=25585

        Set the modality flag when createWindow is called with window type WebWindowDialog.

        * QtLauncher/main.cpp:
        (WebPage::createWindow):

2010-02-09  Andras Becsi  <abecsi@webkit.org>

        Unreviewed trivial warning fix.

        * Scripts/build-webkit:

2010-02-09 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        Add possibility of passing parameters to build-webkit by environment variable,
        because the buildbot slaves can't control the arguments.

        * Scripts/build-webkit:

2010-02-09  Chang Shu  <Chang.Shu@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Enable appcache feature.
        https://bugs.webkit.org/show_bug.cgi?id=34713


        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/main.cpp:
        (main):

2010-02-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34699

        * DumpRenderTree/LayoutTestController.cpp:
        (parsePageParameters):
        (pageNumberForElementByIdCallback):
        (numberOfPagesCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::numberOfPages):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::numberOfPages):

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34727
        Assertion crashes and freezes when plug-in property access results in an exception

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginGetProperty): Raise an exception when accessing a particular property.
        (pluginSetProperty): Ditto.
        (pluginInvoke): Added methods to get and set host object properties.

2010-02-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Backport No'am Rosenthal's frame rate measurement

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherApplication::handleUserOptions):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::enableFrameRateMeasurement):
        (WebViewGraphicsBased::updateFrameRate):
        (WebViewGraphicsBased::paintEvent):
        * QtLauncher/webview.h:

2010-02-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make overridePreference complain when it does not
        support the preference given.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2010-02-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Set stdout/stderr to binary mode for DRT on Windows

        This makes sure we don't end up with lots of CRLFs in the
        DRT output, which breaks tons of results. Matches what
        the Windows DRT does.

        * DumpRenderTree/qt/main.cpp:

2010-02-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Build fix for Qt on Windows.

        Don't use noreturn directly since it's a gcc attribute.
        Instead use the NO_RETURN macro from AlwaysInline.h

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/utils.h:

2010-02-05  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Suppressed check-webkit-style's underscore check in Qt's autotests.
        Also made the path-specific filter check case-insensitive.

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

        * Scripts/webkitpy/style/checker.py:
          - Added a list element to _PATH_RULES_SPECIFIER for
            directories that should be excluded from the
            "readability/naming" category (the category that relates to
            underscores in identifiers, for example).

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added an "end-to-end" test for "WebKit/qt/tests/".

        * Scripts/webkitpy/style/filter.py:
          - Altered FilterConfiguration's should_check() method to
            check for path substring matches case-insensitively.

        * Scripts/webkitpy/style/filter_unittest.py:
          - Added a test to check case-insensitive path substring matching.

        * Scripts/webkitpy/style/processors/cpp.py:
          - Removed the hard-coded "WebKit/gtk/webkit/" path reference
            since this is now taken care of by the _PATH_RULES_SPECIFIER
            configuration variable.

        * Scripts/webkitpy/style/processors/cpp_unittest.py:
          - Removed the unit test for the GTK directory since this
            is now taken care of by the checker._PATH_RULES_SPECIFIER
            end-to-end tests.

2010-02-08  Leith Bade  <leith@leithalweapon.geek.nz>

        Reviewed by Darin Adler.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=34637
        Corrects the newline inserted into WebKitOutputDir, and WebKitLibrariesDir Windows
        environemnt variables when there is a space in the user's /home path.

        * Scripts/webkitdirs.pm:
         - Added missing quotes around $sourceDir in argument list of cygpath in determineWindowsSourceDir().

2010-02-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=34670
        TestNetscapePlugin should work with Firefox

        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: (NPP_New): Default to Carbon if
        browser doesn't tell what it supports.

2010-02-05  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Implement layoutTestController.pageNumberForElementById
        https://bugs.webkit.org/show_bug.cgi?id=34572

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

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

        Reviewed by Eric Seidel.

        Add a simple test implementation and the WebKit Mac implementation
        for the layout_tests/port package. Also add a simple test driver of
        that interface.

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

        * Scripts/webkitpy/layout_tests/driver_test.py: Added.
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/mac.py: Added.
        * Scripts/webkitpy/layout_tests/port/test.py: Added.

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

        Reviewed by Eric Siedel.

        Refactor the port package into an object-oriented style and merge
        path_utils into it. We add a 'base' and a 'chromium' object to the
        port package; this will allow us to easily add new ports (like
        WebKit Mac).

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

        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/run-chromium-webkit-tests:
        * 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/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/base.py: Added.
        * Scripts/webkitpy/layout_tests/port/chromium.py: Added.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/path_utils.py: Removed.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.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-01-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Hyatt.

        Implement flattening of framesets
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add support for testing frame flattening with the Qt DRT

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setFrameSetFlatteningEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-02-03  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Provided a way in check-webkit-style to specify filter rules
        on a per file or folder basis, via a configuration variable.

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

        * Scripts/webkitpy/style/checker.py:
          - Added _PATH_RULES_SPECIFIER configuration variable.
          - In ProcessorOptions class--
            - Changed the CategoryFilter attribute to FilterConfiguration.
            - Added path parameter to is_reportable().
          - Renamed ArgumentDefaults filter_rules attribute to
            base_filter_rules.
          - Updated ArgumentPrinter class.
          - Added filter rule validation to ArgumentParser (instead of
            in CategoryFilter constructor).

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated unit tests as necessary.
          - Added unit tests for PATH_RULES_SPECIFIER.

        * Scripts/webkitpy/style/error_handlers.py:
          - Updated DefaultStyleErrorHandler to use file path when
            calling is_reportable().

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Updated unit tests as necessary.

        * Scripts/webkitpy/style/filter.py:
          - Marked CategoryFilter internal with an underscore.
          - Removed argument validation from CategoryFilter.
          - Added FilterConfiguration class.

        * Scripts/webkitpy/style/filter_unittest.py:
          - Updated CategoryFilterTest class.
          - Added FilterConfigurationTest unit tests.

        * Scripts/webkitpy/style/processors/cpp.py:
          - Removed _is_test_filename() code.
          - Removed hard-coded path checks from check_include_line().

        * Scripts/webkitpy/style/processors/cpp_unittest.py:
          - Removed three unit tests related to exempted files.

2010-02-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Apply the command line options as settings to the
        graphics system.

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (requiresGraphicsView):
        (LauncherApplication::handleUserOptions):
        * QtLauncher/webview.h:
        (WebViewGraphicsBased::setItemCacheMode):

2010-02-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Notify user that run-webkit-tests has to be run under Cygwin

        The script will bail out if run under Windows shell or Msys.

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2010-02-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Generate convenience headers (QWebView, etc) using qmake

        In Qt this is done using syncqt, but we use a pro-file instead
        that generates makefile-rules for each of the extra headers.

        These extra headers are installed alongside the normal headers.

        * Scripts/webkitdirs.pm: Run qmake and make on new API-DerivedSources

2010-02-05  Andras Becsi  <abecsi@webkit.org>

        Unreviewed typo fix.

        Fix wrong whitespace alignment introduced in r54342.

        * Scripts/run-webkit-tests:

2010-02-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Build fix.  Remove a symbol corresponding to an inline function from the linker export
        file to prevent a weak external failure.

        * Scripts/check-for-weak-vtables-and-externals: Renamed from WebKitTools/Scripts/check-for-weak-vtables.
        Teach the script how to detect weak external symbols so that these errors can be caught immediately
        in the future.

2010-02-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Oliver Hunt.

        [Qt] Make it possible to choose whether the launcher should
        use the traditional QWidget based QWebView or the newer
        QGraphics based QGraphicsWebView on a QGraphicsView.

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::eventFilter):
        (LauncherWindow::loadStarted):
        (LauncherWindow::print):
        (LauncherWindow::screenshot):
        (LauncherWindow::setEditable):
        (LauncherWindow::setupUI):
        (main):
        * QtLauncher/webview.cpp:
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewGraphicsBased::resizeEvent):
        (GraphicsWebView::mousePressEvent):
        (GraphicsWebView::contextMenuEvent):
        * QtLauncher/webview.h:
        (WebViewTraditional::WebViewTraditional):
        (GraphicsWebView::GraphicsWebView):
        (WebViewGraphicsBased::setPage):

2010-02-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Oliver Hunt.

        [Qt] QtLauncher cleanup.

        Refactor option handling out in utility functions and make the
        arguments more Qt compatible.

        * QtLauncher/main.cpp:
        (requiresGraphicsView):
        (LauncherApplication::handleUserOptions):
        * QtLauncher/utils.cpp:
        (takeOptionValue):
        (formatKeys):
        (enumToKeys):
        (appQuit):
        * QtLauncher/utils.h:

2010-02-04  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        Implement a locking and scheduling mechanism for http testing sessions to be able
        to run multiple instances of run-webkit-tests parallel on the same machine.
        If a test session wants to run http tests and this feature is enabled, the pending
        sessions create lockfiles with sequential lock numbers. These locks are used to schedule
        the running test sessions in first come first served order. An exclusive lock ensures
        that the lock numbers are sequential to avoid deadlocks and starvation.
        Because the buildbot master specifies the flags used by slaves we need an environment
        variable too to be able to use the feature per-slave.
        Exporting WEBKIT_WAIT_FOR_HTTPD=1 before testing or using the --wait-for-httpd
        flag enables this feature, otherwise this patch has no effect on the testing whatsoever.

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

        * Scripts/run-webkit-tests:
        * Scripts/webkitperl/httpd.pm:

2010-01-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Make run-webkit-tests work under Cygwin for the Qt port

        setPathForRunningWebKitApp() is implemented for the Qt port
        by using qmake to query for the location of the Qt libraries.

        This requires the original environment (%ENV) to be untouched,
        so launchWithCurrentEnv() was refactored to launchWithEnv(),
        and the code in openDumpTool() to not use %ENV but a %CLEAN_ENV
        instead. This has the added benefit of getting rid of the temp
        variables used for storing the current env.

        openDumpTool() is also refactored a bit into platform-spesific,
        port-spesific, and generic environment variables.

        Checks for undef was added a few places to fix Perl concat
        warnings when run-webkit-tests is aborted.

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

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2010-02-04  Yuzo Fujishima  <yuzo@google.com>

        Unreviewed.

        Add Yuzo to the committers list.

        * Scripts/webkitpy/committers.py:

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

        Rubber-stamped by Eric Seidel.

        Change "the Chromium name" to "the name of Google Inc." in the licenses

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

        * 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/metered_stream.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/port/__init__.py:
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
        * Scripts/webkitpy/layout_tests/port/http_server.py:
        * Scripts/webkitpy/layout_tests/port/http_server_base.py:
        * Scripts/webkitpy/layout_tests/port/path_utils.py:
        * Scripts/webkitpy/layout_tests/port/websocket_server.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.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-02-03  Dirk Pranke  <dpranke@chromium.org>

        Rubber-stamped by Eric Siedel.

        Rename files as part of refactoring the layout_tests package. All
        the platform_utils* module, the path_utils.py module, and
        the http server and web socket server modules are moved into a new
        port/ package.

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

        * Scripts/webkitpy/layout_tests/layout_package/apache_http_server.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/http_server.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/http_server_base.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/httpd2.pem: Removed.
        * 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/lighttpd.conf: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/path_utils.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_linux.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_mac.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_win.py: Removed.
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/websocket_server.py: Removed.
        * Scripts/webkitpy/layout_tests/port: Added.
        * Scripts/webkitpy/layout_tests/port/__init__.py: Copied from Scripts/webkitpy/layout_tests/layout_package/platform_utils.py.
        * Scripts/webkitpy/layout_tests/port/apache_http_server.py: Copied from Scripts/webkitpy/layout_tests/layout_package/apache_http_server.py.
        * Scripts/webkitpy/layout_tests/port/chromium_linux.py: Copied from Scripts/webkitpy/layout_tests/layout_package/platform_utils_linux.py.
        * Scripts/webkitpy/layout_tests/port/chromium_mac.py: Copied from Scripts/webkitpy/layout_tests/layout_package/platform_utils_mac.py.
        * Scripts/webkitpy/layout_tests/port/chromium_win.py: Copied from Scripts/webkitpy/layout_tests/layout_package/platform_utils_win.py.
        * Scripts/webkitpy/layout_tests/port/http_server.py: Copied from Scripts/webkitpy/layout_tests/layout_package/http_server.py.
        * Scripts/webkitpy/layout_tests/port/http_server_base.py: Copied from Scripts/webkitpy/layout_tests/layout_package/http_server_base.py.
        * Scripts/webkitpy/layout_tests/port/httpd2.pem: Copied from Scripts/webkitpy/layout_tests/layout_package/httpd2.pem.
        * Scripts/webkitpy/layout_tests/port/lighttpd.conf: Copied from Scripts/webkitpy/layout_tests/layout_package/lighttpd.conf.
        * Scripts/webkitpy/layout_tests/port/path_utils.py: Copied from Scripts/webkitpy/layout_tests/layout_package/path_utils.py.
        * Scripts/webkitpy/layout_tests/port/websocket_server.py: Copied from Scripts/webkitpy/layout_tests/layout_package/websocket_server.py.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.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-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Eric Seidel.

        Roll back r53559 and r54084 again, because roll out didn't solve flakeyness on the Windows Test bots
        https://bugs.webkit.org/show_bug.cgi?id=34399

        * Scripts/run-iexploder-tests:
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:
        * Scripts/webkitperl/httpd.pm: Added.

2010-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Eric Seidel.

        Roll out r53559 and r54084, because it might caused flakeyness on the Windows Test bots

        * Scripts/run-iexploder-tests:
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:
        * Scripts/webkitperl/httpd.pm: Removed.

2010-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Ariya Hidayat.

        Roll back r53889 again, because roll out didn't solve flakeyness on the Windows Test bots
        https://bugs.webkit.org/show_bug.cgi?id=34399

        * DumpRenderTree/win/EventSender.cpp:
        (buildModifierFlags):
        (mouseDownCallback):
        (mouseUpCallback):
        (keyDownCallback):

2010-02-03  Eric Seidel  <eric@webkit.org>

        No review, just fixing copyrights.

        Concerns were expressed about "The Chromium Authors" being
        a valid legal entity for copyright assignment in the WebKit repository,
        so this change removes all "The Chromium Authors".

        I looked at the svn logs in src.chromium.org and failed to find any
        non-google contributions to these files, so they are all now
        marked as copyright "Google Inc" as all Google contributers assign
        copyright to "Google Inc" as part of their employment agreement.

        * Scripts/rebaseline-chromium-webkit-tests:
        * Scripts/run-chromium-webkit-tests:
        * Scripts/webkitpy/layout_tests/layout_package/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/layout_package/http_server.py:
        * Scripts/webkitpy/layout_tests/layout_package/http_server_base.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/metered_stream.py:
        * Scripts/webkitpy/layout_tests/layout_package/path_utils.py:
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils.py:
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_linux.py:
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_mac.py:
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_win.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py:
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py:
        * Scripts/webkitpy/layout_tests/layout_package/websocket_server.py:
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py:
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.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-02-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QtLauncher, refactor argument handling in preparation of merge
        with QGVLauncher

        * QtLauncher/main.cpp:
        (LauncherApplication::urls):
        (LauncherApplication::isRobotized):
        (LauncherApplication::applyDefaultSettings):
        (LauncherApplication::LauncherApplication):
        (LauncherApplication::formatKeys):
        (LauncherApplication::enumToKeys):
        (fail):
        (LauncherApplication::handleUserOptions):
        (main):

2010-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Ariya Hidayat.

        Rolling out r53889, because it might caused flakeyness on the Windows Test bots
        https://bugs.webkit.org/show_bug.cgi?id=34399

        * DumpRenderTree/win/EventSender.cpp:
        (mouseDownCallback):
        (mouseUpCallback):
        (keyDownCallback):

2010-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Fix pixel tests support.
        https://bugs.webkit.org/show_bug.cgi?id=27813

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::processLine):
         - Hash processing mechanism moved from DumpRenderTree::open to DumpRenderTree::processLine.
        (WebCore::DumpRenderTree::dump): Fixed and renamed variables.

2010-02-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Enable JIT compilation for wx.
        
        https://bugs.webkit.org/show_bug.cgi?id=34536

        * wx/build/settings.py:

2010-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after introduction of pageNumberForElementById.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::pageNumberForElementById):

2010-02-02  Shu Chang  <Chang.Shu@nokia.com>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/webkitpy/committers.py:

2010-02-02  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Moved filter-related check-webkit-style code into a separate
        filter module.

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

        This is preparatory refactoring for Bug 33684, which will allow
        file and folder-specific filter rules.

        * Scripts/webkitpy/style/checker.py:
          - Removed CategoryFilter class (moved to filter.py).

        * Scripts/webkitpy/style/checker_unittest.py:
          - Removed CategoryFilter unit tests (moved to filter_unittest.py).

        * Scripts/webkitpy/style/filter.py: Added.
          - Added CategoryFilter class (moved from checker.py).

        * Scripts/webkitpy/style/filter_unittest.py: Added.
          - Added CategoryFilter unit tests (moved from checker_unittest.py).

        * Scripts/webkitpy/style/unittests.py:
          - Added reference to filter_unittest.py.

2010-02-01  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Addressed FIXME in check-webkit-style so that the carriage-return
        check will work for patches.

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

        Also added support for limiting the number of errors reported
        per category, per file.

        * Scripts/webkitpy/style/checker.py:
          - Added new "whitespace/carriage_return" category from common.py.
          - Added MAX_REPORTS_PER_CATEGORY dictionary.
          - Added max_reports_per_category attribute to ProcessorOptions class.
          - Refactored StyleChecker._process_file().

        * Scripts/webkitpy/style/checker_unittest.py:
          - Updated ProcessorOptionsTest tests.
          - Added test to check MAX_REPORTS_PER_CATEGORY.

        * Scripts/webkitpy/style/error_handlers.py:
          - Added support for suppressing the display of errors after
            reaching a per-category maximum (from max_reports_per_category).

        * Scripts/webkitpy/style/error_handlers_unittest.py:
          - Added test for suppressing error display.

        * Scripts/webkitpy/style/processors/common.py: Added.
          - Moved carriage-return check to new file.

        * Scripts/webkitpy/style/processors/common_unittest.py: Added.
          - Added unit tests for carriage-return check.

        * Scripts/webkitpy/style/unittests.py:
          - Added reference to common_unittest.py.

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Provide a way to get page number with layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33840

        * DumpRenderTree/LayoutTestController.cpp:
        (pageNumberForElementByIdCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::pageNumberForElementById):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::pageNumberForElementById):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::pageNumberForElementById):

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed fix for an invalid function call.

        check-webkit-style: Remove filename parameter from all functions where no longer used
        https://bugs.webkit.org/show_bug.cgi?id=34249

        * Scripts/webkitpy/style/checker.py:

2010-02-01  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT Provide global flag ability
        https://bugs.webkit.org/show_bug.cgi?id=34418

        Add the globalFlag property to the Qt LayoutTestController to allow
        cross-domain indications.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::globalFlag):
        (LayoutTestController::setGlobalFlag):

2010-02-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele Peterson.

        Crash in Safari opening new tabs to "same page"
        <rdar://problem/7593857> and https://bugs.webkit.org/show_bug.cgi?id=34444

        Add a mode (Mac-only for now) that exercises the WebView SPI _loadBackForwardListFromOtherView:

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

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::newWindowsCopyBackForwardList):
        (LayoutTestController::setNewWindowsCopyBackForwardList):

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):

2010-02-01  Carol Szabo  <carol.szabo@nokia.com>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/webkitpy/committers.py:

2010-02-01  Nate Chapin  <japhet@chromium.org>

        Rubber-stamped by David Levin.

        Add myself to reviewer list.

        * Scripts/webkitpy/committers.py:

2010-01-31  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Moved style error handler code to their own classes, and
        related refactoring. Increased unit test code coverage of
        style error handling.

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

        * Scripts/check-webkit-style:
          - Minor change: added error_count variable.

        * Scripts/webkitpy/style/checker.py:
          - Renamed ProcessorOptions.should_report_error() to is_reportable().
          - In the StyleChecker class--
            - Removed _default_style_error_handler().
            - Added _increment_error_count().
            - Refactored to use DefaultStyleErrorHandler and
              PatchStyleErrorHandler constructors.

        * Scripts/webkitpy/style/checker_unittest.py:
          - In the StyleStyleCheckerTest class--
            - Removed write_sample_error().
            - Removed test_default_style_error_handler().

        * Scripts/webkitpy/style/error_handlers.py: Added.
          - Added DefaultStyleErrorHandler class.
          - Added PatchStyleErrorHandler class.

        * Scripts/webkitpy/style/error_handlers_unittest.py: Added.
          - Added unit tests for DefaultStyleErrorHandler and
            PatchStyleErrorHandler.

        * Scripts/webkitpy/style/unittests.py:
          - Added error_handlers unit tests.

2010-01-29  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Stephanie Lewis.

        Fix run-leaks with newer versions of the leaks tool.

        * Scripts/run-leaks:

2010-01-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        Top-level test drivers for running the Chromium port of run-webkit-tests
        and being able to rebaseline test results from the test bots.  The
        files in the Scripts directory are simply wrappers around the files
        in webkitpy/layout_tests for convenience.
 
        https://bugs.webkit.org/show_bug.cgi?id=31498

        * Scripts/rebaseline-chromium-webkit-tests: Added.
        * Scripts/run-chromium-webkit-tests: Added.
        * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py: Added.
        * Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py: Added.

2010-01-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        Add in the second block of python code for the Chromium port
        of run-webkit-tests. These files execute different diffs to classify
        the various types of failures from a test.

        * Scripts/webkitpy/layout_tests/test_types: Added.
        * Scripts/webkitpy/layout_tests/test_types/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/fuzzy_image_diff.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/image_diff.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py: Added.
        * Scripts/webkitpy/layout_tests/test_types/text_diff.py: Added.

2010-01-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Siedel.

        Check in the first part of the Chromium Python port of the 
        run-webkit-tests test driver. The files under 
        layout_tests/layout_layout constitute most of the implementation;
        they can be roughly divided into code that parses the 
        "test_expectations.txt" file that describes how we expect tests to
        pass or fail, platform-specific hooks for the different Chromium 
        ports (in platform_utils*), code for parsing the output of the
        tests and generating results files and HTML and JSON for the
        dashboards, auxiliary scripts for starting and stopping HTTP and
        Web Socket servers, and then one of the actual driver files 
        (test_shell_thread). Code for actually parsing test output for 
        failures and the top-level driver scripts will follow shortly.

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

        * Scripts/webkitpy/layout_tests: Added.
        * Scripts/webkitpy/layout_tests/layout_package: Added.
        * Scripts/webkitpy/layout_tests/layout_package/__init__.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/apache_http_server.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/http_server.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/http_server_base.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/httpd2.pem: Added.
          - scripts to start and stop apache. Note that the apache file
            generates a conf file dynamically, and we should switch to 
            using the same static conf file that the regular run-webkit-tests
            uses, and we can also use the same httpd2.pem file.

        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: Added.
          - scripts to generate the JSON layout test dashboard and the
            flakiness dashboard
        * Scripts/webkitpy/layout_tests/layout_package/lighttpd.conf: Added.
          - default configuration for LigHTTPd (used on Windows)
        * Scripts/webkitpy/layout_tests/layout_package/metered_stream.py: Added.
          - utility class that implements progress bars on the console to
            be displayed while the tests are running
        * Scripts/webkitpy/layout_tests/layout_package/path_utils.py: Added.
          - various routines for manipulating paths and URIs
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_linux.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_mac.py: Added.
        * Scripts/webkitpy/layout_tests/layout_package/platform_utils_win.py: Added.
          - platform-specific aspects of the drivers (binary names, paths,
            process control, etc.)
        * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py: Added.
          - code for parsing the 'test_expectations.txt' file to determine
            which tests are expected to fail (and how) on which platforms
        * Scripts/webkitpy/layout_tests/layout_package/test_failures.py: Added.
          - code for handling different kinds of failures (generating output
            in the results, etc.)
        * Scripts/webkitpy/layout_tests/layout_package/test_files.py: Added.
          - code to gather the lists of tests
        * Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py: Added.
          - code to actually execute tests via TestShell and process
            the output
        * Scripts/webkitpy/layout_tests/layout_package/websocket_server.py: Added.
          - scripts to start and stop the pywebsocket server

2010-01-29  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Eric Seidel.

        Check in a copy of the simplejson library; it will be used by
        the Chromium port of run-webkit-tests.
        
        https://bugs.webkit.org/show_bug.cgi?id=31498

        * simplejson: Added.
        * simplejson/LICENSE.txt: Added.
        * simplejson/README.txt: Added.
        * simplejson/__init__.py: Added.
        * simplejson/_speedups.c: Added.
        (ascii_escape_char):
        (ascii_escape_unicode):
        (ascii_escape_str):
        (py_encode_basestring_ascii):
        (init_speedups):
        * simplejson/decoder.py: Added.
        * simplejson/encoder.py: Added.
        * simplejson/jsonfilter.py: Added.
        * simplejson/scanner.py: Added.

2010-01-29  Dirk Pranke  <dpranke@chromium.org>

        No review

        Add myself to the committers list

        * Scripts/webkitpy/committers.py:

2010-01-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        A first step towards the Indexed Database API
        https://bugs.webkit.org/show_bug.cgi?id=34342

        Add indexed database API.

        * Scripts/build-webkit:

2010-01-29  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Correct openHTTPD() to print requests to stdout if run-webkit-httpd is used.
        This fixes a regression introduced in r53559.

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

        * Scripts/webkitperl/httpd.pm:

2010-01-28  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Crash when posting a notification for a detached object

        https://bugs.webkit.org/show_bug.cgi?id=34309
        <rdar://problem/7409759>

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityController.h:
        Declare new functions. Add new members to store the event hook and the
        mapping of accessibility elements to their JS callbacks.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::notificationReceived):
        Stubbed.
        (AccessibilityController::addNotificationListener):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::notificationReceived):
        Stubbed.
        (AccessibilityController::addNotificationListener):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize the event hook.
        (AccessibilityController::~AccessibilityController):
        Remove the event hook. Unprotect all of the JS functions that are stored
        in the map.
        (logEventProc):
        Clean-up a variable.
        (stringEvent):
        Return a string description of the MSAA event code.
        (notificationListenerProc):
        Get the accessible object from the event, and query it for IAccessible.
        Call the AccessibilityController's notificationReceived().
        (comparableObject):
        Use QueryService to obtain the IAccessibleComparable for the
        IServiceProvider.
        (AccessibilityController::notificationReceived):
        Iterate the map of objects that have registered for notification
        callbacks. Query each for IServiceProvider, then use comparableObject()
        to get an IAccessibleComparable. If we find an object matching the
        notified object, call its callback, passing the event that was received.
        (AccessibilityController::addNotificationListener):
        If we have not created the event hook, create it. Protect the JS
        callback function object, and add the object and its callback to our
        map.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::addNotificationListener):
        Call through to the AccessibilityController's addNotificationListener().

        * DumpRenderTree/win/DumpRenderTreeWin.h:
        Add an extern declaration for the shared FrameLoadDelegate extern, so we
        can access it from AccessibilityController.

        * DumpRenderTree/win/FrameLoadDelegate.h:
        (FrameLoadDelegate::accessibilityController):
        Return the AccessibilityController.

2010-01-29  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        prepare-ChangeLog outputs useless messages for a nonexistent bug ID
        https://bugs.webkit.org/show_bug.cgi?id=34313

        * Scripts/prepare-ChangeLog:

2010-01-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        [Qt] Separate implementation from class definition.

        * QtLauncher/main.cpp:
        (LauncherWindow::webView):
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::keyPressEvent):
        (LauncherWindow::grabZoomKeys):
        (LauncherWindow::sendTouchEvent):
        (LauncherWindow::eventFilter):
        (LauncherWindow::loadStarted):
        (LauncherWindow::loadFinished):
        (LauncherWindow::showLinkHover):
        (LauncherWindow::zoomIn):
        (LauncherWindow::zoomOut):
        (LauncherWindow::resetZoom):
        (LauncherWindow::toggleZoomTextOnly):
        (LauncherWindow::print):
        (LauncherWindow::screenshot):
        (LauncherWindow::setEditable):
        (LauncherWindow::dumpHtml):
        (LauncherWindow::selectElements):
        (LauncherWindow::setTouchMocking):
        (LauncherWindow::newWindow):
        (LauncherWindow::setupUI):

2010-01-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] On Maemo5, a click/touch in the location bar (when unfocused)
        should result in all text selected.

        * QtLauncher/locationedit.cpp:
        (LocationEdit::focusInEvent):
        * QtLauncher/locationedit.h:

2010-01-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Show progress reaching 100% for loads.

        * QtLauncher/locationedit.cpp:
        (LocationEdit::LocationEdit):
        (LocationEdit::setProgress):
        (LocationEdit::reset):
        (LocationEdit::paintEvent):
        * QtLauncher/locationedit.h:

2010-01-29  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disable the QtLauncher statusbar on Maemo

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

        * QtLauncher/main.cpp:
        (LauncherWindow::showLinkHover):
        (LauncherWindow::selectElements):

2010-01-29  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Display page loading progress inside the QtLauncher location bar

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

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/locationedit.cpp: Added.
        (LocationEdit::LocationEdit):
        (LocationEdit::setProgress):
        (LocationEdit::paintEvent):
        * QtLauncher/locationedit.h: Added.
        * QtLauncher/mainwindow.cpp:
        (MainWindow::buildUI):
        * QtLauncher/mainwindow.h:

2010-01-29  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add support for Maemo zoom keys in QtLauncher

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

        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::~LauncherWindow):
        (LauncherWindow::keyPressEvent):
        (LauncherWindow::grabZoomKeys):

2010-01-29  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement the display() method of the layout test controller
        https://bugs.webkit.org/show_bug.cgi?id=34258

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::showPage):
        (WebCore::DumpRenderTree::hidePage):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::display):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for MSW, use ThreadingWin.cpp as the Windows pthreads implementation
        implements pthread_t in a way that makes it impossible to check its validity,
        which is needed by ThreadingPthreads.cpp.

        * DumpRenderTree/wscript:
        * wx/build/settings.py:

2010-01-28  Andras Becsi  <abecsi@webkit.org>

        Adding myself to the committer list. No review needed.

        * Scripts/webkitpy/committers.py:

2010-01-28  Hayato Ito  <hayato@chromium.org>

        Reviewed by David Levin.

        Remove NULL char from input JS file because 'grep' fails if the file contains NULL char.

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

        * Scripts/make-script-test-wrappers:

2010-01-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after removal of the zlib image decoder.

        * wx/build/settings.py:

2010-01-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed, roll out r54000.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::display):

2010-01-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement the display() method of the layout test controller
        https://bugs.webkit.org/show_bug.cgi?id=34258

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::showPage):
        (WebCore::DumpRenderTree::hidePage):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::display):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Eliminated the filename parameter from functions in
        check-webkit-style's cpp.py where it is no longer used.

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

        * Scripts/webkitpy/style/processors/cpp.py:
          - Reduced number of occurrences of "filename" variable from
            approximately 200 to 120.

        * Scripts/webkitpy/style/processors/cpp_unittest.py:
          - Refactored unit tests as necessary to accommodate changes to cpp.py.
          - Fixed bug in CppStyleTestBase.perform_include_what_you_use()
            where the incorrect file extension was getting passed to
            cpp_style.check_language().

2010-01-28  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        In check-webkit-style, eliminated the dependency of
        processors/cpp_unittest.py on checker.py.

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

        * Scripts/webkitpy/style/checker.py:
          - Addressed FIXME by removing STYLE_CATEGORIES data.
          - Added style_categories().

        * Scripts/webkitpy/style/checker_unittest.py:
          - Minor changes.

        * Scripts/webkitpy/style/processors/cpp.py:
          - Added categories attribute to CppProcessor class (data
            was originally checker.STYLE_CATEGORIES).

        * Scripts/webkitpy/style/processors/cpp_unittest.py:
          - Addressed FIXME by eliminating "import" from checker.py.

2010-01-28  Anton Muhin  <antonm@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Improve treatment of conditions and rest of the line for if, else, switch and alikes
        https://bugs.webkit.org/show_bug.cgi?id=34173

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-28  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Barth.

        Limit login retries to 5
        https://bugs.webkit.org/show_bug.cgi?id=34193

        * Scripts/webkitpy/bugzilla.py:

2010-01-27  Martin Robinson  <mrobinson@webkit.org>

        Adding myself to the committer list. No review necessary.

        * Scripts/webkitpy/committers.py:

2010-01-27  George Wright  <gwright@rim.com>

        Reviewed by Adam Treat.

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

        Add missing include for wtf/Platform.h

        * DumpRenderTree/AccessibilityController.h:

2010-01-27  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT Provide worker thread ability to track counters
        https://bugs.webkit.org/show_bug.cgi?id=34221

        Implement workerThreadCount() in LayoutTestController of Qt DRT

        Tests:
        fast/workers/dedicated-worker-lifecycle.html
        fast/workers/shared-worker-frame-lifecycle.html
        fast/workers/shared-worker-lifecycle.html
        fast/workers/worker-lifecycle.html

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::workerThreadCount):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        [Qt] QtLauncher refactoring:

        Make the LauncherWindow depend less on the view, so that more
        code can be shared in near future.

        * QtLauncher/main.cpp:
        (LauncherWindow::sendTouchEvent):
        (LauncherWindow::loadFinished):
        (LauncherWindow::zoomIn):
        (LauncherWindow::zoomOut):
        (LauncherWindow::resetZoom):
        (LauncherWindow::toggleZoomTextOnly):
        (LauncherWindow::dumpHtml):
        (LauncherWindow::selectElements):
        (LauncherWindow::setupUI):

2010-01-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Eric Seidel.

        Correctly handle the KeyLocation argument that has been introduced
        recently to test location-dependent key events in EventSender.keyDown.
        http://bugs.webkit.org/show_bug.cgi?id=28247

        Test: fast/events/keydown-numpad-keys.html

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

2010-01-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        [Qt] QtLauncher refactoring:

        Move out code from the MainWindow (renamed to LauncherWindow)
        that is not depending on the view, and add it to a new class
        called MainWindow.

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        (LauncherWindow::LauncherWindow):
        (LauncherWindow::eventFilter):
        (LauncherWindow::loadStarted):
        (LauncherWindow::loadFinished):
        (LauncherWindow::newWindow):
        (LauncherWindow::setupUI):
        (WebPage::createWindow):
        (main):
        * QtLauncher/mainwindow.cpp: Added.
        (MainWindow::MainWindow):
        (MainWindow::buildUI):
        (MainWindow::page):
        (MainWindow::setAddressUrl):
        (MainWindow::addCompleterEntry):
        (MainWindow::load):
        (MainWindow::changeLocation):
        (MainWindow::openFile):
        * QtLauncher/mainwindow.h: Added.

2010-01-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        [Qt] QtLauncher, coding style fixes.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::sendTouchEvent):
        (MainWindow::eventFilter):
        (MainWindow::loadURL):
        (MainWindow::setupUI):
        (WebPage::createPlugin):

2010-01-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        [Qt] QtLauncher refactoring, separating the webview and
        adding a QGraphicsWebView based version.

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * QtLauncher/webpage.h:
        * QtLauncher/webview.cpp: Added.
        (createContextMenu):
        (WebViewGraphicsBased::mousePressEvent):
        (WebViewTraditional::mousePressEvent):
        (WebViewGraphicsBased::contextMenuEvent):
        (WebViewTraditional::contextMenuEvent):
        * QtLauncher/webview.h: Added.
        (WebViewGraphicsBased::WebViewGraphicsBased):
        (WebViewTraditional::WebViewTraditional):

2010-01-27  Alexander Pavlov  <apavlov@chromium.org>

        Adding myself as committer. No review necessary.

        * Scripts/webkitpy/committers.py:

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

        Reviewed by Darin Adler.

        webkit-patch needs an open-bugs command
        https://bugs.webkit.org/show_bug.cgi?id=30793

        * Scripts/test-webkitpy: import OpenBugsTest
        * Scripts/webkit-patch: import OpenBugs
        * Scripts/webkitpy/commands/download_unittest.py: don't import unittest
        * Scripts/webkitpy/commands/early_warning_system_unittest.py: ditto
        * Scripts/webkitpy/commands/queries_unittest.py: ditto
        * Scripts/webkitpy/commands/queues_unittest.py: ditto
        * Scripts/webkitpy/commands/upload_unittest.py: ditto
        * Scripts/webkitpy/mock_bugzillatool.py: log when user.open_url is called.

2010-01-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann

        [Qt] QtLauncher refactoring, separating utility methods.

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        * QtLauncher/utils.cpp: Added.
        (urlFromUserInput):
        * QtLauncher/utils.h: Added.

2010-01-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann

        [Qt] Refactor the code in the QtLauncher dealing with HTTP proxy.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * QtLauncher/webpage.cpp:
        (WebPage::WebPage):
        (WebPage::applyProxy):
        * QtLauncher/webpage.h:

2010-01-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Corrects debug build of DumpRenderTree on Windows.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2010-01-26  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Moves the try/catch for OSError exceptions in Executive.run_command
        to Credentials.read_credentials() so that the unit test
        webkitpy.scm_unittest.SCMClassTests.test_error_handlers can
        assert that Executive.run_command throws an OSError exception.

        * Scripts/webkitpy/credentials.py:
        * Scripts/webkitpy/executive.py: Moved try/catch for OSError to
        method Credentials.read_credentials().
        * Scripts/webkitpy/executive_unittest.py: Removed tests that no longer
        apply: test_run_command_with_bad_command_check_return_code and
        test_run_command_with_bad_command_check_calls_error_handler. Added new
        test to assert that run_command throws OSError exceptions.

2010-01-26  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT WebHistory support
        https://bugs.webkit.org/show_bug.cgi?id=34167

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::webHistoryItemCount):
        (LayoutTestController::keepWebHistory):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [Win] Add modifiers parameter support to Windows DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=34068

        Add support for functional name modifiers; "addSelectionKey" and
        "rangeSelectionKey", and modifiers parameter to eventSender.mouseDown()
        and eventSender.mouseUp().
        This change is similar to r53498 for Mac.
        
        * DumpRenderTree/win/EventSender.cpp:
        (buildModifierFlags): New function to set MK_CONTROL or MK_SHIFT to WPARAM.
        (mouseDownCallback): Call buidlModifiersFlags().
        (mouseUpCallback): ditto.
        (keyDownCallback): Add support for "addSelectionkey" and "rangeSelectionKey".

2010-01-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        The Python autoinstall cache directory now only gets created
        in the directory containing autoinstall.py.

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

        * Scripts/webkitpy/autoinstall.py:
          - Also added a README file to the cache directory saying
            where it came from.

2010-01-26  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Moved the check-webkit-style processors into a new
        webkitpy/style/processors directory.

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

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/style/cpp_style.py: Removed.
        * Scripts/webkitpy/style/cpp_style_unittest.py: Removed.
        * Scripts/webkitpy/style/processors: Added.
        * Scripts/webkitpy/style/processors/__init__.py: Added.
        * Scripts/webkitpy/style/processors/cpp.py: Copied from WebKitTools/Scripts/webkitpy/style/cpp_style.py.
        * Scripts/webkitpy/style/processors/cpp_unittest.py: Copied from WebKitTools/Scripts/webkitpy/style/cpp_style_unittest.py.
        * Scripts/webkitpy/style/processors/text.py: Copied from WebKitTools/Scripts/webkitpy/style/text_style.py.
        * Scripts/webkitpy/style/processors/text_unittest.py: Copied from WebKitTools/Scripts/webkitpy/style/text_style_unittest.py.
        * Scripts/webkitpy/style/text_style.py: Removed.
        * Scripts/webkitpy/style/text_style_unittest.py: Removed.
        * Scripts/webkitpy/style/unittests.py:

2010-01-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, make sure stub function returns a value.

        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::counterValueForElementById):

2010-01-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver Hunt.

        Windows build references non-existent include paths
        https://bugs.webkit.org/show_bug.cgi?id=34175

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2010-01-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Separating out the UrlLoader from the QtLauncher in it's
        own implementation and header file.

        * QtLauncher/main.cpp:
        (main):
        * QtLauncher/urlloader.cpp: Added.
        (UrlLoader::UrlLoader):
        (UrlLoader::loadNext):
        (UrlLoader::init):
        (UrlLoader::getUrl):
        * QtLauncher/urlloader.h: Added.

2010-01-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored check-webkit-style by removing the file path
        parameter from the style error handler functions.

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

        * Scripts/webkitpy/style/checker.py:
          - Added _default_style_error_handler() to StyleChecker class.
          - Moved handle_style_error() to inside _default_style_error_handler().

        * Scripts/webkitpy/style/checker_unittest.py:
          - Removed file path from calls to error handler.

        * Scripts/webkitpy/style/cpp_style.py:
          - Removed file path from calls to error handler.

        * Scripts/webkitpy/style/cpp_style_unittest.py:
          - Removed file path from calls to error handler.

        * Scripts/webkitpy/style/text_style.py:
          - Removed file path from calls to error handler.

        * Scripts/webkitpy/style/text_style_unittest.py:
          - Removed file path from calls to error handler.

2010-01-25  Jeremy Orlow  <jorlow@chromium.org>

        Adding myself as reviewer.  No review necessary.

        * Scripts/webkitpy/committers.py:

2010-01-25  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Improved prepare-ChangeLog so that it preserves the relative
        indentation of a git commit message.

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

        * Scripts/prepare-ChangeLog:
          - Also adjusted the script so that it does not add white
            space characters to empty lines.

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

        No review, rolling out r53763.
        http://trac.webkit.org/changeset/53763
        https://bugs.webkit.org/show_bug.cgi?id=33895

        Broke 20+ tests on Windows.

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2010-01-24  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        More pep8 compliance.

        * Scripts/webkitpy/mock_bugzillatool.py:

2010-01-24  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        More pep8 compliance.

        * Scripts/webkitpy/executive.py:
        * Scripts/webkitpy/grammar.py:

2010-01-24  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        More pep8 compliance.

        * Scripts/webkitpy/comments.py:
        * Scripts/webkitpy/committers.py:
        * Scripts/webkitpy/credentials.py:

2010-01-24  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        Make changelogs.py pass pep8.

        * Scripts/webkitpy/changelogs.py:

2010-01-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Unreviewed build fix

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/webinspector.h:

2010-01-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        [Qt] Move the WebInspector class to it's own header file.

        * QtLauncher/main.cpp:
        * QtLauncher/webinspector.h: Added.
        (WebInspector::WebInspector):
        (WebInspector::showEvent):
        (WebInspector::hideEvent):

2010-01-23  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Kenneth Rohde Christiansen.

        Qt DRT: respect window.close() and window.closed()
        
        Qt DRT needs to maintain a correct count of open windows
        for windowCount(). It also needs to delete windows that
        have been closed by window.close().
        
        This fixes the following tests:
        
        plugins/destroy-during-npp-new.html
        fast/dom/Document/early-document-access.html
        fast/dom/Window/window-early-properties.html
        fast/events/open-window-from-another-frame.html
        fast/events/popup-blocking-click-in-iframe.html
        
        https://bugs.webkit.org/show_bug.cgi?id=32953

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):
        (WebCore::DumpRenderTree::windowCloseRequested):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::maybeDump):

2010-01-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Added a user default for specifying a fallback frameworks path in case
        the bundle does not contain frameworks for the current Mac OS X version.

        * WebKitLauncher/main.m:
        (fallbackMacOSXVersion): Added. Looks up the fallback version in a dictionary
        keyed by the FallbackSystemVersions user default and returns it.
        (main): If a frameworks directory for the current system version is not found,
        try the fallback.

2010-01-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Make run-webkit-tests work under Cygwin for the Qt port

        setPathForRunningWebKitApp() is implemented for the Qt port
        by using qmake to query for the location of the Qt libraries.

        This requires the original environment (%ENV) to be untouched,
        so launchWithCurrentEnv() was refactored to launchWithEnv(),
        and the code in openDumpTool() to not use %ENV but a %CLEAN_ENV
        instead. This has the added benefit of getting rid of the temp
        variables used for storing the current env.

        openDumpTool() is also refactored a bit into platform-spesific,
        port-spesific, and generic environment variables.

        Checks for undef was added a few places to fix Perl concat
        warnings when run-webkit-tests is aborted.

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

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2010-01-22  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Remove the Bakefile build system, which is no longer being used.
        
        https://bugs.webkit.org/show_bug.cgi?id=34022

        * DumpRenderTree/wx/DumpRenderTree.bkl: Removed.
        * wx/browser/browser.bkl: Removed.
        * wx/build-wxwebkit: Removed.

2010-01-22  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Simon Fraser.

        Reset zoom level to 1.0 when resetting view state. This is causing
        many tests to fail after svg/custom/text-zoom.xhtml changes the
        zoom level.

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

2010-01-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34025
        Enable client-based Geolocation abstraction for Mac, Windows AppleWebKit targets.

        * Scripts/build-webkit:

2010-01-22  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Arg.  Someone renamed limit to output_limit on me.

        * Scripts/webkitpy/commands/queues.py:

2010-01-22  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        Make __init__.py and buildbot.py pass pep8 style checker.

        * Scripts/webkitpy/__init__.py:
        * Scripts/webkitpy/buildbot.py:

2010-01-21  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Barth.

        webkit-patch should retry on invalid password
        https://bugs.webkit.org/show_bug.cgi?id=33955

        Ask for bugs.webkit.org authentication in a loop.

        * Scripts/webkitpy/bugzilla.py:

2010-01-22  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Don't call seek on a NoneType.

        * Scripts/webkitpy/statusserver.py:

2010-01-22  Petri Latvala  <petri.latvala@nomovok.com>

        Reviewed by David Levin.

        check-webkit-style breaks on files with unknown types
        https://bugs.webkit.org/show_bug.cgi?id=34001

        For files with type FileType.NONE, dispatch_processor returns None.

        * Scripts/webkitpy/style/checker.py: Don't call process_file with a processor of value None.

2010-01-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make bugzilla.py and webkitport.py conform to pep8
        https://bugs.webkit.org/show_bug.cgi?id=34015

        This patch makes webkitport.py and bugzilla.py mostly conform to PEP8
        style as enforced by pep8.py.  I wasn't able to get rid of all the
        errors because I'm not sure how to wrap some lines properly.  Also,
        there are a few deprication errors that I couldn't resolve easily.
        However, this is a massive improvement in compliance.

        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/webkitport.py:

2010-01-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Limit length of EWS results to 5MB
        https://bugs.webkit.org/show_bug.cgi?id=34016

        Hopefully this will fix the bug where the results link doesn't appear.
        Our current theory is that the results blob is too big and the server
        is rejecting the request with a 500 error.  That causes us to re-try
        the post, but when we re-try the StringIO buffer has its seek pointer
        at the end.

        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/statusserver.py:

2010-01-22  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Made check-webkit-style able to check patches when script not
        run from source root. Also consolidated external references
        to a single file.

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

        * Scripts/check-webkit-style:
          - Changed to import style_references.py.

        * Scripts/webkitpy/style/__init__.py:
          - Removed __path__ hack that allowed searching Scripts/ directory.

        * Scripts/webkitpy/style/checker.py:
          - Changed to import style_references.py.

        * Scripts/webkitpy/style_references.py: Added.

2010-01-22  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Maciej Stachowiak.

        Fix the leak of ThreadIdentifiers in threadMap across threads.
        https://bugs.webkit.org/show_bug.cgi?id=32689

        Add a new test to verify the ThreadIdentifiers are not reused across threads.
        The test runs in the beginning of DumpRenderTree and spawns 2 non-WTF treads sequentially,
        waiting for the previous thread to terminate before starting the next.
        The treads use WTF::currentThread() in their thread function. Without a fix, this
        causes both threads to have the same ThreadIdentifier which triggers ASSERT in thread function.
        It also starts another thread using WTF. Without the fix, this finds pthread handle from previous
        threads in the WTF threadMap and asserts in WTF::establishIdentifierForPthreadHandle().
        The test practically does not affect the DRT run time because the threads end immediately.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runThread): Test thread function.
        (testThreadIdentifierMap):
        (dumpRenderTree):

2010-01-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Maciej Stachowiak.

        Fix a bug that mouseDown:withModifiers: is never called.
        https://bugs.webkit.org/show_bug.cgi?id=33989

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):

2010-01-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Antti Koivisto.

        [Qt] Separate out the WebPage class into it's own
        cpp/header files. Also, removed the assumption that
        the view is a QWebView, in preparation of a merger
        of the two Qt WebKit launchers.

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        (WebView::mousePressEvent):
        * QtLauncher/webpage.cpp: Added.
        (WebPage::supportsExtension):
        (WebPage::extension):
        (WebPage::acceptNavigationRequest):
        (WebPage::openUrlInDefaultBrowser):
        * QtLauncher/webpage.h: Added.
        (WebPage::WebPage):

2010-01-21  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Refactored to move file name and file-reading related code
        from cpp_style.py and text_style.py to checker.py.

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

        * Scripts/check-webkit-style:
          - Updates caused by changes to checker.py.

        * Scripts/webkitpy/style/checker.py:
          - Added SKIPPED_FILES_WITH_WARNING list.
          - Added SKIPPED_FILES_WITHOUT_WARNING list.
          - Added FileType class.
          - Added ProcessorDispatcher class.
          - In StyleChecker class:
            - Renamed process_patch() to check_patch().
            - Renamed process_file() to check_file().
            - Added _process_file().
            - Related refactoring.
            - Addressed check_patch() FIXME to share code with process_file().

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added ProcessorDispatcherSkipTest class.
          - Added ProcessorDispatcherDispatchTest class.
          - Added StyleCheckerCheckFileTest class.

        * Scripts/webkitpy/style/cpp_style.py:
          - Renamed process_file_data() to _process_lines.
          - Removed process_file() (moved logic to checker.py).
          - Removed can_handle() (moved logic to checker.py).
          - Added CppProcessor class.
          - Removed is_exempt() (moved logic to checker.py).
          - Added process_file_data() back as a wrapper function.

        * Scripts/webkitpy/style/cpp_style_unittest.py:
          - Removed test_can_handle().
          - Removed test_is_exempt().
          - Added CppProcessorTest class.

        * Scripts/webkitpy/style/text_style.py:
          - Added TextProcessor class.
          - Removed process_file().
          - Removed can_handle().

        * Scripts/webkitpy/style/text_style_unittest.py:
          - Removed test_can_handle().
          - Added TextProcessorTest class.

2010-01-21  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by David Kilzer.

        Create a unit-tested subroutine to parse patch files created
        by svn-create-patch.

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

        * Scripts/VCSUtils.pm:
          - Added parseDiff().
          - Added parsePatch().

        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Added.
          - Added unit tests for parseDiff().

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Total number of tests now computed dynamically.

        * Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl: Added.
          - Added unit tests for parsePatch().

2010-01-21  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add new directory to dir list.

        * wx/build/settings.py:

2010-01-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the EWS transactional
        https://bugs.webkit.org/show_bug.cgi?id=33978

        Now if the EWS gets interrupted in the middle of processing a patch,
        the bots will re-process the patch.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/commands/queues_unittest.py:
        * Scripts/webkitpy/patchcollection.py:
        * Scripts/webkitpy/patchcollection_unittest.py: Added.

2010-01-21  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Add missing "ago" for style in the status bubble.

        * QueueStatusServer/templates/statusbubble.html:

2010-01-21  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [style-queue] should not complain about identifier names with underscores under WebKit/gtk/webkit/
        https://bugs.webkit.org/show_bug.cgi?id=33356

        White list unix_hacker_style names in WebKit/gtk/webkit because these
        are used in the GTK+ API.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-21  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] add setDomainRelaxationForbiddenForURLScheme in Qt DRT
        https://bugs.webkit.org/show_bug.cgi?id=33945

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-21  Simon Hausmann  <simon.hausmann@nokia.com>

        No review, rolling out 53615 as it causes two
        crashes on the bot.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::maybeDump):

2010-01-21  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Qt DRT: respect window.close() and window.closed()

        Qt DRT needs to maintain a correct count of open windows
        for windowCount(). It also needs to delete windows that
        have been closed by window.close().

        This fixes the following tests:

        plugins/destroy-during-npp-new.html
        fast/dom/Document/early-document-access.html
        fast/dom/Window/window-early-properties.html
        fast/events/open-window-from-another-frame.html
        fast/events/popup-blocking-click-in-iframe.html

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::createWindow):
        (WebCore::DumpRenderTree::windowCloseRequested):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::maybeDump):

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

        No review, rolling out r53593.
        http://trac.webkit.org/changeset/53593
        https://bugs.webkit.org/show_bug.cgi?id=33496

        Re-rollout this patch, the commit-queue should not have landed
        it again, but it did due to land-diff and rollout both not
        clearing flags.

        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/queueengine.py:
        * Scripts/webkitpy/scm.py:
        * Scripts/webkitpy/scm_unittest.py:

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

        Reviewed by Adam Barth.

        webkit-commit-queue status page is confusing
        https://bugs.webkit.org/show_bug.cgi?id=33496

        This should improve the status page by removing more Fail messages.
        To do this, I re-factored the CommitQueue and the AbstractReviewQueues
        to behave more like one another.  This meant moving where the failure reporting was done.
        Previously the AbstractReviewQueue always used the parent process to report the error,
        while CommitQueue used the subprocess when possible, and the parent only reported errors
        that we didn't know how to handle (bugs in the commit-queue itself).
        Now the AbstractReviewQueue follow's the commit-queue's model.  This got rid of a try-block
        in both implementations and required teaching handle_script_error in each to post Fail messages
        to the status server instead of calling exit(1).

        This will also make the style-queue share more bug posting logic with other queues:
        https://bugs.webkit.org/show_bug.cgi?id=33871

        * Scripts/webkitpy/commands/early_warning_system.py:
         - Don't exit(1) as that will cause the calling queue to also report Fail to the status server.
           Implementors of handle_script_error are expected to update the status server if needed, but only exit if the error could not be handled.
           So we instead pass patch_has_failed_this_queue=True to _update_status_for_script_error in the case that this was a real failure.
           _update_status_for_script_error knows how to post the Fail message to the status server.
         - Teach _update_status_for_script_error how to post Fail messages to the status server.
        * Scripts/webkitpy/commands/queues.py:
         - Remove the try block from process_work_item since the caller already has one.
         - Only CC watchers on failure to cut down on commit-queue generated mail.
         - handle_unexpected_error needs to mark _did_fail now that the try block is gone from process_work_item.
         - Abstract _format_script_error_output_for_bug to share code between all queues.
         - The new _format_script_error_output_for_bug allows the style-queue to share the posting limit with other queues, as well as support linking to the full output.
         - Rename _can_build_and_test to _current_checkout_builds_and_passes_tests to better explain what revision it's testing.
         - Move logging out of _can_build_and_test and make the logs explain what revision we're testing.
         - handle_script_error now posts Fail instead of the try block in process_work_item handling it.
        * Scripts/webkitpy/queueengine.py:
         - QueueEngine is no longer used just by the commit-queue, update the logging to say "processing" instead of landing.
        * Scripts/webkitpy/scm.py:
         - Add new checkout_revision function.
        * Scripts/webkitpy/scm_unittest.py:
         - Test our new checkout_revision function.

2010-01-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket: Missing Request-URI, when no tralling slash in host
        https://bugs.webkit.org/show_bug.cgi?id=33689

        Update pywebsocket to 0.4.7.1, which supports alias for resource
        name, so that we could test for ws://127.0.0.1:8880

        * Scripts/run-webkit-tests:
        * Scripts/run-webkit-websocketserver:
        * pywebsocket/mod_pywebsocket/dispatch.py:
        * pywebsocket/mod_pywebsocket/handshake.py:
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:
        * pywebsocket/test/test_dispatch.py:
        * pywebsocket/test/test_handshake.py:

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

        No review, rolling out r53537.
        http://trac.webkit.org/changeset/53537
        https://bugs.webkit.org/show_bug.cgi?id=33496

        Added a failure condition to the commit-queue and looks to
        have broken the EWS bots

        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/queueengine.py:
        * Scripts/webkitpy/scm.py:
        * Scripts/webkitpy/scm_unittest.py:

2010-01-20  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: accSelect() is not implemented

        https://bugs.webkit.org/show_bug.cgi?id=33918
        <rdar://problem/7436861>

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (takeFocusCallback):
        Call the object's takeFocus() function.
        (takeSelectionCallback):
        Call its takeSelection() function.
        (addSelectionCallback):
        Call its addSelection() function.
        (removeSelectionCallback):
        Call its removeSelection() function.
        (AccessibilityUIElement::getJSClass):
        Add new functions to the JS class definition.

        * DumpRenderTree/AccessibilityUIElement.h:
        Declare new functions.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::takeFocus):
        Stubbed.
        (AccessibilityUIElement::takeSelection):
        Stubbed.
        (AccessibilityUIElement::addSelection):
        Stubbed.
        (AccessibilityUIElement::removeSelection):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::takeFocus):
        Stubbed.
        (AccessibilityUIElement::takeSelection):
        Stubbed.
        (AccessibilityUIElement::addSelection):
        Stubbed.
        (AccessibilityUIElement::removeSelection):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::takeFocus):
        Call the object's accSelect() function, passing the appropriate flag.
        (AccessibilityUIElement::takeSelection):
        Ditto.
        (AccessibilityUIElement::addSelection):
        Ditto.
        (AccessibilityUIElement::removeSelection):
        Ditto.

2010-01-20  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Alexey Proskuryakov.

        Extract Apache handling to httpd.pm module and use the provided functionality
        in scripts where Apache is needed.
        The module httpd.pm stores the PID of Apache in a variable and cleans up
        the PID directory after Apache properly shut down. Catching INT and TERM
        signals allows the scripts to close Apache and clean up its PID directory
        even if the testing was interrupted.

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

        * Scripts/webkitperl/httpd.pm: Added.
        * Scripts/run-iexploder-tests:
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:

2010-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make DumpRenderTree build on Windows

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/main.cpp:

2010-01-20  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Fix commit bot to land patches in order of the bug last modification date.
        https://bugs.webkit.org/show_bug.cgi?id=33395

        * Scripts/webkitpy/bugzilla.py: Modified. Added 'order=Last+Changed' to bugzilla commit queue URL.

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

        Reviewed by Eric Seidel.

        Teach check-webkit-style about WebKit/gtk/tests
        https://bugs.webkit.org/show_bug.cgi?id=33892

        Removes false positives found in
        https://bugs.webkit.org/show_bug.cgi?id=30883

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

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

        Reviewed by Eric Seidel.

        Teach check-webkit-style about QGVLauncher
        https://bugs.webkit.org/show_bug.cgi?id=33890

        Remove false positives found in
        https://bugs.webkit.org/show_bug.cgi?id=33708

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

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

        Reviewed by Adam Barth.

        webkit-commit-queue status page is confusing
        https://bugs.webkit.org/show_bug.cgi?id=33496

        This should improve the status page by removing more Fail messages.
        To do this, I re-factored the CommitQueue and the AbstractReviewQueues
        to behave more like one another.  This meant moving where the failure reporting was done.
        Previously the AbstractReviewQueue always used the parent process to report the error,
        while CommitQueue used the subprocess when possible, and the parent only reported errors
        that we didn't know how to handle (bugs in the commit-queue itself).
        Now the AbstractReviewQueue follow's the commit-queue's model.  This got rid of a try-block
        in both implementations and required teaching handle_script_error in each to post Fail messages
        to the status server instead of calling exit(1).

        This will also make the style-queue share more bug posting logic with other queues:
        https://bugs.webkit.org/show_bug.cgi?id=33871

        * Scripts/webkitpy/commands/early_warning_system.py:
         - Don't exit(1) as that will cause the calling queue to also report Fail to the status server.
           Implementors of handle_script_error are expected to update the status server if needed, but only exit if the error could not be handled.
           So we instead pass patch_has_failed_this_queue=True to _update_status_for_script_error in the case that this was a real failure.
           _update_status_for_script_error knows how to post the Fail message to the status server.
         - Teach _update_status_for_script_error how to post Fail messages to the status server.
        * Scripts/webkitpy/commands/queues.py:
         - Remove the try block from process_work_item since the caller already has one.
         - Only CC watchers on failure to cut down on commit-queue generated mail.
         - handle_unexpected_error needs to mark _did_fail now that the try block is gone from process_work_item.
         - Abstract _format_script_error_output_for_bug to share code between all queues.
         - The new _format_script_error_output_for_bug allows the style-queue to share the posting limit with other queues, as well as support linking to the full output.
         - Rename _can_build_and_test to _current_checkout_builds_and_passes_tests to better explain what revision it's testing.
         - Move logging out of _can_build_and_test and make the logs explain what revision we're testing.
         - handle_script_error now posts Fail instead of the try block in process_work_item handling it.
        * Scripts/webkitpy/queueengine.py:
         - QueueEngine is no longer used just by the commit-queue, update the logging to say "processing" instead of landing.
        * Scripts/webkitpy/scm.py:
         - Add new checkout_revision function.
        * Scripts/webkitpy/scm_unittest.py:
         - Test our new checkout_revision function.

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

        Reviewed by Darin Adler.

        Exempt JavaScriptCore/qt/api from style checks
        https://bugs.webkit.org/show_bug.cgi?id=33879

        Apparently there is a JavaScriptCore API for Qt as well as a WebKit
        API.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Don't use QSocketNotifier in the DRT for reading stdin

        QSocketNotifier is not available on Windows. Instead we read
        stdin synchronously after each test using signals and slots.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/main.cpp:

2010-01-19  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        Move chromium-ews back to building release only to make the EWS faster.

        * Scripts/webkitpy/commands/early_warning_system.py:

2010-01-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: The child <option> elements of a non-multiple <select> are not
        exposed

        https://bugs.webkit.org/show_bug.cgi?id=33773
        <rdar://problem/7550556>

        Reviewed by Alice Liu.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsVisibleCallback):
        Call the object's isVisible() function.
        (getIsOffScreenCallback):
        Ditto, for isOffScreen().
        (getIsCollapsedCallback):
        Ditto, for isCollapsed().
        (getHasPopupCallback):
        Ditto, for hasPopup().
        (AccessibilityUIElement::getJSClass):
        Add isVisible and isOffScreen attributes.

        * DumpRenderTree/AccessibilityUIElement.h:
        Declare new functions.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isVisible):
        Stubbed.
        (AccessibilityUIElement::isOffScreen):
        Stubbed.
        (AccessibilityUIElement::isCollapsed):
        Stubbed.
        (AccessibilityUIElement::hasPopup):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isVisible):
        Stubbed.
        (AccessibilityUIElement::isOffScreen):
        Stubbed.
        (AccessibilityUIElement::isCollapsed):
        Stubbed.
        (AccessibilityUIElement::hasPopup):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::showMenu):
        Call the object's accDoDefaultAction() to show its popup menu.
        (AccessibilityUIElement::isEnabled):
        Check that the object does not have the "unavailable" state.
        (AccessibilityUIElement::isVisible):
        Check that the object does not have the "invisible" state.
        (AccessibilityUIElement::isOffScreen):
        Check whether the object has the "offscreen" state.
        (AccessibilityUIElement::isCollapsed):
        Check whether the object has the "collapsed" state.
        (AccessibilityUIElement::hasPopup):
        Check whether the object has the "has popup" state.

2010-01-19  Victor Wang  <victorw@chromium.org>

        Reviewed by Eric Seidel.

        Correct committer name.
        https://bugs.webkit.org/show_bug.cgi?id=33868

        * Scripts/webkitpy/committers.py:

2010-01-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        [DRT][Mac] Add modifiers parameter to eventSender.mouseDown() and eventSender.mouseUp()
        https://bugs.webkit.org/show_bug.cgi?id=33783

        Some listbox tests check selection behavior by click events with
        "meta" or "shift" keys. Behaviors for such modifier keys are
        platform-dependent. The new parameter of mouseDown() and mouseUp()
        allows to specify not only concrete modifier keys such as
        "shiftKey" "metaKey", but also functional names like
        "addSelectionKey" "rangeSelectionKey".

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (buildModifierFlags):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController mouseDown:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseUp:]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2010-01-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Unbreak --request-commit
        https://bugs.webkit.org/show_bug.cgi?id=33832

        * Scripts/webkitpy/bugzilla.py:

2010-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        validate-committer-lists throws exception and committers.py needs a refresh
        https://bugs.webkit.org/show_bug.cgi?id=33831

        * Scripts/validate-committer-lists: use webkit_logging
        * Scripts/webkitpy/committers.py: Add recently minted committers.  Fix Simon Hausmanns email address list to include his webkit-committers@lists address.

2010-01-18  Adam Roben  <aroben@apple.com>

        Add LayoutTestController support for calling new WebKit SPI to
        disallow setting document.domain

        DRT part of fixing <http://webkit.org/b/33806>
        <rdar://problem/7552837> Would like API to disallow setting of
        document.domain for pages with certain URL schemes

        Reviewed by Sam Weinig.

        * DumpRenderTree/LayoutTestController.cpp:
        (setDomainRelaxationForbiddenForURLSchemeCallback): Added. Calls
        through to LayoutTestController.
        (LayoutTestController::staticFunctions): Added
        setDomainRelaxationForbiddenForURLScheme.

        * DumpRenderTree/LayoutTestController.h: Added
        setDomainRelaxationForbiddenForURLScheme.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        Added. Calls through to WebKit.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setDomainRelaxationForbiddenForURLScheme):
        Stubbed out.

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

        Reviewed by Adam Roben.

        Rename patches-to-commit to patches-in-commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=33789

        The command really lists the patches in the commit-queue not all the
        patches that are pending-commit (as the FIXME commands).

        * Scripts/webkitpy/commands/queries.py:
        * Scripts/webkitpy/commands/queries_unittest.py:

2010-01-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Force qmake to generate a single makefile for DerivedSources.pro

        * Scripts/webkitdirs.pm:

2010-01-18  Adam Roben  <aroben@apple.com>

        Clean up use of /useenv when invoking Visual C++

        This change reverts things to their pre-r49485 state. That revision
        (and, subsequently, r49664 and r51788) started passing /useenv to
        Visual C++, even in cases where we don't want to do so (such as when
        invoking Visual C++ Express), in the name of making the Chromium build
        work. Now that Chromium isn't using buildVisualStudioProject or
        pdevenv, we can put things back they way they were.

        Fixes <http://webkit.org/b/33797> build-webkit fails with VC++ Express
        (due to /useenv flag)

        Reviewed by Sam Weinig.

        * Scripts/pdevenv: Always pass /useenv. Chromium doesn't use this
        script anymore.
        * Scripts/webkitdirs.pm:
        (buildVisualStudioProject): Never pass /useenv anymore. pdevenv takes
        care of this itself, and we don't want to pass /useenv when not using
        pdevenv (e.g., when using VC++ Express, because that will cause it to
        ignore the Platform SDK).

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

        Reviewed by Eric Seidel.

        webkit-patch land-safely should obsolete old patches
        https://bugs.webkit.org/show_bug.cgi?id=33788

        When posting a commit-queue+ patch with land-safely, we should
        obsolete the old patches on the bug.  They're really confusing
        because the main use case is to address reviewer feedback on a
        previous patch.

        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:

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

        Reviewed by David Levin.

        webkit-patch should authenticate more often
        https://bugs.webkit.org/show_bug.cgi?id=33701

        This makes it easier to work with security patches.

        * Scripts/webkitpy/bugzilla.py:

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

        Reviewed by Darin Adler.

        style checker needs to know about GObject-specific requirements
        inside WebCore/bindings/gobject/
        https://bugs.webkit.org/show_bug.cgi?id=33606

        Add an exception to the underscore rule for certain
        GObject-specific names.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

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

        Reviewed by Shinichiro Hamaji.

        [check-webkit-style] does understand ResourceHandleWin.h
        https://bugs.webkit.org/show_bug.cgi?id=32975

        I'm not 100% convinced this fix is correct, but without more examples,
        it's hard to generalize.  We can always generalize the fix in the
        future.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

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

        Unreviewed "build" fix.

        * Scripts/webkitpy/bugzilla.py:

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

        Unreviewed.  Actually make land-safely mark commit-queue+ as
        discussed with Eric.

        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/steps/postdiffforcommit.py:

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        style-queue complains about one-line macros that include multiple statements
        https://bugs.webkit.org/show_bug.cgi?id=33173

        Add an exception for multiple statements on a line that starts a macro.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        [check-webkit-style] qt unit testing false positives
        https://bugs.webkit.org/show_bug.cgi?id=32833

        Exempt the Qt API and unit tests from the style checker.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        style-check script reports loads of errors on gtk2drawing.c
        https://bugs.webkit.org/show_bug.cgi?id=33771

        Exempt WebCore/platform/gtk/gtk2drawing.c and
        WebCore/platform/gtk/gtk2drawing.h from style checks.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-17  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Shinichiro Hamaji.

        Finished eliminating _cpp_style_state global state variable from
        check-webkit-style code and eliminating _CppStyleState class.

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

        * Scripts/webkitpy/style/checker.py:
          - Minor updates caused by changes to cpp_style.py.

        * Scripts/webkitpy/style/cpp_style.py:
          - Removed _CppStyleState class.
          - Removed verbose_level functions.
          - Added verbosity as a parameter to _FunctionState constructor.
          - Added verbosity as a parameter to process_file().
          - Added verbosity as a parameter to process_file_data().

        * Scripts/webkitpy/style/cpp_style_unittest.py:
          - Added helper functions to set verbosity while running tests.

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Shinichiro Hamaji.

        check-webkit-style underscore check should be disabled for Qt methods starting with qt_
        https://bugs.webkit.org/show_bug.cgi?id=33663

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-queue complains about missing #include of config.h for non-WebCore projects
        https://bugs.webkit.org/show_bug.cgi?id=33170

        WebKitAPITests are consumers of the WebKit API and therefore do not
        need to follow the same include discipline as the rest of WebKit.  This
        patch exempts them from the include checks.

        * Scripts/webkitpy/style/cpp_style.py:
        * Scripts/webkitpy/style/cpp_style_unittest.py:

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        EWS (Early Warning Systems) should build both debug and release
        https://bugs.webkit.org/show_bug.cgi?id=33681

        Build both debug and release for chromium-ews.

        * Scripts/webkitpy/commands/early_warning_system.py:

2010-01-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        style-queue should include instructions for how to file bugs against check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=32345

        Added some text to the error message asking folks to file bugs against
        false positives.

        * Scripts/webkitpy/commands/queues.py:

2010-01-17  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Eliminated the error_count global variable and related
        check-webkit-style refactoring.

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

        * Scripts/check-webkit-style:
          - Updated to use webkit_argument_defaults().
          - Renamed styleChecker to style_checker.

        * Scripts/webkitpy/style/checker.py:
          - Prefixed the three default arguments with WEBKIT_DEFAULT.
          - Added webkit_argument_defaults().
          - Added default filter_rules parameter to CategoryFilter constructor.
          - Added __ne__() to CategoryFilter class.
          - Added __eq__() and __ne__() to ProcessorOptions class.
          - Added error_count and _write_error attributes to StyleChecker class.
          - Made StyleChecker._handle_error() increment the error count.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Improved CategoryFilterTest.test_eq().
          - Added CategoryFilterTest.test_ne().
          - Added test_eq() and test_ne() to ProcessorOptionsTest class.
          - Updated unit tests to use webkit_argument_defaults().
          - Added StyleCheckerTest class.

        * Scripts/webkitpy/style/cpp_style.py:
          - Removed references to global error_count.

        * Scripts/webkitpy/style/cpp_style_unittest.py:
          - Removed CppStyleStateTest class.

2010-01-15  Jon Honeycutt  <jhoneycutt@apple.com>

        get_accParent should try to retrieve parent AccessibilityObject, before
        calling upon window

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

        Reviewed by Darin Adler.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::parentElement):
        Get the object's parent. Query it for IAccessible, and return it.

2010-01-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/7529519> DumpRenderTree crashes in makeLargeMallocFailSilently()

        * DumpRenderTree/mac/CheckedMalloc.cpp:
        (makeLargeMallocFailSilently): Temporarily allow writing to the default
        malloc zone structure while modifying it.

2010-01-16  David Kilzer  <ddkilzer@apple.com>

        Added back removed properties to iExploder input files

        While the update-iexploder-cssproperties script works great to
        add new properties, it has the side-effect of removing old
        properties that once were parsed.

        * iExploder/htdocs/cssproperties.in: Added back removed
        properties into their own section.
        * iExploder/htdocs/htmlattrs.in: Ditto.

2010-01-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by David Kilzer.

        Update iExploder/htdocs/*.in by running update-iexploder-cssproperties 
        https://bugs.webkit.org/show_bug.cgi?id=33756

        * iExploder/htdocs/cssproperties.in: New CSS attributes
        * iExploder/htdocs/htmlattrs.in: New HTML attributes
        * iExploder/htdocs/htmltags.in: New HTML tags

2010-01-15  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Altered parseDiffHeader() to skip unrecognized lines and
        other minor clean-ups.

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

        * Scripts/VCSUtils.pm:
          - Changed parseDiffHeader() as follows:
            - Skips over unrecognized lines.
            - Addressed FIXME to remove substitution for "diff" line.
            - Renamed "version" header hash key to "sourceRevision".
            - Eliminated "copiedFromVersion" header hash key.
            - Included "sourceRevision" also for copied files.
            - Checks that copy revision number matches "sourceRevision".
            - No longer returns $foundHeaderEnding.
            - Dies if header ending not found.
            - Diff header dividing line now always added.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
          - Made necessary changes in parseDiffHeader() unit tests.
          - Shortened the file paths in some test cases.

2010-01-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Update pywebsocket to 0.4.6
        https://bugs.webkit.org/show_bug.cgi?id=32299
        The newer pywebsocket can handle more simultaneous connections.

        * pywebsocket/mod_pywebsocket/handshake.py:
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:
        * pywebsocket/test/test_handshake.py:

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

        Reviewed by Adam Barth.

        REGRESSION(53133): commit-queue no longer rejects patches with invalid committers, instead it hangs
        https://bugs.webkit.org/show_bug.cgi?id=33638

        * Scripts/webkitpy/bugzilla.py:
         - Add Bug.id() to match Attachment.id()
         - Give Bug.reviewed_patches and commit_queued_patches the option to return patches with invalid committers/reviewers.
         - Add back a missing variable to _validate_setter_email found by the new unit tests!
        * Scripts/webkitpy/commands/queries.py:
         - Add FIXMEs about the commands being confusingly named.
        * Scripts/webkitpy/commands/queries_unittest.py:
         - Update results to reflect the newly restructured mock bug cache.
        * Scripts/webkitpy/commands/queues.py:
         - Add a new _validate_patches_in_commit_queue method (this is what fixes the regression).
         - Add a FIXME about eventually sorting the patches into some order.
        * Scripts/webkitpy/commands/queues_unittest.py:
         - Update results now that with the newly restructure mock bug cache we're testing cq+'d patches with an invalid committer.
        * Scripts/webkitpy/commands/upload_unittest.py:
         - Update results to match the newly restructured mock bug cache.
        * Scripts/webkitpy/mock_bugzillatool.py:
         - Restructure fetch_ methods to not use a manual list of ids, but rather use Bug and Attachment classes to make real queries from all of the Bugs.
         - Add a few more attachments and bug dictionaries for use by the tests.

2010-01-13  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Christiansen.

        [Qt] DRT missing setUserStyleSheetLocation and setUserStyleSheetEnabled in LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33617

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setUserStyleSheetEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-14  Adam Roben  <aroben@apple.com>

        Add LayoutTestController API to force
        -webView:resource:willSendRequest:: to return null

        Enables tests for <rdar://problem/7533333> <http://webkit.org/b/33533>
        window.onload never fires if page contains an <iframe> with a bad
        scheme or whose load is cancelled by returning null from resource load
        delegate's willSendRequest

        Reviewed by Brady Eidson.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Initialize new member.
        (setWillSendRequestReturnsNullCallback): Call through to
        LayoutTestController.
        (LayoutTestController::staticFunctions): Added new function.

        * DumpRenderTree/LayoutTestController.h: Added
        m_willSendRequestReturnsNull.
        (LayoutTestController::willSendRequestReturnsNull):
        (LayoutTestController::setWillSendRequestReturnsNull):
        Added standard accessors.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):
        Return null if LayoutTestController says to.

2010-01-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after removal of XBM support.

        * wx/build/settings.py:

2010-01-14  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for partial building on Symbian.

        The build happens in the source directory as out of source builds are
        not supported by qmake for Symbian.

        Also the actual build isn't started but it is left to the developer
        to choose the architecture/configuration.

        * Scripts/webkitdirs.pm:

2010-01-14  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Add support for "detecting" Symbian environments by either
        looking for the EPOCROOT environment variable or via --symbian
        being passed on the commandline.

        * Scripts/webkitdirs.pm:

2010-01-14  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Unreviewed.

        [Qt] Use a different Makefile names for sources generation and compilation.
        This prevents Makefile overwriting when running build-webkit twice.

        * Scripts/webkitdirs.pm:

2010-01-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add an "alien_QLabel" classId for manual testing of alien widgets.

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

        * QtLauncher/main.cpp:
        (WebPage::createPlugin):

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

        No review, rolling out r53249.
        http://trac.webkit.org/changeset/53249
        https://bugs.webkit.org/show_bug.cgi?id=33617

        This caused http/tests/security/local-user-CSS-from-
        remote.html to fail on the Qt Release Build Bot.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-14  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Shinichiro Hamaji.

        Moved error() from cpp_style.py to checker.py.

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

        * Scripts/check-webkit-style:
          - Addressed FIXME to not set global state.

        * Scripts/webkitpy/style/checker.py:
          - Added argument validation to ProcessorOptions constructor.
          - Added should_report_error() to ProcessorOptions class.
          - Removed set_options().
          - Added StyleChecker class.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added unit test class for ProcessorOptions class.
          - Added unit test to check that parse() strips white space.

        * Scripts/webkitpy/style/cpp_style.py:
          - Removed "filter" and "output_format" methods.
          - Removed should_print_error() and error() functions.
          - Removed default parameter value from process_file().

        * Scripts/webkitpy/style/cpp_style_unittest.py:
          - Removed call to cpp_style._should_print_error().
          - Removed test_filter() and test_filter_appending().

        * Scripts/webkitpy/style/text_style.py:
          - Removed default parameter value from process_file().

2010-01-14  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT missing setUserStyleSheetLocation and setUserStyleSheetEnabled in LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33617

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setUserStyleSheetLocation):
        (LayoutTestController::setUserStyleSheetEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix CloseBugForLandDiff unittest to actually run
        https://bugs.webkit.org/show_bug.cgi?id=33640

        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/steps/closebugforlanddiff_unittest.py:

2010-01-12  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: selected, selectable, extended selectable, and multiple
        selectable states are not reported

        https://bugs.webkit.org/show_bug.cgi?id=33574
        <rdar://problem/7536826>

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsSelectableCallback):
        Return the result of calling isSelectable().
        (getIsMultiSelectableCallback):
        Return the result of calling isMultiSelectable().
        (AccessibilityUIElement::getJSClass):
        Add isSelected and isMultiSelectable properties to the JSClass
        definition.

        * DumpRenderTree/AccessibilityUIElement.h:
        Declare isSelectable() and isMultiSelectable().

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isSelectable):
        Stubbed.
        (AccessibilityUIElement::isMultiSelectable):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isSelectable):
        Stubbed.
        (AccessibilityUIElement::isMultiSelectable):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (accessibilityState):
        Get the object's state, and return it.
        (AccessibilityUIElement::isSelected):
        Check the object's selected state.
        (AccessibilityUIElement::isSelectable):
        Check the object's selectable state.
        (AccessibilityUIElement::isMultiSelectable):
        Check the object's extended/multiple selectable state.

2010-01-13  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Repeat the below for CloseBugForLandDiff.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/steps/closebugforlanddiff.py:
        * Scripts/webkitpy/steps/closebugforlanddiff_unittest.py: Added.

2010-01-13  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Turn the mac-ews status bubbles back on now that this bot
        is running again.

        * QueueStatusServer/templates/statusbubble.html:

2010-01-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(53133): webkit-patch land dies if it can't find a bug id.
        https://bugs.webkit.org/show_bug.cgi?id=33634

        Deal with the case of no bug patch object in the state.

        * Scripts/webkitpy/steps/updatechangelogswithreview_unittests.py:
        * Scripts/webkitpy/steps/updatechangelogswithreviewer.py:

2010-01-13  Kenneth Russell  <kbr@google.com>

        Unreviewed; added myself to the committers list.

        * Scripts/webkitpy/committers.py:

2010-01-13  Darin Adler  <darin@apple.com>

        Ignore compiled Python in more of webkitpy.

        * Scripts/webkitpy/commands: Added property svn:ignore.
        * Scripts/webkitpy/steps: Added property svn:ignore.
        * Scripts/webkitpy/style: Added property svn:ignore.

2010-01-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix build problem related to the pushd command

        * Scripts/webkitdirs.pm:

2010-01-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Split the build process in two different .pro files.
        This allows qmake to be run once all source files are available.

        * Scripts/webkitdirs.pm: Add calls to make DerivedSources.pro in JSC and WC.

2010-01-13  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed tiny typo fix in docstrings.

        * Scripts/webkitpy/style/checker_unittest.py:

2010-01-13  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Shinichiro Hamaji.

        Created a CategoryFilter class to encapsulate the logic of
        filter rules.

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

        * Scripts/webkitpy/style/checker.py:
          - Added CategoryFilter class.

        * Scripts/webkitpy/style/checker_unittest.py:
          - Added CategoryFilter unit tests.

        * Scripts/webkitpy/style/cpp_style.py:
          - Updated filter methods to use CategoryFilter.

        * Scripts/webkitpy/style/cpp_style_unittest.py:
          - Updated references to filters.

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

        Unreviewed. Now I can review :)

        * Scripts/webkitpy/committers.py:

2010-01-12  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Extend WinLauncher example with better printing features.

        * WinLauncher/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::webViewPrintingMarginRect): Provide slightly
         larger margins.
        (PrintWebUIDelegate::webViewHeaderHeight): Compute header height based
         on text metrics.
        (PrintWebUIDelegate::webViewFooterHeight): Compute footer height based
         on text metrics.
        (PrintWebUIDelegate::drawHeaderInRect): Write useful header, along
         with separating line.
        (PrintWebUIDelegate::drawFooterInRect):
        * WinLauncher/PrintWebUIDelegate.h: Remove stubs.
        * WinLauncher/WinLauncher.cpp:
        (PrintView): Correct loop used to print individual pages.
         Previously it started at 0, which is a wild-card to print all
         pages at once.

2010-01-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33540
        Make it possible to build in debug mode with assertions disabled

        * DumpRenderTree/mac/ObjCController.m: (-[ObjCController accessStoredWebScriptObject]):

2010-01-11  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] "build-webkit --chromium" should run "make all" on Linux
        https://bugs.webkit.org/show_bug.cgi?id=33500

        * Scripts/webkitdirs.pm:

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

        Reviewed by Adam Barth.

        AssignToCommitter does not need to fetch bugs twice
        https://bugs.webkit.org/show_bug.cgi?id=33530

        This is a no-brainer patch now that we've added Bug.reviewed_patches

        * Scripts/webkitpy/commands/upload.py:

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

        Reviewed by Adam Barth.

        bugzilla.py should have an Attachment object instead of passing around dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=31594

        * Scripts/webkitpy/bugzilla.py:
         - Add a new Attachment class, with accessor methods for all the necessary properties.
         - Update Bug to carry a pointer back to bugzilla (attachments need to access Bugzilla for committer validation and url())
         - Move reviewed_patches and commit_queued_patches out of Bugzilla custom methods and onto Bug
         - Move committer validation logic into its own class.
         - Committer rejection is only used in one place.  Make the new Bug reviewed_patches and commit_queued_patches
           handle the common case (of returning "reviewer" or "committer" as None), and let CommitterValidation handle
           the case where we want to reject patches in bugzilla.
         - Simplify fetch_patches_from_commit_queue now that committer validation is simpler.
         - Make all self.bugzilla.fetch_bug access go through BugzillaQueries._fetch_bug.
         - Mark set_flag_on_attachment as non-private to denote that CommitterValidation depends on it.
         - Move fetch_reviewed_patches_from_bug and fetch_commit_queue_patches_from_bug logic onto the Bug class.
        * Scripts/webkitpy/bugzilla_unittest.py:
         - Move test_flag_permission_rejection_message into a new CommitterValidationTest class.
        * Scripts/webkitpy/commands/download.py:
         - Store "bug_id" in state instead of making a fake patch object.
         - Update to use Attachment and Bug objects.
        * Scripts/webkitpy/commands/download_unittest.py:
         - Update expected results now that our testing framework covers more code.
        * Scripts/webkitpy/commands/early_warning_system.py: Update to use new Attachment class.
        * Scripts/webkitpy/commands/queries.py: Remove unused ReviewedPatches class.
        * Scripts/webkitpy/commands/queries_unittest.py: ditto.
        * Scripts/webkitpy/commands/queues.py: Update to use new Attachment and CommitterValidator classes.
        * Scripts/webkitpy/commands/queuestest.py: ditto.
        * Scripts/webkitpy/commands/upload.py: ditto.
        * Scripts/webkitpy/mock_bugzillatool.py:
         - Now that more logic has moved into Attachment and Bug, we have to actually
           provide real reviewer emails as well as real reviewer flags.
         - Update mock methods to return Attachment objects.
        * Scripts/webkitpy/scm.py: Update to use Attachment class.
        * Scripts/webkitpy/scm_unittest.py: Update to use Attachment class.
        * Scripts/webkitpy/statusserver.py: ditto.
        * Scripts/webkitpy/steps/applypatch.py: ditto.
        * Scripts/webkitpy/steps/applypatchwithlocalcommit.py: ditto.
        * Scripts/webkitpy/steps/closebug.py: ditto.
        * Scripts/webkitpy/steps/closebugforlanddiff.py: Handle either state["bug_id"] or state["patch"].bug_id()
        * Scripts/webkitpy/steps/closepatch.py: Update to use Attachment class.
        * Scripts/webkitpy/steps/obsoletepatches.py: ditto.
        * Scripts/webkitpy/steps/updatechangelogswithreviewer.py: ditto.

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

        Unreviewed typo fix.  :(

        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queues.py:

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

        Unreviewed.  Add "error" to the right part of the message.

        * Scripts/webkitpy/commands/queues.py:

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

        Reviewed by Eric Seidel.

        EWS should show purple when svn-apply fails
        https://bugs.webkit.org/show_bug.cgi?id=33527

        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queues.py:

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

        Reviewed by Eric Seidel.

        Remove copy/paste code from subclasses of AbstractReviewQueue
        https://bugs.webkit.org/show_bug.cgi?id=33525

        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queues.py:

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

        Reviewed by Eric Seidel.

        Add Gustavo and Xan as gtk-ews watchers
        https://bugs.webkit.org/show_bug.cgi?id=33519

        * Scripts/webkitpy/commands/early_warning_system.py:

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

        Reviewed by Eric Seidel.

        webkit-patch shouldn't waste my time for with a component prompt
        https://bugs.webkit.org/show_bug.cgi?id=33521

        The component field isn't very useful for bugs created with
        webkit-patch because they're likely to be resolved quickly.  Instead of
        always prompting for a component, we should just default to the "New
        Bugs" component.  If the bug stays around for more than five minutes,
        we can assign it a proper component.

        * Scripts/webkitpy/bugzilla.py:

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

        Reviewed by Eric Seidel.

        Add experimental "land-safely" command to webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=33518

        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/steps/__init__.py:
        * Scripts/webkitpy/steps/postdiffforcommit.py: Added.

2010-01-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after introduction of JS_NO_EXPORT
        
        * wx/build/settings.py:

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

        No review, rolling out r53079.
        http://trac.webkit.org/changeset/53079
        https://bugs.webkit.org/show_bug.cgi?id=33197

        Adam doens't think this actually works, and believe it caused
        a regression https://bugs.webkit.org/show_bug.cgi?id=33488 so
        rolling this out.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/commands/abstractdiffcommand.py: Removed.
        * Scripts/webkitpy/commands/abstractdiffcommand_unittest.py: Removed.
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/mock_bugzillatool.py:

2010-01-10  Adam Barth  <abarth@webkit.org>

        Reviewed by David Kilzer.

        bugzilla-tool submit-patch mistakenly picks up bug URLs in non-ChangeLog files
        https://bugs.webkit.org/show_bug.cgi?id=33197

        We should just search for bug numbers in the ChangeLogs instead of in
        the whole diff.
 
        * Scripts/test-webkitpy:
        * Scripts/webkitpy/commands/abstractdiffcommand.py: Added.
        * Scripts/webkitpy/commands/abstractdiffcommand_unittest.py: Added.
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/mock_bugzillatool.py:

2010-01-11  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Created a unit-tested function to parse the header block of
        a Git or SVN diff -- for future refactoring of svn-apply and
        svn-unapply.

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

        * Scripts/VCSUtils.pm:
          - Added parseDiffHeader().
          - Removed irrelevant comment from gitdiff2svndiff().

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl: Added.
          - Added 48 unit tests for parseDiffHeader().

2010-01-10  Adam Barth  <abarth@webkit.org>

        Rubber stamped by David Kilzer.

        bugzilla-tool submit-patch mistakenly picks up bug URLs in non-ChangeLog files
        https://bugs.webkit.org/show_bug.cgi?id=33197

        Fix a typo: Commmand -> Command.

        * Scripts/webkitpy/commands/abstractsequencedcommand.py:
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/queries.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/multicommandtool.py:

2010-01-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Let webkit-patch work with options in $EDITOR
        https://bugs.webkit.org/show_bug.cgi?id=33414

        The $EDITOR evironment variable might have command line options like
        bbedit -w.  This patch lets us run those $EDITORs.

        * Scripts/webkitpy/user.py:

2010-01-10  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Adam Barth.

        [Qt] Add enableXSSAuditor support to QWebSettings and DRT.

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

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-10  Adam Barth  <abarth@webkit.org>

        Unreviewed cosmetic change.  Remove the status bubble for mac-ews
        because we don't have hardware for it at the moment.

        * QueueStatusServer/templates/statusbubble.html:

2010-01-09  Daniel Bates  <dbates@webkit.org>

        No review, rolling out r53044.
        http://trac.webkit.org/changeset/53044
        https://bugs.webkit.org/show_bug.cgi?id=33419
        
        We need to look into this some more because the Qt
        bot is failing the XSSAuditor tests. See bug #33419
        for more details.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-09  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Adds support for the XSSAuditor to the Qt DRT.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2010-01-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Retry writes to QueueStatusServer when we get 500 errors
        https://bugs.webkit.org/show_bug.cgi?id=33412

        This prevents the queues from failing to mark a patch as "pass" or
        "fail" when AppEngine throws 500 errors.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/networktransaction.py: Added.
        * Scripts/webkitpy/networktransaction_unittest.py: Added.
        * Scripts/webkitpy/statusserver.py:
        * Scripts/webkitpy/steps/closebugformarkbugfixed.py: Added.
        * Scripts/webkitpy/steps/closebugregardlessofpatches.py: Added.
        * Scripts/webkitpy/steps/findbugidfromsvnrevision.py: Added.

2010-01-09  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/33430> Fix rounded borders in queue status on older Firefox and Safari browsers

        Reviewed by Eric Seidel.

        * QueueStatusServer/templates/statusbubble.html: Added
        -moz-border-radius and -webkit-border-radius to provide rounded
        borders in older Firefox and Safari browsers.

2010-01-09  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Modified VCSUtils::gitdiff2svndiff() to accept strings that
        end in vertical white space.

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

        * Scripts/VCSUtils.pm:
        * Scripts/webkitperl/VCSUtils_unittest/gitdiff2svndiff.pl:

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

        Reviewed by Adam Barth.

        run-javascriptcore-tests needs a --quiet flag
        https://bugs.webkit.org/show_bug.cgi?id=33399

        Until run-javascriptcore-tests has a --quiet flag, lets just stiffle the output in webkit-patch.

        * Scripts/webkitpy/steps/runtests.py:

2010-01-08  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Alexey Proskuryakov.

        Only run http and websocket tests as last if no argument is given to be able to explicitly control the test order.

        To be able to run multiple instances of run-webkit-tests besides each other on the same machine we need to minimize
        the time when Apache and WebSocketServer is locked by tests.
        Because closeHTTPD() and closeWebSocketServer() is only called at the end of the testing,
        we need to run http and websocket tests after all other tests.
        If one however explicitly specifies the tests to run in the argument list of run-webkit-tests
        we need to preserve the given order.

        * Scripts/run-webkit-tests:

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

        Reviewed by Eric Seidel.

        Don't post style-queue pass messages to bugs
        https://bugs.webkit.org/show_bug.cgi?id=33404

        These messages aren't needed any more now that we have the status
        bubble reporting pass events passively.

        * Scripts/webkitpy/commands/queues.py:

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

        Reviewed by Eric Seidel.

        Optimize the number of CPUs used for building Qt and Gtk
        https://bugs.webkit.org/show_bug.cgi?id=33394

        Instead of hardcoding the number 8, we should read the number of CPUs
        from the environment.

        * Scripts/webkitpy/executive.py:
        * Scripts/webkitpy/webkitport.py:
        * Scripts/webkitpy/webkitport_unittest.py:

2010-01-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION(52819?): AXLoadComplete and AXLayoutComplete causes 4 tests fail on Snow Leopard Debug bot
        https://bugs.webkit.org/show_bug.cgi?id=33300

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):
        (_accessibilityNotificationCallback):
        (AccessibilityUIElement::addNotificationListener):

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

        Reviewed by Simon Hausmann.

        commit-queue should run run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=33376

        I also made it run the python and perl unit tests.

        * Scripts/webkitpy/steps/runtests.py:
        * Scripts/webkitpy/webkitport.py:

2010-01-07  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Run the http and websocket tests after all other tests.
        https://bugs.webkit.org/show_bug.cgi?id=33153

        * Scripts/run-webkit-tests:

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

        Reviewed by Eric Seidel.

        Fix some test-webkitpy expectations
        https://bugs.webkit.org/show_bug.cgi?id=33345

        I forgot to change these when I added the CheckStyle step.

        * Scripts/webkitpy/commands/upload_unittest.py:

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

        Reviewed by Eric Seidel.

        webkit-patch edit-changelogs (or upload) will open blank files if run outside the root
        https://bugs.webkit.org/show_bug.cgi?id=33341

        Fix this by moving to the root directory before editing ChangeLogs.
        There is a related bug with CheckStyle.

        * Scripts/webkitpy/steps/checkstyle.py:
        * Scripts/webkitpy/steps/editchangelog.py:

2010-01-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        media/unsupported-tracks.html is failing on Snow Leopard Release bot
        https://bugs.webkit.org/show_bug.cgi?id=32339

        This is a speculative fix.  I do not have a Snow Leopard machine to test on
        and I've not seen mention of someone being able to reproduce this locally.

        Prevent watchdog timer from firing after a test completes but before
        the next one starts, causing the error to appear in the next test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Stop the watchdog before printing #EOF for the test content.
        We only need to care about the JavaScript of the test running too long
        or some hang in WebCore.  Any other failures will be covered by the calling
        script's own watchdog timer.

2010-01-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue is stuck spinning due to exception
        https://bugs.webkit.org/show_bug.cgi?id=33358

        * Scripts/webkitpy/commands/queues.py:
         - Don't try to stringify the exception.

2010-01-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        Don't leak a JSStringRef within _accessibilityNotificationCallback.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (_accessibilityNotificationCallback): Have a JSRetainPtr adopt the JSStringRef so that it will be cleaned up
        when it goes out of scope.

2010-01-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Add proposed rename of HTMLPlugInImageElement to HTMLEmbeddedObjectElement.

        * Scripts/do-webcore-rename:

2010-01-07  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Wrong state and TouchLists in TouchEvents
        https://bugs.webkit.org/show_bug.cgi?id=32878

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::touchStart):
        (EventSender::touchEnd):
        (EventSender::clearTouchPoints):
        * DumpRenderTree/qt/EventSenderQt.h:

2010-01-07  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Adam Barth.

        Created a module that runs the style package unit tests.

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

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/style/unittests.py: Added.

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

        Reviewed by Maciej Stachowiak.

        Don't print a redundant message when confirming a diff
        https://bugs.webkit.org/show_bug.cgi?id=33315

        Instead of saying "ERROR: User declined" we should just exit because
        the use knows they just declined!

        * Scripts/webkitpy/steps/confirmdiff.py:

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

        Reviewed by Maciej Stachowiak.

        Check style before uploading a patch
        https://bugs.webkit.org/show_bug.cgi?id=33314

        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/steps/checkstyle.py:
        * Scripts/webkitpy/steps/options.py:

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

        Reviewed by Maciej Stachowiak.

        Add prepare and post to webkit-patch main help
        https://bugs.webkit.org/show_bug.cgi?id=33313

        * Scripts/webkitpy/commands/upload.py:

2010-01-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Chromium bots to the list of "core builders" (builders which stop the commit-queue when they turn red)
        https://bugs.webkit.org/show_bug.cgi?id=33290

        Add the Chromium builders to our list of core builders and test that our regexps work.
        I also updated our regexp testing to make sure we cover all known builders at build.webkit.org.

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

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

        Reviewed by Eric Seidel.

        bugzilla-tool needs a new name
        https://bugs.webkit.org/show_bug.cgi?id=28459

        Rename bugzilla-tool to webkit-patch.  Also, rename some commands to
        make more sense with the new name.

        * Scripts/bugzilla-tool: Removed.
        * Scripts/webkit-patch: Added.
        * Scripts/webkit-tools-completion.sh:
        * Scripts/webkitpy/bugzilla_unittest.py:
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queries.py:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/commands/queues_unittest.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/queueengine.py:
        * Scripts/webkitpy/steps/completerollout.py:

2010-01-07  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Moved style-related modules to webkitpy.style sub-package.

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

        * Scripts/check-webkit-style:
          - Updated import statement.

        * Scripts/test-webkitpy:
          - Updated import statements.

        * Scripts/webkitpy/cpp_style.py: Removed.
          - Moved to webkitpy/style.

        * Scripts/webkitpy/cpp_style_unittest.py: Removed.
          - Moved to webkitpy/style.

        * Scripts/webkitpy/style.py: Removed.
          - Moved to webkitpy/style/checker.py.

        * Scripts/webkitpy/style/__init__.py: Added.
          - Added containing webkitpy directory to package search path.

        * Scripts/webkitpy/style/checker.py: Copied from Scripts/webkitpy/style.py.
        * Scripts/webkitpy/style/checker_unittest.py: Copied from Scripts/webkitpy/style_unittest.py.
          - Updated import statement.

        * Scripts/webkitpy/style/cpp_style.py: Copied from Scripts/webkitpy/cpp_style.py.
        * Scripts/webkitpy/style/cpp_style_unittest.py: Copied from Scripts/webkitpy/cpp_style_unittest.py.
          - Update import statement.

        * Scripts/webkitpy/style/text_style.py: Copied from Scripts/webkitpy/text_style.py.
        * Scripts/webkitpy/style/text_style_unittest.py: Copied from Scripts/webkitpy/text_style_unittest.py.
        * Scripts/webkitpy/style_unittest.py: Removed.
          - Moved to webkitpy/style/checker_unittest.py.

        * Scripts/webkitpy/text_style.py: Removed.
          - Moved to webkitpy/style.

        * Scripts/webkitpy/text_style_unittest.py: Removed.
          - Moved to webkitpy/style.

2010-01-06  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Eric Seidel.

        [Qt] Support the 3rd argument of EventSender.keyDown that
        has been recently added to report keyLocation
        (see also: https://bugs.webkit.org/show_bug.cgi?id=28247).
        https://bugs.webkit.org/show_bug.cgi?id=33250

        Test: fast/events/keydown-numpad-keys.html

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

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

        Reviewed by Adam Barth.

        Add long_help for all common commands.
        https://bugs.webkit.org/show_bug.cgi?id=33261

        For now these long_helps are pretty basic.
        These were all written to just explain the steps
        that each command runs.  This style long_help could
        be made easier by using:
        https://bugs.webkit.org/show_bug.cgi?id=33257

        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/queries.py:

2010-01-06  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Add page zooming support to Qt DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=32898

        Patch by Kim Grönholm  <kim.gronholm@nomovok.com>,
                 Diego Gonzalez <diego.gonzalez@openbossa.org> and
                 Afonso Costa <afonso.costa@openbossa.org>

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

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

        No review, just adding Mike Belshe's new bugzilla email at his request.

        * Scripts/webkitpy/committers.py:

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

        Unreviewed.  Rolling out r52869 and r52853 due to bot
        and local run-webkit-test failures

        REGRESSION(52854?) fast/workers/shared-worker-constructor.html failed on Leopard Build Bot
        https://bugs.webkit.org/show_bug.cgi?id=33256

        The original bug was https://bugs.webkit.org/show_bug.cgi?id=33153

        * Scripts/run-webkit-tests:

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

        Unreviewed "build" fix.  Just adding missing include.

        bugzilla-tool rollout --complete-rollout should make a nicer bug comment
        https://bugs.webkit.org/show_bug.cgi?id=29212

        * Scripts/webkitpy/steps/completerollout.py:

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

        Reviewed by Adam Barth.

        bugzilla-tool rollout --complete-rollout should make a nicer bug comment
        https://bugs.webkit.org/show_bug.cgi?id=29212

        * Scripts/webkitpy/bugzilla.py:
         - Make reopen_bug robust against the bug already being open.
        * Scripts/webkitpy/commands/download.py:
         - Remove dead code from Rollout.
        * Scripts/webkitpy/steps/completerollout.py:
         - Improve the rollout comment.

2010-01-06  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Set isHttpdOpen to 0 if pidfile does not exist for some reason.
        Speculative fix for https://bugs.webkit.org/show_bug.cgi?id=33256.

        * Scripts/run-webkit-tests:

2010-01-06  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change hardcoded /tmp in run-webkit-tests to File::Spec->tmpdir(),
        and remove the httpd's pidfile directory if httpd terminated.

        * Scripts/run-webkit-tests:

2010-01-05  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Levin.

        Refactored check-webkit-style's argument parser to not rely
        on global state, and improved its error handling and unit
        test coverage.

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

        * Scripts/check-webkit-style:
          - Adjusted to use new argument parser.

        * Scripts/webkitpy/cpp_style.py:
          - Changed _CppStyleState to accept an array of filter rules
            instead of a comma-delimited string.
          - Eliminated cpp_style._DEFAULT_FILTER_RULES.
          - Eliminated cpp_style._USAGE.

        * Scripts/webkitpy/cpp_style_unittest.py:
          - Updated test_filter() and test_default_filter().

        * Scripts/webkitpy/style.py:
          - Converted style._USAGE to create_usage().
          - Corrected usage instructions by removing 0 as a valid
            --verbose flag value.
          - Removed use_webkit_styles().
          - Added ProcessorOptions class.
          - Added ArgumentDefaults class.
          - Added ArgumentPrinter class.
          - Removed parse_arguments and added ArgumentParser class.
          - Moved exit_with_usage() and exit_with_categories() into
            ArgumentParser.
          - Refactored parse_arguments() as ArgumentParser.parse().
          - Improved parser error handling.

        * Scripts/webkitpy/style_unittest.py:
          - Added DefaultArgumentsTest class.
          - Addressed FIXME to check style.WEBKIT_FILTER_RULES
            against style.STYLE_CATEGORIES.
          - Added ArgumentPrinterTest class.
          - Added ArgumentParserTest class and rewrote parser unit tests.

2010-01-05  Adam Roben  <aroben@apple.com>

        Test that it's safe to call IWebView::close when
        IWebView::initWithFrame hasn't been called

        Part of <http://webkit.org/b/32827> Crash when calling
        IWebView::close, then releasing the WebView, without calling
        DestroyWindow

        Reviewed by Steve Falkenburg.

        * WebKitAPITest/tests/WebViewDestruction.cpp:
        (WebKitAPITest::CloseWithoutInitWithFrame): Calls IWebView::close
        without ever calling IWebView::initWithFrame and tests that we don't
        crash or leak.

2010-01-05  Adam Roben  <aroben@apple.com>

        Add more WebViewDestruction tests

        Fixes <http://webkit.org/b/33216>.

        Reviewed by Eric Seidel.

        * WebKitAPITest/tests/WebViewDestruction.cpp:
        (WebKitAPITest::NoInitWithFrame):
        (WebKitAPITest::CloseThenDestroyViewWindow):
        (WebKitAPITest::DestroyViewWindowThenClose):
        (WebKitAPITest::DestroyHostWindow):
        (WebKitAPITest::DestroyHostWindowThenClose):
        (WebKitAPITest::CloseThenDestroyHostWindow):
        Added these tests that exercise tearing down a WebView in various
        ways, all of which we eventually want to have work. Some of them
        currently crash or leak.

2010-01-05  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        [Qt] fix DRT link failures on --no-svg builds when only making changes to DRT
        
        If you're working from a --minimal or --no-svg build and make changes to the
        DRT, then recompile, the build will fail.
        
        This is because the current behavior at build time is to assume that the
        previous Qt build supported SVG and consequently delete libQtWebKit.so.
        Unfortunately, just deleting libQtWebKit.so will not cause the library to
        re-link. Instead the build will see libQtWebKit.so.4 and co., pass over the
        linking phase, and attempt to link the DRT with libQtWebKit.so absent. This
        results in a link failure on the DRT.
        
        Since re-linking libQtWebKit can take up to ten minutes and should be avoided
        in cases where not actually required, remove the assumption that
        the previous Qt build supported SVG, and amend the symbol detection to look for
        a symbol name that is not present in SVG builds. Currently webkitdirs.pm looks
        for 'SVGElement' but even non-SVG builds contain the symbol 'isSVGElement'.
        
        https://bugs.webkit.org/show_bug.cgi?id=32992

        * Scripts/webkitdirs.pm:

2010-01-05  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Switched to generating list of Perl unit test files dynamically,
        instead of explicitly.

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

        * Scripts/test-webkitperl:

2010-01-05  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Reimplement EventSender::leapForward
        https://bugs.webkit.org/show_bug.cgi?id=33114

        Follow Windows implementation of leapForward. When leapForward is called, 
        messages are queued and posted after the timeout. A new event loop is created to
        handle those messages and the additional messages that are created as a result.

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::leapForward):
        (EventSender::sendOrQueueEvent):
        (EventSender::replaySavedEvents):
        (EventSender::eventFilter):
        * DumpRenderTree/qt/EventSenderQt.h:

2010-01-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Fix obscure queue crash in queueengine
        https://bugs.webkit.org/show_bug.cgi?id=33196

        Sometimes we get an exception that can't be stringified.  For example:

        AttributeError: 'ParseError' object has no attribute 'msg'

        In these cases, the whole queue dies because we're in the global
        exception handler.  Instead of dieing here, we should just print a less
        informative message to the console.  We're already printing the whole
        backtrace anyway, so there's not much point to stringifying the
        exception anyway.

        * Scripts/webkitpy/queueengine.py:

2010-01-05  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Darin Adler.

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

        For an object with an aria role of "checkbox" or "radiobutton",
        use the "aria-checked" attribute to determine if it's checked.
        These changes add an isChecked() method to AccessibilityUIElement
        so that we can check for this property from a layout test.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsCheckedCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isChecked):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isChecked):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isChecked):

2010-01-05  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Having a comment for the #endif for a header guard is not required WebKit style.
        https://bugs.webkit.org/show_bug.cgi?id=33214

        * Scripts/webkitpy/cpp_style.py: removed the check and made the loop exit
          early when it has all the needed information to continue.
        * Scripts/webkitpy/cpp_style_unittest.py: removed the corresponding tests.

2010-01-05  Adam Roben  <aroben@apple.com>

        Share more code in the WebViewDestruction tests

        Part of <http://webkit.org/b/33212> Small fixes/improvements to
        WebKitAPITest

        Reviewed by Sam Weinig.

        * WebKitAPITest/tests/WebViewDestruction.cpp:
        (WebKitAPITest::createAndInitializeWebView): Renamed from
        createWebView. Now initializes the HostWindow and returns the
        WebView's HWND via an out-parameter.
        (WebKitAPITest::finishWebViewDestructionTest): Added. Code came from
        the CloseWithoutDestroyWindow test.
        (WebKitAPITest::CloseWithoutDestroyViewWindow): Renamed from
        CloseWithoutDestroyWindow and changed to use the new functions.
        (WebKitAPITest::MainFrameAfterClose): Changed to use the new
        functions.
        (WebKitAPITest::NoCloseOrDestroyViewWindow): Renamed from
        NoCloseOrDestroyWindow and changed to use the new functions.

2010-01-05  Adam Roben  <aroben@apple.com>

        Don't show HostWindows by default

        This was making WebKitAPITest very flashy as windows appeared and
        disappeared.

        Part of <http://webkit.org/b/33212> Small fixes/improvements to
        WebKitAPITest

        Reviewed by Sam Weinig.

        * WebKitAPITest/HostWindow.cpp:
        (WebKitAPITest::HostWindow::initialize): Removed the WS_VISIBLE style
        from the window.

2010-01-05  Adam Roben  <aroben@apple.com>

        Don't hang in WebKitAPITest if no messages have been posted

        Part of <http://webkit.org/b/33212> Small fixes/improvements to
        WebKitAPITest

        Reviewed by Sam Weinig.

        * WebKitAPITest/tests/WebViewDestruction.cpp:
        (WebKitAPITest::runMessagePump): Use PeekMessage instead of GetMessage
        to avoid hanging if no messages have been posted.

2010-01-05  Adam Roben  <aroben@apple.com>

        Fix WebKitCreateInstance helper

        Part of <http://webkit.org/b/33212> Small fixes/improvements to
        WebKitAPITest

        Reviewed by Sam Weinig.

        * WebKitAPITest/tests/WebViewDestruction.cpp:
        (WebKitAPITest::WebKitCreateInstance): Pass the pointer straight
        through, instead of taking its address.

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Fisher.

        Reorganize, document and rename OS() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33198

        Adapt to name changes.
        
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/config.h:

2010-01-05  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Minor improvements to test-webkit-scripts, as suggested
        by an earlier review.

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

        * Scripts/test-webkit-scripts:
          - Used OptionParser class instead of getopt.getopt().
          - Created main() method for __main__ block.
          - Enclosed functions in a class.

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

        No review. Fix DRT breakage on Tiger/Leopard.

        Add ARIA "Live Region" support
        https://bugs.webkit.org/show_bug.cgi?id=33117

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:

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

        Reviewed by Darin Adler.

        Add ARIA "Live Region" support
        https://bugs.webkit.org/show_bug.cgi?id=33117

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (indexOfChildCallback):
        (boolAttributeValueCallback):
        (stringAttributeValueCallback):
        (addNotificationListenerCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::indexOfChild):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::boolAttributeValue):
        (AccessibilityUIElement::addNotificationListener):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::indexOfChild):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::boolAttributeValue):
        (_accessibilityNotificationCallback):
        (AccessibilityUIElement::addNotificationListener):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::indexOfChild):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::boolAttributeValue):
        (AccessibilityUIElement::addNotificationListener):

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool rollout should require a reason
        https://bugs.webkit.org/show_bug.cgi?id=30810

        * Scripts/webkitpy/changelogs.py: Add support for a reason, add auto-wrapping logic.
        * Scripts/webkitpy/changelogs_unittest.py: Test reason support.
        * Scripts/webkitpy/commands/download.py: rollout now requires a reason, remove unused BUGID argument
        * Scripts/webkitpy/commands/download_unittest.py: pass required reason
        * Scripts/webkitpy/steps/preparechangelogforrevert.py: pass reason to update_for_revert

2010-01-04  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: <select> elements should broadcast value change events

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

        <rdar://problem/7332364>

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityController.cpp:
        (logValueChangeEventsCallback):
        Start logging value change events.
        (AccessibilityController::getJSClass):
        Add a "logValueChangeEvents" to the AccessibilityController's JS class
        definition.
        (AccessibilityController::resetToConsistentState):
        Disable logging of value change events.

        * DumpRenderTree/AccessibilityController.h:
        Declare setLogValueChangeEvents(), and add a member variable for the
        value change event hook.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::setLogValueChangeEvents):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::setLogValueChangeEvents):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize new member var.
        (AccessibilityController::~AccessibilityController):
        Disable logging of value change events.
        (logEventProc):
        When we receive an EVENT_OBJECT_VALUECHANGE, log the name of the object
        and its value.
        (AccessibilityController::setLogValueChangeEvents):
        If disabling logging, unhook the event, and clear the event hook
        member var. Otherwise, query for the root element to enable
        accessibility, and hook EVENT_OBJECT_VALUECHANGE.

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        long_help for submit-patch
        https://bugs.webkit.org/show_bug.cgi?id=33184

        * Scripts/webkitpy/commands/upload.py:

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        commit-queue can wrongly reject patches if the buildbots are behind
        https://bugs.webkit.org/show_bug.cgi?id=30098

        Check to make sure we can currently build and test before trying to
        land a patch.

        * Scripts/webkitpy/commands/queues.py:

2010-01-04  Adam Roben  <aroben@apple.com>

        Add a test harness for the Windows WebKit API, and a few tests

        We currently only have tests for a handful of bugs regarding WebView
        destruction, but more tests can easily be added later. Eventually
        we'll run these tests as part of run-webkit-tests.

        Fixes <http://webkit.org/b/33167>.

        Reviewed by Sam Weinig.

        * WebKitAPITest/HostWindow.cpp: Added.
        (WebKitAPITest::HostWindow::HostWindow): Initialize m_window.
        (WebKitAPITest::HostWindow::~HostWindow): Destroy our window if
        needed.
        (WebKitAPITest::HostWindow::initialize): Create our window.
        (WebKitAPITest::HostWindow::clientRect): Return our window's client
        rect.
        (WebKitAPITest::HostWindow::registerWindowClass): Does what it says.
        (WebKitAPITest::HostWindow::wndProc): Just call through to
        DefWindowProcW.

        * WebKitAPITest/HostWindow.h: Added.
        (WebKitAPITest::HostWindow::window): Simple getter.

        * WebKitAPITest/Test.h: Added. This file defines some macros useful
        for writing tests.

        * WebKitAPITest/TestsController.cpp: Added.
        (WebKitAPITest::TestsController::TestsController): Initialize our
        members.
        (WebKitAPITest::TestsController::shared): Return the shared instance.
        (WebKitAPITest::TestsController::runAllTests): Run a message pump
        until a WM_QUIT message is received, then return whether all tests
        succeeded.
        (WebKitAPITest::TestsController::addTest): Add the test to m_tests and
        start running tests soon.
        (WebKitAPITest::TestsController::testFailed): Record the failure and
        print a message about it to stdout.
        (WebKitAPITest::TestsController::runNextTest): If we don't have any
        tests to run, post a WM_QUIT message to stop the message pump.
        Otherwise, run the test and print whether it passed, then schedule the
        next test.
        (WebKitAPITest::TestsController::runNextTestSoon): Set a 0-delay timer
        to run the next test.
        (WebKitAPITest::TestsController::registerWindowClass): Does what it
        says.
        (WebKitAPITest::TestsController::wndProc): If the runNextTestTimer
        fired, call runNextTest(). Pass everything else through to
        DefWindowProcW.

        * WebKitAPITest/TestsController.h: Added.

        * WebKitAPITest/WebKitAPITest.vcproj: Added.

        * WebKitAPITest/WebKitAPITestCommon.vsprops: Added.

        * WebKitAPITest/main.cpp: Added.
        (main): (Mostly) just calls TestsController::runAllTests.

        * WebKitAPITest/tests/WebViewDestruction.cpp: Added.
        (WebKitAPITest::WebKitCreateInstance): Helper function template to
        call through to the real WebKitCreateInstance.
        (WebKitAPITest::webViewCount): Helper function to call through to
        IWebKitStatistics::webViewCount.
        (WebKitAPITest::createWebView): Helper function to create a WebView
        and put it inside a HostWindow.
        (WebKitAPITest::runMessagePump): Helper function to run a message pump
        for a specified number of milliseconds, or until a WM_QUIT message is
        received.
        (WebKitAPITest::CloseWithoutDestroyWindow): Test for
        <http://webkit.org/b/32827>.
        (WebKitAPITest::MainFrameAfterClose): Test for
        <http://webkit.org/b/32868>.
        (WebKitAPITest::NoCloseOrDestroyWindow): Test for
        <http://webkit.org/b/33162>.

2010-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by David Kilzer.

        Add support for Git's "diff.mnemonicprefix" config option to WebKitTools

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

        * Scripts/VCSUtils.pm:
        * Scripts/svn-apply:
        * Scripts/svn-unapply:
        * Scripts/test-webkitperl: Run gitdiff2svndiff test
        * Scripts/webkitperl/VCSUtils_unittest/gitdiff2svndiff.pl: Added.
        * Scripts/webkitpy/diff_parser.py:
        * Scripts/webkitpy/diff_parser_unittest.py:

2010-01-04  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Divided the Perl unit tests into separate files and put
        them in a separate directory, and renamed test-webkit-perl
        to test-webkitperl.

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

        * Scripts/VCSUtils.pm:
          - Renamed generateRunPatchCommand() to generatePatchCommand().

        * Scripts/VCSUtils_unittest.pl: Removed.
          - Divided into three files in Scripts/webkitperl/VCSUtils_unittest.

        * Scripts/test-webkit-perl: Removed.
          - Renamed to test-webkitperl.

        * Scripts/test-webkit-scripts:
          - Updated paths to test-webkitpy and test-webkitperl.

        * Scripts/test-webkitperl: Copied from Scripts/test-webkit-perl.
          - Added paths to new test files.

        * Scripts/webkitperl: Added.
        * Scripts/webkitperl/VCSUtils_unittest: Added.
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/generatePatchCommand.pl: Added.
        * Scripts/webkitperl/VCSUtils_unittest/runPatchCommand.pl: Copied from Scripts/VCSUtils_unittest.pl.

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make bugzilla-tool rollout include a bug link in the ChangeLog entry
        https://bugs.webkit.org/show_bug.cgi?id=33146

        One more step towards better rollouts.

        * Scripts/webkitpy/changelogs.py:
        * Scripts/webkitpy/changelogs_unittest.py:
        * Scripts/webkitpy/steps/preparechangelogforrevert.py:

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sort the step options
        https://bugs.webkit.org/show_bug.cgi?id=33144

        * Scripts/webkitpy/steps/options.py:

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Need support for longer text in per-command help
        https://bugs.webkit.org/show_bug.cgi?id=33143

        Add some minimal additional help to land-diff and
        pave the way for adding better help to all commands.

        * Scripts/webkitpy/commands/download.py: Add small amount of additional help to land-diff
        * Scripts/webkitpy/multicommandtool.py: support long_help
        * Scripts/webkitpy/multicommandtool_unittest.py: test long_help

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add unit test for MarkBugFixed
        https://bugs.webkit.org/show_bug.cgi?id=33142

        MarkBugFixed is way behind in command technology, but it still needs a
        unit test, as the FIXME commands.

        Also, remove mark-bug-fixed and create-bug from main help since we have
        more modern commands to replace them.

        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add missing unit test for CommitMessageForCurrentDiff
        https://bugs.webkit.org/show_bug.cgi?id=33141

        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove raw_input from queues in favor of user.prompt
        https://bugs.webkit.org/show_bug.cgi?id=33140

        This lets up properly mock out the user interaction instead of hacking
        around it with the options.

        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/commands/queuestest.py:

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool should not require users to install mechanize
        https://bugs.webkit.org/show_bug.cgi?id=32635

        * Scripts/webkitpy/__init__.py: Add missing declaration for ClientForm (which mechanize requires).

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool should not require users to install mechanize
        https://bugs.webkit.org/show_bug.cgi?id=32635

        Use the nifty "autoinstall" module from Daniel Krech:
        http://pypi.python.org/pypi/autoinstall/0.2
        http://code.google.com/p/pyautoinstall/
        It's available under a WebKit-compatible BSD license.

        * Scripts/webkitpy/__init__.py:
         - bind "mechanize" to an autoinstall importer which will
           auto-download mechanize if necessary.
        * Scripts/webkitpy/autoinstall.py: Added.
        * Scripts/webkitpy/bugzilla.py: use "mechanize" instead of webkit_mechanize
        * Scripts/webkitpy/statusbot.py: ditto.
        * Scripts/webkitpy/webkit_mechanize.py: Removed.

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Move AbstractSequencedCommand to a more general location
        https://bugs.webkit.org/show_bug.cgi?id=33137

        I do what the FIXME tell me to do.

        * Scripts/webkitpy/commands/abstractsequencedcommand.py: Added.
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/upload.py:

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename StatusBot to StatusServer
        https://bugs.webkit.org/show_bug.cgi?id=33139

        It's not a bot.  It's a server.

        * Scripts/bugzilla-tool:
        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/queueengine.py:
        * Scripts/webkitpy/statusbot.py: Removed.

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] submit-pach should have a -o/--open option to open the bug after submit
        https://bugs.webkit.org/show_bug.cgi?id=33136

        Python makes this very easy.

        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/steps/options.py:
        * Scripts/webkitpy/steps/postdiff.py:
        * Scripts/webkitpy/user.py:

2010-01-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Move steps to a submodule
        https://bugs.webkit.org/show_bug.cgi?id=33135

        For great victory.  This will probably introduce some regressions
        because our test coverage isn't perfect, but I've tried to be careful.

        * Scripts/test-webkitpy:
        * Scripts/webkitpy/buildsteps.py: Removed.
        * Scripts/webkitpy/buildsteps_unittest.py: Removed.
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/steps/__init__.py: Added.
        * Scripts/webkitpy/steps/abstractstep.py: Added.
        * Scripts/webkitpy/steps/applypatch.py: Added.
        * Scripts/webkitpy/steps/applypatchwithlocalcommit.py: Added.
        * Scripts/webkitpy/steps/build.py: Added.
        * Scripts/webkitpy/steps/checkstyle.py: Added.
        * Scripts/webkitpy/steps/cleanworkingdirectory.py: Added.
        * Scripts/webkitpy/steps/cleanworkingdirectorywithlocalcommits.py: Added.
        * Scripts/webkitpy/steps/closebug.py: Added.
        * Scripts/webkitpy/steps/closebugforlanddiff.py: Added.
        * Scripts/webkitpy/steps/closepatch.py: Added.
        * Scripts/webkitpy/steps/commit.py: Added.
        * Scripts/webkitpy/steps/completerollout.py: Added.
        * Scripts/webkitpy/steps/confirmdiff.py: Added.
        * Scripts/webkitpy/steps/createbug.py: Added.
        * Scripts/webkitpy/steps/editchangelog.py: Added.
        * Scripts/webkitpy/steps/ensurebuildersaregreen.py: Added.
        * Scripts/webkitpy/steps/ensurelocalcommitifneeded.py: Added.
        * Scripts/webkitpy/steps/metastep.py: Added.
        * Scripts/webkitpy/steps/obsoletepatches.py: Added.
        * Scripts/webkitpy/steps/options.py: Added.
        * Scripts/webkitpy/steps/postdiff.py: Added.
        * Scripts/webkitpy/steps/preparechangelog.py: Added.
        * Scripts/webkitpy/steps/preparechangelogforrevert.py: Added.
        * Scripts/webkitpy/steps/promptforbugortitle.py: Added.
        * Scripts/webkitpy/steps/revertrevision.py: Added.
        * Scripts/webkitpy/steps/runtests.py: Added.
        * Scripts/webkitpy/steps/steps_unittest.py: Added.
        * Scripts/webkitpy/steps/update.py: Added.
        * Scripts/webkitpy/steps/updatechangelogswithreview_unittests.py: Added.
        * Scripts/webkitpy/steps/updatechangelogswithreviewer.py: Added.
        * Scripts/webkitpy/stepsequence.py:

2010-01-04  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Cleans up the File menu to better conform to the File menu in Safari
        both in terms of options and keyboard shortcuts. Adds a "Quit" menu
        options to close all open windows. Also, renames the Tools menu to
        Develop.

        * QtLauncher/main.cpp:
        (MainWindow::setupUI):

2010-01-04  Daniel Bates  <dbates@webkit.org>

        https://bugs.webkit.org/show_bug.cgi?id=33039
        
        Unreviewed fix.

        * Scripts/webkitpy/credentials.py:
        * Scripts/webkitpy/credentials_unittest.py:

2010-01-04  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        [bzt] Second attempt to fix an issue where bugzilla-tool dies
        when the keychain lookup fails to find an entry for bugs.webkit.org.

        * Scripts/webkitpy/credentials.py:
        * Scripts/webkitpy/credentials_unittest.py:

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make Rollout an AbstractSequencedCommmand
        https://bugs.webkit.org/show_bug.cgi?id=33133

        As suggested by Adam in:
        https://bugs.webkit.org/show_bug.cgi?id=33131#c2

        * Scripts/webkitpy/commands/download.py:

2010-01-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make all commands AbstractDeclarativeCommmands instead of direct Command subclasses
        https://bugs.webkit.org/show_bug.cgi?id=33131

        Evenetually we'll probably roll AbstractDeclarativeCommmand directly into Command
        but for now we just deploy it everywhere and don't try to fix up the few valid uses
        of Command.

        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/queries.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/multicommandtool.py:

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

        Unreviewed "build" fix.  Need to import ScriptError.

        * Scripts/webkitpy/buildsteps.py:

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

        Reviewed by Eric Seidel.

        [bzt] Make it easier to run submit-patch when previous run cancelled
        https://bugs.webkit.org/show_bug.cgi?id=33070

        This patch renames create-review to submit-patch (as requested by
        Maciej).

        This patch makes it easier to run submit-patch after the user has
        already cancelled a previous run of submit-patch by detecting when we
        already have ChangeLogs and reading the bug number from them (and not
        attempting to recreate them).  Aside from performance and the extra
        edit step, this command should not subsume post-dif.

        Also, added a --email command line argument so that the output of
        prepare-ChangeLog makes sense when it can't find the user's email
        address.

        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/buildsteps.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/user.py:

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

        Reviewed by Adam Barth.

        Rename Scripts/modules to Scripts/webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=33128

        Just search-replace and svn mv commands.

        * Scripts/bugzilla-tool:
        * Scripts/check-webkit-style:
        * Scripts/modules: Removed.
        * Scripts/modules/BeautifulSoup.py: Removed.
        * Scripts/modules/__init__.py: Removed.
        * Scripts/modules/bugzilla.py: Removed.
        * Scripts/modules/bugzilla_unittest.py: Removed.
        * Scripts/modules/buildbot.py: Removed.
        * Scripts/modules/buildbot_unittest.py: Removed.
        * Scripts/modules/buildsteps.py: Removed.
        * Scripts/modules/buildsteps_unittest.py: Removed.
        * Scripts/modules/changelogs.py: Removed.
        * Scripts/modules/changelogs_unittest.py: Removed.
        * Scripts/modules/commands: Removed.
        * Scripts/modules/commands/__init__.py: Removed.
        * Scripts/modules/commands/commandtest.py: Removed.
        * Scripts/modules/commands/download.py: Removed.
        * Scripts/modules/commands/download_unittest.py: Removed.
        * Scripts/modules/commands/early_warning_system.py: Removed.
        * Scripts/modules/commands/early_warning_system_unittest.py: Removed.
        * Scripts/modules/commands/queries.py: Removed.
        * Scripts/modules/commands/queries_unittest.py: Removed.
        * Scripts/modules/commands/queues.py: Removed.
        * Scripts/modules/commands/queues_unittest.py: Removed.
        * Scripts/modules/commands/queuestest.py: Removed.
        * Scripts/modules/commands/upload.py: Removed.
        * Scripts/modules/commands/upload_unittest.py: Removed.
        * Scripts/modules/comments.py: Removed.
        * Scripts/modules/committers.py: Removed.
        * Scripts/modules/committers_unittest.py: Removed.
        * Scripts/modules/cpp_style.py: Removed.
        * Scripts/modules/cpp_style_unittest.py: Removed.
        * Scripts/modules/credentials.py: Removed.
        * Scripts/modules/credentials_unittest.py: Removed.
        * Scripts/modules/diff_parser.py: Removed.
        * Scripts/modules/diff_parser_unittest.py: Removed.
        * Scripts/modules/executive.py: Removed.
        * Scripts/modules/executive_unittest.py: Removed.
        * Scripts/modules/grammar.py: Removed.
        * Scripts/modules/mock.py: Removed.
        * Scripts/modules/mock_bugzillatool.py: Removed.
        * Scripts/modules/multicommandtool.py: Removed.
        * Scripts/modules/multicommandtool_unittest.py: Removed.
        * Scripts/modules/outputcapture.py: Removed.
        * Scripts/modules/patchcollection.py: Removed.
        * Scripts/modules/queueengine.py: Removed.
        * Scripts/modules/queueengine_unittest.py: Removed.
        * Scripts/modules/scm.py: Removed.
        * Scripts/modules/scm_unittest.py: Removed.
        * Scripts/modules/statusbot.py: Removed.
        * Scripts/modules/stepsequence.py: Removed.
        * Scripts/modules/style: Removed.
        * Scripts/modules/style.py: Removed.
        * Scripts/modules/style_unittest.py: Removed.
        * Scripts/modules/text_style.py: Removed.
        * Scripts/modules/text_style_unittest.py: Removed.
        * Scripts/modules/user.py: Removed.
        * Scripts/modules/webkit_logging.py: Removed.
        * Scripts/modules/webkit_logging_unittest.py: Removed.
        * Scripts/modules/webkit_mechanize.py: Removed.
        * Scripts/modules/webkitport.py: Removed.
        * Scripts/modules/webkitport_unittest.py: Removed.
        * Scripts/test-webkit-python: Removed.
        * Scripts/test-webkitpy: Copied from WebKitTools/Scripts/test-webkit-python.
        * Scripts/validate-committer-lists:
        * Scripts/webkitpy: Copied from WebKitTools/Scripts/modules.
        * Scripts/webkitpy/bugzilla.py:
        * Scripts/webkitpy/bugzilla_unittest.py:
        * Scripts/webkitpy/buildbot.py:
        * Scripts/webkitpy/buildbot_unittest.py:
        * Scripts/webkitpy/buildsteps.py:
        * Scripts/webkitpy/buildsteps_unittest.py:
        * Scripts/webkitpy/commands/commandtest.py:
        * Scripts/webkitpy/commands/download.py:
        * Scripts/webkitpy/commands/download_unittest.py:
        * Scripts/webkitpy/commands/early_warning_system.py:
        * Scripts/webkitpy/commands/early_warning_system_unittest.py:
        * Scripts/webkitpy/commands/queries.py:
        * Scripts/webkitpy/commands/queries_unittest.py:
        * Scripts/webkitpy/commands/queues.py:
        * Scripts/webkitpy/commands/queues_unittest.py:
        * Scripts/webkitpy/commands/queuestest.py:
        * Scripts/webkitpy/commands/upload.py:
        * Scripts/webkitpy/commands/upload_unittest.py:
        * Scripts/webkitpy/comments.py:
        * Scripts/webkitpy/credentials.py:
        * Scripts/webkitpy/credentials_unittest.py:
        * Scripts/webkitpy/executive.py:
        * Scripts/webkitpy/executive_unittest.py:
        * Scripts/webkitpy/mock_bugzillatool.py:
        * Scripts/webkitpy/multicommandtool.py:
        * Scripts/webkitpy/multicommandtool_unittest.py:
        * Scripts/webkitpy/queueengine.py:
        * Scripts/webkitpy/queueengine_unittest.py:
        * Scripts/webkitpy/scm.py:
        * Scripts/webkitpy/scm_unittest.py:
        * Scripts/webkitpy/statusbot.py:
        * Scripts/webkitpy/stepsequence.py:
        * Scripts/webkitpy/webkit_logging_unittest.py:
        * Scripts/webkitpy/webkitport_unittest.py:

2010-01-03  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Added script to test both Perl and Python, and renamed
        run-webkit-unittests to test-webkit-python.

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

        * Scripts/VCSUtils_unittest.pl:
          - Tweaked so it can be run from outside Scripts directory.

        * Scripts/run-webkit-unittests: Removed.
          - Renamed to test-webkit-python.

        * Scripts/test-webkit-perl:
          - Tweaked so it can be run from outside Scripts directory.

        * Scripts/test-webkit-python: Copied from Scripts/run-webkit-unittests.

        * Scripts/test-webkit-scripts: Added.
          - Runs both test-webkit-perl and test-webkit-python.

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

        Reviewed by Eric Seidel.

        commit-queue/bugzilla-tool should build both Debug and Release
        https://bugs.webkit.org/show_bug.cgi?id=28450

        Add a --build-style command that lets the master process tell the child
        process to build both debug and release.  Eventually we want to teach
        the test step to understand this option too, but that's a patch for
        another day.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/webkitport.py:
        * Scripts/modules/webkitport_unittest.py:

2010-01-03  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] EventSender: add support for Enter key events
        https://bugs.webkit.org/show_bug.cgi?id=33064

        Unskip 5 tests that are fixed now.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown):

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

        Reviewed by Eric Seidel.

        [bzt] Add test for previous typo fix
        https://bugs.webkit.org/show_bug.cgi?id=33083

        A trivial test for a trivial fix, as requested by Eric.

        * Scripts/modules/bugzilla_unittest.py:

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

        Reviewed by Eric Seidel.

        Implement mac-ews
        https://bugs.webkit.org/show_bug.cgi?id=33072

        The mac-ews is slightly different than the other early warning systems
        because we can't run Mac OS X inside a VM.  For that reason, we only
        process patches that were uploaded by committers.  This isn't as much
        coverage as the other EWS bots, but it's better than nothing.

        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/early_warning_system_unittest.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/commands/queuestest.py:
        * Scripts/modules/mock_bugzillatool.py:

2010-01-03  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Refactored svn-apply and svn-unapply to use a common "patch"
        command method, and added unit tests for this new method.

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

        * Scripts/VCSUtils.pm:
          - Added generateRunPatchCommand().
          - Added runPatchCommand().
          - Added exitStatus() from webkitdirs.pm to address FIXME.

        * Scripts/VCSUtils_unittest.pl:
          - Added 10 unit tests for generateRunPatchCommand().
          - Added 4 unit tests for runPatchCommand().
          - Added callSilently() method.

        * Scripts/svn-apply:
          - Refactored applyPatch().
          - Removed $pathScriptWasRunFrom global variable.
          - Addressed issue where "--force" option was getting added twice.

        * Scripts/svn-unapply:
          - Refactored applyPatch().
          - Removed $pathScriptWasRunFrom global variable.
          - Added support for --force option.
          - Enhanced to return meaningful exit status.

        * Scripts/webkitdirs.pm:
          - Moved exitStatus() implementation to VCSUtils.pm.

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

        Reviewed by Eric Seidel.

        [bzt] Implement build-and-test
        https://bugs.webkit.org/show_bug.cgi?id=33073

        Some of the early warning system bots want to use build-and-test so
        they can cover LayoutTests in addition to just compilation.

        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/download_unittest.py:

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

        Reviewed by Eric Seidel.

        Show mac-ews status on QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=33076

        Also make error status purple.

        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queues.py:
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/statusbubble.html:

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

        Unreviewed.

        [bzt] REGRESSION: Bugzila is a typo
        https://bugs.webkit.org/show_bug.cgi?id=33074

        Eric should test his code before landing!  :)

        * Scripts/modules/bugzilla.py:

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

        Unreviewed.  Fix the unit tests!

        * Scripts/run-webkit-unittests:

2009-12-30  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Alter a couple of default settings in the test app.
        
        https://bugs.webkit.org/show_bug.cgi?id=32956

        * wx/browser/browser.cpp:
        (MyApp::OnInit):

2009-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        logging.py should be renamed to webkit_logging.py and eventually die
        https://bugs.webkit.org/show_bug.cgi?id=33058

        Change all imports of "logging" to webkit_logging,
        except the ones which came from Google's cpp_lint.py and diff_parser.py
        which clearly are assuming python's logging.py.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/buildbot.py:
        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/queries.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/credentials.py:
        * Scripts/modules/executive.py:
        * Scripts/modules/multicommandtool.py:
        * Scripts/modules/queueengine.py:
        * Scripts/modules/scm.py:
        * Scripts/modules/statusbot.py:
        * Scripts/modules/stepsequence.py:
        * Scripts/modules/webkit_logging.py: Renamed from WebKitTools/Scripts/modules/logging.py.
        * Scripts/modules/webkit_logging_unittest.py: Renamed from WebKitTools/Scripts/modules/logging_unittest.py.

2009-12-30  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] layoutTestController.pathToLocalResource() should return a path, not an URL
        https://bugs.webkit.org/show_bug.cgi?id=33051

        Moreover, its primary function is to normalize the path in regard of platform
        specific directory separators. Therefore, it can simply make use of the
        QDir::toNativeSeparators function.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::pathToLocalResource):

2009-12-30  David D. Kilzer  <ddkilzer@webkit.org>

        Fix executable bits for r52646

        * Scripts/VCSUtils_unittest.pl: Added property svn:executable.
        * Scripts/test-webkit-perl: Ditto.

2009-12-29  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Kilzer.

        Fixed a bug in fixChangeLogPatch, made it work correctly in
        more circumstances, and added unit tests.

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

        * Scripts/VCSUtils.pm:
          Rewrote fixChangeLogPatch.
          
        * Scripts/VCSUtils_unittest.pl: Added.
          Added 7 unit tests for fixChangeLogPatch.

        * Scripts/test-webkit-perl: Added.
          Added test harness for unit tests of Perl code.

2009-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out BugzillaQueries class from Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=33042

        * Scripts/modules/bugzilla.py:
         - Split out BugzillaQueries from Bugzilla.
         - Try to isolate self.bugzilla usage into helper functions whenever possible.
         - Add a bunch of FIXMEs.
         - Rename fetch_bug_ids_from_needs_commit_list to fetch_bug_ids_from_pending_commit_list
        * Scripts/modules/bugzilla_unittest.py:
         - Create a new BugzillaQueriesTest testcase and move logic there.
        * Scripts/modules/buildsteps_unittest.py:
         - Use Bug 75 instead of 1 since bug 1 doesn't actually exist.
        * Scripts/modules/commands/queries.py:
         - Update to use bugzilla.queries
        * Scripts/modules/commands/queues.py:
         - Ditto.
        * Scripts/modules/commands/upload.py:
         - Ditto.
        * Scripts/modules/mock_bugzillatool.py:
         - Add a MockBugzillaQueries.
         - Make patches and bugs global privates.
         - Let _id_to_object_dictionary take a variable argument list instead of an array.

2009-12-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Speed up the test method test_read_credentials_with_SVN by not actually
        creating an SVN repository to test against (by default). Instead, it is
        sufficient to create a temporary directory that does not contain a Git
        repository.

        Also, renamed method test_read_credentials_with_SVN to
        test_read_credentials_without_git_repo, to better reflect what it is
        testing.

        * Scripts/modules/credentials_unittest.py:

2009-12-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        [bzt] Fixes an issue where bugzilla-tool dies when the keychain lookup
        fails to find an entry for bugs.webkit.org.
        
        Under Mac OS X, bugzilla-tool tries to query the keychain and Security
        framework (via /usr/sbin/security) for an internet-password entry for
        bugs.webkit.org so that it can use it to login to bugs.webkit.org.
        However, if no such entry exists then bugzilla-tool dies with an error.

        * Scripts/modules/credentials.py: Modified method _parse_security_tool_output to return
        [None, None] if /usr/sbin/security cannot find keychain entry for bugs.webkit.org.
        * Scripts/modules/credentials_unittest.py: Added method test_security_output_parse_entry_not_found.

2009-12-29  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by Adam Barth.

        Remove unused BugzillaException.

        * Scripts/modules/bugzilla.py:

2009-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Need a script to assign bugs with r+ patches to committers for landing
        https://bugs.webkit.org/show_bug.cgi?id=33009

        This is just one more small tool to help in the fight against our
        ever-growing list of to-be-committed patches.

        * Scripts/modules/bugzilla.py:
         - Rename assign_to_email to assigned_to_email (typo).
         - Add assigned_to_email() method on Bug.
         - Add reassign_bug method.
         - Add Bugzilla.unassigned_email, eventually should move to some webkit_config.py module.
        * Scripts/modules/bugzilla_unittest.py:
         - Update test after assigned_to_email rename.
        * Scripts/modules/commands/commandtest.py:
         - Call bind_to_tool to that self.tool works in Command testing.
        * Scripts/modules/commands/download.py:
         - Move AbstractDeclarativeCommmand multicommandtool.py, it should be part of Command.
        * Scripts/modules/commands/queries_unittest.py:
         - One of the test patches is now posted by "eric@webkit.org" which is a committer.
         - Eventually we'll mock out CommitterList and be able to better control what's a committer and what's not.
        * Scripts/modules/commands/upload.py:
         - Add new assign-to-committer command.
        * Scripts/modules/commands/upload_unittest.py:
         - Add basic assign-to-committer test.
        * Scripts/modules/committers.py:
         - Add bugzilla_email() accessor.
        * Scripts/modules/committers_unittest.py:
         - Test our assumption that bugzilla_email is the first email.
        * Scripts/modules/mock_bugzillatool.py:
         - Add _id_to_object_dictionary for generating bug_cache from list of bugs.
         - Remove unused fetch_attachments_from_bug.
         - Add fetch_bug support and a bug_cache.
        * Scripts/modules/multicommandtool.py:
         - Move AbstractDeclarativeCommmand here from download.py

2009-12-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Don't crash if user types a number during PromptForBugOrTitleStep
        https://bugs.webkit.org/show_bug.cgi?id=33038

        Simple fix with test.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/buildsteps_unittest.py:

2009-12-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] post-diff requires reading to the end
        https://bugs.webkit.org/show_bug.cgi?id=33036

        Catch the IOError caused by not reading to the end of the diff.  We
        don't have a good way to test this currently.

        * Scripts/modules/user.py:

2009-12-29  Chang Shu  <Chang.Shu@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Move logic that handles Qt headers before primary headers
        so that Qt headers won't be treated as primary headers by mistake.
        https://bugs.webkit.org/show_bug.cgi?id=32991

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-12-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add the start of a Bug object for bugzilla.py
        https://bugs.webkit.org/show_bug.cgi?id=32995

        This allowed us to get rid of some duplicated "is_obsolete" checks.

        * Scripts/modules/bugzilla.py:
         - Add a new Bug class, and move patches/unreviewed_patches filtering logic there.
         - Add _fetch_bug_page for possible future mocking.
           (I did not try to test fetch_*_from_bug now due to difficulties with our current validate_reviewer logic.)
         - Rename fetch_bug to fetch_bug_dictionary and add a new fetch_bug which returns a Bug object.
         - Use fetch_bug and attachments(), patches(), etc. instead of custom fetch_*_from_bug methods.
         - Reduce code in fetch_patches_from_pending_commit_list and fetch_patches_from_review_queue
           using list comprehensions. Use a sum(list, []) trick to flatten a list of lists into a single list.
        * Scripts/modules/bugzilla_unittest.py:
         - Remove an unneeded unicode string marker.
        * Scripts/modules/buildsteps.py:
         - define __all__ to include just the BuildSteps
        * Scripts/modules/commands/download.py:
         - import * now that we have an __all__ defined.
        * Scripts/modules/commands/upload.py:
         - Use fetch_bug_dictionary instead of fetch_bug.

2009-12-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Ariya Hidayat.

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

        Adds an Open File dialog to make it convenient to open a file
        to view in the browser.

        Currently a person must either specify the path to a file as a
        command-line argument or type a file URL. Instead, we should
        have a file dialog to allow a person to open a file without
        memorizing its path.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow): Changed urlEdit->setText(qurl.toEncoded())
        to urlEdit->setText(qurl.toString()). 
        (MainWindow::openFile): Added.
        (MainWindow::changeLocation): Moved code to load URL into method
        MainWindow::loadURL.
        (MainWindow::loadURL): Added.
        (MainWindow::setupUI): Added menu item Open File.

2009-12-29  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] fails fast/harness/use-page-cache.html
        https://bugs.webkit.org/show_bug.cgi?id=33013

        Make sure settings are forwarded to child WebViews.

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

2009-12-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Changes $diffPercentage to be a number to resolve Perl
        warning about comparing a string to a number.

        * Scripts/run-webkit-tests:

2009-12-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] DRT: Frame loader callbacks differ from the Mac port
        https://bugs.webkit.org/show_bug.cgi?id=32989

        Remove messages from the callbacks that should not dump them to match
        the expected results for the http/loading tests.

        Unskip some http/loading tests which succeed now.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::dump):

2009-12-29  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        [Qt] fix fast/dom/Window/window-onFocus.html
        
        Add support for layouttestcontroller.windowIsKey to Qt DRT and fix issue where
        window.onblur was getting dispatched twice from QtWebKit.
        
        https://bugs.webkit.org/show_bug.cgi?id=32990

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::switchFocus):
        * DumpRenderTree/qt/DumpRenderTreeQt.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setWindowIsKey):
        (LayoutTestController::setMainFrameIsFirstResponder):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2009-12-28  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Maciej Stachowiak.

        Extended EventSender.keyDown method to take another (3rd) argument
        for indicating the keyLocation to make numeric pad key events testable.
        Expected values for the argument is one of the KeyLocationCode
        specified in DOM Level 3
        (http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboardevents).
        https://bugs.webkit.org/show_bug.cgi?id=28247

        Test: fast/events/keydown-numpad-keys.html

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2009-12-28  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Unreviewed, update my email address.

        * Scripts/modules/committers.py:

2009-12-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Fix build break for Qt 4.4
        https://bugs.webkit.org/show_bug.cgi?id=30327

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp: Include QLocale
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Ditto.
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow): Qt::WA_TranslucentBackground was
        introduced in Qt version 4.5

2009-12-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Add an edit-changelog command
        https://bugs.webkit.org/show_bug.cgi?id=32986

        This command makes it easier to edit ChangeLogs.  It's similar to
        prepare-ChangeLog -o, except it works with already existing ChangeLogs.

        * Scripts/modules/commands/upload.py:
        * Scripts/modules/commands/upload_unittest.py:

2009-12-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Create an ASAD command for uploading a patch
        https://bugs.webkit.org/show_bug.cgi?id=32979

        The create-review command goes through the whole process of preparing a
        code review, including creating a bug, editing the ChangeLogs, and
        uploading the patch.  It is indeed the All Sing, All Dance upload
        command.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/commands/upload_unittest.py:
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/modules/user.py:

2009-12-28  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix (with test!).

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/bugzilla_unittest.py:

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

        Reviewed by Adam Barth.

        Add more awesome bug-parsing logic to bugzilla.py in preparation for assign-to-committer command
        https://bugs.webkit.org/show_bug.cgi?id=32980

        * Scripts/modules/bugzilla.py:
         - Add a new _parse_bug_page function and use it in fetch_attachments_from_bug
         - Replace fetch_title_from_bug with a new fetch_bug call instead.
         - Use list comprehensions where possible to reduce code duplication.
        * Scripts/modules/bugzilla_unittest.py:
         - Add a minimal bug parsing test.
         - Share code between bug parsing and attachment parsing tests with _assert_dictionaries_equal
        * Scripts/modules/commands/upload.py:
         - Use fetch_bug(bug_id)["title"] instead of fetch_title_from_bug

2009-12-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Status bubble shouldn't be transparent for bots that haven't run yet
        https://bugs.webkit.org/show_bug.cgi?id=32977

        * QueueStatusServer/templates/statusbubble.html:

2009-12-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [QueueStatusServer] Run gc cron job less often
        https://bugs.webkit.org/show_bug.cgi?id=32958

        Now that we've cleaned out the backlog of idle messages, we don't need
        to run the gc job every half hour.  We could also stop logging the idle
        messages, but this seems easier for the time being.

        * QueueStatusServer/cron.yaml:

2009-12-27  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Fixes an issue where bugzilla-tool tries to read the username and password from
        Git regardless of whether Git is installed. In particular, if Git is not
        installed then bugzilla-tool dies (with a trace) when it attempts to query Git
        for the authentication credentials to log into bugs.webkit.org.

        Moreover, modifies Executive.run_command to catch and pass OSError exceptions to
        the specified error handler. For instance, the specified error handler will now
        be called when the command does not exist (i.e. OSError errno 2).

        * Scripts/modules/credentials.py: Added check for Git.
        * Scripts/modules/credentials_unittest.py: Added test method
        test_read_credentials_with_SVN.
        * Scripts/modules/executive.py: Modified method run_command to catch
        OSError exceptions (i.e [Errno 2] No such file or directory) and call
        the specified error handler.
        * Scripts/modules/executive_unittest.py: Added.
        * Scripts/run-webkit-unittests: Added import executive_unittest.py.

2009-12-27  Daniel Bates  <dbates@webkit.org>

        Unreviewed. Added missing file style_unittest.py that wasn't committed
        in change set 52541 (http://trac.webkit.org/changeset/52541) as part of
        the patch for bug #32592.

        * Scripts/modules/style_unittest.py: Added.

2009-12-27  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        [bzt] Updated the unit test based on the change made in bug #32951.

        The change made in bug #32951 added the command-line argument:
        --makeargs="-j8" to the build-webkit command. However, the associated
        unit test was not updated.

        * Scripts/modules/webkitport_unittest.py:

2009-12-27  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        check-webkit-style should not mark moc files inclusion as errors
        https://bugs.webkit.org/show_bug.cgi?id=32669

        Add a new header type for moc files, and skip them when checking the order of header files.

        * Scripts/modules/cpp_style.py:

2009-12-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Make the qt build go fast
        https://bugs.webkit.org/show_bug.cgi?id=32951

        Make use of multiple cores, if available.

        * Scripts/modules/webkitport.py:

2009-12-25  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Fixes an issue where checkFrameworks always dies with an error under Windows
        since the clause "unless (-x $path)" is always satisfied because files under
        Windows do not have an explict executable bit.

        * Scripts/webkitdirs.pm:

2009-12-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool should accept global options anywhere
        https://bugs.webkit.org/show_bug.cgi?id=26912

        * Scripts/bugzilla-tool:
         - Use the new global_options class property.
         - Add a handle_global_options callback to avoid needing callbacks for each global option.
        * Scripts/modules/multicommandtool.py:
         - Make the code use one combined option parser.
           This allows us to accept global options anywhere and
           individual command options before commands.
         - Add a handle_global_options callback to avoid needing callbacks for each global option.
         - Make the Command hold the option parser, but allow the tool to override it.
         - The default option parser is used for help printing and when Commands are run stand alone,
           but are otherwise not used.
         - Add Command.main to codify the idea that Commands should support being run stand-alone.
         - Change _split_args to _split_command_name_from_args now that args are unified.
        * Scripts/modules/multicommandtool_unittest.py:
         - Test that "tool" and "tool help" show the same help.
         - Test that args are accepted before commands

2009-12-20  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Levin.

        Moved some sections of code in preparation to refactor
        check-webkit-style's argument parser to avoid setting
        global variables.

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

        * Scripts/check-webkit-style:
          - Moved _USAGE string to style.py.
          - Addressed FIXME by eliminating dependencies on cpp_style.py.

        * Scripts/modules/cpp_style.py:
          - Moved default arguments and style categories to style.py.
          - Moved exit_with_usage(), exit_with_categories(), and
            parse_arguments() to style.py.
          - Removed references in _CppStyleState to the global
            variables now in style.py.

        * Scripts/modules/cpp_style_unittest.py:
          - Moved parse_arguments() unit tests to style_unittest.py.

        * Scripts/modules/style.py:
          - Added _USAGE string from check-webkit-style.
          - Added default arguments and style categories from cpp_style.py.
          - Added exit_with_usage(), exit_with_categories(), and
            parse_arguments() from cpp_sstyle.py.

        * Scripts/modules/style_unittest.py: Added.
          - Added parse_arguments() unit tests from cpp_style_unittest.py.

        * Scripts/run-webkit-unittests:
          - Added unit tests from style_unittest.py.

2009-12-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should mention bug 30084 when rejecting patches until it can be fixed
        https://bugs.webkit.org/show_bug.cgi?id=32911

        * Scripts/modules/bugzilla.py: Make the message even more fancy.
        * Scripts/modules/bugzilla_unittest.py: Test our new fancy message.

2009-12-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Not reviewed, adding myself to the reviewers list.

        * Scripts/modules/committers.py:

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

        Reviewed by Eric Seidel.

        [bzt] Create a prepare-diff command that creates a bug and a ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=32895

        The workflow Maciej and I discussed is as follows:

        1) Write code.
        2) bugzilla-tool prepare-diff
        3) Edit ChangeLogs
        4) bugzilla-tool post-diff

        We might want to experimenting with combining 2-4 into a single
        command, but that might be stressful to edit the ChangeLogs modally.

        Removed submit-patch since it has the modal ChangeLog editing but none
        oof the bug creating fun.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/commands/upload_unittest.py:

2009-12-23  Gabor Loki  <loki@webkit.org>

        Unreviewed; added myself to the committers list.

        * Scripts/modules/committers.py:

2009-12-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        [bzt] Don't call create-patch twice during post-diff
        https://bugs.webkit.org/show_bug.cgi?id=32893

        If we call create-patch to get the bug number, cache the diff in the
        state so we don't need to call it again.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/upload.py:

2009-12-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Fixes an issue in builtDylibPathForName so that it returns the correct
        path to the built QtWebKit library on the Qt Windows port. Currently,
        it returns the path to the file named QtWebKit.dll but this file does
        not exist on the Qt Windows build. Instead, the file is named
        QtWebKit4.dll.

        * Scripts/webkitdirs.pm:

2009-12-22  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Adam Roben.

        Remove the only dependency on perl-libwin32 in cygwin

        * Scripts/num-cpus:

2009-12-22  Darin Adler  <darin@apple.com>

        * pywebsocket/mod_pywebsocket: Added property svn:ignore to ignore
        generated ".pyc" files.

2009-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Turn off datagrid by default, at least for all platforms Apple ships.
        The datagrid implementation isn't ready for general web use yet.

        * Scripts/build-webkit: Turn off datagrid by default.

2009-12-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        validate-committer-lists fails when run from an SVN checkout
        https://bugs.webkit.org/show_bug.cgi?id=31974

        * Scripts/validate-committer-lists:
         - Make it print a warning message instead of throwing
           an exception when running from an SVN checkout.

2009-12-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Adam Barth.

        check-webkit-style should not warn about NULL usage in g_object_{get,set}
        https://bugs.webkit.org/show_bug.cgi?id=32858

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-12-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Holger Freyther.

        Moved QtLauncher from WebKit/qt.

        * QtLauncher: Copied from WebKit/qt/QtLauncher.
        * QtLauncher/QtLauncher.pro:

2009-12-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Automate the process of calling prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=32816

        This patch automates the process of creating a bug and patch and
        uploading it to bugzilla.  The first cut just calls
        prepare-ChangeLog.

        This patch required some refactoring of upload.py to the Step
        model, but that's worth doing anyway.

        * Scripts/bugzilla-tool:
        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/commands/upload_unittest.py:
        * Scripts/modules/mock_bugzillatool.py:

2009-12-21  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Did a rename, so checking in the
        version of the script I used.

2009-12-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update status-bubble to show all the queues
        https://bugs.webkit.org/show_bug.cgi?id=32838

        Also, move statusbubble over to use memcache.

        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/templates/statusbubble.html:

2009-12-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Delete the boring "Empty queue" status messages in QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=32818

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/cron.yaml:
        * QueueStatusServer/handlers/gc.py:
        * QueueStatusServer/main.py:

2009-12-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Exception on queue status server
        https://bugs.webkit.org/show_bug.cgi?id=32812

        Turns out we need to pass the id to the filter.

        * QueueStatusServer/filters/webkit_extras.py:
        * QueueStatusServer/templates/patch.html:
        * QueueStatusServer/templates/recentstatus.html:

2009-12-20  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Created "style" folder for code supporting check-webkit-style.

        * Scripts/modules/style: Added.

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

        Reviewed by Eric Seidel.

        REGRESSION: error when running commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=32806

        Fix typo and add test!

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/bugzilla_unittest.py:

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

        [bzt] Optimize status updates for new dashboard
        https://bugs.webkit.org/show_bug.cgi?id=32797

        This patch makes the queues slightly more chatty with the web service.
        Also, this patch introduces some testing for the queues!

        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/early_warning_system_unittest.py: Added.
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/commands/queues_unittest.py:
        * Scripts/modules/commands/queuestest.py: Added.
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/modules/patchcollection.py:
        * Scripts/modules/queueengine.py:
        * Scripts/run-webkit-unittests:

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

        Reviewed by Eric Seidel.

        Prepare QueueStatusServer for new status messages
        https://bugs.webkit.org/show_bug.cgi?id=32805

        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/index.html: Removed.
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/model/queues.py: Added.
        * QueueStatusServer/templates/recentstatus.html: Added.

2009-12-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adam Barth.

        [check-webkit-style] static_cast is not misnamed!
        https://bugs.webkit.org/show_bug.cgi?id=32796

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

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

        Reviewed by Gustavo Noronha Silva.

        [GTK] Failing test platform/gtk/editing/pasteboard/middle-button-paste.html
        https://bugs.webkit.org/show_bug.cgi?id=32788

        Do not increase the click count if we are using a different button.

        * DumpRenderTree/gtk/EventSender.cpp:

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

        Reviewed by Eric Seidel.

        [QueueStatusServer] Add a per-patch details page
        https://bugs.webkit.org/show_bug.cgi?id=32784

        This is a first cut at a per-patch details page.  I'm sure we'll have
        to iterate.

        * QueueStatusServer/filters/webkit_extras.py:
        * QueueStatusServer/handlers/patch.py: Added.
        * QueueStatusServer/index.yaml:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/attachment.py:
        * QueueStatusServer/stylesheets/dashboard.css:
        * QueueStatusServer/templates/dashboard.html:
        * QueueStatusServer/templates/patch.html: Added.

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

        Reviewed by Eric Seidel.

        Use memcache to make dashboard to fast
        https://bugs.webkit.org/show_bug.cgi?id=32780

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/dashboard.py:
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/model/attachment.py: Added.

2009-12-19  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Provide an example implementation for printing under Windows.
        http://bugs.webkit.org/show_bug.cgi?id=32504.`

        * WinLauncher/PrintWebUIDelegate.cpp: Added.
        (PrintWebUIDelegate::QueryInterface):
        (PrintWebUIDelegate::AddRef):
        (PrintWebUIDelegate::Release):
        (PrintWebUIDelegate::webViewPrintingMarginRect):
        * WinLauncher/PrintWebUIDelegate.h: Added.
        (PrintWebUIDelegate::PrintWebUIDelegate):
        (PrintWebUIDelegate::createWebViewWithRequest):
        (PrintWebUIDelegate::webViewShow):
        (PrintWebUIDelegate::webViewClose):
        (PrintWebUIDelegate::webViewFocus):
        (PrintWebUIDelegate::webViewUnfocus):
        (PrintWebUIDelegate::webViewFirstResponder):
        (PrintWebUIDelegate::makeFirstResponder):
        (PrintWebUIDelegate::setStatusText):
        (PrintWebUIDelegate::webViewStatusText):
        (PrintWebUIDelegate::webViewAreToolbarsVisible):
        (PrintWebUIDelegate::setToolbarsVisible):
        (PrintWebUIDelegate::webViewIsStatusBarVisible):
        (PrintWebUIDelegate::setStatusBarVisible):
        (PrintWebUIDelegate::webViewIsResizable):
        (PrintWebUIDelegate::setResizable):
        (PrintWebUIDelegate::setFrame):
        (PrintWebUIDelegate::webViewFrame):
        (PrintWebUIDelegate::setContentRect):
        (PrintWebUIDelegate::webViewContentRect):
        (PrintWebUIDelegate::runJavaScriptAlertPanelWithMessage):
        (PrintWebUIDelegate::runJavaScriptConfirmPanelWithMessage):
        (PrintWebUIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (PrintWebUIDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (PrintWebUIDelegate::runOpenPanelForFileButtonWithResultListener):
        (PrintWebUIDelegate::mouseDidMoveOverElement):
        (PrintWebUIDelegate::contextMenuItemsForElement):
        (PrintWebUIDelegate::validateUserInterfaceItem):
        (PrintWebUIDelegate::shouldPerformAction):
        (PrintWebUIDelegate::dragDestinationActionMaskForDraggingInfo):
        (PrintWebUIDelegate::willPerformDragDestinationAction):
        (PrintWebUIDelegate::dragSourceActionMaskForPoint):
        (PrintWebUIDelegate::willPerformDragSourceAction):
        (PrintWebUIDelegate::contextMenuItemSelected):
        (PrintWebUIDelegate::hasCustomMenuImplementation):
        (PrintWebUIDelegate::trackCustomPopupMenu):
        (PrintWebUIDelegate::measureCustomMenuItem):
        (PrintWebUIDelegate::drawCustomMenuItem):
        (PrintWebUIDelegate::addCustomMenuDrawingData):
        (PrintWebUIDelegate::cleanUpCustomMenuDrawingData):
        (PrintWebUIDelegate::canTakeFocus):
        (PrintWebUIDelegate::takeFocus):
        (PrintWebUIDelegate::registerUndoWithTarget):
        (PrintWebUIDelegate::removeAllActionsWithTarget):
        (PrintWebUIDelegate::setActionTitle):
        (PrintWebUIDelegate::undo):
        (PrintWebUIDelegate::redo):
        (PrintWebUIDelegate::canUndo):
        (PrintWebUIDelegate::canRedo):
        (PrintWebUIDelegate::printFrame):
        (PrintWebUIDelegate::ftpDirectoryTemplatePath):
        (PrintWebUIDelegate::webViewHeaderHeight):
        (PrintWebUIDelegate::webViewFooterHeight):
        (PrintWebUIDelegate::drawHeaderInRect):
        (PrintWebUIDelegate::drawFooterInRect):
        (PrintWebUIDelegate::canRunModal):
        (PrintWebUIDelegate::createModalDialog):
        (PrintWebUIDelegate::runModal):
        (PrintWebUIDelegate::isMenuBarVisible):
        (PrintWebUIDelegate::setMenuBarVisible):
        (PrintWebUIDelegate::runDatabaseSizeLimitPrompt):
        (PrintWebUIDelegate::paintCustomScrollbar):
        (PrintWebUIDelegate::paintCustomScrollCorner):
        * WinLauncher/WinLauncher.cpp: Add new UI delegate for print support.
        (WinLauncherWebHost::updateAddressBar): check-webkit-style fixes.
        (WinLauncherWebHost::QueryInterface): check-webkit-style fixes.
        (WinLauncherWebHost::AddRef): check-webkit-style fixes.
        (WinLauncherWebHost::Release): check-webkit-style fixes.
        (resizeSubViews): check-webkit-style fixes.
        (_tWinMain): check-webkit-style fixes.
        (MyRegisterClass): check-webkit-style fixes.
        (InitInstance): check-webkit-style fixes.
        (AbortProc): New print support function.
        (getPrinterDC): New print support function.
        (initDocStruct): New print support function.
        (PrintView): New printing implementation.
        (WndProc): Add support for printing.
        (MyEditProc): check-webkit-style fixes.
        (About): check-webkit-style fixes.
        (loadURL): check-webkit-style fixes.
        * WinLauncher/WinLauncher.h:
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFinishLoadForFrame):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        * WinLauncher/WinLauncher.rc: Add menu entry for printing.
        * WinLauncher/WinLauncher.vcproj: Add new files.
        * WinLauncher/resource.h: Add menu entry for printing.

2009-12-19  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Tweak the CSS to make the dashboard prettier.

        * QueueStatusServer/stylesheets/dashboard.css:
        * QueueStatusServer/templates/dashboard.html:

2009-12-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        QueueStatusServer needs a human readable dashboard
        https://bugs.webkit.org/show_bug.cgi?id=32769

        Here is a first cut at the dashboard.  There's a lot left to do.

        * QueueStatusServer/filters/webkit_extras.py:
        * QueueStatusServer/handlers/dashboard.py: Added.
        * QueueStatusServer/handlers/patchstatus.py:
        * QueueStatusServer/handlers/recentstatus.py:
        * QueueStatusServer/handlers/showresults.py:
        * QueueStatusServer/handlers/statusbubble.py:
        * QueueStatusServer/handlers/updatestatus.py:
        * QueueStatusServer/main.py:
        * QueueStatusServer/model/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
        * QueueStatusServer/model/queuestatus.py: Renamed from WebKitTools/QueueStatusServer/model.py.
        * QueueStatusServer/stylesheets/dashboard.css: Added.
        * QueueStatusServer/templates/dashboard.html: Added.
        * QueueStatusServer/templates/statusbubble.html: Renamed from WebKitTools/QueueStatusServer/status_bubble.html.
        * QueueStatusServer/templates/updatestatus.html: Renamed from WebKitTools/QueueStatusServer/update_status.html.

2009-12-19  Daniel Bates  <dbates@webkit.org>

        Reviewed by Timothy Hatcher.

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

        Added --inspector-frontend flag to build-webkit to copy any changes
        to the inspector front-end files to the built WebCore framework. This
        will make inspector development more consistent with the rest of
        WebKit development.

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

2009-12-19  Adam Barth  <abarth@webkit.org>

        Unreviewed fixes for me being terrible at python.

        * Scripts/modules/bugzilla.py:
        * Scripts/run-webkit-unittests:

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

        Reviewed by Eric Seidel.

        Split QueueStatus server into modules
        https://bugs.webkit.org/show_bug.cgi?id=32768

        One monolithic file is no good.

        * QueueStatusServer/app.yaml:
        * QueueStatusServer/handlers/__init__.py: Copied from WebKitTools/QueueStatusServer/filters/__init__.py.
        * QueueStatusServer/handlers/patchstatus.py: Added.
        * QueueStatusServer/handlers/recentstatus.py: Added.
        * QueueStatusServer/handlers/showresults.py: Added.
        * QueueStatusServer/handlers/statusbubble.py: Added.
        * QueueStatusServer/handlers/updatestatus.py: Added.
        * QueueStatusServer/main.py: Added.
        * QueueStatusServer/model.py: Added.
        * QueueStatusServer/queue_status.py: Removed.

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

        Rubber stamped by Eric Seidel.

        Renamed WorkQueue to QueueEngine.  WorkQueue is not a queue.

        * Scripts/modules/commands/queues.py:
        * Scripts/modules/queueengine.py: Added.
        * Scripts/modules/queueengine_unittest.py: Added.
        * Scripts/modules/stepsequence.py:
        * Scripts/modules/workqueue.py: Removed.
        * Scripts/modules/workqueue_unittest.py: Removed.

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

        Reviewed by Eric Seidel.

        Add watches for EWS
        https://bugs.webkit.org/show_bug.cgi?id=32767

        dglazkov wanted to be added.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/queues.py:

2009-12-18  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        move bugzilla.py off of urllib2
        https://bugs.webkit.org/show_bug.cgi?id=32729

        * Scripts/modules/bugzilla.py: use mechanize for all url fetching.

2009-12-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        [GTK] New events (pageshow and pagehide) tests failing
        https://bugs.webkit.org/show_bug.cgi?id=28823

        Original patch by Jan Michael Alonzo.

        Disable page cache for tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (copyWebSettingKey):
        (LayoutTestController::overridePreference):

2009-12-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Check one space before end of line comments.
        https://bugs.webkit.org/show_bug.cgi?id=32597
        
        Fix to check one space before end of line comments in whitespace and build/header_guard.
        Also fix build/header_guard to use WebKit header guard defines.

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-12-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add BUILDING_ON_SNOW_LEOPARD #define.

        * DumpRenderTree/mac/DumpRenderTreeMac.h:

2009-12-17  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Update pywebsocket to 0.4.5 and make handshake checking stricter
        https://bugs.webkit.org/show_bug.cgi?id=32249

        * Scripts/run-webkit-tests:
        * pywebsocket/mod_pywebsocket/handshake.py:
        * pywebsocket/mod_pywebsocket/memorizingfile.py: Added.
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:
        * pywebsocket/test/test_handshake.py:
        * pywebsocket/test/test_memorizingfile.py: Added.

2009-12-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Command.show_in_main_help should default to False
        https://bugs.webkit.org/show_bug.cgi?id=32686

        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/queries.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/multicommandtool.py:

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

        Reviewed by Eric Seidel.

        Added the key WebKitEnableCaretBrowsing to the
        layoutTestController.overridePreference in order to activate caret
        browsing.
        https://bugs.webkit.org/show_bug.cgi?id=32612

        * DumpRenderTree/gtk/DumpRenderTree.cpp: Added the reset value of
        the setting.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Inserted the new
        key in the keytable.

2009-12-17  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: DRT needs to support URL for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=32666

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getURLCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::url):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::url):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::url):

2009-12-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed; added myself to committers

        * Scripts/modules/committers.py:

2009-12-17  Benjamin Otte  <otte@gnome.org>

        Unreviewed; added myself to committers

        * Scripts/modules/committers.py:

2009-12-17  Adam Barth  <abarth@webkit.org>

        Rubber stamp by Seidel.

        Clean up exception handling in WorkQueue.  Basically, a bunch of the
        delegate messages can throw exceptions because of network errors.  We
        want the queues to keep on ticking instead of erroring out.  That means
        we want to catch generic exceptions and continue looping.

        Also, cleaned up the exception handling in the EWS to properly log
        failures.

        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/workqueue.py:

2009-12-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Make UpdateStep quiet
        https://bugs.webkit.org/show_bug.cgi?id=32599

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/buildsteps_unittest.py:

2009-12-16  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        Add Gtk to the early warning system WebKit port list.

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

        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/webkitport.py:
        * Scripts/modules/webkitport_unittest.py:

2009-12-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        post-diff is failing with exception under guess_reviewer_from_bug
        https://bugs.webkit.org/show_bug.cgi?id=32642

        Also refactor output capturing code into
        OutputCapture.assert_outputs to share more code between tests.

        * Scripts/modules/buildsteps.py:
         - Add the missing include.
         - Give guess_reviewer_from_bug a private underscore.
        * Scripts/modules/buildsteps_unittest.py: Added.
         - Test to make sure _guess_reviewer_from_bug works as expected.
        * Scripts/modules/commands/commandtest.py:
         - Custom code is now obsoleted by OutputCapture.assert_outputs
        * Scripts/modules/commands/queues_unittest.py:
         - ditto
        * Scripts/modules/credentials_unittest.py:
         - ditto
        * Scripts/modules/mock_bugzillatool.py:
         - fetch_reviewed_patches_from_bug can never return None
        * Scripts/modules/multicommandtool_unittest.py:
         - Custom code is now obsoleted by OutputCapture.assert_outputs
        * Scripts/modules/outputcapture.py:
         - Add assert_outputs to share more code between tests.
        * Scripts/run-webkit-unittests:
         - Add buildsteps_unittest.py

2009-12-16  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Added a default argument to _update_status so that callers
        don't have to explictly pass None when they don't have a patch object.

        * Scripts/modules/commands/queues.py:

2009-12-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        check-webkit-style supports for TAB check against text files.
        https://bugs.webkit.org/show_bug.cgi?id=32538

        * Scripts/check-webkit-style:
          Move process_patch() to style.py.
        * Scripts/modules/cpp_style.py:
          Add can_handle().
        * Scripts/modules/cpp_style_unittest.py:
          Add tests for can_handle().
        * Scripts/modules/style.py:
          Added. This is a front-end of cpp_style and text_style. It dispatches
          files to an appropriate linter.
        * Scripts/modules/text_style.py:
          Added. This is a linter module for generic text files. It supports
          only for TAB checking at this moment.
        * Scripts/modules/text_style_unittest.py:
          Added. Tests for text_style.py.
        * Scripts/run-webkit-unittests:
          Add text_style_unittest.

2009-12-16  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        bugzilla-tool should not require users to install mechanize
        https://bugs.webkit.org/show_bug.cgi?id=32635

        Centralize our import logic.

        * Scripts/modules/bugzilla.py: use webkit_mechanize
        * Scripts/modules/statusbot.py: use webkit_mechanize
        * Scripts/modules/webkit_mechanize.py: Added.

2009-12-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Generalize commit-queue recent status page for all queues
        https://bugs.webkit.org/show_bug.cgi?id=32633

        * QueueStatusServer/index.html:
         - Generalize to support other queues.
        * QueueStatusServer/queue_status.py:
         - Generalize MainPage to support other queues.

2009-12-16  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        Early warning system server should display output as UTF-8.

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

        * QueueStatusServer/queue_status.py:

2009-12-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Add error handling to the early warning system
        https://bugs.webkit.org/show_bug.cgi?id=32594

        This should be the last step in making the EWS operational.  When we
        have a build error, we post the log to QueueStatusServer and add a link
        to the bug.

        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/executive.py:

2009-12-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix crash with tests that use custom font faces.

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

        In the DRT we call QApplication::removeAllApplicationFonts(), to make sure
        that custom font faces between tests don't influence each other. Calling this
        function in Qt however also invalidates all existing handles with QFontDatabase.

        In order to make sure that WebCore also drops these handles we call QWebSettings::clearMemoryCaches(),
        which implies a call to WebCore::FontCache::fontCache()->invalidate().

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebCore::DumpRenderTree::open):

2009-12-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Maintain button state between mouse events.

        This allows eventSender to generate drag events.

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

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        * DumpRenderTree/qt/EventSenderQt.h:

2009-12-15  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by David Levin.

        Code clean-up in check-webkit-style as described below.
        The only functional changes are minor improvements to the
        script's help output.
        
        https://bugs.webkit.org/show_bug.cgi?id=32487

        * Scripts/check-webkit-style:
          - Added the module docstring from cpp_style.py.
          - Improved wording of the --help output and added some of the
            default values as substitution strings.
          - Called cpp_style.exit_with_usage instead of sys.stderr.write
            in main function.
          - Made changes caused by changes to cpp_style.py.

        * Scripts/modules/cpp_style.py:
          - Removed module docstring, as well as redundant _USAGE string
            and main() function obsoleted by check-webkit-style.
          - Moved specification of default script values from within a
            function definition to global variables.
          - Moved the default webkit filter rules to be near the other
            global variables.
          - Renamed "FILTER" global variables to "FILTER_RULES" to
            establish unambiguous terminology.
          - Renamed _ERROR_CATEGORIES to _STYLE_CATEGORIES.
          - Changed _STYLE_CATEGORIES from a string to a list.
          - Added default webkit filter rules to --filter= output.
          - Renamed "print_" methods to "exit_with_" since they exist
            and added a temporary display_help parameter.
          - Added a temporary display_help parameter to parse_arguments.

        * Scripts/modules/cpp_style_unittest.py:
          - Made changes caused by changes to cpp_style.py.
          - Lower-cased ErrorCollector's ERROR_CATEGORIES instance 
            variables since they are not global.

2009-12-15  Adam Barth  <abarth@webkit.org>

        Unreviewed fix for the style-queue.
        Typo: _updates_status -> _update_status

        We need to improve our testing infrastructure for the queues.

        * Scripts/modules/commands/queues.py:

2009-12-15  Adam Barth  <abarth@webkit.org>

        Unreviewed fix for the style-queue.  I suspect this is a recent
        regression from Eric's change below.

        * Scripts/modules/commands/queues.py:

2009-12-15  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Fisher.

        update-webkit-chromium to auto-install gclient

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

        * Scripts/update-webkit-chromium:

2009-12-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool / commit-queue should add results links to bugs when more results are available on the status bot
        https://bugs.webkit.org/show_bug.cgi?id=32546

        You can see an example of this working in:
        https://bugs.webkit.org/show_bug.cgi?id=32585#c3

        * QueueStatusServer/queue_status.py:
         - Output the id of the newly created status.
        * Scripts/modules/commands/queues.py:
         - Tweak the commit-queue logging to include a full status link.
        * Scripts/modules/statusbot.py:
         - update_status should return the newly created status id.

2009-12-15  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Rename Qt DRT components to match other ports' naming convention and to be more understandable.

        * DumpRenderTree/qt/DumpRenderTree.cpp: Removed.
        * DumpRenderTree/qt/DumpRenderTree.h: Removed.
        * DumpRenderTree/qt/DumpRenderTree.pro: Updated.
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp: Copied from WebKitTools/DumpRenderTree/qt/DumpRenderTree.cpp.
        * DumpRenderTree/qt/DumpRenderTreeQt.h: Copied from WebKitTools/DumpRenderTree/qt/DumpRenderTree.h.
        * DumpRenderTree/qt/GCControllerQt.cpp: Copied from WebKitTools/DumpRenderTree/qt/jsobjects.cpp.
        (GCController::GCController):
        * DumpRenderTree/qt/GCControllerQt.h: Copied from WebKitTools/DumpRenderTree/qt/jsobjects.h.
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        * DumpRenderTree/qt/WorkQueueItem.h: Removed.
        * DumpRenderTree/qt/WorkQueueItemQt.cpp: Updated includes.
        * DumpRenderTree/qt/WorkQueueItemQt.h: Copied from WebKitTools/DumpRenderTree/qt/WorkQueueItem.h.
        * DumpRenderTree/qt/jsobjects.cpp: Removed.
        * DumpRenderTree/qt/jsobjects.h: Removed.
        * DumpRenderTree/qt/main.cpp: Updated includes.

2009-12-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        We have two mark-fixed commands
        https://bugs.webkit.org/show_bug.cgi?id=32073

        * Scripts/mark-bug-fixed: Removed.
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/commands/upload_unittest.py:

2009-12-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool/commit-queue needs to upload failure logs when patches are rejected
        https://bugs.webkit.org/show_bug.cgi?id=28286

        * QueueStatusServer/index.html:
         - Show [results] links if a results log was uploaded.
        * QueueStatusServer/queue_status.py:
         - Empty file uploads appear as u"" and Blob does not handle unicode, so convert to str().
        * Scripts/modules/commands/queues.py:
         - Post to the status bot when a patch fails and include the failure log as a results file.

2009-12-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queue sub-commands need --status-host so they can report status
        https://bugs.webkit.org/show_bug.cgi?id=32313

        Make --status-bot a global option and make
        run_bugzilla_tool pass --status-bot to sub-commands.

        * Scripts/bugzilla-tool:
         - Rename _status to status_bot and make it non-lazy.
        * Scripts/modules/commands/queues.py:
         - Move status updates out of WorkQueue and into individual queues.
        * Scripts/modules/commands/queues_unittest.py:
         - Test that --status-host is passed to bugzilla-tool when run as subcommand.
        * Scripts/modules/mock_bugzillatool.py:
         - Add a MockStatusBot
        * Scripts/modules/workqueue.py:
         - Remove status_host and work_work_logs_directory callbacks.
         - Add new work_item_log_path callback so that WorkQueue doesn't need to know about patches!
        * Scripts/modules/workqueue_unittest.py:
         - Update unit tests to reflect new callbacks.

2009-12-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        scm_unittest.py is too slow
        https://bugs.webkit.org/show_bug.cgi?id=31818

        Now we don't run the SCM unit tests unless we get the --all flag on the
        command line.  Eric and I were commenting out this test because it was
        too painful to run.

        * Scripts/run-webkit-unittests:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix failing unittest.

        * Scripts/modules/bugzilla_unittest.py:

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

        Reviewed by Adam Barth.

        Move Credential handling out into a separate module
        https://bugs.webkit.org/show_bug.cgi?id=32531

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/credentials.py: Added.
        * Scripts/modules/credentials_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Kill _create_step_sequence
        https://bugs.webkit.org/show_bug.cgi?id=32539

        It's cleaner to represent not having these sequences as an empty
        sequence instead of None.

        * Scripts/modules/commands/download.py:
        * Scripts/modules/stepsequence.py:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Address reviewer comments from an earlier patch.  I didn't
        do this earlier because I was worried about conflicts in dependent
        patches.

        * Scripts/modules/commands/download.py:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Make download commands declarative
        https://bugs.webkit.org/show_bug.cgi?id=32469

        This patch "properly" factors most of the download commands.  These
        commands are now largely declarative, which is the final step of this
        grand refactoring.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Add AbstractPatchSequencingCommand to remove redundant code
        https://bugs.webkit.org/show_bug.cgi?id=32468

        Redundant code is bad.  This patch moves us towards more declarative
        commands.

        * Scripts/modules/commands/download.py:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitApplyingScripts
        https://bugs.webkit.org/show_bug.cgi?id=32467

        Ah!  I've been wanting to do this for a long time.  This patch brings
        the applying commands into the patch processing fold.

        * Scripts/bugzilla-tool:
        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/download_unittest.py:
        * Scripts/modules/mock_bugzillatool.py:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Convert rollout to StepSequence
        https://bugs.webkit.org/show_bug.cgi?id=32406

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/download_unittest.py:
        * Scripts/modules/mock_bugzillatool.py:

2009-12-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill LandingSequence
        https://bugs.webkit.org/show_bug.cgi?id=32464

        Removes LandingSequence in favor of StepSequence.  This required
        changing the Step API slightly to carry a general notion of state
        instead of carrying patches specifically.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/landingsequence.py: Removed.
        * Scripts/modules/stepsequence.py:

2009-12-14  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        [Qt] Fix https://bugs.webkit.org/show_bug.cgi?id=32437
        
        Amend the behaviour of DRT::notifyDone to dump only when
        the page has finished loading.
        
        This fix permits removal of the following tests from the Qt skipped list:
        fast/forms/textarea-linewrap-dynamic.html
        fast/forms/textarea-setvalue-submit.html
        fast/forms/textarea-hard-linewrap-empty.html
        fast/forms/submit-to-url-fragment.html
        http/tests/misc/percent-sign-in-form-field-name.html
        http/tests/security/escape-form-data-field-names.html
        
        However it also requires the following two to be added to the skipped list:
        
        http/tests/xmlhttprequest/access-control-basic-denied-preflight-cache.html
        svg/custom/use-instanceRoot-as-event-target.xhtml
        
        It appears the behaviour of notifyDone was masking problems with these two
        tests.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::processWork):
        (LayoutTestController::maybeDump):
        (LayoutTestController::notifyDone):
        (LayoutTestController::provisionalLoad):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::resetLoadFinished):

2009-12-14  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] Add support for keyboard modifiers to Qt DRT's EventSender for touch events

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

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::setTouchModifier):
        (EventSender::clearTouchPoints):
        (EventSender::sendTouchEvent):
        * DumpRenderTree/qt/EventSenderQt.h:

2009-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Gavin Barraclaugh.

        Fix minor problem in sunspider-compare-results which left it broken.

        * Scripts/sunspider-compare-results: Declare $parseonly

2009-12-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Give command-line sunspider the ability to handle multiple suites and versions
        https://bugs.webkit.org/show_bug.cgi?id=32477

        * Scripts/run-sunspider: Updated for changes to command-line parameters.
        * Scripts/sunspider-compare-results: ditto

2009-12-12  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, fixing previous comment.

        Remove accidental change to sunspider-compare-results

        * Scripts/sunspider-compare-results:

2009-12-11  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix for Qt versions < 4.6. 
        Guard every slot individually with #ifdef.

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::touchStart):
        (EventSender::touchMove):
        (EventSender::touchEnd):
        (EventSender::clearTouchPoints):
        (EventSender::releaseTouchPoint):
        (EventSender::sendTouchEvent):
        * DumpRenderTree/qt/EventSenderQt.h:

2009-12-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        CommandsTest.assert_execute_outputs doesn't check stderr
        https://bugs.webkit.org/show_bug.cgi?id=32352

        Fix assert_execute_outputs to check stderr
        and then fix all the unit tests which needed to
        pass stderr output.

        * Scripts/modules/commands/commandtest.py:
        * Scripts/modules/commands/download_unittest.py:
        * Scripts/modules/commands/upload_unittest.py:

2009-12-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [check-webkit-style] False positive for tst_QWebFrame
        https://bugs.webkit.org/show_bug.cgi?id=32436

        Add an exception for function names that start with "tst_".  These are
        used by the Qt unit testing framework.

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-12-11  Simon Hausmann  <hausmann@webkit.org>, Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Added support for creating synthetic touch events with EventSender
        in Qt's DumpRenderTree.

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

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::addTouchPoint):
        (EventSender::updateTouchPoint):
        (EventSender::touchStart):
        (EventSender::touchMove):
        (EventSender::touchEnd):
        (EventSender::clearTouchPoints):
        (EventSender::releaseTouchPoint):
        (EventSender::sendTouchEvent):
        * DumpRenderTree/qt/EventSenderQt.h:

2009-12-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Darin Adler.

        The values of RuntimeArray are not enumerable
        https://bugs.webkit.org/show_bug.cgi?id=29005

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController arrayOfString]):

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

        No review, just updating unit tests to match recent checkins.

        * Scripts/modules/mock_bugzillatool.py:
         - Add missing red_core_builders_names method causing exception.
        * Scripts/modules/workqueue_unittest.py:
         - processutils is dead, use executive.py instead.

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

        Reviewed by Adam Barth.

        Move run_command onto Executive to make code which uses run_command testable
        https://bugs.webkit.org/show_bug.cgi?id=32396

        * Scripts/modules/executive.py:
         - Move run_command and error handlers onto Executive.
        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-12-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool needs a command to list patches needing cq+
        https://bugs.webkit.org/show_bug.cgi?id=32351

        * Scripts/modules/bugzilla.py:
         - Parse attacher_email from attachment xml.
        * Scripts/modules/bugzilla_unittest.py:
         - Test new attacher_email parsing.
        * Scripts/modules/commands/queries.py:
         - Add PatchesToCommitQueue
        * Scripts/modules/commands/queries_unittest.py:
         - Tests for PatchesToCommitQueue
        * Scripts/modules/mock_bugzillatool.py:
         - Add necessary mock methods for running PatchesToCommitQueue

2009-12-10  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Turns out every StepSequence command needs a --quiet
        option.

        * Scripts/modules/stepsequence.py:

2009-12-10  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Pavel Feldman.

        Implements displayWebView() to force an invalidation and repaint.
        This fixes a problem running the timeline-paint.html unit test.

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

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

2009-12-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Convert more commands to StepSequences
        https://bugs.webkit.org/show_bug.cgi?id=32362

        We should eventually convert all the commands, but I'm starting with
        the easy ones.

        * Scripts/modules/commands/download.py:

2009-12-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] editing/selection/shrink-selection-after-shift-pagedown.html failing
        https://bugs.webkit.org/show_bug.cgi?id=31103

        Give focus to the webviews when we create them, since some tests expect this.

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

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

        Reviewed by Adam Barth.

        bugzilla-tool "builders are red" error should tell you which builders
        https://bugs.webkit.org/show_bug.cgi?id=32211

        * Scripts/modules/buildsteps.py:

2009-12-09  Marwan Al Jubeh  <marwan.aljubeh@gmail.com>

        Reviewed by Adam Roben.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=31228
        Set the WebKitOutputDir, WebKitLibrariesDir and Cygwin environment variables automatically
        in Windows as part of running update_webkit.

        * Scripts/update-webkit:
         - Run setupAppleWinEnv() on Apple's Windows port.
        * Scripts/webkitdirs.pm:
         - Added functions that return the source directory, libraries directory and default build directory on Windows.
         - Added isWindowsNT() which tests if the current Windows version is from the Windows NT family.
         - Implemented setupAppleWinEnv() which sets the environment variables WebKitOutputDir, WebKitLibrariesDir
           and Cygwin to their desired values.

2009-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        exception thrown when running apply-patches
        https://bugs.webkit.org/show_bug.cgi?id=32344

        The update step now takes a port option.  Once we finish the Steps
        refactoring, we won't have to worry about this kind of bug again.

        * Scripts/modules/commands/download.py:

2009-12-09  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix ScriptError includes.  I don't understand why these
        didn't throw during unit testing...

        * Scripts/modules/commands/download.py:
        * Scripts/modules/logging_unittest.py:
        * Scripts/modules/workqueue.py:

2009-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Remove unused PatchCollection class
        https://bugs.webkit.org/show_bug.cgi?id=32312

        It's dead code.

        * Scripts/modules/patchcollection.py:
        * Scripts/modules/patchcollection_unittest.py: Removed.

2009-12-09  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.  CheckStyle needs a --no-upate option.

        * Scripts/modules/commands/download.py:

2009-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Convert Build to use Sequence
        https://bugs.webkit.org/show_bug.cgi?id=32310

        So much prettier.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/stepsequence.py: Added.

2009-12-09  Adam Barth  <abarth@webkit.org>

        Add missing file.

        * Scripts/modules/executive.py: Added.

2009-12-09  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.

        * Scripts/modules/landingsequence.py:

2009-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Implement abstract Steps
        https://bugs.webkit.org/show_bug.cgi?id=32212

        This is a fairly disruptive change that refactors how we build
        commands.  Instead of using a landing sequence, we can now assemble a
        sequence of steps directly.  We still use the landing sequence in the
        interim, but this will be removed soon.

        * Scripts/bugzilla-tool:
        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/commands/queues_unittest.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/modules/processutils.py: Removed.
        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:
        * Scripts/modules/webkitport.py:

2009-12-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        run_command and ScriptError should move into processutils.py
        https://bugs.webkit.org/show_bug.cgi?id=32305

        Turns out there are a zillion callers to run_command.

        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/early_warning_system.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/logging_unittest.py:
        * Scripts/modules/processutils.py:
        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:
        * Scripts/modules/workqueue.py:
        * Scripts/modules/workqueue_unittest.py:

2009-12-08  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Mac plugins support.
        
        https://bugs.webkit.org/show_bug.cgi?id=32236

        * wx/browser/wscript:

2009-12-08  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        [check-webkit-style] False positive for DEFINE_OPCODE(op_jtrue) {
        https://bugs.webkit.org/show_bug.cgi?id=32193

        * Scripts/modules/cpp_style.py: For the function { rule, if there is space
          at the beginning of line, ignore lines which then have a macro.
        * Scripts/modules/cpp_style_unittest.py: Add tests to verify the
          new behavior.

2009-12-08  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by David Levin.

        Revert and reopen "Add asserts to RefCounted to make sure ref/deref happens on the right thread."
        It may have caused massive increase of reported leaks on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * DumpRenderTree/ForwardingHeaders/wtf/ThreadVerifier.h: Removed.

2009-12-08  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Add asserts to RefCounted to make sure ref/deref happens on the right thread.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * DumpRenderTree/ForwardingHeaders/wtf/ThreadVerifier.h: Added.

2009-12-08  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        [check-webkit-style] False positive for camel case of JSC op codes
        https://bugs.webkit.org/show_bug.cgi?id=32192

        * Scripts/modules/cpp_style.py: Added an exception for the JSC op
          code functions and const_iterator as well since I noticed a false
          positive there when testing the fix.
        * Scripts/modules/cpp_style_unittest.py: Added tests for these
          changes.

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Win.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * Scripts/webkitdirs.pm:

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Gtk.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * Scripts/build-webkit:

2009-12-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        [check-webkit-style] S_OK is a fine identifier
        https://bugs.webkit.org/show_bug.cgi?id=32225

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * Scripts/build-webkit:

2009-12-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Make run-webkit-websocketserver log to stderr rather than to a file.
        https://bugs.webkit.org/show_bug.cgi?id=32234

        * Scripts/run-webkit-websocketserver:

2009-12-07  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by Darin Adler.

        Remove ENABLE_SHARED_SCRIPT flags
        https://bugs.webkit.org/show_bug.cgi?id=32245
        This patch was obtained by "git revert" command and then un-reverting of ChangeLog files.

        * Scripts/build-webkit:

2009-12-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7450481> One compositing test keeps DRT in "compositing mode", breaks repaint tests

        The counter that WebView used to keep track of the number of enclosed WebHTMLViews using
        accelerated compositing was hard to manage, and maintained incorrectly in a number of cases.
        This caused one compositing test make DumpRenderTree think that all subsequent tests
        were compositing too.

        Replace this counter with notifications, which are only fired if a client (DRT) requests them. The
        notification informs the client that a WebHTMLView entered compositing mode (or an already-
        compositing WebHTML was added); it does not say when a view becomes uncomposited, or all
        compositing subviews were removed, since this is tricky to get right.
        
        DumpRenderTreeWindow listens for this notification, and uses it to turn on window
        autodisplay, which is necessary to kick-start Core Animation rendering and animations.
        We ensure that window autodisplay is turned off before every test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]):
        (-[DumpRenderTreeWindow startListeningForAcceleratedCompositingChanges]):
        (-[DumpRenderTreeWindow webViewStartedAcceleratedCompositing:]):

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Holger Hans Peter Freyther.

        Turn on (SVG) Filters support, by default.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        For now only enable FILTERS build flag on WebKit/mac. Other platforms will follow soon.

        * Scripts/build-webkit:

2009-12-07  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Fisher.

        Chromium buildbots are not red when they fail
        https://bugs.webkit.org/show_bug.cgi?id=32235

        * Scripts/build-webkit:

2009-12-07  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Fisher.

        Typo in chromium linux builder
        https://bugs.webkit.org/show_bug.cgi?id=32238

        * Scripts/webkitdirs.pm:

2009-12-07  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Fisher.

        fixes to build-webkit --chromium
        https://bugs.webkit.org/show_bug.cgi?id=32179

        * Scripts/webkitdirs.pm:

2009-12-07  Eric Seidel  <eric@webkit.org>

        No review, just adding two recently approved committers.

        * Scripts/modules/committers.py:

2009-12-07  Alexey Proskuryakov  <ap@apple.com>

        * Scripts/run-webkit-websocketserver: Added property svn:executable.

2009-12-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Add run-webkit-websocketserver

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

        * Scripts/run-webkit-websocketserver: Added.

2009-12-07  Steve Falkenburg  <sfalken@apple.com>

        Build fix. Be flexible about which version of ICU is used on Windows.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Add optional xcopy commands to copy ICU 4.2.

2009-12-07  Dirk Schulze  <krit@webkit.org>

        Not reviewed, adding myself to the reviewers list.

        * Scripts/modules/committers.py:

2009-12-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add an API for uploading results files to StatusBot
        https://bugs.webkit.org/show_bug.cgi?id=32210

        Add Content-Type: plain/text which was forgotten
        from the previous commit when I landed with land-patches
        instead of land-diff.

        * QueueStatusServer/queue_status.py:

2009-12-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Status Server needs a way to handle uploaded results
        https://bugs.webkit.org/show_bug.cgi?id=32209

        * QueueStatusServer/queue_status.py: Add a ShowResults (results/*) command
        * QueueStatusServer/update_status.html: Add file upload.

2009-12-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add an API for uploading results files to StatusBot
        https://bugs.webkit.org/show_bug.cgi?id=32210

        * Scripts/modules/statusbot.py:

2009-12-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Status Server needs a way to handle uploaded results
        https://bugs.webkit.org/show_bug.cgi?id=32209

        * QueueStatusServer/queue_status.py: Add a ShowResults (results/*) command
        * QueueStatusServer/update_status.html: Add file upload.

2009-12-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] BuildAttachment should not check the builders
        https://bugs.webkit.org/show_bug.cgi?id=32207

        This is code that got copied here by accident when the class was created.

        * Scripts/modules/commands/download.py:

2009-12-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Make LandingSequence.update aware of ports
        https://bugs.webkit.org/show_bug.cgi?id=32208

        This is required to make build work on the Chromium port because
        Chromium has a custom update-webkit.

        * Scripts/modules/landingsequence.py:

2009-12-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add early warning system commands to bugzilla-tool.

        * Scripts/bugzilla-tool:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitport.py:

2009-12-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Implement Qt EarlyWarningSystem and Chromium EarlyWarningSystem
        https://bugs.webkit.org/show_bug.cgi?id=32205

        * Scripts/modules/commands/early_warning_system.py: Added.
        * Scripts/modules/commands/queues.py:

2009-12-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r51728): update-webkit fails when the current directory is
        not inside a Subversion working copy
        https://bugs.webkit.org/show_bug.cgi?id=32204

        * Scripts/update-webkit: Invoke isSVN() in the correct working
        directory.

2009-12-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Rename AbstractTryQueue to AbstractReviewQueue
        https://bugs.webkit.org/show_bug.cgi?id=32202

        * Scripts/modules/commands/queues.py:

2009-12-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Implement ChromiumPort
        https://bugs.webkit.org/show_bug.cgi?id=32182

        * Scripts/modules/webkitport.py:
        * Scripts/modules/webkitport_unittest.py:

2009-12-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move update-webkit into BuildSteps
        https://bugs.webkit.org/show_bug.cgi?id=32181

        We need to move update-webkit out of SCM.py because SCM isn't supposed to know
        that WebKit exists.  The proper place for the knowledge of the existence of
        update-webkit is in WebKitPort because some ports have specialized update
        scripts (analogous to build-webkit).

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/scm.py:
        * Scripts/modules/webkitport.py:

2009-12-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        update-webkit should call git svn rebase and resolve-ChangeLogs -f
        https://bugs.webkit.org/show_bug.cgi?id=27162

        Teach update-webkit about Git.  I didn't add the call to
        resolve-ChangeLogs -f because sometimes that script goes bananas.  We
        can iterate from here, however.

        * Scripts/update-webkit:

2009-12-04  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix.

        [Qt] build fix after r51634 removed unused QBoxLayout include which included limits.h.

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2009-12-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Add some missing methods for showing and hiding the
        Web Inspector.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::~WebPage):
        (WebCore::WebPage::webInspector):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::hideWebInspector):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2009-12-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Implement the setAllowUniversalAccessFromFileURLs method
        for the Qt LayoutTestController.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2009-12-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: AX: buttons now extremely repetitive
        https://bugs.webkit.org/show_bug.cgi?id=32164

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isAttributeSupportedCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isAttributeSupported):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isAttributeSupported):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isAttributeSupported):

2009-12-03  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        check-webkit-style should check for camelCase variable names
        https://bugs.webkit.org/show_bug.cgi?id=32051

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-12-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        AX: VO just says "term" on many web sites
        https://bugs.webkit.org/show_bug.cgi?id=32139

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getRoleDescriptionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::roleDescription):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::roleDescription):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::roleDescription):

2009-12-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Implement WAI-ARIA scrollbar role and related property aria-orientation
        https://bugs.webkit.org/show_bug.cgi?id=32126

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getOrientationCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::orientation):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::orientation):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::orientation):

2009-12-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Minor correction to r51663.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (addQTDirToPATH):
            GetEnvironmentVariable -> GetEnvironmentVariableW.

2009-12-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        ~96 regression tests fail when using QuickTime 7.6 (they pass with QuickTime 7.3)
        https://bugs.webkit.org/show_bug.cgi?id=30256

        Add the QuickTime dll directory to the PATH environment variable so
        inialization can succeed.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (addQTDirToPATH):
        (initialize):

2009-12-03  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] After revision 32643, sender() is of type QWebPage instead of QWebFrame.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::maybeDump):

2009-12-03  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Update pywebsocket to 0.4.3
        This version logs friendlier and higher-level messages in WARN level, which is used for LayoutTests.
        Stack trace is logged now in INFO level.
        https://bugs.webkit.org/show_bug.cgi?id=32097

        * pywebsocket/mod_pywebsocket/dispatch.py:
        * pywebsocket/mod_pywebsocket/msgutil.py:
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/mod_pywebsocket/util.py:
        * pywebsocket/setup.py:
        * pywebsocket/test/test_dispatch.py:
        * pywebsocket/test/test_util.py:

2009-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix JSClassRef leak.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::makeWindowObject):
        * DumpRenderTree/GCController.cpp:
        (GCController::makeWindowObject):
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::makeWindowObject):

2009-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7214236> and http://webkit.org/b/32052 - Implement HTML5 state object history API

        Keep DRT-win building...

        * DumpRenderTree/win/FrameLoadDelegate.h:
        (FrameLoadDelegate::didPushStateWithinPageForFrame):
        (FrameLoadDelegate::didReplaceStateWithinPageForFrame):
        (FrameLoadDelegate::didPopStateWithinPageForFrame):

2009-12-03  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Unreviewed build fix.

        [Qt] ARM-Linux build fix after r51634 removed unused QBoxLayout include which included limits.h on ARM.

        * DumpRenderTree/qt/DumpRenderTree.cpp:

2009-12-03  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Refactor DRT to not crash on tests which open child windows from javascript.
        Prevent DRT from showing the main view if these childs get deleted.
        This fixes https://bugs.webkit.org/show_bug.cgi?id=31591.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::~DumpRenderTree):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::closeRemainingWindows):
        (WebCore::DumpRenderTree::createWindow):
        (WebCore::DumpRenderTree::windowCount):
        * DumpRenderTree/qt/DumpRenderTree.h:

2009-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(51595): commit-queue is throwing exceptions
        https://bugs.webkit.org/show_bug.cgi?id=32083

        * Scripts/modules/commands/queues.py:
         - Don't use default value of [] as it ends up getting shared.
         - Make log_progress accept arrays of ints as well as strings.
         - Return an exit code from execute()
        * Scripts/modules/commands/queues_unittest.py: Added.
         - Test to make sure log_progress will accept ints.
         - Test to make sure run_bugzilla_tool will accept ints.
        * Scripts/modules/workqueue.py:
         - Print the stack trace on unexpected exceptions for easier debugging.
        * Scripts/run-webkit-unittests:
         - Add queues_unittest.

        * Scripts/modules/commands/queues.py:
        * Scripts/modules/commands/queues_unittest.py: Copied from WebKitTools/Scripts/modules/commands/commandtest.py.
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/modules/workqueue.py:
        * Scripts/run-webkit-unittests:

2009-12-02  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        check-webkit-style is too noisy about namespace indenting issues.
        https://bugs.webkit.org/show_bug.cgi?id=32096

        * Scripts/modules/cpp_style.py:
        Added a _FileState object to be able to track file level information. In this
        case, it simply tracks whether the error has already been given, so that it isn't
        done again.
        * Scripts/modules/cpp_style_unittest.py:
        Modified test cases to pass in the _FileState object and fix a test that expected
        to see the namespace error twice (now it only occurs once). No new tests because
        existing tests cover the change in functionality.

2009-12-01  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        [wx] Get DumpRenderTree building after waf switch.
        
        https://bugs.webkit.org/show_bug.cgi?id=32041

        * DumpRenderTree/wscript: Added.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setTimelineProfilingEnabled):
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::whiteListAccessFromOrigin):
        (LayoutTestController::counterValueForElementById):
        * Scripts/build-webkit:

2009-12-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] build-attachment shouldn't check whether the builders are red
        https://bugs.webkit.org/show_bug.cgi?id=32062

        build-attachment doesn't touch the remote repository, so there isn't a
        need to hold off when the builders are red.

        * Scripts/modules/commands/download.py:
        * Scripts/modules/landingsequence.py:

2009-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(51590): style-queue and build-queue think their empty when they are not
        https://bugs.webkit.org/show_bug.cgi?id=32061

        * Scripts/modules/bugzilla.py: make all id lookups return ints instead of strings.
        * Scripts/modules/bugzilla_unittest.py: Add and update unit tests to use ints.

2009-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        build-queue is throwing exceptions and complaining about
        lack of --no-update on build-attachment.  Make it stop.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:

2009-12-02  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.  Forgot to declare my variables.  :(

        * QueueStatusServer/queue_status.py:

2009-12-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Implement status bubble view
        https://bugs.webkit.org/show_bug.cgi?id=32057

        The status bubble is a compact representation of the queue status for a
        given patch.  This will eventually help us reduce the comment spam from
        the queues.

        * QueueStatusServer/index.html: Added HTML5 doctype for sanity.
        * QueueStatusServer/queue_status.py:
        * QueueStatusServer/status_bubble.html: Added.

2009-12-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        trim commands/*.py includes now that commands are unit tested
        https://bugs.webkit.org/show_bug.cgi?id=32056

        In the course of ensuring that the unit tests still
        passed after this change, I had to actually make them
        pass in the first place.

        * Scripts/modules/bugzilla.py:
         - Fix _parse_attachment_ids_request_query to return ints instead of strings.
        * Scripts/modules/commands/download.py: Remove unneeded imports.
        * Scripts/modules/commands/queries.py: Ditto.
        * Scripts/modules/commands/queues.py: Ditto.
        * Scripts/modules/commands/upload.py: Ditto.
        * Scripts/modules/scm_unittest.py:
         - Fix to expect the \n after the path since echo adds an \n.

2009-12-01  Yaar Schnitman  <yaar@chromium.org>

        build-webkit: Remove flex,bison,gperf check for chromium
        https://bugs.webkit.org/show_bug.cgi?id=32043

        * Scripts/webkitdirs.pm:

2009-12-01  Chris Fleizach  <cfleizach@apple.com>

        Build fixage for Windows/GTK for DumpRenderTree.

        WAI-ARIA: implement support for ARIA drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=32007

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):

2009-12-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: implement support for ARIA drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=32007

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getARIADropEffectsCallback):
        (getARIAIsGrabbedCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::ariaIsGrabbed):
        (AccessibilityUIElement::ariaDropEffects):

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. GTK DRT try 2.

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

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Try to fix gtk DRT build.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:

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

        Reviewed by Eric Seidel.

        check-webkit-style does not understand (Prefix)Foo(Custom|Gtk|CG|Mac).cpp including Foo.h
        https://bugs.webkit.org/show_bug.cgi?id=32033

        * Scripts/modules/cpp_style.py: Changed check for a possible primary header to use find
                                        instead of startswith.
        * Scripts/modules/cpp_style_unittest.py: Added a unit test for the new behavior.

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Qt build almost fixed, DumpRenderTree should compile now as well.

        * DumpRenderTree/qt/LayoutTestControllerQt.h: Update old function signature.

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Simon Fraser.

        Add SVG animation test framework with 'snapshot' functionality
        https://bugs.webkit.org/show_bug.cgi?id=31897

        Add new 'sampleSVGAnimationForElementAtTime' DRT method,
        used by the new SVG animation testing framework, implemented
        for qt/gtk/win/mac.

        * DumpRenderTree/LayoutTestController.cpp:
        (sampleSVGAnimationForElementAtTimeCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::sampleSVGAnimationForElementAtTime):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::sampleSVGAnimationForElementAtTime):

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

        Remove user content before running each test on Windows

        Fixes <http://webkit.org/b/31479> Make websocket tests work on Windows

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Remove all user content
        before each test, which matches Mac.

2009-12-01  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Make pywebsocket log errors to a file
        https://bugs.webkit.org/show_bug.cgi?id=31604

        * Scripts/run-webkit-tests: Log output to a pywebsocket_log.txt file in results directory
        (by passing the path to the server via a recently added -l option).

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

        Fix tests that use the TestNetscapePlugin in Debug_Internal builds

        Reviewed by Ada Chan.

        Fixes <http://webkit.org/b/32027> REGRESSION (r49705): Tests that use
        TestNetscapePlugin fail in Debug_Internal builds

        * DumpRenderTree/win/DumpRenderTree.cpp: Use the "_Debug" plugin
        directory in Debug and Debug_All builds, but not in Debug_Internal
        builds.

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

        Re-enable DRT's watchdog timer on Windows

        It was accidentally disabled in r50907.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setWaitToDump): Remove a "false &&" that snuck
        into an if condition.

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

        Reviewed by Eric Seidel.

        check-webkit-style complains about #imports with / in them
        https://bugs.webkit.org/show_bug.cgi?id=32022

        We need to exclude #import directives in addition to #include from the
        binary operator whitespace checks.

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-11-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        check-webkit-style is slightly too verbose
        https://bugs.webkit.org/show_bug.cgi?id=32010

        check-webkit-style prints out a bunch of "done" lines that seem redundant,
        especially for the style-queue.

        * Scripts/modules/cpp_style.py:

2009-11-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Moved the functions that are closing the result log of the
        tests to the last line of the runTest function, this avoids
        reporting crashes in the wrong test if there is a problem when
        reseting the state after the test.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        (runTest):

2009-11-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=31286
        fast/js/date-proto-generic-invocation breaks another test

        Don't cache JSClassRefs, a change to the prototype chain will
        last between tests.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::getJSClass):
        * DumpRenderTree/GCController.cpp:
        (GCController::getJSClass):
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::getJSClass):

2009-11-30  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Update pywebsocket to 0.4.2.1.
        This is to fix a bug that some messages are logged to stderr even when the log file is specified.
        https://bugs.webkit.org/show_bug.cgi?id=31976

        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:

2009-11-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Generate pass messages for style-queue
        https://bugs.webkit.org/show_bug.cgi?id=31995

        With this change, the style-queue posts "pass" messages to bugs as
        well.  Also, added more information to the state store w.r.t. passing
        and failing.

        * Scripts/modules/commands/queues.py:
        * Scripts/modules/patchcollection.py:

2009-11-30  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Simon Fraser.

        Check for WEBKIT_TESTFONTS environment variable in
        run-webkit-tests, for GTK+, to have a more prominent error
        message.

        * Scripts/run-webkit-tests:

2009-11-30  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        update-webkit --chromium forces gclient sync

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

        * Scripts/update-webkit-chromium:

2009-11-29  Eric Seidel  <eric@webkit.org>

        Add Erik Arvidsson to committers.py since by r51326 he clear has commit rights.

        * Scripts/modules/committers.py:

2009-11-29  Eric Seidel  <eric@webkit.org>

        No review, just adding missing svn property.

        Set svn:executable property on new scripts.
        These were added by commit-queue commits, but the executable
        property was lost due to a bug in svn-apply:
        https://bugs.webkit.org/show_bug.cgi?id=27204

        * Scripts/update-webkit-chromium: Added property svn:executable.
        * Scripts/validate-committer-lists: Added property svn:executable.

2009-11-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Need a way to validate that committers.py includes all committers/reviewers
        https://bugs.webkit.org/show_bug.cgi?id=30970

        Add a script which knows how to compare our public committer/reviewer
        lists and show discrepancies between them.

        Validates mailing lists vs. committers.py:
        - committers.py committers missing from webkit-committers@lists
        - webkit-committers@lists members missing from committers.py
        - committers.py reviewers missing from webkit-reviewers@lists
        - webkit-reviewers@lists members missing from committers.py
        - webkit-reviewers@lists members missing from committers.py reviewer list

        Validates committers.py vs. trunk/ SVN history:
        - committers who have not committed in over a year
        - SVN committers missing from committers.py
        - committers.py members who have no record in SVN.

        All of these lists still show "false positives" until a few more committers.py updates are made, like:
        https://bugs.webkit.org/show_bug.cgi?id=31366

        * Scripts/validate-committer-lists: Added.

2009-11-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] style-queue sends ~100 requests to QueueStatusServer every 5 minutes
        https://bugs.webkit.org/show_bug.cgi?id=31950

        Now we cache the last status that we get back from QueueStatusServer.
        Eventually we'll have to do something more fancy if we want to support
        a "try again" button on QueueStatusServer, but we can cross that bridge
        when we come to it.

        * Scripts/modules/patchcollection.py:

2009-11-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        StyleQueue scans ~100 bug pages every 5 minutes
        https://bugs.webkit.org/show_bug.cgi?id=31947

        Instead of getting the pending-review attachment ids by scanning each
        bug (which results in a network request), we should just get them all
        from webkit.org/pending-review in one shot.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/bugzilla_unittest.py:
        * Scripts/modules/commands/queries.py:
        * Scripts/modules/commands/queries_unittest.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/modules/patchcollection.py:

2009-11-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] CC webkit-bot-watchers whenever the bots touch bugs
        https://bugs.webkit.org/show_bug.cgi?id=31952

        The mailing list is open for anyone to subscribe.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/commands/queues.py:

2009-11-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] style-queue should report style errors to bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=31945

        Currently, we're just logging the style errors locally.  With this
        patch we'll actually log the errors to bugzilla.  Note: I plan to run
        with the "local-only" logging during development.

        * Scripts/modules/commands/queues.py:
        * Scripts/modules/scm.py:

2009-11-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] style-queue shouldn't reject patches from the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=31944

        Currently the style-queue subprocess gets confused and thinks its the
        commit-queue.  If the patch has an error, it rejects it from the
        commit-queue.  Instead, we should have style-queue specific logic.
        This patch doesn't add that logic, but it gives us a callback we can
        use to add that logic.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/landingsequence.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        Rename CommitQueueStatus to QueueStatusServer to allow for more queues.

        * CommitQueueStatus: Removed.
        * CommitQueueStatus/app.yaml: Removed.
        * CommitQueueStatus/filters: Removed.
        * CommitQueueStatus/filters/__init__.py: Removed.
        * CommitQueueStatus/filters/webkit_extras.py: Removed.
        * CommitQueueStatus/index.html: Removed.
        * CommitQueueStatus/index.yaml: Removed.
        * CommitQueueStatus/queue_status.py: Removed.
        * CommitQueueStatus/stylesheets: Removed.
        * CommitQueueStatus/stylesheets/main.css: Removed.
        * CommitQueueStatus/update_status.html: Removed.
        * QueueStatusServer: Copied from WebKitTools/CommitQueueStatus.

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-queue should only process each patch once
        https://bugs.webkit.org/show_bug.cgi?id=31939

        Actually address reviewer comments!

        * Scripts/bugzilla-tool:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] style-queue fails to apply a bunch of patches for no reason
        https://bugs.webkit.org/show_bug.cgi?id=31942

        By passing --non-interactive to check-style, we convince check-style
        to pass --force to svn-apply, which lets it apply more patches.

        * Scripts/modules/commands/queues.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Support --status-host in style-queue
        https://bugs.webkit.org/show_bug.cgi?id=31941

        * Scripts/modules/commands/queues.py:
        * Scripts/modules/statusbot.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-queue should only process each patch once
        https://bugs.webkit.org/show_bug.cgi?id=31939

        Before processing a patch, the try-queues now ask the web service
        whether they have already processed the patch.  This is an initial cut
        of this functionality.  I expect we're make it richer over time.

        * Scripts/bugzilla-tool:
        * Scripts/modules/commands/queues.py:
        * Scripts/modules/patchcollection.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        PatchStatus does not return status
        https://bugs.webkit.org/show_bug.cgi?id=31938

        We need to parse attachment_id as an int.  Otherwise, we can't find
        anything in the datastore.

        * CommitQueueStatus/queue_status.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make commit-queue status not throw an exception where there is not
        status
        https://bugs.webkit.org/show_bug.cgi?id=31936

        We need to actually fetch the results of the query to see what's in the
        datastore.

        * CommitQueueStatus/queue_status.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] unit test ApplyPatches and ApplyAttachment
        https://bugs.webkit.org/show_bug.cgi?id=31935

        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/download_unittest.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Unit test download commands
        https://bugs.webkit.org/show_bug.cgi?id=31923

        Adds download_unittest and fixes a bug found while testing.

        * Scripts/modules/commands/commandtest.py:
        * Scripts/modules/commands/download.py:
            Fixed a bug where we'd throw an error because [].append returns
            None.
        * Scripts/modules/commands/download_unittest.py: Added.
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/run-webkit-unittests:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix found while writing unit tests.

        * Scripts/modules/commands/download.py:

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitLandingScripts
        https://bugs.webkit.org/show_bug.cgi?id=31904

        Step 6: Kill the rest.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/commands/queries.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/scm.py:
        * Scripts/modules/webkitlandingscripts.py: Removed.

2009-11-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Unit test upload commands
        https://bugs.webkit.org/show_bug.cgi?id=31903

        Adds unit tests for all but two of the upload commands.  The two
        remaining ones are more difficult.  I'll return to them later.  The
        goal of these tests is just to run the commands.  We can test more
        detailed behavior later.

        * Scripts/modules/commands/commandtest.py:
        * Scripts/modules/commands/upload.py:
        * Scripts/modules/commands/upload_unittest.py:
        * Scripts/modules/mock.py: Added.
        * Scripts/modules/mock_bugzillatool.py:

2009-11-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitLandingScripts
        https://bugs.webkit.org/show_bug.cgi?id=31904

        Step 5: Kill run_and_throw_if_fail.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/processutils.py: Added.
        * Scripts/modules/webkitlandingscripts.py:

2009-11-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitLandingScripts
        https://bugs.webkit.org/show_bug.cgi?id=31904

        Step 4: Kill run_webkit_script.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/webkitlandingscripts.py:

2009-11-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitLandingScripts
        https://bugs.webkit.org/show_bug.cgi?id=31904

        Step 3: Kill build_webkit.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitlandingscripts.py:

2009-11-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitLandingScripts
        https://bugs.webkit.org/show_bug.cgi?id=31904

        Step 2: Kill ensure_builders_are_green.

        * Scripts/modules/buildsteps.py:
        * Scripts/modules/commands/download.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitlandingscripts.py:

2009-11-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [bzt] Kill WebKitLandingScripts
        https://bugs.webkit.org/show_bug.cgi?id=31904

        Step 1: Kill prepare_clean_working_directory and run_webkit_tests.

        * Scripts/bugzilla-tool:
        * Scripts/modules/buildsteps.py: Added.
        * Scripts/modules/commands/download.py:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitlandingscripts.py:

2009-11-26  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Adam Barth.

        Remove directory prefixes from linux commands

        SCM unittests can cause errors on some systems if we use absolute reference to
        the commands, so directory prefixes have been removed.

        * Scripts/modules/scm_unittest.py:

2009-11-21  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Kenneth Rohde Christiansen.

        Link DumpRenderTree to the Qt Ui Tools
        https://bugs.webkit.org/show_bug.cgi?id=31203

        Implement QWebPage::createPlugin using the Qt Ui Tools
        to be able to create classes like QProgressBar from within
        the <object></object> tags This is required for the
        new automatic test of Qt Plugins.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::createPlugin):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/DumpRenderTree.pro:

2009-11-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Update pywebsocket to 0.4.2

        Update pywebsocket to 0.4.2
        https://bugs.webkit.org/show_bug.cgi?id=31861

        * pywebsocket/example/echo_client.py:
        * pywebsocket/example/echo_wsh.py:
        * pywebsocket/mod_pywebsocket/__init__.py:
        * pywebsocket/mod_pywebsocket/dispatch.py:
        * pywebsocket/mod_pywebsocket/msgutil.py:
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:
        * pywebsocket/test/test_dispatch.py:
        * pywebsocket/test/test_msgutil.py:

2009-11-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add unit test for mark-fixed
        https://bugs.webkit.org/show_bug.cgi?id=31896

        * Scripts/modules/commands/commandtest.py: Added.
        * Scripts/modules/commands/queries_unittest.py:
        * Scripts/modules/commands/upload_unittest.py: Added.
        * Scripts/modules/mock_bugzillatool.py:
        * Scripts/run-webkit-unittests:

2009-11-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool should have a mark-fixed command
        https://bugs.webkit.org/show_bug.cgi?id=31853

        Pretty simple stuff.

        * Scripts/modules/commands/upload.py:

2009-11-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        'bugzilla-tool help' should only show common commands like how 'git help' does
        https://bugs.webkit.org/show_bug.cgi?id=31772

        I also took this opportunity to make 'help' a real Command.
        Making 'help' a real command required adding Command.tool (which we've wanted to do for a while).

        * Scripts/bugzilla-tool:
         - change should_show_command_help to should_show_in_main_help
        * Scripts/modules/commands/download.py:
         - Mark commands as being shown in main help or not.
         - show_in_main_help = False is not required (default is false),
           but it seemed to make the commands more self-documenting.
        * Scripts/modules/commands/queries.py: ditto
        * Scripts/modules/commands/queues.py: ditto
        * Scripts/modules/commands/upload.py: ditto
        * Scripts/modules/multicommandtool.py:
         - Make Command hold a pointer to tool in self.tool.  Most Command
           subclasses do not take advantage of this yet, but it was required
           for HelpCommand to be able to reach the tool from _help_epilog().
         - Move MultiCommandTool._standalone_help_for_command to Command.standalone_help
         - Move MultiCommandTool._help_epilog to Command._help_epilog
         - Move "help" logic into HelpCommand.execute()
         - Change should_show_command_help to should_show_in_main_help and add a default implementation.
        * Scripts/modules/multicommandtool_unittest.py:
         - Test hiding of Commands in --help, and that all commands are shown in 'help --all-commands'

2009-11-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dan Bernstein.
        
        Patch by Mark Rowe.

        The buildbots are failing on Windows because when they were upgraded
        to 4.0.4, Apple Application Support was not in their path. Add it to
        the path to fix the buildots.

        * Scripts/webkitdirs.pm:

2009-11-25  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Kilzer.

        run-webkit-tests doesn't accept directories/files with --skipped=only parameter
        https://bugs.webkit.org/show_bug.cgi?id=31799

        * Scripts/run-webkit-tests: Fixed.

2009-11-25  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Change run_command to give back stderr by default
        https://bugs.webkit.org/show_bug.cgi?id=31734

        Change run_command to give back stderr by default.
        Set run_commands's 'svn-create-patch' calling to put only the stdout into the patches.
        Change the related unittest call.

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-11-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Centralize required argument parsing in Command
        https://bugs.webkit.org/show_bug.cgi?id=31872

        * Scripts/modules/commands/download.py: remove custom required arg message.
        * Scripts/modules/commands/upload.py: ditto.
        * Scripts/modules/multicommandtool.py:
         - Add _parse_required_arguments.
         - Pass program name off to OptionParser.
         - Add name() for access to tool name.
         - Add check_arguments_and_execute and make it return a return code.
         - Replace a couple uses of + with %.
        * Scripts/modules/multicommandtool_unittest.py: test _parse_required_arguments

2009-11-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Abstract out capturing stdout/stderr into a new OutputCapture class for re-use among the various unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=31870

        * Scripts/modules/commands/queries_unittest.py: Use the new class.
        * Scripts/modules/multicommandtool_unittest.py: Ditto.
        * Scripts/modules/outputcapture.py: Added.

2009-11-24  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Eric Seidel.

        Add ENABLE_SHARED_SCRIPT feature define and flag for build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=31444

        * Scripts/build-webkit:

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Changes the way 3D_RENDERING and ACCELERATED_COMPOSITING related tests are excluded
        https://bugs.webkit.org/show_bug.cgi?id=27314
        
        Now the script allows the directories with these tests to be included on all
        platforms but Mac, where they behave the same as always. For all other platforms
        the tests need to be excluded using the Skipped files, which is currently done
        for all platforms (including win since we're not turned on yet)

        * Scripts/webkitdirs.pm:

2009-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        queries_unittest.py should test command output
        https://bugs.webkit.org/show_bug.cgi?id=31845

        * Scripts/modules/commands/queries_unittest.py:
         - Capture stdout and stderr and compare with expected strings.

2009-11-24  Simon Fraser  <simon.fraser@apple.com>

        No Review.

        Fix spelling error ("depenedencies").

        * Scripts/build-webkit:

2009-11-24  Mark Rowe  <mrowe@apple.com>

        Land the configuration that includes the two debug GTK Linux builders.

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

2009-11-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/31840> bisect-builds broke after r50080

        Reviewed by Dan Bernstein.

        * Scripts/bisect-builds:
        (mountAndRunNightly): Switched back to using backticks to run
        the hdiutil command since exec() will terminate the existing
        script, which is not what we want.  Store the output of
        File::Spec->devnull() in a variable for use in the hdiutil
        detach commands.

2009-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Include "config.h" to meet Coding Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=31792

        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp:
        * DumpRenderTree/qt/jsobjects.cpp:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:

2009-11-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Oliver Hunt.

        Implement new required function to pass test we used to pass. This
        change is required since r51294.

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

2009-11-23  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT: dumpBackForwardList() does not work properly with non-file URLs.
        https://bugs.webkit.org/show_bug.cgi?id=31775

        LayoutTestController::dumpBackForwardList() should work with local URLs
        as well as with normal URLs (in http tests for instance).
        Currently it does not output the latter properly.

        Unskip a bunch of passing http/navigation tests.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::dumpHistoryItem):

2009-11-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        ARIA: support aria-flowto
        https://bugs.webkit.org/show_bug.cgi?id=31762

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (ariaFlowToElementAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::ariaFlowToElementAtIndex):

2009-11-22  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] fast/history/back-forward-reset-after-error-handling.html failing due to WorkQueue not being un-frozen
        https://bugs.webkit.org/show_bug.cgi?id=31638

        Unfreeze WorkQueue after each test execution.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2009-11-22  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Barth.

        [Qt] DumpRenderTree should explicitly ignore any SSL certificate errors
        for localhost and 127.0.0.1.
        https://bugs.webkit.org/show_bug.cgi?id=31783

        Unskip the http/tests/ssl/verify-ssl-enabled.php test, which is passing now.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::NetworkAccessManager::NetworkAccessManager):
        (WebCore::NetworkAccessManager::sslErrorsEncountered):
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/qt/DumpRenderTree.h:

2009-11-22  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Disable access to file:/// directory listings
        https://bugs.webkit.org/show_bug.cgi?id=31329

        Implemented setAllowUniversalAccessFromFileURLs to support testing of
        file URL security.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAllowUniversalAccessFromFileURLsCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAllowUniversalAccessFromFileURLs):

2009-11-22  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the timeout of fast/frames/frame-navigation.html
        https://bugs.webkit.org/show_bug.cgi?id=31638

        The test is timeouting, because it uses the WorkQueue to load a document in one
        of the child frames and once the loading is finished, the DRT does not dump the
        tree. This is because it waits for the QWebFrame::loadFinished() signal from
        the main frame, while it should connect to QWebPage::loadFinished().

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2009-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool --help spews way too much text
        https://bugs.webkit.org/show_bug.cgi?id=31771

        * Scripts/bugzilla-tool:
         - Remove self.cached_scm initialization hack.
        * Scripts/modules/buildbot.py:
         - Make default_host accessible to callers.
        * Scripts/modules/commands/download.py:
         - Phrase help for all commands consistently and remove spurious help text punctuation.
        * Scripts/modules/commands/queries.py: Ditto.
        * Scripts/modules/commands/queues.py: Ditto.
        * Scripts/modules/commands/upload.py: Ditto.
        * Scripts/modules/multicommandtool.py:
         - Add HelpPrintingOptionParser.format_epilog to replace
           NonWrappingEpilogIndentedHelpFormatter and allow us to lazily initialize
           per-command help (thus removing the need for the cached_scm hack in BugzillaTool).
         - Make --help only show a list of commands like "svn help" and "git help" do --
           previously --help was listing all commands and options.
         - Sort list of commands alphabetically.

2009-11-21  Eric Seidel  <eric@webkit.org>

        No review.  Fixing a typo from the previous patch for bug 31767.

        AbstractQueue.run_bugzilla_tool throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=31769

        * Scripts/modules/commands/queues.py:

2009-11-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue fails to run with "permissions error" due to bad bugzilla-tool path
        https://bugs.webkit.org/show_bug.cgi?id=31767

        What we really want to test is BugzillaTool.path() instead of TrivialTool.path().
        Since we don't have a good way to test BugzillaTool pieces, I've
        left out a test for now.

        * Scripts/bugzilla-tool:
         - Add a path() implementation to expose bugzilla-tool's __file__ path to commit-queue.
        * Scripts/modules/commands/queues.py:
         - Use tool.path() instead of __file__.
        * Scripts/modules/multicommandtool.py:
         - Add a new path() method to MultiComandTool.
        * Scripts/modules/multicommandtool_unittest.py:
         - Provide a path() method.  Little point in testing this mock implementation.

2009-11-21  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.  Turns out I was testing the wrong copy of
        WebKitTools.

        * Scripts/modules/commands/download.py:

2009-11-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Convert check-style to use LandingSequence
        https://bugs.webkit.org/show_bug.cgi?id=31763

        Instead of manipulating the working copy by hand, we should use the
        LandingSequence in CheckStyle.  This will make this code eaiser to
        test.

        * Scripts/modules/commands/download.py:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Unit test query commands
        https://bugs.webkit.org/show_bug.cgi?id=31755

        These tests are pretty rough, but hopefully they'll grow.

        * Scripts/modules/commands/queries_unittest.py: Added.
        * Scripts/modules/mock_bugzillatool.py: Added.
        * Scripts/run-webkit-unittests:

2009-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix a bunch of unit test regressions from our recent bugzilla-toll hacking
        https://bugs.webkit.org/show_bug.cgi?id=31758

        * Scripts/modules/multicommandtool.py:
         - Allow passing of explicit commands to MultiCommandTool.__init__
        * Scripts/modules/multicommandtool_unittest.py:
         - Use new Command.name naming system.
         - Test Command auto-discovery.
        * Scripts/modules/workqueue.py:
         - bug_id no longer exists, use patch['bug_id'] instead.
        * Scripts/modules/workqueue_unittest.py:
         - WorkQueues require names now.
         - should_proceed_with_work_item must return a patch object.

2009-11-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: add support for aria-owns
        https://bugs.webkit.org/show_bug.cgi?id=31702

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (ariaOwnsElementAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::ariaOwnsElementAtIndex):

2009-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix exception thrown when running the commit-queue.

        * Scripts/modules/statusbot.py: patch is optional.
        * Scripts/modules/workqueue.py: WorkQUeue requires a name.

2009-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach the StatusBot how to support more than just the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=31754

        * Scripts/modules/workqueue.py: Another typo.

2009-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach the StatusBot how to support more than just the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=31754

        * Scripts/modules/commands/queues.py: Fix silly typo.

2009-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach the StatusBot how to support more than just the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=31754

        * CommitQueueStatus/index.yaml:
         - Add indices required for the new queries.
        * CommitQueueStatus/queue_status.py:
         - Add a patch-status page and move update_status to update-status.
         - Only display "commit-queue" status records for the commit-queue.
         - Add support for a queue_name property on status records.
         - Fix _int_from_request to actually work.
        * CommitQueueStatus/update_status.html:
         - Add support for a queue_name on status records.
         - Remove unused list of bug ids.
         * Scripts/modules/commands/queues.py
          - Make the queues pass the patch instead of the bug_id to StatusBot.
        * Scripts/modules/statusbot.py:
         - Support passing the queue_name to the status updates.
         - Support fetching patch status with patch_status().
        * Scripts/modules/workqueue.py:
         - Pass the patch to the StatusBot instead of the bug_id.
         - Let WorkQueues have a name.

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move bugzilla-tool commands into their own file
        https://bugs.webkit.org/show_bug.cgi?id=31752

        This will let us write unit tests.

        * Scripts/bugzilla-tool:
        * Scripts/modules/commands/__init__.py: Added.
        * Scripts/modules/commands/download.py: Added.
        * Scripts/modules/commands/queries.py: Added.
        * Scripts/modules/commands/queues.py: Added.
        * Scripts/modules/commands/upload.py: Added.
        * Scripts/modules/grammar.py: Added.

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        BuildQueue should check if the tree is currently buildable
        https://bugs.webkit.org/show_bug.cgi?id=31744

        * Scripts/bugzilla-tool:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitlandingscripts.py:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move prepare_clean_working_directory into the LandingSequence
        https://bugs.webkit.org/show_bug.cgi?id=31743

        * Scripts/bugzilla-tool:
        * Scripts/modules/landingsequence.py:

2009-11-20  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        NPN_ReloadPlugins does not reload the page even if reloadPages is true.
        https://bugs.webkit.org/show_bug.cgi?id=30460

        Added code for calling NPN_ReloadPlugins with reloadPages true and false.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginInvoke):

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Pass the port information to the child process
        https://bugs.webkit.org/show_bug.cgi?id=31736

        We need to do this so the child process knows what to build!

        * Scripts/bugzilla-tool:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitport.py:
        * Scripts/modules/webkitport_unittest.py:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Support Qt port in build-queue
        https://bugs.webkit.org/show_bug.cgi?id=31733

        * Scripts/bugzilla-tool:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement a build-queue
        https://bugs.webkit.org/show_bug.cgi?id=31725

        Currently this just builds the first 10 patches in the review queue.
        We'll want to do something smarter soon.

        * Scripts/bugzilla-tool:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make commit-queue and style-queue show up in help
        https://bugs.webkit.org/show_bug.cgi?id=31724

        We need to store their names on their class to make these commands
        properly register themselves with MultiCommandTool.

        * Scripts/bugzilla-tool:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement bugzilla-tool build-attachment
        https://bugs.webkit.org/show_bug.cgi?id=31722

        This command builds an attachment from bugzilla.  It leaves the built
        patch in the working copy.

        * Scripts/bugzilla-tool:
        * Scripts/modules/landingsequence.py:
        * Scripts/modules/webkitlandingscripts.py:

2009-11-20  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT release event does not create the state correctly
        https://bugs.webkit.org/show_bug.cgi?id=31717

        * WebKitTools/DumpRenderTree/gtk/EventSender.cpp:

2009-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        MultiCommandTool should find Command objects automatically instead of with a manual list
        https://bugs.webkit.org/show_bug.cgi?id=31710

        * Scripts/bugzilla-tool:
        * Scripts/modules/multicommandtool.py:
         - Use some wild python-fu to crawl all the known subclasses of Command.

2009-11-20  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.  Added missing import.

        * Scripts/bugzilla-tool:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Unreviewed "build" fix.  I failed to update LandingSequence.test
        properly.

        * Scripts/modules/landingsequence.py:

2009-11-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Create LandingSequence as the all-sing, all-dance landing class
        https://bugs.webkit.org/show_bug.cgi?id=31709

        Client can inherit from this class to carefully control exactly which
        steps they wish to have happen in the landing sequence.

        * Scripts/bugzilla-tool:
        * Scripts/modules/landingsequence.py: Added.
        * Scripts/modules/webkitlandingscripts.py: Added.

2009-11-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Abstract AbstractPatchProcessingCommand from AbstractPatchLandingCommand
        https://bugs.webkit.org/show_bug.cgi?id=31707

        This is to help when we implement build-attachment.

        * Scripts/bugzilla-tool:

2009-11-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Support Qt port in bugzilla-tool
        https://bugs.webkit.org/show_bug.cgi?id=31701

        Now we support building with Qt!

        * Scripts/bugzilla-tool:
        * Scripts/modules/webkitport.py: Added.
        * Scripts/modules/webkitport_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-11-19  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Adam Barth.

        Remove inserting stderr into patch in bugzilla-tool
        https://bugs.webkit.org/show_bug.cgi?id=29914

        Modify SCM python module's run_command function to avoid return of stderr
        by default, so stderr won't be inserted into the patches.
        Modify the related unit test.

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-11-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool needs per-command help
        https://bugs.webkit.org/show_bug.cgi?id=31697

        Added support for "bugzilla-tool help command-name"
        and a unit test to make sure it works.

        * Scripts/modules/multicommandtool.py:
        * Scripts/modules/multicommandtool_unittest.py:

2009-11-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move MultiCommandTool and Command into a separate file and add some basic unit tests
        https://bugs.webkit.org/show_bug.cgi?id=31695

        * Scripts/bugzilla-tool:
        * Scripts/modules/multicommandtool.py: Added.
        * Scripts/modules/multicommandtool_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-11-19  Eric Seidel  <eric@webkit.org>

        No review, just adding a FIXME.

        Split out command parsing and help printing from BugzillaTool
        https://bugs.webkit.org/show_bug.cgi?id=31688

        * Scripts/bugzilla-tool: Add an extra comment about current design failures.

2009-11-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out command parsing and help printing from BugzillaTool
        https://bugs.webkit.org/show_bug.cgi?id=31688

        * Scripts/bugzilla-tool:
         - Add new MultiCommandTool class to contain option parsing and help printing logic.
         - Rename private methods to use _ pattern.
         - MultiCommandTool has two abstract methods should_show_command_help and should_execute_command.
         - 

2009-11-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Re-factor help printing to use modern python idioms
        https://bugs.webkit.org/show_bug.cgi?id=31685

        * Scripts/bugzilla-tool:

2009-11-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        commit-queue empty queue logs twice
        https://bugs.webkit.org/show_bug.cgi?id=31679

        * Scripts/bugzilla-tool:

2009-11-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        bugzilla-tool's reviewer/committer rejection message should be clearer
        https://bugs.webkit.org/show_bug.cgi?id=31126

        Add more explanatory prose to bugzilla-tool's flag permission rejection message.

        * Scripts/modules/bugzilla.py:

2009-11-19  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Pavel Feldman.

        Forces a WM_PAINT event on calling layoutTestController.display()
        in order to enable the timeline-paint.html test on Windows.
        ::UpdateWindow() does not force an event becaue the window is 
        not visible.

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

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (displayWebView):

2009-11-19  Michelangelo De Simone  <michelangelo@webkit.org>

        No review needed.

        Added myself to committers list.

        * Scripts/modules/committers.py:

2009-11-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Bugzilla-tool command classes should match command names
        https://bugs.webkit.org/show_bug.cgi?id=31666

        I renamed all the commands except CommitMessageForCurrentDiff because
        the new name would conflict with an existing class.

        * Scripts/bugzilla-tool:

2009-11-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Gustavo Noronha Silva.

        Web Inspector: Implement "show inspector" in WebKit GTK
        API and enable console tests.

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

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

2009-11-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Minor refactoring + more documentation.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::clearHistory):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2009-11-19  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Ignore websocket tests when --no-http is specified.
        https://bugs.webkit.org/show_bug.cgi?id=31662

        * Scripts/run-webkit-tests:

2009-11-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Normalize ' and " in bugzilla-tool
        https://bugs.webkit.org/show_bug.cgi?id=31655

        We decided " is better than ' and we should be consistent.

        * Scripts/bugzilla-tool:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.3 or older versions
        https://bugs.webkit.org/show_bug.cgi?id=29469

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/ImageDiff.pro:

2009-11-18  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        GitTest.test_create_binary_patch fails if /tmp is symlink
        https://bugs.webkit.org/show_bug.cgi?id=31536

        * Scripts/modules/scm_unittest.py:

2009-11-18  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Adler.

        Configuration for Chromium Build Slaves.

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

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

2009-11-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        workqueue.py results in totally broken commit-queue UI
        https://bugs.webkit.org/show_bug.cgi?id=31645

        * Scripts/bugzilla-tool:
         - Remove unneeded use of PatchCollection.
         - Grab a new copy of the cq'd patches every run of the queue.

2009-11-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make the Mac Geolocation API async.

        Update DRT to use the new async Mac Geolocation API.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Add and option to toggle HTML5 datalist support to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=31599

        * Scripts/build-webkit:

2009-11-18  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Enable wx plugin support using the Windows implementation as a base.
        
        https://bugs.webkit.org/show_bug.cgi?id=31636

        * wx/build/settings.py:

2009-11-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Change the initialization order so that the controllers
        will be created before exporting them to the JS DOM window.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2009-11-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Fix a code copy and paste error. m_page should be page.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::createWindow):

2009-11-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        <http://webkit.org/b/31603> WebSocket server is confused if WebKit tests run from within /tmp on Mac OS X

        * pywebsocket/mod_pywebsocket/dispatch.py: Use os.path.realpath as it returns the canonical path of a file.
        This prevents symlinks from confusing the descendant check.

2009-11-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        <http://webkit.org/b/31602> Failing to start the WebSocket server shouldn’t terminate entire test run

        If the WebSocket server fails to start have DRT load an error page in place of tests that require the
        server to be up rather than having run-webkit-tests abort immediately.

        * Scripts/run-webkit-tests:

2009-11-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        commit-queue is failing to set reviewer in ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=31592

        * Scripts/bugzilla-tool: Clarify the "applying" log message.
        * Scripts/modules/bugzilla.py:
         - Add a new _validate_committer_and_reviewer function as a
           temporary solution until we can make a real Attachment object
           which knows how to fill in its committer/reviewer fields automatically.

2009-11-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed buildbot fix.

        Revert part of earlier patch and add comment, as it
        was causing timeouts on the buildbot.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::notifyDone):

2009-11-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Oliver Hunt.

        Make the timeout 15 sec as for the other DRT's and make
        it print out the same output when a test timeout.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::timerEvent):

2009-11-17  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Fixed typos in comments.

        * Scripts/modules/committers.py:

2009-11-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make DRT show web inspector for tests in inspector/ folder.
        - Updated DRT to show/close inspector for all tests under /inspector
        - Introduced LayoutTestController::setTimelineProfilingEnabled and
          WebInspector::setTimelineProfilingEnabled beside setJavaScriptProfilingEnabled
        - Removed reload on each inspector test
        - Renamed fast/inspector to fast/inspector-support in order not to trigger
        inspector for those.
        - Reimplemented timeline tests in order to get rid of reload there.
        - Moved tests that don't require harness into the fast group.

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

        * DumpRenderTree/LayoutTestController.cpp:
        (setTimelineProfilingEnabledCallback):
        (closeWebInspectorCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (shouldOpenWebInspector):
        (runTest):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setTimelineProfilingEnabled):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldOpenWebInspector):
        (runTest):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setTimelineProfilingEnabled):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldOpenWebInspector):
        (runTest):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setTimelineProfilingEnabled):

2009-11-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Incorrect use of JavaScriptCore API in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=31577

        Return undefined rather than a literal null.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedTextRangeCallback):
        (incrementCallback):
        (decrementCallback):
        (showMenuCallback):

2009-11-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: aria-labelledby duplicates some of its WAI-ARIA label
        https://bugs.webkit.org/show_bug.cgi?id=31565

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (titleUIElementCallback):
        (getIsValidCallback):
        (AccessibilityUIElement::getJSClass):

2009-11-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        r50942 broke output from created windows. Make the
        m_enableTextOutput a member of the DRT and not the
        WebPage.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::javaScriptAlert):
        (WebCore::WebPage::javaScriptConsoleMessage):
        (WebCore::WebPage::javaScriptConfirm):
        (WebCore::WebPage::javaScriptPrompt):
        (WebCore::WebPage::acceptNavigationRequest):
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::createWindow):
        * DumpRenderTree/qt/DumpRenderTree.h:
        (WebCore::DumpRenderTree::setTextOutputEnabled):
        (WebCore::DumpRenderTree::isTextOutputEnabled):
        (WebCore::WebPage::shouldInterruptJavaScript):
        (WebCore::WebPage::isTextOutputEnabled):
        (WebCore::WebPage::setViewGeometry):

2009-11-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        Moved DumpRenderTree/gtk/TestNetscapePlugin to DumpRenderTree/unix/TestNetscapePlugin
        as the implementation is being used by at least Qt and Gtk+.

        Update buildsystems as well.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npapi.h:
        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npfunctions.h:
        * DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h:
        * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
        * GNUmakefile.am:

2009-11-16  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Alexey Proskuryakov.

        Disable wss until all platforms support pyOpenSSL

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

        * Scripts/run-webkit-tests:

2009-11-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Implement load error pages support for Qt's DRT.
        https://bugs.webkit.org/show_bug.cgi?id=31509

        For now, it will not be a default feature, and layout tests
        that want to make use of this have to explicitily call
        'handleErrorPages();' for the test source.

        Any of the other DumpRenderTree's (mac, win and gtk)
        support handling error pages. Qt's will be the first.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::supportsExtension):
        (WebCore::WebPage::extension):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::reset):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        (LayoutTestController::shouldHandleErrorPages):
        (LayoutTestController::handleErrorPages):

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename the --commit-queue flag on land-* now that the commit-queue needs no special treatment
        https://bugs.webkit.org/show_bug.cgi?id=31549

        Renamed --commit-queue to --non-interactive in most places
        and remove the code in land-patches which is no longer needed.

        * Scripts/bugzilla-tool:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        The commit-queue should use land-attachment
        https://bugs.webkit.org/show_bug.cgi?id=31548

        * Scripts/bugzilla-tool:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Convert CommitQueue over to PatchCollection
        https://bugs.webkit.org/show_bug.cgi?id=31547

        Also fixes a bug in workqueue and adds a test!

        * Scripts/bugzilla-tool:
        * Scripts/modules/workqueue.py:
        * Scripts/modules/workqueue_unittest.py:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move StyleQueue over to using PatchCollection
        https://bugs.webkit.org/show_bug.cgi?id=31544

        That's what the class it's for.

        * Scripts/bugzilla-tool:
        * Scripts/modules/patchcollection.py:
        * Scripts/modules/patchcollection_unittest.py:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool needs a land-attachment command
        https://bugs.webkit.org/show_bug.cgi?id=31546

        * Scripts/bugzilla-tool:
         - Move all the logic into AbstractLandingCommand and
           add a new LandAttachment command subclass.
         - Split out _collect_patches_by_bug logging from _fetch_list_of_patches_to_land.

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move more patch-landing code into WebKitLandingScripts in preparation for land-attachment
        https://bugs.webkit.org/show_bug.cgi?id=31543

        Just moving code and updating the one caller to use WebKitLandingScripts instead of 'self'.

        * Scripts/bugzilla-tool:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Disable the style queue from posting to the commit queue status page.

        * Scripts/bugzilla-tool:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement PatchCollection
        https://bugs.webkit.org/show_bug.cgi?id=31541

        This class holds a set of patches and lets clients iterate through
        them.  Optionally, clients can install a filter.

        * Scripts/modules/patchcollection.py: Added.
        * Scripts/modules/patchcollection_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool land-patches will close bugs with patches r=?
        https://bugs.webkit.org/show_bug.cgi?id=28230

        The commit-queue shouldn't close patches with outstanding reviews on them,
        even if many reviewers seem to be against multi-patch bugs.

        * Scripts/bugzilla-tool:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool check-style should work with attachment ids instead of bug ids
        https://bugs.webkit.org/show_bug.cgi?id=31540

        * Scripts/bugzilla-tool:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        WorkQueue is the only place that should know about special exit codes
        https://bugs.webkit.org/show_bug.cgi?id=31534

        Move LandPatchesFromBugs.handled_error to WorkQueue.exit_after_handled_error
        and add tests for handling exit codes.
        I also cleaned up workqueue_unittest.py more.

        * Scripts/bugzilla-tool:
        * Scripts/modules/workqueue.py:
        * Scripts/modules/workqueue_unittest.py:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Re-factor workqueue_unittest to allow for more than one test.
        https://bugs.webkit.org/show_bug.cgi?id=31535

        * Scripts/modules/workqueue_unittest.py:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        land-patches needs to be re-factored into smaller chunks
        https://bugs.webkit.org/show_bug.cgi?id=31532

        * Scripts/bugzilla-tool: fix a couple obvious typos.

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        land-patches needs to be re-factored into smaller chunks
        https://bugs.webkit.org/show_bug.cgi?id=31532

        The next patch will move these methods into WebKitLandingScripts.

        * Scripts/bugzilla-tool:
         - Split out _land_patch and _close_bug_if_no_active_patches.

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix silly copy-and-paste code.  I am a terrible coder.

        * Scripts/modules/bugzilla.py:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement a StyleQueue
        https://bugs.webkit.org/show_bug.cgi?id=31537

        The first iteration of the style queue only produces output locally.
        There is also a limit of 10 patches because it's not that useful to
        iterate through the entire review queue at this point.  We can remove
        the limit later.

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Unit test WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=31531

        Adds basic unit testing for WorkQueue.  Just runs through one cycle.

        * Scripts/bugzilla-tool:
        * Scripts/modules/statusbot.py:
        * Scripts/modules/workqueue.py:
        * Scripts/modules/workqueue_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool land-diff should know how to parse bug ids out of ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=31530

        * Scripts/bugzilla-tool:

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool needs apply-attachment
        https://bugs.webkit.org/show_bug.cgi?id=31528

        * Scripts/bugzilla-tool:
         - Add ApplyAttachment command.
         - Abstract applying code into WebKitApplyingScripts.
         - Rename setup_for_landing to prepare_clean_working_directory and make local_commit checking optional.
        * Scripts/modules/bugzilla.py:
         - Add fetch_attachment and bug_id_for_attachment_id.
        * Scripts/modules/bugzilla_unittest.py:
         - Add test for new parsing.
         - Fix previous parsing test which broke with Adam's check-style patch (bug 31515).

2009-11-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Document check-style's use of force_clean.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move WorkQueue to its own file
        https://bugs.webkit.org/show_bug.cgi?id=31529

        WorkQueue and WorkQueueDelegate are separate concerns from
        bugzilla-tool.  Also added a missing include to logging.py.

        * Scripts/bugzilla-tool:
        * Scripts/modules/logging.py:
        * Scripts/modules/workqueue.py:

2009-11-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move OutputTee to logging.py.

        * Scripts/bugzilla-tool:
        * Scripts/modules/logging.py:

2009-11-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Refactor bugzilla-tool to allow for multiple queues
        https://bugs.webkit.org/show_bug.cgi?id=31513

        Divide the commit queue class into three class to make creating
        additional queues easier.

        * Scripts/bugzilla-tool:

2009-11-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        svn-apply may not handle git patches created by bugzilla-tool
        https://bugs.webkit.org/show_bug.cgi?id=31457

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-11-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        bugzilla-tool should post git binary diff
        https://bugs.webkit.org/show_bug.cgi?id=31458

        Add --binary option to Git.create_patch.

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-11-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Add bugzilla-tool check-style
        https://bugs.webkit.org/show_bug.cgi?id=31515

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:

2009-11-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make the Qt Linux only --valgrind feature, suppress errors
        defined in the SuppressedValgrindErrors file.

        * Scripts/run-webkit-tests:

2009-11-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Set the locale to C and not to the current one in use on the system.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2009-11-13  Adam Roben  <aroben@apple.com>

        Add support for
        http/tests/security/isolatedWorld/didClearWindowObject.html

        Fixes <http://webkit.org/b/31124> Tell the WebFrameLoadDelegate when
        window objects in isolated worlds are cleared

        Reviewed by Dave Hyatt.

        * DumpRenderTree/mac/DumpRenderTreeMac.h: Declared worldIDForWorld.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        Added. Moved code here from -webView:didClearWindowObject:forFrame:.
        (-[FrameLoadDelegate didClearWindowObjectForFrame:inIsolatedWorld:]):
        Added. Sets a __worldID property on the global object whose value is
        the ID of this world.
        (-[FrameLoadDelegate webView:didClearWindowObjectForFrame:inScriptWorld:]):
        Respond to this new delegate callback by calling through to one of the
        above new methods.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (worldMap): Added. Returns a HashMap containing all the worlds we've
        created.
        (worldIDForWorld): Added. Returns the ID for this world, or 0 if we
        haven't kept track of this world.
        (LayoutTestController::evaluateScriptInIsolatedWorld): Use worldMap()
        instead of declaring our own.

        * DumpRenderTree/win/DumpRenderTreeWin.h: Declared worldIDForWorld.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObject): Moved code from hear to
        didClearWindowObjectForFrameInStandardWorld.
        (FrameLoadDelegate::didClearWindowObjectForFrameInScriptWorld):
        Respond to this new delegate callback by calling through to one of the
        below new methods.
        (FrameLoadDelegate::didClearWindowObjectForFrameInIsolatedWorld):
        Added. Sets a __worldID property on the gobal object whose value is
        the ID of this world.
        (FrameLoadDelegate::didClearWindowObjectForFrameInStandardWorld):
        Added. Moved code here from didClearWindowObject.

        * DumpRenderTree/win/FrameLoadDelegate.h: Added the
        didClearWindowObjectForFrame* functions.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (worldMap): Added. Returns a HashMap containing all the worlds we've
        created.
        (worldIDForWorld): Added. Returns the ID of this world, or 0 if we
        haven't kept track of this world.
        (LayoutTestController::evaluateScriptInIsolatedWorld): Use worldMap()
        instead of declaring our own.

2009-11-13  Adam Roben  <aroben@apple.com>

        Finish replacing worldIDs with world objects

        The only remaining use of worldIDs was in a method only used by DRT
        for the isolated worlds tests.

        Fixes <http://webkit.org/b/31414> Replace worldIDs with world objects

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        Updated for changes to WebFrame. Now holds the map of worldID -> world
        at this level instead of making WebKit do it.

2009-11-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Ensure the DRT does not output anything until first test is run

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        * DumpRenderTree/qt/DumpRenderTree.h:

2009-11-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Clear the undo stack in before each new test run.

        Locally fixes 3 incorrect layouts, 9 timeouts and 7 crashes.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2009-11-13  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WebKitUsesPageCachePreferenceKey overriding support to DRT's LayoutTestController.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::resetSettings):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::overridePreference):

2009-11-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update committers.py based on svn records
        https://bugs.webkit.org/show_bug.cgi?id=31366

        This list was generated using validate-committer-lists from
        https://bugs.webkit.org/show_bug.cgi?id=30970
        and makes committers.py current for committers who have
        committed in the last 3 years.

        * Scripts/modules/committers.py:

2009-11-12  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        The document-open.html test was flaky at times. The test invokes the layout test plugin
        which in its destroy stream handler opens a new document. This basically tears down the
        stream and the associated plugin instance. The pluginLog function in the layout test
        plugin attempts to retrieve the window script object on a torn down plugin instance
        which crashed consistently on windows in the debugger. The functions which issue
        these logs already have a valid window script object. We now have variants of the pluginLog
        function which take in a window script object with and without variable arguments. 

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

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginLogWithWindowObject):
        (pluginLogWithWindowObjectVariableArgs):
        (pluginLog):
        (notifyTestCompletion):
        (testDocumentOpen):
        (testWindowOpen):

2009-11-12  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        https://bugs.webkit.org/show_bug.cgi?id=30997
        [Gtk] Implemment AtkDocument

        Added testing support.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        (getDocumentEncodingCallback):
        (getDocumentURICallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::documentEncoding):
        (AccessibilityUIElement::documentURI):

2009-11-12  Adam Roben  <aroben@apple.com>

        Replace worldIDs with world objects

        Part of <http://webkit.org/b/31414> Implement new SPI for dealing with
        user scripts/stylesheets and isolated worlds

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        Changed these functions to create a new WebJSWorld each time they're
        called and to pass that world to WebKit.

2009-11-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        need to implement aria tree roles
        https://bugs.webkit.org/show_bug.cgi?id=31284

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (disclosedRowAtIndexCallback):
        (selectedRowAtIndexCallback):
        (isEqualCallback):
        (isAttributeSettableCallback):
        (isActionSupportedCallback):
        (disclosedByRowCallback):
        (hierarchicalLevelCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement::isEqual):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::hierarchicalLevel):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::disclosedByRow):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::hierarchicalLevel):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::hierarchicalLevel):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::disclosedByRow):

2009-11-11  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        svn-apply can not handle git binary diffs
        https://bugs.webkit.org/show_bug.cgi?id=26830

        Support "literal" type git binary diffs.

        * Scripts/VCSUtils.pm:
        * Scripts/modules/scm_unittest.py:
        * Scripts/svn-apply:

2009-11-11  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, removing duplicate entry for myself in committers.py.

        * Scripts/modules/committers.py:

2009-11-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=31200
        Tests in http/tests/security/mixedContent start to fail when new tests are added

        * DumpRenderTree/mac/DumpRenderTree.mm: (dumpRenderTree): Added a workaround for Tiger bug.

2009-11-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        Create, and display a window for the inspector, for inspector
        tests.

        Need to also show/hide the inspector window to avoid having
        problems with code assuming it is realized
        https://bugs.webkit.org/show_bug.cgi?id=31347

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorShowWindow):
        (webInspectorCloseWindow):
        (webInspectorInspectWebView):
        (createWebView):

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed Qt buildbot fix.

        My previous fix was wrong, so revert that change and fix it by
        returning when the document of the frame has no document element.
        Idea is borrowed from mac and win DRT.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):

2009-11-11  Eric Seidel  <eric@webkit.org>

        Reviewed byg Kenneth Rohde Christiansen.

        Update Kenneth's committer record to include the email he
        uses on lists.webkit.org.

        * Scripts/modules/committers.py:

2009-11-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        Several committers use separate email addresses for bugzilla and svn.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=31364

        Update records for existing committers to include email addresses
        used in svn.webkit.org and lists.webkit.org.
        Most committers use the same email address in all 3 places, but some use
        separate addresses.  committers.py needs record of each of these addresses.

        * Scripts/modules/committers.py:

2009-11-11  Eric Seidel  <eric@webkit.org>

        No review, adding second email address for an existing committer.

        Add Yong Li's second bugzilla account to his committer record.
        See: https://bugs.webkit.org/show_bug.cgi?id=27371#c27

        * Scripts/modules/committers.py:

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        If the frame has no innerText don't append it, and
        do not add a newline which breaks some cross platform
        results.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dumpFramesAsText):

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Implement missing functionality in the Gtk/Qt TestNetscapePlugin.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_instance):
        (webkit_test_plugin_destroy_stream):

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Mark Rowe.

        Implement the functionality needed by plugins/window-open.html

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_set_window):

2009-11-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Force -graphicssystem raster and -style windows when running DRT

        * DumpRenderTree/qt/main.cpp:
        * Scripts/run-webkit-tests:

2009-11-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Compute correct library paths for Qt

        * Scripts/webkitdirs.pm:

2009-11-10  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <http://webkit.org/b/31200> Tests in http/tests/security/mixedContent start to fail when new tests are added

        The first request to an HTTPS URL results in didFailProvisionalLoadWithError being called with an error
        about the validity of the self-signed certificates used in the regression tests.  We would then add the
        host to the ignore list for SSL certificate errors and retry the request.  If this happened during a test
        that had enabled frame load delegate logging this would result in extra log messages being generated,
        causing the test to fail.

        We address this by explicitly ignoring SSL certificate errors for localhost and 127.0.0.1 before running any
        tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):

2009-11-10  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove obsolete scrollbar policy settings from DRT constructor.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2009-11-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Remove WebSocket configuration from WebKitWebSettings
        https://bugs.webkit.org/show_bug.cgi?id=31244

        Follow-up of r50724. Don't set the enable-web-socket property
        anymore.

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

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Rename 3D Canvas related classes to use WebGL prefix
        https://bugs.webkit.org/show_bug.cgi?id=29095

        Checkin new version of do-webcore-rename used to do the WebGL type rename,
        and upate webkitdirs script to new method of testing for WebGL.

        * Scripts/do-webcore-rename:
        * Scripts/webkitdirs.pm:

2009-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make do-webcore-rename work with git.

        * Scripts/do-webcore-rename:

2009-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Adding Kenneth to the reviewers list.

        * Scripts/modules/committers.py:

2009-11-09  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Expose Page::tabKeyCyclesThroughElements in the API
        https://bugs.webkit.org/show_bug.cgi?id=30482

        LayoutTestControllerGtk now uses the exposed
        Page::tabKeyCyclesThroughElements API

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

2009-11-08  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Added support for key code 8 (backspace) in EventSenderQt.
        This helps to pass the test case below. Also replaced hardcoded
        code numbers with defined constants.
        https://bugs.webkit.org/show_bug.cgi?id=31185
        
        Test: editing/undo/undo-deleteWord.html

        * DumpRenderTree/qt/EventSenderQt.cpp:
        (EventSender::keyDown):

2009-11-07  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] [DRT] Fix wrong logic in LayoutTestController processWork
        https://bugs.webkit.org/show_bug.cgi?id=31164

        Fixed wrong logic to assume WorkQueue is done in QT's DRT.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::processWork):

2009-11-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Holger Freyther.

        [Qt][DRT] Replace queueScript by queueNonLoadingScript and queueLoadingScript method
        https://bugs.webkit.org/show_bug.cgi?id=31158

        By invoking a script queue'd by queueScript(), 'true' was beeing returned
        always, which from WorkQueue prospective means that a load has been started
        and the queue processing should stop and wait for the load to finish.
        Spinning it off into a loading and a non-loading variants was the solution
        adopted by Mac's DRT to work around this problem. The former keeps returning
        'true' while the later executes the script synchronously and returns 'false'
        making it possible to the WorkQueue to proceed right away.

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::processWork):
        (LayoutTestController::queueLoadingScript):
        (LayoutTestController::queueNonLoadingScript):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:
        * DumpRenderTree/qt/WorkQueueItem.h:
        (LoadingScriptItem::LoadingScriptItem):
        (LoadingScriptItem::invoke):
        (NonLoadingScriptItem::NonLoadingScriptItem):
        (NonLoadingScriptItem::invoke):

2009-11-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Invoke prepare-ChangeLog via an absolute path rather than assuming it can be found in PATH.

        * Scripts/commit-log-editor:

2009-11-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=28168>.
        commit-log-editor does not support all the email address configurations that prepare-Changelog supports

        Move logic for determining the name and email address to use in a ChangeLog entry from
        prepare-ChangeLog to VCSUtils so that commit-log-editor can use it.  It wants to check
        whether the author of the patch matches committer, and therefore needs access to the
        email address that would be used in a ChangeLog entry.

        Based on a patch by Pierre d'Herbemont.

        * Scripts/VCSUtils.pm:
        * Scripts/commit-log-editor:
        * Scripts/prepare-ChangeLog:
        * Scripts/webkitdirs.pm:

2009-11-06  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        Added functionality to the layout test plugin to invoke document.open and
        window.open with default arguments. The associated webkit bug is
        https://bugs.webkit.org/show_bug.cgi?id=31067, which affects Chromium. Basically
        window.open and document.open calls issued by NPAPI plugins via NPN_Invoke don't
        work in Chromium (V8) if there is no calling javascript context. To achieve this
        effect we invoke these functions in the layout test plugin in the NPP_SetWindow
        for the window.open test case and in NPP_DestroyStream for the document.open test case.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (testDocumentOpen):
        (testWindowOpen):
        (pluginAllocate):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_SetWindow):
        (NPP_DestroyStream):
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New):
        (NPP_SetWindow):
        (NPP_NewStream):
        (NPP_DestroyStream):

2009-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool crashed with exception
        https://bugs.webkit.org/show_bug.cgi?id=31092

        * Scripts/modules/bugzilla.py: Change a ',' to a '%' to fix the error.

2009-11-04  Eric Seidel  <eric@webkit.org>

        No review, just add a line which got left out of the patch uploaded for commit.

        commit-queue is crashing when trying to reject patches after unknown failures
        https://bugs.webkit.org/show_bug.cgi?id=31091

        * Scripts/bugzilla-tool: Set bug_log = None after closing to we don't re-close and crash.

2009-11-04  Adam Roben  <aroben@apple.com>

        Remove bogus else clause in bugzilla-tool

        Fixes <http://webkit.org/b/31125> REGRESSION (r47121): bugzilla-tool
        create-bug raises exception after entering bug description

        Reviewed by David Kilzer.

        * Scripts/bugzilla-tool:
        (CreateBug): else clauses are only hit if no exception is raised, so
        it makes no sense to try to re-raise the exception in an else clause.
        The exception will automatically be re-raised if it doesn't match any
        of the except clauses, so we don't have to do anything special here at
        all to get the desired behavior.

2009-11-04  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        svn-apply's fixChangeLogPatch function seems broken
        https://bugs.webkit.org/show_bug.cgi?id=30683

        Update fixChangeLogPatch to be able to handle patches which
        don't start at line 1.
        Add unit tests for svn-apply to scm_unittest.py.

        * Scripts/VCSUtils.pm:
        * Scripts/modules/scm_unittest.py:

2009-11-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Need to implement ARIA role="combobox"
        https://bugs.webkit.org/show_bug.cgi?id=31096

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (showMenuCallback):
        (getIsExpandedCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::showMenu):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::showMenu):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isSelected):
        (AccessibilityUIElement::isExpanded):
        (AccessibilityUIElement::showMenu):

2009-11-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue is crashing when trying to reject patches after unknown failures
        https://bugs.webkit.org/show_bug.cgi?id=31091

        * Scripts/bugzilla-tool:
         - patch['id'] was a copy/paste mistake.  This code has no 'patch' variable
           so we have to find out what the current patch is by asking bugzilla again.
         - Discovered that this code was also leaking file descriptors, so fixed that.

2009-11-04  Adam Roben  <aroben@apple.com>

        Make run-webkit-tests work for the Debug_Internal Windows
        configuration

        In Debug_Internal, DumpRenderTree.exe and ImageDiff.exe have no _debug
        suffix.

        Fixes <http://webkit.org/b/31123>.

        Reviewed by Sam Weinig.

        * Scripts/run-webkit-tests: Don't add the _debug suffix in
        Debug_Internal, either.

2009-11-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        committers.py needs a way to store non-bugzilla email addresses
        https://bugs.webkit.org/show_bug.cgi?id=31037

        Make Committer and Reviewer constructors take a single email or a list of emails.
        Change committer_by_bugzilla_email functions to committer_by_email to support lookup by any email.
        Expose reviewers(), used by validate-committer-lists on bug 30970.

        * Scripts/modules/committers.py:
        * Scripts/modules/committers_unittest.py: Added tests for the new code.

2009-11-03  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by David Levin.

        Start/Stop Web Socket and Web Socket Secure servers for layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=27491

        The test path determination logic is changed to handle websocket and websocket/ssl cases.
        The logic for non-http (and now also non-websocket) tests is moved toward the end of the if-elsif statement.

        Functions to start or stop Web Socket servers are added.

        * Scripts/run-webkit-tests:

2009-11-03  Eric Seidel  <eric@webkit.org>

        No review, just changing wording of log message.

        Change log string to say "failed" instead of "rejected"
        when a commit fails due to an out of date checkout.
        This makes grepping the commit-queue log for rejected patches easier.

        * Scripts/bugzilla-tool:

2009-11-03  Eric Seidel  <eric@webkit.org>

        No review, adding commonly known committers missing from the file.

        * Scripts/modules/committers.py: Add committers found by looking at SVN records.

2009-11-03  Eric Seidel  <eric@webkit.org>

        No review, just sort-order cleanup.

        * Scripts/modules/committers.py: Sort committers/reviewers alphabetically.

2009-11-03  Stephen White  <senorblanco@chromium.org>

        (Unreviewed).

        Add myself to committers.py.

        * Scripts/modules/committers.py:

2009-11-03  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollviier.

        Add packaging scripts for Debian-based Linux distros.
        
        https://bugs.webkit.org/show_bug.cgi?id=31075

        * wx/packaging/build-debian-installer.py: Added.
        * wx/packaging/debian: Added.

2009-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson and Beth Dakin.

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

        Added an 'ondestroy' parameter to the test plug-in. When the plug-in is
        destroyed, it executes the value of the 'ondestroy' parameter as a
        script.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginAllocate): Initialize onDestroy.
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Define
        onDestroy.
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New): Set onDestroy to the value of the 'ondestroy' parameter, if
        specified.
        (NPP_Destroy): Execute the value of 'ondestroy' as a script.

2009-11-02  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=31035
        [GTK] some accessibility tests hitting assertion in debug builds

        Get the correct Gtk+ object before attempting to turn it into an AtkObject.

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

2009-11-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Support ARIA "tab" roles
        https://bugs.webkit.org/show_bug.cgi?id=30842

        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:

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

        Reviewed by David Levin.

        buildbots should use --exit-after-N-failures
        https://bugs.webkit.org/show_bug.cgi?id=30809

        Make the bots exit after 20 failures to prevent never-ending
        test runs where every test spends a minute crashing.

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

2009-11-01  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Turn on warnings for QtWebKit for gcc
        https://bugs.webkit.org/show_bug.cgi?id=30958

        * DumpRenderTree/qt/main.cpp: 
        (crashHandler): Mark function NO_RETURN

2009-11-01  Jessie Berlin  <jberlin@webkit.org>

        Adding myself to the committers list.

        * Scripts/modules/committers.py:

2009-10-30  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix an issue that Adam noticed in DRT.

        Reviewed by Darin Adler.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::role):
        Get the length of the role text, and create a buffer dynamically.

2009-10-30  Eric Seidel  <eric@webkit.org>

        No review, rolling out r50105.
        http://trac.webkit.org/changeset/50105

        This commit was causing:
        https://bugs.webkit.org/show_bug.cgi?id=30869
        We'll re-implement the feature a different way.

        * Scripts/bugzilla-tool:

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Test for MSAA: Accessibility of headings is not correct

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

        Reviewed by Adam Roben.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::role):
        Allow the role returned to be a BSTR.
        (AccessibilityUIElement::description):
        Fix a copy/paste error.

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Test for MSAA: Accessibility of links is wrong

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

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getAccessibilityValueCallback):
        Return the accessibility value.
        (AccessibilityUIElement::getJSClass):
        Added "accessibilityValue" value.

        * DumpRenderTree/AccessibilityUIElement.h:

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::accessibilityValue):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::accessibilityValue):
        Stubbed.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::accessibilityValue):
        Get the object's value, and return it as a JS string.

2009-10-30  Kevin Ollivier  <kevino@theolliviers.com>

        Fix typo in command name used by wx build system.

        * wx/build/build_utils.py:

2009-10-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Patch v1 is a dumb default name for patches
        https://bugs.webkit.org/show_bug.cgi?id=30952

        Let's use "Patch" instead.

        * Scripts/bugzilla-tool:

2009-10-30  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Unreviewed trivial buildfix.

        [Qt] Buildfix for r50333.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2009-10-30  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] Remove qt/WorkQueue.cpp|h in favor of platform independent WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=30953

        DumpRenderTree/WorkQueue and DumpRenderTree/qt/WorkQueue share mostly the
        same implementation. Some Q_ASSERTs differ from ASSERTs basically. Patch
        makes qt DRT to share this implementation (as gtk and mac ports do).

        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/WorkQueue.cpp: Removed.
        * DumpRenderTree/qt/WorkQueue.h: Removed.

2009-10-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed potential buildbot fix.

        Second try: Reset page history before running each test.

        Apparently the QWebHistory::clear() keeps the current page
        in history which is not what we want, so we not additionally
        sets the history capacity to 0 (forces removing everything)
        and then sets it back to its original value.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2009-10-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed potential buildbot fix.

        Reset page history before running each test.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        No new tests (no functional change).

        * Scripts/build-webkit:

2009-10-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Fix “Undefined subroutine” errors in svn-*apply by moving the removeEOL subroutine
        from the two scripts that define it but don’t use it to the script that uses it but doesn’t
        define it.

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

2009-10-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Use the GTK+ main loop instead of rolling our own mini-version of
        it.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dump):
        (runTest):
        (webViewLoadFinished):

2009-10-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Oliver Hunt.

        Implement the Qt version of DRT dumpBackForwardList().

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::dumpHistoryItem):
        (WebCore::DumpRenderTree::dumpBackForwardList):

2009-10-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Roben.

        Implement DRT functionality for Qt introduced in
        r28690 and r28705.

        - Implemented pathToLocalResource which exposes the functionality of
        converting a given unix path to the correct location on Windows.
        - Implemented a way to remove machine-dependent information from paths
        in layout test results.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::urlSuitableForTestResult):
        (WebCore::WebPage::javaScriptConsoleMessage):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::pathToLocalResource):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2009-10-28  Roland Steiner  <rolandsteiner@chromium.org>

        Adding myself to the committers list.

        * Scripts/modules/committers.py:

2009-10-28  Chris Fleizach  <cfleizach@apple.com>

        Adding myself to the committers list.

        * Scripts/modules/committers.py:

2009-10-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        [GTK] API to start inspector for a WebView
        https://bugs.webkit.org/show_bug.cgi?id=22551

        Use the new inspector API to implement the LayoutTestController
        interfaces used to test the inspector.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorInspectWebView):
        (createWebView):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):

2009-10-28  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Qt] WebFrame::counterValueForElementById must not be exposed
        https://bugs.webkit.org/show_bug.cgi?id=30882

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::counterValueForElementById):

2009-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Oliver Hunt.

        Fix the warning:

        "warning: ignoring return value of 'char* getcwd(char*, size_t)',
        declared with attribute warn_unused_result".

        by actually checking the result. In the case it is null, an
        error has occoured, so treat it as the other fatal errors.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::initializeFonts):

2009-10-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get counter values with layoutTestContoller
        https://bugs.webkit.org/show_bug.cgi?id=30555

        Define layoutTestContoller.counterValueForElementById.

        * DumpRenderTree/LayoutTestController.cpp:
        (counterValueForElementByIdCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::counterValueForElementById):

2009-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Oliver Hunt.

        Change two methods to be internal for DRT use only.

        Part of [Qt] Review all new API in Qt 4.6
        https://bugs.webkit.org/show_bug.cgi?id=29843#c11

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::whiteListAccessFromOrigin):

2009-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION: svn-apply exits(1) when applying a patch with a file add
        https://bugs.webkit.org/show_bug.cgi?id=30826

        * Scripts/svn-apply:
         - Add () around all system() calls.
         - Use the correct system() == 0 or die instead of system() or die
         - Add descriptive messages to all die statements.

2009-10-27  Steve Block  <steveblock@google.com>

        Reviewed by NOBODY.

        Adds steveblock@google.com to list of committers.

        * Scripts/modules/committers.py: Adds steveblock@google.com to list of committers.

2009-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        svn-apply can exit(0) even on patch failure
        https://bugs.webkit.org/show_bug.cgi?id=29622

        * Scripts/svn-apply:
         - Add a bunch of "or die" statements, hopefully catching all
           possible cases where failure could still exit(0).

2009-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        svn-* scripts should share code through VCSUtils.pm
        https://bugs.webkit.org/show_bug.cgi?id=30791

        Just moving code into a shared location.

        * Scripts/VCSUtils.pm:
        * Scripts/prepare-ChangeLog:
        * Scripts/resolve-ChangeLogs:
        * Scripts/svn-apply:
        * Scripts/svn-create-patch:
        * Scripts/svn-unapply:
        * Scripts/update-webkit:

2009-10-27  Vadim Zeitlin  <vadim@wxwidgets.org>

        Suppress a huge number of MSVC warnings when building wxWebKit.

        * wx/build/settings.py:

2009-10-26  Eric Seidel  <eric@webkit.org>

        No review, just adding Mike Belshe to the committers list.

        * Scripts/modules/committers.py:

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Make .rc files compile on Windows without depending on MFC headers
        https://bugs.webkit.org/show_bug.cgi?id=30750

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc: Use
        windows.h instead of afxres.h because it exists even when MFC is not 
        installed, and is all that's needed here.

        * FindSafari/FindSafari.rc: Ditto

2009-10-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool post-diff should know how to mark commit-queue=?
        https://bugs.webkit.org/show_bug.cgi?id=29202

        * Scripts/bugzilla-tool:
         - Add --commit-queue option to post-diff, post-commits and create-bug.
        * Scripts/modules/bugzilla.py:
         - Added support for --commit-queue to add_patch_to_bug and create_bug_with_patch.
         - Added _fill_attachment_form to share code between add_patch_to_bug and create_bug_with_patch.

2009-10-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool commit-queue does not notice modifications to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=30084

        * Scripts/bugzilla-tool:
         - Make commit-queue re-exec itself instead of using while(1).
         - Add a --is-relaunch parameter to commit-queue to bypass initialization on re-launch.
         - Add a _next_patch() method which calls exec() (and could eventually call update-webkit too).

2009-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue will get stuck on patches if land-patches terminates unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=30634

        * Scripts/bugzilla-tool:
         - Add a way for land-patches to exit(2) to indicate an error, but one it has handled.
         - Make commit-queue auto cq- any patch where land-patches exited anything other than '0' or '2'.

2009-10-26  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Upgrade pywebsocket to 0.4.1. This will make reusing LayoutTests/fast/js/resources easier, for example.

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

        * pywebsocket/mod_pywebsocket/__init__.py:
        * pywebsocket/mod_pywebsocket/dispatch.py:
        * pywebsocket/mod_pywebsocket/headerparserhandler.py:
        * pywebsocket/mod_pywebsocket/standalone.py:
        * pywebsocket/setup.py:
        * pywebsocket/test/test_dispatch.py:

2009-10-26  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Levin.

        REGRESSION: 2 failures in run-webkit-unittests
        https://bugs.webkit.org/show_bug.cgi?id=30645

        * Scripts/modules/cpp_style_unittest.py:
        Fixed a few test scenarios which apparently lost some spaces from 
        text literals.

2009-10-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Make sure isQt() doesn't return true if --wx was passed to build-webkit.

        * Scripts/webkitdirs.pm:

2009-10-26  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Unification of using null device in perl scripts.
        https://bugs.webkit.org/show_bug.cgi?id=30572

        * Scripts/VCSUtils.pm:
        * Scripts/bisect-builds:
        * Scripts/resolve-ChangeLogs:
        * Scripts/run-iexploder-tests:
        * Scripts/run-jsc:
        * Scripts/run-mangleme-tests:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:
        Using File::Spec->devnull() instead of hard coded /dev/null.

2009-10-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Holger Freyther.

        Reviewers are missing from committers.py
        https://bugs.webkit.org/show_bug.cgi?id=30733

        * Scripts/modules/committers.py:

2009-10-23  Eric Seidel  <eric@webkit.org>

        No review, only adding Alice to the list of reviewers.

        * Scripts/modules/committers.py:

2009-10-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Eric Carlson.

        fast/media/mq-transform-02.html failed on Leopard Commit Bot
        https://bugs.webkit.org/show_bug.cgi?id=30700

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Update QuickTime version check.

2009-10-23  Kevin Ollivier  <kevino@theolliviers.com>

        wxMac 10.4 build fix, needs to link against WebKitSystemInterfaceTiger to get 
        character measurement APIs that are private on Tiger.

        * wx/build/settings.py:

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).
        Build fix following bug #30696.

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

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30696
        Enable isolated-worlds tests on mac.

        Add private interface for DRT to invoke execution in a given world.

        * DumpRenderTree/LayoutTestController.cpp:
        (evaluateScriptInIsolatedWorldCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::evaluateScriptInIsolatedWorld):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::evaluateScriptInIsolatedWorld):

2009-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool's "patch failed to download an apply" error should give more information
        https://bugs.webkit.org/show_bug.cgi?id=30632

        * Scripts/modules/scm.py:
         - Use the common run_command method instead of custom POpen code.
         - Make run_command know how to take pipes as input.
        * Scripts/modules/scm_unittest.py:
         - Add new tests to cover change.
         - Also move test_error_handlers into new SCMClassTests so we don't run it 3 times.

2009-10-21  Kent Tamura  <tkent@chromium.org>

        Unreviewed.  Adding myself to the committers list.

        * Scripts/modules/committers.py:

2009-10-21  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Update the Windows installer builder to work with Vista / Win 7 and with git.
        
        https://bugs.webkit.org/show_bug.cgi?id=30649

        * wx/build/build_utils.py:
        * wx/packaging/build-mac-installer.py:
        * wx/packaging/build-win-installer.py:
        * wx/packaging/wxWebKitInstaller.iss.in:

2009-10-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Added conditional code to avoid using
        gdk_window_get_root_coords if we do not have a gtk+ release newer
        than 2.17.3.
        https://bugs.webkit.org/show_bug.cgi?id=30636

        * WebKitTools/DumpRenderTree/gtk/EventSender.cpp:

2009-10-21  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Added dummy implementation for keepWebHistory()
        https://bugs.webkit.org/show_bug.cgi?id=30592

        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::keepWebHistory):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2009-10-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fixed the double click condition, it is not double click if
        we move in just in one direction.
        https://bugs.webkit.org/show_bug.cgi?id=30636

        * WebKitTools/DumpRenderTree/gtk/EventSender.cpp:

2009-10-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Initialize the events completly before emitting them.
        https://bugs.webkit.org/show_bug.cgi?id=30633

        * WebKitTools/DumpRenderTree/gtk/EventSender.cpp:

2009-10-21  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Fix for when linking using --as-needed with gcc.

        * wx/browser/wscript:

2009-10-21  Kevin Ollivier  <kevino@theolliviers.com>

        wxMac 10.4 build fix. Build and link against a version of libcurl new enough
        to support all the features used by CURL backend.
        
        * wx/build/settings.py:
        * wx/install-unix-extras:

2009-10-20  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Add {ager,antonm,yurys}@chromium.org into committers.py
        https://bugs.webkit.org/show_bug.cgi?id=30560

        * Scripts/modules/committers.py:

2009-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make the Netscape Test plugin available to the Qt launcher.

        * Scripts/run-launcher:

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Removed WebSocket runtime settings.
        https://bugs.webkit.org/show_bug.cgi?id=29896

        WebSocket runtime configuration is supported by chromium/v8 only.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add testFail() to test plugin so we can test our handling of a
        plugin invoke call returning false.

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

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Add testFail().
        (pluginInvoke):
        (testIdentifierToString): Always return true, since returning false will now cause an exception to be thrown.

2009-10-19  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        Enable DOM pasting when running layout tests.

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

2009-10-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Use the setPreferredContentsSize method instead
        of setFixedContentsSize, as the method has been renamed.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setFixedContentsSize):

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30456
        Fixes for new Debug_All Windows build configuration.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (sharedCFURLCache): Use new DEBUG_ALL preprocessor define for library naming.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Remove unused DEBUG_WEBKIT_HAS_SUFFIX.

2009-10-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue status bot should list which buildbot is blocking the queue
        https://bugs.webkit.org/show_bug.cgi?id=30452

        Add new methods and testing.

        * Scripts/bugzilla-tool:
        * Scripts/modules/buildbot.py:
        * Scripts/modules/buildbot_unittest.py:

2009-10-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        run-webkit-tests fails when CWD is not inside a WebKit checkout
        https://bugs.webkit.org/show_bug.cgi?id=30451

        * Scripts/modules/scm.py: in_working_directory shouldn't throw exceptions on failure.
        * Scripts/modules/scm_unittest.py:
          - Remove use of original_path (we don't need to restore the CWD).
          - Don't use '.' to find the webkit checkout, use __file__ instead.

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add a Debug_All configuration to build entire stack as debug.
        Change Debug_Internal to:
        - stop using _debug suffix for all WebKit/Safari binaries
        - not use _debug as a DLL naming suffix
        - use non-debug C runtime lib.

        * DumpRenderTree/DumpRenderTree.sln: Add Debug_All configuration.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Add Debug_All configuration.
        * DumpRenderTree/win/ImageDiff.vcproj: Add Debug_All configuration.
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        Add missing debug.vsprops inherited property sheet.
        Add Debug_All configuration.
        * FindSafari/FindSafari.vcproj: Renamed single configuration from "Release" to "all".
        * WinLauncher/WinLauncher.vcproj:
        Removed extraneous definitions inherited from vsprops.
        Add Debug_All configuration.

2009-10-16  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Levin.

        check-webkit-style is wrong about indent checking in namespaces
        in header files and a few other things
        https://bugs.webkit.org/show_bug.cgi?id=30362

        The few other things include:
        + check-webkit-style does not require spaces around the equal sign
          inside 'if' statements and around binary operators that take 
          numeric literals.
        + check-webkit-style reports false errors for the / operator
          when part of a filename in the #include directive.

        * Scripts/modules/cpp_style.py:
        Improved indentation checking and space checking around
        binary operators. While the checks are still not perfect,
        they are clearly better than before.
        * Scripts/modules/cpp_style_unittest.py:
        Added test cases for the newly supported checks and modified old
        test cases to match the new guidelines

2009-10-16  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix. Link to MSW library needed by PluginPackageWin.cpp.

        * wx/build/settings.py:

2009-10-15  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by David Levin.

        Add mod_pywebsocket to test Web Sockets.
        http://code.google.com/p/pywebsocket/
        https://bugs.webkit.org/show_bug.cgi?id=27490

        * pywebsocket/COPYING: Added.
        * pywebsocket/MANIFEST.in: Added.
        * pywebsocket/README: Added.
        * pywebsocket/example/echo_client.py: Added.
        * pywebsocket/example/echo_wsh.py: Added.
        * pywebsocket/mod_pywebsocket/__init__.py: Added.
        * pywebsocket/mod_pywebsocket/dispatch.py: Added.
        * pywebsocket/mod_pywebsocket/handshake.py: Added.
        * pywebsocket/mod_pywebsocket/headerparserhandler.py: Added.
        * pywebsocket/mod_pywebsocket/msgutil.py: Added.
        * pywebsocket/mod_pywebsocket/standalone.py: Added.
        * pywebsocket/mod_pywebsocket/util.py: Added.
        * pywebsocket/setup.py: Added.
        * pywebsocket/test/config.py: Added.
        * pywebsocket/test/mock.py: Added.
        * pywebsocket/test/run_all.py: Added.
        * pywebsocket/test/test_dispatch.py: Added.
        * pywebsocket/test/test_handshake.py: Added.
        * pywebsocket/test/test_mock.py: Added.
        * pywebsocket/test/test_msgutil.py: Added.
        * pywebsocket/test/test_util.py: Added.
        * pywebsocket/test/testdata/handlers/blank_wsh.py: Added.
        * pywebsocket/test/testdata/handlers/origin_check_wsh.py: Added.
        * pywebsocket/test/testdata/handlers/sub/exception_in_transfer_wsh.py: Added.
        * pywebsocket/test/testdata/handlers/sub/no_wsh_at_the_end.py: Added.
        * pywebsocket/test/testdata/handlers/sub/non_callable_wsh.py: Added.
        * pywebsocket/test/testdata/handlers/sub/plain_wsh.py: Added.
        * pywebsocket/test/testdata/handlers/sub/wrong_handshake_sig_wsh.py: Added.
        * pywebsocket/test/testdata/handlers/sub/wrong_transfer_sig_wsh.py: Added.

2009-10-15  James Robinson  <jamesr@google.com>

        Reviewed by David Levin.

        Updates check-webkit-style to reflect that code inside a namespace should not be indented, even in a header file.

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

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-10-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fixes <http://webkit.org/b/30411>.
        REGRESSION(49485): pdevenv doesn't compile in parallel for non-chromium builds on Windows.
        
        Added a check for isChromium() in pdevenv, and pass /useenv if we are not
        building Chromium.

        * Scripts/pdevenv:

2009-10-15  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Add Mac package building scripts for wx.
        
        https://bugs.webkit.org/show_bug.cgi?id=30405

        * wx/build/build_utils.py:
        * wx/build/settings.py:
        * wx/packaging/build-mac-installer.py: Added.

2009-10-15  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        Enable Web Sockets support when running layout tests.

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

2009-10-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Need to initialize event.button.button, since in most cases a
        button number is not passed as an argument.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseDownCallback):
        (mouseUpCallback):

2009-10-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. More SDK fixes for Mac, make sure we use the SDK corresponding to
        the OS if none was explicitly set.

        * wx/build/settings.py:

2009-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: enable developers extras within inspector layout tests.

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

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):

2009-10-14  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Jan Alonzo.

        GtkLauncher is using a deprecated signal
        https://bugs.webkit.org/show_bug.cgi?id=30364

        Modified GtkLauncher to use notify::title signal instead of
        deprecated title-changed signal

        * GtkLauncher/main.c:
        (notify_title_cb):
        (create_browser):

2009-10-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Don't set the history delegate on new windows that are opened during a test, as the history delegate:
        1 - Disables WebHistory
        2 - Doesn't make sense in that context anyway.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):

2009-10-14  Kevin Ollivier  <kevino@theolliviers.com>

        wxMac build fix. Ensure 10.4 compatibility for deps, and allow the user to specify
        the SDK to use since Python overrides any user-set value of MACOSX_DEPLOYMENT_TARGET.

        * wx/build/settings.py:
        * wx/install-unix-extras:

2009-10-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        WebKit Win API should provide a delegate interface for global history.
        https://bugs.webkit.org/show_bug.cgi?id=29905

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpHistoryDelegateCallbacks):
        (LayoutTestController::setDumpHistoryDelegateCallbacks):
                
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (shouldLogHistoryDelegates):
        (runTest):
        (createWebViewAndOffscreenWindow):
        (main):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        
        Add the IWebHistoryDelegate to DRT Windows:
        * DumpRenderTree/win/HistoryDelegate.cpp: Added.
        (wstringFromBSTR):
        (HistoryDelegate::HistoryDelegate):
        (HistoryDelegate::~HistoryDelegate):
        (HistoryDelegate::QueryInterface):
        (HistoryDelegate::AddRef):
        (HistoryDelegate::Release):
        (HistoryDelegate::didNavigateWithNavigationData):
        (HistoryDelegate::didPerformClientRedirectFromURL):
        (HistoryDelegate::didPerformServerRedirectFromURL):
        (HistoryDelegate::updateHistoryTitle):
        (HistoryDelegate::populateVisitedLinksForWebView):
        * DumpRenderTree/win/HistoryDelegate.h: Added.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::removeAllVisitedLinks):

2009-10-14  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement support for setPOSIXLocale on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=30268 
 
        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
        (LayoutTestController::setPOSIXLocale):
        * DumpRenderTree/qt/LayoutTestControllerQt.h:

2009-10-13  Stephanie Lewis  <slewis@apple.com>

        Unreviewed, adding myself to reviewers list.

        * Scripts/modules/committers.py:

2009-10-13  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        Fix null assignment so root tests work again.

        * Scripts/webkitdirs.pm:

2009-10-13  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Refactor LayoutTestController, EventSender, TextInputController and WorkQueueItem classes
        out of jsobjects into separate files to get a more structured DumpRenderTree implementation.
        This is done in preparation of implementing missing features in DRT.
        No functionality changes made yet.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/EventSenderQt.cpp: Added.
        (EventSender::EventSender):
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        (EventSender::mouseMoveTo):
        (EventSender::leapForward):
        (EventSender::keyDown):
        (EventSender::contextClick):
        (EventSender::scheduleAsynchronousClick):
        (EventSender::frameUnderMouse):
        * DumpRenderTree/qt/EventSenderQt.h: Added.
        (EventSender::clearKillRing):
        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added.
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::processWork):
        (LayoutTestController::maybeDump):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::windowCount):
        (LayoutTestController::clearBackForwardList):
        (LayoutTestController::dumpEditingCallbacks):
        (LayoutTestController::dumpResourceLoadCallbacks):
        (LayoutTestController::queueBackNavigation):
        (LayoutTestController::queueForwardNavigation):
        (LayoutTestController::queueLoad):
        (LayoutTestController::queueReload):
        (LayoutTestController::queueScript):
        (LayoutTestController::provisionalLoad):
        (LayoutTestController::timerEvent):
        (LayoutTestController::encodeHostName):
        (LayoutTestController::decodeHostName):
        (LayoutTestController::setJavaScriptProfilingEnabled):
        (LayoutTestController::setFixedContentsSize):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::numberOfActiveAnimations):
        (LayoutTestController::disableImageLoading):
        (LayoutTestController::dispatchPendingLoadRequests):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::whiteListAccessFromOrigin):
        (LayoutTestController::waitForPolicyDelegate):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/qt/LayoutTestControllerQt.h: Added.
        (LayoutTestController::isLoading):
        (LayoutTestController::setLoading):
        (LayoutTestController::shouldDumpAsText):
        (LayoutTestController::shouldDumpBackForwardList):
        (LayoutTestController::shouldDumpChildrenAsText):
        (LayoutTestController::shouldDumpDatabaseCallbacks):
        (LayoutTestController::shouldDumpStatusCallbacks):
        (LayoutTestController::shouldWaitUntilDone):
        (LayoutTestController::canOpenWindows):
        (LayoutTestController::shouldDumpTitleChanges):
        (LayoutTestController::waitForPolicy):
        (LayoutTestController::dumpAsText):
        (LayoutTestController::dumpChildFramesAsText):
        (LayoutTestController::dumpDatabaseCallbacks):
        (LayoutTestController::dumpStatusCallbacks):
        (LayoutTestController::setCanOpenWindows):
        (LayoutTestController::dumpBackForwardList):
        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
        (LayoutTestController::display):
        (LayoutTestController::dumpTitleChanges):
        (LayoutTestController::dumpSelectionRect):
        * DumpRenderTree/qt/TextInputControllerQt.cpp: Added.
        (TextInputController::TextInputController):
        (TextInputController::doCommand):
        * DumpRenderTree/qt/TextInputControllerQt.h: Added.
        * DumpRenderTree/qt/WorkQueue.cpp:
        * DumpRenderTree/qt/WorkQueue.h:
        * DumpRenderTree/qt/WorkQueueItem.h:
        * DumpRenderTree/qt/WorkQueueItemQt.cpp: Added.
        (findFrameNamed):
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        * DumpRenderTree/qt/jsobjects.cpp: Move all the above classes into separate files
        * DumpRenderTree/qt/jsobjects.h:

2009-10-13  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, adding myself to the list of reviewers.

        * Scripts/modules/committers.py:

2009-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6660507> Add "privacy mode" to Netscape Plug-in API

        Make the private browsing mode testable by the test plug-in.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginGetProperty):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_SetValue):

2009-10-13  Pavel Feldman  <pfeldman@chromium.org>

        No review, just adding self to the list of reviewers.

        * Scripts/modules/committers.py:

2009-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Adam Roben.

        Web Inspector: Use proper web view in inspector layout
        tests for windows.

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

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):

2009-10-12  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Sam Weinig.

        Enable experimentalWebSocket in DumpRenderTree for LayoutTest.
        https://bugs.webkit.org/show_bug.cgi?id=29841

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2009-10-12  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium Port - Windows
        https://bugs.webkit.org/show_bug.cgi?id=29969

        * Scripts/pdevenv: removed msvc's /useenv for chromium builds
        * Scripts/webkitdirs.pm:

2009-10-12  Csaba Osztrogonac  <ossy@webkit.org>

        Reviewed by Darin Adler.

        jsc scripts cleanup and Qt/GTK fix
        https://bugs.webkit.org/show_bug.cgi?id=30288

        Duplicated jscPath() moved to webkitdirs.pm.
        New jscProductDir() added to webkitdirs.pm instead of duplicated codes.
        Configuration added (release/debug) to path for Qt-port on Windows.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc:
        * Scripts/run-sunspider:
        * Scripts/sunspider-compare-results:
        * Scripts/webkitdirs.pm:

2009-10-11  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Add Collin to committers.py.

        * Scripts/modules/committers.py:

2009-10-11  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, add bindings to source/include dirs now that there are sources there.

        * wx/build/settings.py:

2009-10-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        Enable plug-in halting in DumpRenderTree.

        We drop the plug-in halting delay to 1 second and opt in the delegate method to never halt plug-ins.
        This is sufficient to ensure that the crash covered by <rdar://problem/7290671> no longer occurs.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:shouldHaltPlugin:]):

2009-10-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        Ask the History Delegate to populate the visited links hash.
        <rdar://problem/7285293> and https://webkit.org/b/29904

        Add the ability for LayoutTestController to clear all visited links.
        Also lets the History Delegate dump visited links, but only if this test specifically cleared them.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (removeAllVisitedLinksCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::removeAllVisitedLinks):

        * DumpRenderTree/mac/HistoryDelegate.mm:
        (-[HistoryDelegate populateVisitedLinksForWebView:]):

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::removeAllVisitedLinks):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::removeAllVisitedLinks):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::removeAllVisitedLinks):


2009-10-08  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=30175
        
        The Windows DRT equivalent of DoDragDrop (i.e. UIDelegate::doDragDrop) does not return
        the OLE drag-and-drop return value like the function it emulates. Currently, 
        UIDelegate::doDragDrop returns a hard-coded S_OK. Hence, the caller cannot determine 
        whether the drag-and-drop operation was successful or was cancelled.
        
        This patch fixes this issue by having UIDelegate::doDragDrop return the OLE drag-and-drop 
        return value according to whether the drop operation was successful or not.

        * DumpRenderTree/win/EventSender.cpp:
        (doMouseUp): Added parameter oleDragAndDropReturnValue.
        (replaySavedEvents): Ditto.
        * DumpRenderTree/win/EventSender.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop): Modified to return OLE drag-and-drop return value.

2009-10-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Added support for a parameter setting the button that was
        pressed in the mouseDown function.
        https://bugs.webkit.org/show_bug.cgi?id=30220

        * WebKitTools/DumpRenderTree/gtk/EventSender.cpp:

2009-10-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Added a line to the bottom of the expected result to match
        the output of the test.
        https://bugs.webkit.org/show_bug.cgi?id=30220

        * LayoutTests/platform/gtk/editing/pasteboard/middle-click-onpaste-
        expected.txt:

2009-10-08  Adam Roben  <aroben@apple.com>

        Use QueryInterface to get IWebInspectorPrivate

        Fixes <http://webkit.org/b/30215> Make IWebInspectorPrivate be
        accessed in a more standard way

        Reviewed by John Sullivan and Tim Hatcher.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::evaluateInWebInspector): Get the IWebInspector
        by calling IWebViewPrivate::inspector, then use QueryInterface to get
        to the IWebInspectorPrivate interface.

2009-10-07  Adam Roben  <aroben@apple.com>

        Implement DRT support for origin whitelisting

        Fixes <http://webkit.org/b/30185>.

        Reviewed by Eric Seidel.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting): Reset any origin
        whitelist, to match Mac DRT.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::whiteListAccessFromOrigin): Call through to
        IWebViewPrivate::whiteListAccessFromOrigin.

2009-10-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Send title changes to the global history delegate.
        <rdar://problem/7285293> and https://webkit.org/b/29904

        * DumpRenderTree/mac/HistoryDelegate.mm:
        (-[HistoryDelegate webView:updateHistoryTitle:forURL:]):

2009-10-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Remove some folks from committers.py who were listed on
        the WebKit Team wiki page but who weren't actually listed as commit+.
        At some point, we should coorelate this list with the committers
        mailing list.

        * Scripts/modules/committers.py:

2009-10-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Import a bunch of committers from the WebKit Team page on
        the wiki into committers.py.

        * Scripts/modules/committers.py:

2009-10-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Added Aaron Boodman to committers.py.

        * Scripts/modules/committers.py:

2009-10-07  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Add API to LayoutTestController for re/setting the system locale.
        https://bugs.webkit.org/show_bug.cgi?id=18994

        * DumpRenderTree/LayoutTestController.cpp:
        (setLocaleCallback):
        (LayoutTestController::staticFunctions):
        (LayoutTestController::setLocale):
        * DumpRenderTree/LayoutTestController.h:

2009-10-06  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Jan Alonzo.

        [Layout tests] [Gtk] Gtk DumpRenderTree should use WebKit test fonts
        https://bugs.webkit.org/show_bug.cgi?id=29689

        Build fix by adding -lfontconfig for DumpRenderTree.

        * GNUmakefile.am:

2009-10-07  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Re-enable use-remote-links-to-tests for Qt. Disabled in r46416.

        * Scripts/run-webkit-tests:

2009-10-07  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        "delete" in EventSender is the backspace key, not the delete one.

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

2009-10-07  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        getChildrenWithRange expects as last parameter the end index, not
        the length of the range. Correct this and clarify the variable
        names to reflect how the code works.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::getChildAtIndex):

2009-10-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Fraser.

        <http://webkit.org/b/30138> update-webkit-localizable-strings assumes that WebKitTools/Scripts is in the PATH

        * Scripts/update-webkit-localizable-strings: Use an explicit path to extract-localizable-strings based on the
        the fact we have already changed the working directory to the top of the open source tree.

2009-10-06  Julie Parent  <jparent@chromium.org>

        Unreviewed. Fixing the entry for myself in committers.py to use my bugzilla email,
        rather than my committer email.

        * Scripts/modules/committers.py:

2009-10-06  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] LayoutTestController: Reset m_dumpStatusCallbacks to false in reset().

        r49189 added support for the 'dumpStatusCallbacks' setting but didn't reset
        it after each layout test as it should do, making the DRT dump additional output
        for all of the subsequent layout tests.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):

2009-10-06  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement layoutTestController.dumpStatusCallbacks() and unskip the
        fast/dom/assign-to-window-status.html test, which is passing as a result.

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

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::statusBarMessage):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.h:
        (LayoutTestController::shouldDumpStatusCallbacks):
        (LayoutTestController::dumpStatusCallbacks):

2009-10-06  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] The implementation of EventSender::mouseUp() and EventSender::mouseDown()
        ignores the argument indicating which mouse button to trigger.
        https://bugs.webkit.org/show_bug.cgi?id=30048

        This affects the fast/events/mouse-click-events.html layout test.

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::mouseDown):
        (EventSender::mouseUp):
        * DumpRenderTree/qt/jsobjects.h:

2009-10-06  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the EventSender::keyDown() implementation
        https://bugs.webkit.org/show_bug.cgi?id=30043

        It should post both a key press event and a key release event,
        just like other ports do.

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

2009-10-05  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add jpeg to the list of libs to link against.

        * wx/build/settings.py:

2009-10-05  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] EventSender::keyDown() cannot send function-key events.
        https://bugs.webkit.org/show_bug.cgi?id=30044

        This affects the fast/events/keydown-function-keys.html layout test.

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

2009-10-05  Vadim Zeitlin  <vadim@wxwidgets.org>

        Added --wx-compiler-prefix waf option to allow building wxWebKit with
        wxWidgets built using "nmake COMPILER_PREFIX=something-non-default".

        * wx/build/settings.py:
        * wx/build/wxpresets.py:

2009-10-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add testing harness for Web Inspector.

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

        * DumpRenderTree/LayoutTestController.cpp:
        (showWebInspectorCallback):
        (closeWebInspectorCallback):
        (evaluateInWebInspectorCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::showWebInspector):
        (LayoutTestController::closeWebInspector):
        (LayoutTestController::evaluateInWebInspector):

2009-10-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariyha Hidayat.

        Pass arguments to system() as a string instead of array

        When passed as an array entries with a space fail to translate
        to two arguments to the child process, so instead of manually
        splitting all the entries in @buildArgs we pass the whole thing
        as a string instead.

        * Scripts/webkitdirs.pm:

2009-10-04  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Levin.

        check-webkit-style misses whitespace errors for operators:
        <<, >>, <<=, >>=, &=, |=, +=, -=, *=, /=, /, |, &&, ||.
        https://bugs.webkit.org/show_bug.cgi?id=30021

        * Scripts/modules/cpp_style.py:
        Added the operators mentioned above to the same list as == and !=.

2009-10-02  Julie Parent  <jparent@chromium.org>

        Unreviewed.

        Adding myself and Ojan Vafai as committers, because we are committers.

        * Scripts/modules/committers.py:

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        svn-create-patch should have an --ignore-changelogs to not add ChangeLogs to the diff,
        this will help the patch merging process when TryBots are used.

        * Scripts/svn-create-patch:

2009-10-02  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement layoutTestController.overridePreference().
        https://bugs.webkit.org/show_bug.cgi?id=29970

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::WebPage::resetSettings):
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setPrivateBrowsingEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        (LayoutTestController::overridePreference):
        * DumpRenderTree/qt/jsobjects.h:

2009-10-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Turn on ENABLE_3D_CANVAS in TOT
        https://bugs.webkit.org/show_bug.cgi?id=29906

        * Scripts/build-webkit:

2009-10-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        Enable HTTP tests for Qt

        * Scripts/run-webkit-tests:

2009-10-01  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        build-webkit --chromium now also works on cygwin.

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

        * Scripts/webkitdirs.pm:

2009-10-01  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Don't use TCmalloc in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=27029

        Add USE_SYSTEM_MALLOC macro to the DRT's profile to avoid using TCmalloc in Qt's DRT.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2009-10-01  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement eventSender.scheduleAsynchronousClick().

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

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::scheduleAsynchronousClick):
        * DumpRenderTree/qt/jsobjects.h:

2009-10-01  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement setPopupBlockingEnabled() in the LayoutTestController and remove
        fast/events/open-window-from-another-frame.html from the Skipped list.

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

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::setPopupBlockingEnabled):
        * DumpRenderTree/qt/jsobjects.h:

2009-09-30  Cameron McCormack  <cam@mcc.id.au>

        Unreviewed.

        Added myself to the list of committers.

        * Scripts/modules/committers.py:

2009-09-30  Eric Seidel  <eric@webkit.org>

        No review, just adding Geoff to the list of reviewers.

        * Scripts/modules/committers.py:

2009-09-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Added the WebKit Layout Tests fonts that are referenced in
        LayoutTests/platform/win/css2.1/resources/Mac-compatible-font-fallback.css

        * DumpRenderTree/fonts/WebKit Layout Tests 2.ttf: Added.
        * DumpRenderTree/fonts/WebKit Layout Tests.ttf: Added.

2009-09-30  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by David Kilzer.

        Make sunspider scripts work on Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=29656

        * Scripts/run-sunspider: Perl scripts invoked with same Perl interpreter.
        * Scripts/sunspider-compare-results: Perl scripts invoked with same Perl interpreter.
        * Scripts/webkitdirs.pm: currentPerlPath() added.

2009-09-29  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Dan Bernstein.

        Fix license and some sorting in new files.

        * DumpRenderTree/mac/HistoryDelegate.h:
        * DumpRenderTree/mac/HistoryDelegate.mm:

2009-09-29  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Kilzer.

        Fixed how error codes are handled.
        https://bugs.webkit.org/show_bug.cgi?id=29898

        * Scripts/update-webkit:
        * Scripts/update-webkit-chromium:

2009-09-29  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        Updated way-out-of-date sorting throughout the dump methods/flags.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpAsPDFCallback):
        (dumpAsTextCallback):
        (dumpFrameLoadCallbacksCallback):
        (dumpResourceLoadCallbacksCallback):
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpAsText):
        (LayoutTestController::setDumpAsText):
        (LayoutTestController::dumpFrameLoadCallbacks):
        (LayoutTestController::setDumpFrameLoadCallbacks):
        (LayoutTestController::dumpSelectionRect):
        (LayoutTestController::setDumpSelectionRect):
        (LayoutTestController::dumpSourceAsWebArchive):
        (LayoutTestController::setDumpSourceAsWebArchive):
        (LayoutTestController::dumpStatusCallbacks):
        (LayoutTestController::setDumpStatusCallbacks):
        (LayoutTestController::dumpTitleChanges):
        (LayoutTestController::setDumpTitleChanges):
        (LayoutTestController::dumpWillCacheResponse):
        (LayoutTestController::setDumpWillCacheResponse):

2009-09-29  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        WebKit Mac API should provide a delegate interface for global history.
        <rdar://problem/7042773> and https://webkit.org/b/29904

        Adding the dumping of global history delegate callbacks.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

        Automatically dump history delegate callbacks for tests with "globalhistory/" in their URL:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (allocateGlobalControllers):
        (shouldLogFrameLoadDelegates):
        (shouldLogHistoryDelegates):
        (runTest):

        Dump history delegate callbacks:
        * DumpRenderTree/mac/HistoryDelegate.h: Added.
        * DumpRenderTree/mac/HistoryDelegate.mm: Added.
        (-[HistoryDelegate webView:didNavigateWithNavigationData:inFrame:]):
        (-[HistoryDelegate webView:didPerformClientRedirectFromURL:toURL:inFrame:]):
        (-[HistoryDelegate webView:didPerformServerRedirectFromURL:toURL:inFrame:]):

2009-09-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28902
        
        Fixes an issue where the drop effect returned by Window Dump Render Tree 
        was always DROPEFFECT_NONE (since it was hard coded to do so).
        
        This patch corrects this issue by determining the actual drop effect 
        performed by the corresponding drag-and-drop operation so that we can 
        return it.

        * DumpRenderTree/win/DraggingInfo.h: Added field m_dropEffect to store performed drop effect.
        (DraggingInfo::DraggingInfo):
        (DraggingInfo::performedDropEffect): Added method.
        (DraggingInfo::setPerformedDropEffect): Added method.
        * DumpRenderTree/win/EventSender.cpp:
        (doMouseUp): Calls method DraggingInfo::setPerformedDropEffect with performed drop effect.
        Moved delete draggingInfo to UIDelegate::doDragDrop.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::doDragDrop): Sets performedDropEffect to DraggingInfo::performedDropEffect().

2009-09-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Remove copying of unnecessary or nonexistent files from the ImageDiff
        post-build event.

        * DumpRenderTree/win/ImageDiff.vcproj:

2009-09-29  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by David Kilzer.

        [Qt] Make build-webkit script work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=29802

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:
         - Removed unnecessary -p switch for mkdir on Windows.
         - Use canonical path, which uses slashes or backslashes depends on platform.
         - isWindows() only test for Windows and not for Cyqwin.

2009-09-29  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fix time measurement in build-webkit after refactoring done in r48853.

        * Scripts/build-webkit:

2009-09-29  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Default font size reconciliation to 16px/13px to match other platform's de-facto standard.
        This fixes https://bugs.webkit.org/show_bug.cgi?id=19674.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):

2009-09-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement eventSender.contextClick().
        https://bugs.webkit.org/show_bug.cgi?id=29821

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::contextClick):
        * DumpRenderTree/qt/jsobjects.h:

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add experimentalWebSocketsEnabled in WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=28941

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2009-09-28  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Kilzer.

        Integrated chromium port building into webkit tools update-webkit and
        build-webkit.

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

        * Scripts/build-webkit: When --chromium is specified, will build
          the chromium port (currently only Mac is supported).
        * Scripts/update-webkit: When --chromium is specified, delegates to
          update-webkit-chromium.
        * Scripts/webkitdirs.pm: Added chromium specific defs.
        * Scripts/update-webkit-chromium: Uses gclient and gyp to fetch
          chromium port's dependencies and update its project files.

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-09-27  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Darin Adler.

        run-webkit-tests: Do not strip the metrics when there is no expected result for a test.
        https://bugs.webkit.org/show_bug.cgi?id=29771

        * Scripts/run-webkit-tests:

2009-09-27  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement layoutTestController.waitForPolicyDelegate.
        https://bugs.webkit.org/show_bug.cgi?id=25037

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::acceptNavigationRequest):
        * DumpRenderTree/qt/DumpRenderTree.pro:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::notifyDone):
        (LayoutTestController::waitForPolicyDelegate):
        * DumpRenderTree/qt/jsobjects.h:
        (LayoutTestController::waitForPolicy):

2009-09-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29764> mark-bug-fixed: add -o|--open switch

        Reviewed by Eric Seidel.

        The -o|--open switch uses the open(1) command on Mac OS X to
        open the bug URL in the default web browser.  If there are
        similar mechanisms on other platforms, they may be added later.

        * Scripts/mark-bug-fixed:
        (MarkBugFixed.__init__): Added -o|--open switch to list of parse
        options.
        (MarkBugFixed._determine_bug_id_and_svn_revision): Moved logging
        code into main() and extracted prompting code into
        _prompt_user_for_correctness().
        (MarkBugFixed._open_bug_in_web_browser): Added.
        (MarkBugFixed._prompt_user_for_correctness): Added.
        (MarkBugFixed.main): Added logging code from
        _determine_bug_id_and_svn_revision().  Added code to call
        _open_bug_in_web_browser() if the switch is set.  Added code to
        call _prompt_user_for_correctness() when needed.
        * Scripts/modules/bugzilla.py:
        (Bugzilla.short_bug_url_for_bug_id): Added.

2009-09-26  David Kilzer  <ddkilzer@apple.com>

        svn-unapply and svn-apply don't work when used outside multiple svn working directories

        <http://webkit.org/b/29744>
        <rdar://problem/7252905>

        Reviewed by Eric Seidel.

        Some users have a workflow where svn-create-patch, svn-apply and
        svn-unapply are used outside of multiple svn working
        directories.  Instead of aborting the scripts in these cases,
        print a warning and assume that Subversion is being used.

        * Scripts/VCSUtils.pm:
        (determineVCSRoot): Call warn() instead of die() if both isGit()
        and isSVN() initially return false.  Set $VCSUtils::isSVN to 1
        to enforce the assumption about Subversion, then return
        determineSVNRoot().
        * Scripts/svn-apply: Switch to using isGit() and isSVN() from
        VCSUtils.pm.  They both already cache their values and checking
        here is redundant since determineVCSRoot() is called later.

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

        Reviewed by Gustavo Noronha.

        [Layout tests] [Gtk] Gtk DumpRenderTree should use WebKit test fonts
        https://bugs.webkit.org/show_bug.cgi?id=29689

        Load test fonts through FontConfig before each test.
        This ensures a more proper rendering of the tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (initializeFonts):
        (runTest):
        (main):
        * DumpRenderTree/gtk/fonts.conf: Copied from WebKitTools/DumpRenderTree/qt/fonts.conf.
        * GNUmakefile.am:

2009-09-25  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29718> mark-bug-fixed: add -u|--update-only switch

        Reviewed by Eric Seidel.

        * Scripts/mark-bug-fixed:
        (MarkBugFixed.__init__): Added -u|--update-only switch to list
        of parse options.
        (MarkBugFixed.main): When -u|--update-only is specified, add a
        comment to the bug without marking it Resolved/Fixed.

2009-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        * Scripts/prepare-ChangeLog: Leave files from the script-tests directory
        out, just as we do for the resources directory.

2009-09-25  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Added Tony to committers.py because he's a
        committer now.

        * Scripts/modules/committers.py:

2009-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION: media/video-pause-empty-events.html is occasionally timing out on bots
        https://bugs.webkit.org/show_bug.cgi?id=28624

        Disable hardware compositing on Leopard for versions of QuickTime 7.6.4 and older.

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

2009-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should auto-retry patches which fail to commit due to out of date files
        https://bugs.webkit.org/show_bug.cgi?id=28316

        * Scripts/bugzilla-tool:
         - Handle new CheckoutNeedsUpdate exception.
        * Scripts/modules/logging_unittest.py:
         - Call the ScriptError constructor correctly (this test had regressed).
        * Scripts/modules/scm.py:
         - Added the ability to define custom error handlers for run_command
           and added a commit_error_handler which throws CheckoutNeedsUpdate
           instead of ScriptError.
         - Re-ordered ScriptError constructor arguments to make ScriptError("message text") usage possible.
        * Scripts/modules/scm_unittest.py:
         - Added tests of new error handlers.

2009-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue should give better feedback when failing a patch
        https://bugs.webkit.org/show_bug.cgi?id=29316

        * Scripts/bugzilla-tool:
         - Update ScriptError uses to the new constructor format.
         - Move CommitQueue._run_command to WebKitLandingScripts.run_command_with_teed_output
           so that we can print to both stdout as well as an output buffer for error reporting.
         - Update run_and_throw_if_fail to use teed output so that it can report the "output" as part of ScriptError.
         - Use e.message_with_output() when failing a patch (this is the real fix here).
           I also removed use of "This patch will require manual commit." as that's not always true.
         - Add missing word "bug" from log message.
        * Scripts/modules/scm.py:
         - Make ScriptError save a bunch more data so that error messages can be nicer.
         - Update ScriptError callers.

2009-09-24  John Gregg  <johnnyg@google.com>

        Reviewed by Eric Seidel.

        Enable switch for notifications (experimental) in Page Settings
        https://bugs.webkit.org/show_bug.cgi?id=28930

        Now that desktop notifications are controlled by run-time switch,
        set that switch to true for DumpRenderTree.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface):

2009-09-24  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. SnowLeopard fixes for Mac dependencies.

        * wx/build/build_utils.py:
        * wx/build/settings.py:
        * wx/install-unix-extras:

2009-09-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Oliver Hunt.

        Add support for DRT to send mouse wheel events.

        https://bugs.webkit.org/show_bug.cgi?id=29348
        [Gtk] Scrollwheel on horizontal scrollbars should slide horizontally

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseWheelToCallback):

2009-09-17  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        commit-queue needs web-based status reporting
        https://bugs.webkit.org/show_bug.cgi?id=29307

        Add a first-pass web-based status for the commit-queue.
        The bot is currently reachable at:
        http://webkit-commit-queue.appspot.com/

        * CommitQueueStatus/app.yaml: Added.
         - Application description file required by App Engine.
        * CommitQueueStatus/filters/__init__.py: Added.
         - Required by python to treat 'filters' as a module.
        * CommitQueueStatus/filters/webkit_extras.py: Added.
         - Support for turning 'bug 123' and 'patch 123' into links.
           This lets us use plain text strings in our logs yet display nice HTML (help prevent XSS attacks on the page).
        * CommitQueueStatus/index.html: Added.
        * CommitQueueStatus/index.yaml: Added.
         - Some auto-generated file from app engine.
        * CommitQueueStatus/queue_status.py: Added.
         - The core logic of this bot.  We could eventually split this file out into pieces.
        * CommitQueueStatus/stylesheets/main.css: Added.
         - Some basic lame-o CSS to make the page look less awful.
        * CommitQueueStatus/update_status.html: Added.
         - The form that the commit-queue (or a human) can use to update the status.
        * Scripts/bugzilla-tool:
         - Add some very basic update_status calls.
        * Scripts/modules/statusbot.py: Added.
         - Knows how to post to the CommitQueueStatus web application.

2009-09-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29712> mark-bug-fixed: add -m|--comment switch

        Reviewed by Adam Roben.

        * Scripts/mark-bug-fixed:
        (MarkBugFixed.__init__): Added -m|--comment switch to list of
        parse options.
        (MarkBugFixed.main): When specified, prepend comment from
        -m|--comment command-line switch to the bug comment.

2009-09-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        [GTK] DRT must display window instead of just realizing, to enable synthesizing events correctly
        https://bugs.webkit.org/show_bug.cgi?id=29693

        Show the window, to be able to synthesize events correctly.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        (main):

2009-09-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY(rollout)

        Roll out r48712 as it is incorrect.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):

2009-09-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=29005
        The indices of RuntimeArray should be enumerated like for a regular array.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController arrayOfString]):

2009-09-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28910> Move bugzilla-tool mark-fixed to standalone mark-bug-fixed tool

        Reviewed by Darin Adler.

        Also fixed a bug where specifying a revision on the command-line
        as 'r12345' would fail.  See <http://webkit.org/b/29699>.

        * Scripts/bugzilla-tool: Updated module import statements.
        (parse_bug_id): Removed.  Moved to bugzilla.py.
        (bug_comment_from_svn_revision): Removed.  Moved to comments.py.
        (bug_comment_from_commit_text): Removed.  Moved to comments.py.
        (MarkBugFixed): Removed.  Code moved to mark-bug-fixed.
        (BugzillaTool.__init__): Removed mark-fixed subcommand.
        * Scripts/mark-bug-fixed: Added.
        * Scripts/modules/bugzilla.py:
        (parse_bug_id): Added.  Moved from bugzilla-tool.
        * Scripts/modules/comments.py: Added.
        (bug_comment_from_svn_revision): Added.  Moved from bugzilla-tool.
        (bug_comment_from_commit_text): Added.  Moved from bugzilla-tool.

2009-09-23  Marshall Culpepper  <mculpepper@appcelerator.com>

        Reviewed by Eric Seidel.
        
         jpeg.lib is now libjpeg.lib in DRT Cairo dependencies. return
         "false" in non-implemented stub for setAlwaysAcceptCookies.
         https://bugs.webkit.org/show_bug.cgi?id=29661

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/DumpRenderTree.cpp:

2009-09-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] need to dump number of pending unload handlers
        https://bugs.webkit.org/show_bug.cgi?id=29685

        Implement dumping of the number of pending unload handlers.

        The following tests will pass:

          fast/loader/unload-form-about-blank.html
          fast/loader/unload-form-post-about-blank.html
          fast/loader/unload-form-post.html
          fast/loader/unload-form.html
          fast/loader/unload-hyperlink.html
          fast/loader/unload-javascript-url.html
          fast/loader/unload-reload.html
          fast/loader/unload-window-location.html

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getFrameNameSuitableForTestResult):
        (webViewLoadFinished):

2009-09-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        js tests should move into jstests subdirectory instead of resources/
        https://bugs.webkit.org/show_bug.cgi?id=25880

        Remove support of resources directory.

        * Scripts/make-script-test-wrappers:

2009-09-22  Eric Seidel  <eric@webkit.org>

        No review, only fixing typo (missing space character).

        Fix typo from https://bugs.webkit.org/show_bug.cgi?id=29220

        * Scripts/run-webkit-tests:

2009-09-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        run-webkit-tests needs a --repeat-each=N option (AAABBBCCC instead of ABCABCABC)
        https://bugs.webkit.org/show_bug.cgi?id=29220

        * Scripts/run-webkit-tests:

2009-09-22  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        svn-apply can't handle single-line binary file additions
        https://bugs.webkit.org/show_bug.cgi?id=29100

        Fixed the regexp and added a unit test.

        * Scripts/modules/scm_unittest.py:
        * Scripts/svn-apply:

2009-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        post-diff and post-commits should be able to find bug urls in ChangeLogs.
        https://bugs.webkit.org/show_bug.cgi?id=29206

        * Scripts/bugzilla-tool:
         - Share common options by adding a PostDiffAsPatchToBug.posting_options() method.
         - Rename --no-comment to --add-log-as-comment and reverse behavior.
           Comments tend to just be noise.  I'll eventually remove this argument if no one uses it.
         - Split out code into helper functions to try and make execute() more legible.
         - Make post-diff find the bug url in the ChangeLogs if not passed as an argument.
         - Fallback to bug urls in commit diffs, instead of just in commit messages,
           meaning post-commits will now find bug urls in ChangeLogs.

2009-09-21  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.

        --parse-only parameter wasn't passed to SunSpider/sunspider script.
        https://bugs.webkit.org/show_bug.cgi?id=29611

        * Scripts/run-sunspider: Missing parameter passing added.

2009-09-20  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29521> run-webkit-tests: use require instead eval to load DumpRenderTreeSupport module

        Reviewed by Mark Rowe.

        The require statement is like the use statement, except that it
        is run during script execution instead of during the 'BEGIN'
        phase.  This makes it possible to change @INC before the require
        statement is run.  See 'require' and 'use' in the perlfunc(1)
        manpage and 'BEGIN' in perlmod(1) manpage.

        * Scripts/run-webkit-tests: Replace eval statement with require
        statement.

2009-09-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes. Fix the config name under git and allow users to specify
        their own waf install for experimenting with new versions.

        * Scripts/webkitdirs.pm:
        * wx/build/settings.py:

2009-09-18  Alex Milowski  <alex@milowski.com>

        Reviewed by Maciej Stachowiak.

        Added checkWebCoreMathMLSupport and hasMathMLSupport to support 
        checking for whether MathML tests should be run

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2009-08-28  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Break more of run-webkit-tests into separate functions
        https://bugs.webkit.org/show_bug.cgi?id=29497

        Some small steps toward improving run-webkit-tests. My goal is to
        refactor much more of the script into functions. Later we can add
        parallel test running to the tool. But better structure may help
        even if someone decides to translate this into another scripting
        language instead.

        * Scripts/run-webkit-tests: Break more pieces of the script into
        seprate functions. Added readSkippedFiles, findTestsToRun, and
        printResults functions. Removed custom code to skip results.html
        and instead just put it into the ignoredFiles hash. Fixed some
        indentation. Sorted function declarations, global variables,
        and options at the top of the file alphabetically so they're not
        in a semi-random order.

2009-09-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, add missing dependency.

        * wx/browser/wscript:

2009-09-16  Mark Rowe  <mrowe@apple.com>

        Split the SnowLeopard build across a few machines.

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

2009-09-16  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix to support monolithic builds on Windows.

        * wx/build/wxpresets.py:

2009-09-16  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, improve debug support and 2.9 support on MSW.

        * wx/build/settings.py:
        * wx/build/wxpresets.py:

2009-09-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Blind try at fixing new test failure on Windows.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didReceiveTitle):

2009-09-15  Alex Milowski  <alex@milowski.com>

        Reviewed by Tor Arne Vestbø.

        Added mathml toggle

        * Scripts/build-webkit:

2009-09-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Allow waf build to support Python < 2.6.

        * wx/build/waf_extensions.py:

2009-09-14  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add LayoutTests infrastructure to enable and disable webgl tests.
        https://bugs.webkit.org/show_bug.cgi?id=29254

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2009-09-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.
        
        Add --iterations option to run-webkit-tests to repeat the tests N times
        https://bugs.webkit.org/show_bug.cgi?id=29263

        When run with --iterations N, run-webkit-tests will repeat the tests N times.

        * Scripts/run-webkit-tests:

2009-09-14  Brady Eidson  <beidson@apple.com>

        Not reviewed, maybe should've been:

        Cleaning up more Windows-specific fallout from the fix for:
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):  Correct printf() formatter, 
          and call the correct method to get the Sender.

2009-09-14  Jon Honeycutt  <jhoneycutt@apple.com>

        GTK build fix.

        Unreviewed.

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

2009-09-11  Jon Honeycutt  <jhoneycutt@apple.com>

        DRT/test part of
        <rdar://problem/7197644> WebKit should broadcast an MSAA event when
        jumping to a named anchor

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

        Reviewed by Adam Roben.

        * DumpRenderTree/AccessibilityController.cpp:
        (logScrollingStartEventsCallback):
        Turn on logging of scrolling start events.
        (AccessibilityController::getJSClass):
        Add a "logScrollingStartEvents" to the AccessibilityController's JS
        class definition.
        (AccessibilityController::resetToConsistentState):
        Turn off logging of scrolling start events.

        * DumpRenderTree/AccessibilityController.h:
        Declare setLogScrollingStartEvents(). Add a member for the scrolling
        start event hook.

        * DumpRenderTree/mac/AccessibilityControllerMac.cpp:
        (AccessibilityController::setLogScrollingStartEvents):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        Initialize the handle to 0.
        (logEventProc):
        Renamed from logFocusEventProc; now logs scrolling start events, too.
        Removed the assertion that the event is a focus event. Added a switch
        to print a message for focus, scrolling start, and other, unknown
        events.
        (AccessibilityController::setLogFocusEvents):
        Changed to use logEventProc.
        (AccessibilityController::setLogScrollingStartEvents):
        If turning logging off, unhook the scrolling start event hook, and clear
        the member holding the handle. If turning on, query for the root
        accessible, so that accessibility is enabled for the WebView, and call
        SetWinEventHook to setup an event hook using logEventProc as the
        callback function.

2009-09-14  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthenticationPasswordCallback):
        (setAuthenticationUsernameCallback):
        
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        Add the ability for DRT to handle authentication challenges.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAuthenticationPasswordCallback):
        (setAuthenticationUsernameCallback):
        (setHandlesAuthenticationChallengesCallback):
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::handlesAuthenticationChallenges):
        (LayoutTestController::setHandlesAuthenticationChallenges):
        (LayoutTestController::authenticationUsername):
        (LayoutTestController::setAuthenticationUsername):
        (LayoutTestController::authenticationPassword):
        (LayoutTestController::setAuthenticationPassword):

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        * DumpRenderTree/win/ResourceLoadDelegate.h:

2009-09-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Test for <rdar://problem/6954546> and <rdar://problem/7090444>.

        Add a flag on the test plug-in that asks it to clear the document during the call to NPP_New.
        This is the trigger for both <rdar://problem/6954546> and <rdar://problem/7090444>.

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

2009-09-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for non-wxPython builds and a fix for errors when updating swig.py.

        * wx/build/build_utils.py:
        * wx/build/settings.py:

2009-09-14  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build fix for windows build.

        * Scripts/bisect-builds: Add missing paranthesis for tmpdir function.

2009-09-13  Kevin Ollivier  <kevino@theolliviers.com>

        Fix typo accidently landed in last commit.

        * wx/build/settings.py:

2009-09-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, error out if using the wrong Python.

        * wx/build/settings.py:

2009-09-13  Xan Lopez  <xlopez@igalia.com>

        Build fix for GTK+ < 2.14.

        Do not use gtk_widget_get_window, access the window directly
        through the struct.

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (keyDownCallback):

2009-09-13  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez and Jan Alonzo.

        [GTK] EventSender does not set 'window' property on synthesized GDK events
        https://bugs.webkit.org/show_bug.cgi?id=29169

        Set the window property on synthesized GDK events in the GTK+ EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (keyDownCallback):

2009-09-12  Drew Wilson  <atwilson@google.com>

        Reviewed by Mark Rowe.

        run-webkit-tests has a timeout value that is too low
        https://bugs.webkit.org/show_bug.cgi?id=29223

        * Scripts/run-webkit-tests:
        Changed timeout value to 20 seconds to avoid timing out too early.

2009-09-11  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Mark dependencies as mandatory and declare which MSVC versions and
        architectures are supported for building wxWebKit.

        * wx/build/settings.py:

2009-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        bugzilla-tool rollout threw exception under svn
        https://bugs.webkit.org/show_bug.cgi?id=29211

        * Scripts/modules/scm.py: add missing return, and convert number arguments to strings.
        * Scripts/modules/scm_unittest.py: add testing for this fix.

2009-09-11  Brian Weinstein  <bweinstein@apple.com>

        Add myself to the committers list.

        * Scripts/modules/committers.py:

2009-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool land-patches should only fail-fast in --commit-queue mode
        https://bugs.webkit.org/show_bug.cgi?id=29201

        * Scripts/bugzilla-tool:

2009-09-11  Adam Roben  <aroben@apple.com>

        Make commit-log-editor move common prefixes to the top of the log

        Fies <http://webkit.org/b/29190> commit-log-editor should move common
        prefixes to the top of the commit log

        Reviewed by Darin Adler.

        * Scripts/commit-log-editor: Find and remove the longest common prefix
        ending in a double newline from each ChangeLog entry, then put that
        common prefix at the top of the commit log.
        (removeLongestCommonPrefixEndingInDoubleNewline): Added. Finds,
        removes, and returns the longest common prefix ending in a double
        newline from a hash of strings

2009-09-11  Eric Seidel  <eric@webkit.org>

        Fix obvious typo in previous commit, no review.

        bugzilla-tool should automate rollouts
        https://bugs.webkit.org/show_bug.cgi?id=26715

        * Scripts/bugzilla-tool: add back missing "scm" argument.

2009-09-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool should automate rollouts
        https://bugs.webkit.org/show_bug.cgi?id=26715

        bugzilla-tool rollout will do the rollout locally and leave the diff for you to verify and commit.
        The --complete-rollout option will automatically land and update the bug.
        Eventually --complete-rollout will be default, but that will require more testing.

        This first pass is good enough for others to try and file bugs about.

        * Scripts/bugzilla-tool:
         - Move modified_changelogs into scm.py.
         - Move svn_revision_from_commit_text logic into scm.py.
         - Add RolloutCommit command.
        * Scripts/modules/bugzilla.py:
         - Add reopen_bug command used by RolloutCommit.
        * Scripts/modules/scm.py:
         - Add functions to support RolloutCommit.
         - Abstract find_uuid into value_from_svn_info so it can be re-used for _repository_url (needed by svn merge).
         - Add a str() call so that svn_commit_log can take a numeric argument.
         - Remove a bunch of very slow code from last_svn_commit_log and used the built-in 'BASE' alias instead.
         - Made dry_run commits return something that svn_revision_from_commit_text can parse.
        * Scripts/modules/scm_unittest.py:
         - Add read_from_path for easy file reading.
         - Put test4 on a new line to make reverts work w/o conflict.
         - Add an "svn update" call so that the checkout revision matches the server revision.
         - Add tests for svn_revision_from_commit_text.
         - Add a simple test for apply_reverse_diff.
         - Add a new self.scm member and use it in the new tests (eventually other tests can use it too).
         - Add test for svn_commit_log to make sure my 'BASE' change above worked as expected.

2009-09-11  Adam Roben  <aroben@apple.com>

        Get user script/stylesheet tests running on Windows

        Fixes <http://webkit.org/b/29181> User script/stylesheet tests are
        skipped on Windows

        Reviewed by John Sullivan.

        * DumpRenderTree/win/DumpRenderTree.vcproj: Link all configurations
        against comsuppw.lib so we can use _bstr_t.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Fixed #include
        order, added #include of comutil.h for _bstr_t.

        (bstrT): Helper function to convert a JSStringRef to a _bstr_t.
        (LayoutTestController::addUserScript):
        (LayoutTestController::addUserStyleSheet):
        Implemented. Implementations were based on those in
        LayoutTestControllerMac.mm.

2009-09-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29147> run-webkit-tests:  make -h show help 

        Reviewed by Mark Rowe.

        * Scripts/run-webkit-tests: Updated to make -h switch show help.

2009-09-10  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add WebCore/websockets directory in wx build system.
        https://bugs.webkit.org/show_bug.cgi?id=28038

        * wx/build/settings.py:

2009-09-10  Martin Robinson  <martin.james.robinson@gmail.com>

        [GTK] EventSender does not properly convert some keyDown strings
        https://bugs.webkit.org/show_bug.cgi?id=29119

        Add more keyDown string to character code conversions for GTK+ EventSender.

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

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Maciej Stachowiak.

        Geolocation Coordinates::toString() prints bogus values for unspecified properties.
        https://bugs.webkit.org/show_bug.cgi?id=29080

        * Scripts/make-script-test-wrappers: Modified. Adds asynchronous Geolocation tests to exclusion list.

2009-09-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Eric Carlson.

        reviewer/committer lookups are backwards
        https://bugs.webkit.org/show_bug.cgi?id=29113

        I also moved Eric Carlson from the committer list to the reviewer list now that he is one.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/committers.py:

2009-09-09  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        svn-unapply doesn't revert directories correctly
        https://bugs.webkit.org/show_bug.cgi?id=29065

        * Scripts/svn-unapply: Make svnStatus consistently return status
        lines including a newline.
        * Scripts/svn-apply: Keep svnStatus in sync with the one in
        svn-unapply, in lieu of moving it to a common file.

2009-09-09  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        svn-apply doesn't handle changes to files copied to new directories properly
        https://bugs.webkit.org/show_bug.cgi?id=29059

        * Scripts/svn-apply: Don't treat "--- revision 0" patches as being
        additions if we know that we've just copied a file to this name.

2009-09-09  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        commit-queue hangs if a builder has never built
        https://bugs.webkit.org/show_bug.cgi?id=29091

        * Scripts/modules/buildbot.py:
        * Scripts/modules/buildbot_unittest.py:

2009-09-09  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] DumpRenderTree needs eventSender object and implementation
        https://bugs.webkit.org/show_bug.cgi?id=25990

        Implements most of the EventSender object's functionality for
        the DumpRenderTree tool. Implementation still lacks support
        for drag and drop tests and forward leaps.

        Based on work by Holger Hans Peter Freyther.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest): Focus on the view before loading a new test.
        (webViewWindowObjectCleared):
        * DumpRenderTree/gtk/EventSender.cpp: Added.
        (getDragModeCallback):
        (setDragModeCallback):
        (leapForwardCallback):
        (contextClickCallback):
        (updateClickCount):
        (mouseDownCallback):
        (mouseUpCallback):
        (mouseMoveToCallback):
        (beginDragWithFilesCallback):
        (replaySavedEvents):
        (keyDownCallback):
        (textZoomInCallback):
        (textZoomOutCallback):
        (zoomPageInCallback):
        (zoomPageOutCallback):
        (getClass):
        (makeEventSender):
        * DumpRenderTree/gtk/EventSender.h: Added.
        * GNUmakefile.am: Add build rules for EventSender.

2009-09-09  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Roben.
        
        https://bugs.webkit.org/show_bug.cgi?id=28953

        Added pre- and post- build events so that on build failure, the file 
        buildfailed is written to the directory $(WebKitOutputDir).

        * WinLauncher/WinLauncher.vcproj:

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

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-09-08  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        commit-queue gets stuck if a non-committer sets commit-queue+ or review+
        https://bugs.webkit.org/show_bug.cgi?id=28605
        https://bugs.webkit.org/show_bug.cgi?id=28916

        * Scripts/bugzilla-tool:
         - Fix comment and adjust reject_patch_from_commit_queue call to pass "manual commit"
           comment now that it's used for rejecting patches for invalid committers too.
         - Pass reject_invalid_patches=True for commit-queue calls, normally we just ignore patches with invalid reviewers, the commit-queue rejects them.
         - Make the commit queue print patches count instead of bugs count, this also fixes https://bugs.webkit.org/show_bug.cgi?id=28916.
        * Scripts/modules/bugzilla.py:
         - Make _parse_attachment_element not validate reviewer/committer.
         - Share flag parsing code in _parse_attachment_flag.
         - Add _validate* methods for validating reviewers and committers and updating bugs when validation fails.
         - Add reject_invalid_patches argument so the commit-queue can update bugs on failed validation and other "read only" commands will not.
         - Add reject_patch_from_review_queue using a new _set_flag_on_attachment abstraction.
        * Scripts/modules/bugzilla_unittest.py:
         - Update this test to no longer expect committer/reviewer validation.
        * Scripts/modules/committers.py:
         - Return None on failed lookups instead of raising Exceptions.
        * Scripts/modules/committers_unittest.py:
         - Update tests to expect None returns instead of exceptions.

2009-09-09  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29061> Fix obvious copy-paste error in AccessibilityUIElement::clickPointY()

        Reviewed by Mark Rowe.

        No change to layout test results.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::clickPointY): Changed to return y value
        instead of x value.

2009-09-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Mark Rowe.

        Reduce dglazkov's boboiness by properly concatenating revision value.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Used substitution
            rather than "+".

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wxWebKit Python extension build fix - get swig.py if it doesn't exist.

        * wx/build/build_utils.py:

2009-09-08  Mark Rowe  <mrowe@apple.com>

        Fix an incorrect variable name in UpdateChromiumSource.

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

2009-09-08  Mark Rowe  <mrowe@apple.com>

        Don't check for leaks on the release SnowLeopard builder.

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

2009-09-08  Mark Rowe  <mrowe@apple.com>

        Add a SnowLeopard release builder.

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

2009-09-08  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Remove end of line whitespace check from check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=29053

        * Scripts/modules/cpp_style.py:

2009-09-08  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Darin Adler.

        Fix DumpRenderTree build from clean tree on Tiger
        https://bugs.webkit.org/show_bug.cgi?id=28927

        * DumpRenderTree/mac/PerlSupport/Makefile: Ensure the
        DerivedSources/DumpRenderTree directory exists when
        building on Tiger.

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after introduction of platform/mock directory.

        * wx/build/settings.py:

2009-09-08  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-09-08  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Darin Adler.

        prepare-ChangeLog too chatty on file additions
        https://bugs.webkit.org/show_bug.cgi?id=29019

        * Scripts/prepare-ChangeLog: Omit description of added properties
        on newly added files.

2009-09-08  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds a LayoutTestController method to set the permission state for Geolocation.
        This is required to use the mock Geolocation service for testing.
        https://bugs.webkit.org/show_bug.cgi?id=29027

        * DumpRenderTree/LayoutTestController.cpp: Modified.
        (setDatabaseQuotaCallback): Modified. Style fix.
        (setGeolocationPermissionCallback): Added. Sets the Geolocation permission state.
        (LayoutTestController::staticFunctions): Modified. Registers the above function on the LayoutTestController.
        * DumpRenderTree/LayoutTestController.h: Modified.
        (LayoutTestController::setGeolocationPermission): Added. Sets the Geolocation permission state.
        (LayoutTestController::isGeolocationPermissionSet): Added. Returns whether the Geolocation permission has been set.
        (LayoutTestController::geolocationPermission): Added. Returns the Geolocation permission state.
        * DumpRenderTree/mac/UIDelegate.mm: Modified.
        (-[UIDelegate webView:frame:requestGeolocationPermission:securityOrigin:]): Added. Implement chrome method to respond to request for Geolocation permission state. Response is made using above methods to access permission state.

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit single API to enable persistency
        https://bugs.webkit.org/show_bug.cgi?id=28682

        Use the new enablePersistentStorage API instead 
        of enabling all persistent features one-by-one.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        (WebCore::DumpRenderTree::DumpRenderTree):

2009-09-07  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        Refactor --strict switch to --ignore-metrics and correct the
        implementation to make the feature usable on all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=28907

        run-webkit-tests --ignore-metrics strips the font related metrics from
        the actual and expected data before comparing them.
        In this way the render trees can be checked for obvious differences but
        a successful test implies by no means that the layout is actually correct.

        * Scripts/run-webkit-tests:

2009-09-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds a mock Geolocation service. This will be used to provide predictable behavior of the
        Geolocation API for use in LayoutTests. Later changes will integrate the the mock
        Geolocation service with DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=28264

        * DumpRenderTree/LayoutTestController.cpp: Modified.
        (setMockGeolocationPositionCallback): Added. Configures the mock Geolocation service.
        (setMockGeolocationErrorCallback): Added. Configures the mock Geolocation service.
        (LayoutTestController::staticFunctions): Added. Registers the above functions on the LayoutTestController.
        * DumpRenderTree/LayoutTestController.h: Modified.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Modified.
        (LayoutTestController::setMockGeolocationPosition): Added. Configures the mock Geolocation service.
        (LayoutTestController::setMockGeolocationError): Added. Configures the mock Geolocation service.

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default
        https://bugs.webkit.org/show_bug.cgi?id=28959

        * Scripts/build-webkit:

2009-09-07  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for wx SVN trunk.

        * wx/build/settings.py:

2009-09-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Switch USE_ defines over to the compiler so that they can be
        checked by files not including config.h (like WebCorePrefix.h).

        * wx/build/settings.py:

2009-09-04  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.

        Update declaration of FrameLoadDelegate to reflect that
        IWebFrameLoadDelegatePrivate2 inherits from
        IWebFrameLoadDelegatePrivate.

        * DumpRenderTree/win/FrameLoadDelegate.h:

2009-09-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Add testing instrumentation for mixed content.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:]):
        (-[FrameLoadDelegate webView:didRunInsecureContent:]):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (descriptionSuitableForTestResult):
        (FrameLoadDelegate::QueryInterface):
        (FrameLoadDelegate::didDisplayInsecureContent):
        (FrameLoadDelegate::didRunInsecureContent):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2009-09-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Frames support
        https://bugs.webkit.org/show_bug.cgi?id=19041

        * wx/build-wxwebkit:

2009-09-02  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28880> svn-apply --force doesn't actually work

        Reviewed by Eric Seidel.

        This fixes "svn-apply --force" and adds unit tests for the
        scm.apply_patch() method which uses this script.

        * Scripts/svn-apply: Created $globalExitCode variable that
        defaults to 0.  Exit with a value of $globalExitCode when the
        script is finished.
        (applyPatch): Ignore a non-zero $exitCode if $force is true, but
        set $globalExitCode to $exitCode so that svn-apply exits with a
        non-zero status if any patches did not apply cleanly.  Also
        print out the actual patch command if $force was not true.

        * Scripts/modules/scm.py:
        (scripts_directory): Added.  Extracted from script_path().
        (script_path): Extracted scripts_directory().
        * Scripts/modules/scm_unittest.py: Import urllib.
        (SVNTestRepository.setup): Save the original working directory
        in test_object since this represents the WebKit repository from
        where the unit tests are run.
        (SCMTest): Created new super class to hold utility methods.
        (SCMTest._create_patch): Creates a patch file on disk and a
        dictionary for use with scm.svn_apply().
        (SCMTest._setup_webkittools_scripts_symlink): Sets up a symlink
        back to WebKitTools/Scripts in the test repository so that
        scm.apply_patch() is able to find the svn-apply script.
        (SVNTest): Inherit from SCMTest instead of unittest.TestCase.
        (SVNTest.tearDown): Make sure to change directories back to the
        original_path before the next test.
        (SVNTest.test_apply_svn_patch): New test case for applying an
        svn patch with scm.apply_patch().
        (SVNTest.test_apply_svn_patch_force): New test case for applying
        an svn patch with scm.apply_patch() that conflicts.
        (GitTest): Inherit from SCMTest instead of unittest.TestCase.
        (GitTest.tearDown): Make sure to change directories back to the
        original_path before the next test.
        (GitTest.test_apply_git_patch): New test case for applying a git
        patch with scm.apply_patch().
        (GitTest.test_apply_git_patch_force): New test case for applying
        a git patch with scm.apply_patch() that conflicts.

2009-09-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Mark Rowe.

        [Qt] Add support for platform-spesific layout-test results

        For the Qt port we use the qt-[mac|linux|win] directories and then fall
        back to the generic qt directory for both test results and skipped list.

        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2009-09-02  Laurent Cerveau  <lcerveau@me.com>

        Reviewed by David Kilzer.

        <http://webkit.org/b/25517> build-webkit script should print build time at end

        * Scripts/build-webkit:
        Added startTime and endTime variable so that the build time is computed and printed as
        part of the build message; display formatting has been separated in a dedicated subroutine.

2009-09-02  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28881> svn-create-patch should check if the repo path is the same when trying to find the root

        Reviewed by Eric Seidel.

        * Scripts/VCSUtils.pm:
        (determineSvnRoot): Added back check for repository root that
        was removed in r46134 when this code lived in svn-create-patch.
        It's necessary to check both the repository root and the
        repository UUID in case two different working directories are
        checked out from the same repository.

2009-09-02  Timothy Hatcher  <timothy@apple.com>

        Use new 512x512 icons for nightly builds.

        Rubber-stamped by Mark Rowe.

        * WebKitLauncher/webkit.icns:

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fix. Remove local variable shadowing global.

        * wx/build/settings.py:

2009-09-02  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by David Kilzer.

        Calls exitStatus function from the main package where it is also defined.

        * Scripts/VCSUtils.pm:

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fixes for Windows/MSVC and Mac/Snow Leopard.

        * wx/browser/wscript:
        * wx/build/build_utils.py:
        * wx/build/settings.py:

2009-08-10  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Changes needed for build-webkit to support the waf build system for the wx port.
        
        https://bugs.webkit.org/show_bug.cgi?id=27619

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

2009-09-02  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27168> With Subversion 1.6, update-webkit prompts on conflicts

        Reviewed by Eric Seidel.

        * Scripts/update-webkit: Added "--accept postpone" to
        @svnOptions when running with svn-1.6 or newer.

2009-09-02  David Kilzer  <ddkilzer@apple.com>

        Moved svn 1.6 version check into VCSUtils::isSVNVersion16OrNewer()

        Reviewed by Eric Seidel.

        * Scripts/VCSUtils.pm:
        (@EXPORT): Added &isSVNVersion16OrNewer.
        (svnVersion): Added.  Internal method that gets the SVN version
        and caches it.
        (isSVNVersion16OrNewer): Added.  Method that does the SVN 1.6
        version check.
        * Scripts/prepare-ChangeLog: Switched to use new
        isSVNVersion16OrNewer() method.
        * Scripts/resolve-ChangeLogs: Ditto.
        * Scripts/svn-create-patch: Ditto.

2009-09-02  David Kilzer  <ddkilzer@apple.com>

        Clean up VCSUtils.pm

        Reviewed by Eric Seidel.

        * Scripts/VCSUtils.pm: Added proper package statement.  Fixed
        indentation of BEGIN block.  Listed each exported method on a
        line by itself.  Added methods to the export list after adding
        the package statement.  Sorted module variables.  Moved
        definiton of $gitRoot next to other module variables.

2009-09-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Fix layout-test plugins/plugin-javascript-access.html

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2009-09-02  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        js tests should move into jstests subdirectory instead of resources/
        https://bugs.webkit.org/show_bug.cgi?id=25880

        make-script-wrappers supports both resources and script-tests directories.
        run-webkit-tests ignores files in script-tests.
        Move script tests of animations to check the new script is working.

        * Scripts/make-script-test-wrappers:
        * Scripts/run-webkit-tests:

2009-09-02  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by David Levin.

        check-webkit-style uses python from /usr/bin instead of the PATH
        https://bugs.webkit.org/show_bug.cgi?id=28225

        * Scripts/bugzilla-tool:
        * Scripts/check-webkit-style:
        * Scripts/run-webkit-unittests:
        * Scripts/update-sources-list.py:
          Changed the first line from
          #!/usr/bin/python
          to
          #!/usr/bin/env python
          which causes python to be invoked from the path location returned
          by "which python" when any of these scripts are launched.
          these are currently all the python scripts in WebKitTools/Scripts.

2009-09-01  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28601> bugzilla-tool post-commits posts commits backwards

        Reviewed by Adam Barth.

        * Scripts/modules/scm.py:
        (Git.commit_ids_from_commitish_arguments): Reverse the list of
        commits returned from git-rev-list since we always want to post
        the oldest patches first to bugs.webkit.org.
        * Scripts/modules/scm_unittest.py:
        (run): Added return statement to return the output now that we
        want it sometimes.
        (SVNTestRepository._setup_test_commits): Added a fourth commit
        so the GitTest.test_commitish_order() test has more commits to
        work with.
        (GitTest.test_commitish_order): Added unit test for change to
        Git.commit_ids_from_commitish_arguments() in scm.py.

2009-09-01  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28877> Implement bugzilla-tool mark-fixed

        Reviewed by David Levin.

        The mark-fixed subcommand is for those times when you don't use
        bugzilla-tool to commit a patch, but you want to use it to close
        the bug with a committed-revision message.

        * Scripts/bugzilla-tool:
        (bug_comment_from_svn_revision): Added.  Extracted from
        bug_comment_from_commit_text().
        (bug_comment_from_commit_text): Extracted
        bug_comment_from_svn_revision() from this method.
        (MarkBugFixed.__init__): Added.
        (MarkBugFixed._fetch_commit_log): Added.  Retrieves the commit
        log from the last commit if no svn revision is specified, else
        the commit log for the specified svn revision.
        (MarkBugFixed._determine_bug_id_and_svn_revision): Added.
        Attempts to determine the bug id and svn revision if one or both
        were not defined on the command line.
        (MarkBugFixed.execute): Added.  Adds a comment about the
        revision that fixed the bug and closes the bug.
        (BugzillaTool.__init__): Added mark-fixed subcommand.
        * Scripts/modules/bugzilla.py:
        (Bugzilla.fetch_title_from_bug): Added.  Returns the title of a
        bug given a bug id.
        * Scripts/modules/scm.py:
        (SCM.strip_r_from_svn_revision): Added.  Utility method to strip
        the leading 'r' from an svn revision.
        (SCM.svn_commit_log): Added.  Subclasses must override.
        (SCM.last_svn_commit_log): Added.  Subclasses must override.
        (SVN.svn_commit_log): Added.  Returns svn log for a given
        revision.
        (SVN.last_svn_commit_log): Added.  Uses svnversion to find the
        last commit in an svn working directory and then runs svn log.
        (Git.svn_commit_log): Added.  Returns svn log for a given
        revision.
        (Git.last_svn_commit_log): Added.  Runs git-svn-log with a limit
        of one log message.

2009-09-01  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28880> svn-apply --force doesn't actually work

        Reviewed by Brady Eidson.

        * Scripts/svn-apply:
        (applyPatch): Add "--force" to $options arrayref if $force is
        set.

2009-09-01  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28725> resolve-ChangeLogs: determineVCSRoot() returns incorrect repository root during git filter-branch

        Reviewed by Adam Roben.

        When git-filter-branch has been invoked to rewrite ChangeLog
        files on series of git commits, it changes directories into
        .git-rewrite/t before re-running resolve-ChangeLogs.  This
        causes determineVCSRoot() in VCSUtils.pm to return
        ".git-rewrite/t", which causes that path to be prepended to all
        ChangeLog paths, which results in an error like this:

            error: pathspec '.git-rewrite/t/ChangeLog' did not match any file(s) known to git.
            Died at WebKitTools/Scripts/resolve-ChangeLogs line 376.

        The correct way to fix this is not to try to find the repository
        root when invoked by git-filter-branch.

        * Scripts/resolve-ChangeLogs: If isInGitFilterBranch() is true,
        set $relativePath to '.' instead of calling
        chdirReturningRelativePath(determineVCSRoot()).
        (isInGitFilterBranch): Added.  Checks for the existence of the
        MAPPED_PREVIOUS_COMMIT environment variable.

2009-09-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Add support for Fedora distros in the http tests
        https://bugs.webkit.org/show_bug.cgi?id=28263

        Add detection code for Fedora distribution, and use the proper
        httpd conf file when needed.

        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:
        * Scripts/webkitdirs.pm:

2009-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel.

        [Gtk] DRT needs implementation of overridePreference
        https://bugs.webkit.org/show_bug.cgi?id=28830

        Implement overridePreference.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        (setDefaultsToConsistentStateValuesForTesting):
        (runTest):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (toWebSettingKey):
        (LayoutTestController::overridePreference):

2009-09-01  Joseph Pecoraro  <joepeck@webkit.org>

        <http://webkit.org/b/28623> svn-[un]apply should change directories to the repository root before [un]applying

        Reviewed by Eric Seidel.

        Jump back and forth between the repository root directory (to apply) and the
        directory the script was run from (to find the patch).

        * Scripts/svn-apply:
        * Scripts/svn-unapply:

2009-08-31  Adam Roben  <aroben@apple.com>

        Fall back to a Release version of Safari if a Debug one doesn't exist

        <http://webkit.org/b/28849>

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (safariPath): If the user is working with a Debug build, but there's
        no Debug version of Safari present, fall back to using a Release
        version of Safari.

2009-08-31  Adam Roben  <aroben@apple.com>

        Make safariPath() work for Debug builds of Safari on Windows

        <http://webkit.org/b/28849>

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (safariPath): If the user is working with a Debug build, add the
        _debug suffix to Safari.exe.

2009-08-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue needs a master process
        https://bugs.webkit.org/show_bug.cgi?id=28040

        Add a bugzilla-tool commit-queue command
        Keeps per-bug logs, but doesn't yet upload them anywhere.

        * Scripts/bugzilla-tool: Add LandPatchesFromCommitQueue to handle 'commit-queue'
        * Scripts/modules/buildbot.py: remove noisy log message
        * Scripts/modules/logging.py: add a 'tee()' call for splitting outputs in python

2009-08-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] Geolocation needs permission API before being enabled by default

        Build the Gtk port with geolocation enabled. This option is only
        enabled for the buildbot. The autotools option will be enabled by
        default once the permissions API is implemented.

        * Scripts/build-webkit:

2009-08-26  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by David Kilzer.

        Make prepare-ChangeLog notice property changes
        https://bugs.webkit.org/show_bug.cgi?id=28675

        Make the generated ChangeLog entry include a short description of
        property changes if there were such changes.  Also make
        prepare-ChangeLog not bail if the only changes are property changes.

        * Scripts/prepare-ChangeLog:

2009-08-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

        A bunch of our LayoutTests rely on our old behavior, so we explicitly
        grant local files universal access during testing.  Mainly, these tests
        involve making XMLHttpRequests for data URLs.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2009-08-26  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Minor style correction and include fix for notifications
        https://bugs.webkit.org/show_bug.cgi?id=28745

        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
          change to correct EnumStyle
        (DRTDesktopNotificationPresenter::checkNotificationPermission):

2009-08-26  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        XMLHttpRequest.withCredentials=false shouldn't save cookies.
        https://bugs.webkit.org/show_bug.cgi?id=28743

        Added the support to the layout test controller on OSX and
        Windows (for CFNETWORK) to allow for changing the accept cookie
        policy.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController): Added a bool
        to track the state of accepting cookies.
        (setAlwaysAcceptCookiesCallback): Standard wrapper method
        to go from js to a C++ method.
        (LayoutTestController::staticFunctions): Added the
        setAlwaysAcceptCookies method to the js layoutTestController.
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::alwaysAcceptCookies): Returns the value.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAlwaysAcceptCookies): Stub out method.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues): Reset the accept cookie to
        its default.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAlwaysAcceptCookies): Does the work for
        OSX to change the cookie accept policy.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setAlwaysAcceptCookies): Method to handle all the calls necessary
        to change the accept cookie policy on Windows.
        (resetDefaultsToConsistentValues): Reset the accept cookie to
        its default.
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAlwaysAcceptCookies): Stub out method.
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAlwaysAcceptCookies): Stub out method.

2009-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed.

        Remove accidentally left in clobber option.
        https://bugs.webkit.org/show_bug.cgi?id=28400

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

2009-08-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Mark Rowe.

        Add canary-style Chromium WebKit build slave to the waterfall.
        https://bugs.webkit.org/show_bug.cgi?id=28400

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added one Chromium/Windows slave
        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Added support for Chromium slave commands.

2009-08-25  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Darin Adler.

        make-script-test-wrappers should be executable
        https://bugs.webkit.org/show_bug.cgi?id=28669

        Make make-script-test-wrappers and update-sources-list.py both be
        executable.

        * Scripts/update-sources-list.py:
        * Scripts/make-script-test-wrappers:

2009-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Build fix

        Revise Debug_Cairo targets to point inherit from the 
        debug_wincairo.vsprops property sheet so that they link
        against the proper libraries in Debug build.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:
        * WinLauncher/WinLauncher.vcproj:

2009-08-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Roben.

        PLATFORM(CFNETWORK) should be USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=28713

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2009-08-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt/Mac] Use CONFIG+=build_all only when building libraries

        If no configuration is specified when building WebKit we pass the
        debug_and_release option to QMake which results in Makefiles for
        both configurations being generated.

        Previously we built both of these configurations by default, for
        all targets (both the QtWebKit framework/dyldlib and the various
        executables such as QtLauncher and tests). This makes sense for
        the libraries, which get the _debug suffix and can be loaded on
        demand by setting the DYLD_IMAGE_SUFFIX, but for executables we
        ended up building the same executable twice.

        We now only build one instance of each executable, and since this
        is a developer build we build the debug-version. Passing either
        --debug or --release to build-webkit will override this, and
        even in the default case the release version can still be built
        by running 'make release' in the the build directory of each
        target.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * Scripts/webkitdirs.pm:

2009-08-24  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Barth.

        Fix Bug 27827 "[Chromium] Functions Keys don't work in google spreadsheet".
        <https://bugs.webkit.org/show_bug.cgi?id=27827>.

        Because of the lack of mappings from GDK key-codes to WebKit key-codes,
        Chromium cannot send valid key-codes to JavaScript when a user types
        function keys. This change just copies the mappings from 'KeyEventGtk.cpp'.

        To write layout tests for this issue, added mappings from function-key
        names to platform-specific key-codes to EventSendingController objects
        so that eventSender.keyDown() can send function-key events without using
        platform-specific key codes. (Unfortunately, this eventSender.keyDown() change
        is only for Mac. So this change adds this new test to Skipped tests for other
        platforms to prevent this change from crashing the build trees.)

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:]):

2009-08-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] API for disabling local file access to web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28663

        Enable this setting for DRT.

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

2009-08-22  Adam Barth  <abarth@webkit.org>

        Revert 47684.  We're going to do this later once clients have had a
        chance to opt into the setting they like.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2009-08-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

        A bunch of our LayoutTests rely on our old behavior, so we explicitly
        grant local files universal access during testing.  Mainly, these tests
        involve making XMLHttpRequests for data URLs.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2009-08-22  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Anders Carlsson.

        Bring signed updates to the Mac nightly builds.

        * WebKitLauncher/Info.plist:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitNightlyEnablerSparkle.m:
        (initializeSparkle):
        * WebKitLauncher/nightly.webkit.org.public.pem: Added.

2009-08-21  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubberstamped by Simon Fraser.

        Remove GNOME keyring support in build-webkit. This dependency's
        already been removed in the Gtk port.

        * Scripts/build-webkit:

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.
        Based on original patch by Stephanie Lewis.

        Added support of the Windows malloc history format to parse-malloc history, so we can
        read and parse it.

        * Scripts/parse-malloc-history:

2009-08-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Enable various "grouping" ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=28486

        Expose the ability to retrieve the subrole through accessibility for DRT.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:

2009-08-20  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed.

        Added myself as a committer.

        * Scripts/modules/committers.py:

2009-08-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix memory leaks.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::whiteListAccessFromOrigin):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):

2009-08-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool post-diff can post partial diffs from SVN checkouts.
        https://bugs.webkit.org/show_bug.cgi?id=28445

        Pass the checkout root as the cwd.  Also wrote a test to ensure this.

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-08-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        Don't leak the JSStringRef returned by AccessibilityUIElement::attributeValue.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributeValueCallback):

2009-08-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed, build fix.

        [Qt] The template-based qMax() compares two qreals.

        * DumpRenderTree/qt/ImageDiff.cpp:
        (main):

2009-08-20  David Levin  <levin@chromium.org>

        Reviewed by David Kilzer.

        bugzilla-tool patch retrieval should handle 302 redirects.
        https://bugs.webkit.org/show_bug.cgi?id=28485

        * Scripts/modules/scm.py: Pass the --location parameter to curl
        so that 302's are followed.

2009-08-20  Aaron Boodman  <aa@chromium.org>

        One more speculative build for gtk.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:

2009-08-20  Aaron Boodman  <aa@chromium.org>

        Speculative build for gtk.

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

2009-08-20  Mark Rowe  <mrowe@apple.com>

        Ignore some leaks that are known to originate from ImageIO.

        * Scripts/run-webkit-tests:

2009-08-20  Aaron Boodman  <aa@chromium.org>

        With David Levin.

        Speculative build fix for qt.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::whiteListAccessFromOrigin):
        * DumpRenderTree/qt/jsobjects.h:

2009-08-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <http://webkit.org/b/28484> Plug-in-related leaks seen on the build bot

        Update check-for-global-initializers to accommodate the new uses of RefCountedLeakCounter in WebKit.

        * Scripts/check-for-global-initializers:

2009-08-19  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=24853: Provide a way for WebKit clients to
        specify a more granular policy for cross-origin XHR access.

        * DumpRenderTree/LayoutTestController.cpp: Expose whiteListAccessFromOrigin() to layout tests.
        (whiteListAccessFromOriginCallback): Ditto.
        (LayoutTestController::staticFunctions): Ditto.
        * DumpRenderTree/LayoutTestController.h: Ditto.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Ditto.
        (LayoutTestController::whiteListAccessToOrigin): Ditto.
        * DumpRenderTree/mac/LayoutTestControllerMac.mm: Ditto.
        (LayoutTestController::whiteListAccessFromOrigin): Ditto.
        * DumpRenderTree/qt/jsobjects.cpp: Ditto.
        (LayoutTestController::whiteListAccessFromOrigin): Ditto.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp: Stub out whiteListAccessFromOrigin().
        (LayoutTestController::whiteListAccessFromOrigin): Ditto.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Reset origin access lists before each test.
        (resetWebViewToConsistentStateBeforeTesting): Ditto.
        * DumpRenderTree/mac/DumpRenderTree.mm: Ditto.
        (resetWebViewToConsistentStateBeforeTesting): Ditto.
        * DumpRenderTree/qt/DumpRenderTree.cpp: Ditto.
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting): Ditto.

2009-08-19  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Ignore some leaks that are known to originate from QTKit.

        * Scripts/run-webkit-tests:

2009-08-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        commit-queue/bugzilla-tool can get wedged if git is mid-rebase
        https://bugs.webkit.org/show_bug.cgi?id=28436

        Make clean_working_directory cancel rebases too (even though that's a bit of a hack).
        This code will only ever be run when --force-clean is passed.

        I also added a new unit test to make sure this code actually works. :)

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py:

2009-08-19  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        WebKit needs a changelogs.py to hold changelog-related code
        https://bugs.webkit.org/show_bug.cgi?id=28477

        This is moving code and adding tests.  There was only one functional
        change (which was removing a trailing newline from the last_entry() result).

        * Scripts/bugzilla-tool:
        * Scripts/modules/changelogs.py: Added.
        * Scripts/modules/changelogs_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-08-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool needs a way to ask build.webkit.org if the bots are passing
        https://bugs.webkit.org/show_bug.cgi?id=28222

        Basic support for now.  This has been in testing for 24 hours now and worked great!

        * Scripts/bugzilla-tool:
        * Scripts/modules/buildbot.py: Added.
        * Scripts/modules/buildbot_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-08-19  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Bump waitToDumpWatchdog interval to 15 seconds to match the
        default timeout used by run-webkit-tests. Mac and Win ports were
        recently bumped in http://trac.webkit.org/changeset/r47465.

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

2009-08-19  David D. Kilzer  <ddkilzer@webkit.org>

        DumpRenderTreeSupport.pm: provide pre-generated swig source for Tiger

        Reviewed by Mark Rowe.

        Provide pre-generated swig source files for Tiger so it may
        benefit from the faster run-webkit-tests.

        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportTiger.pm:
        Generated by swig.
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport_wrapTiger.c: Added.
        Generated by swig.
        (swig_type_info::SWIG_TypeNameComp):
        (swig_type_info::SWIG_TypeEquiv):
        (swig_type_info::SWIG_TypeRegisterTL):
        (swig_type_info::SWIG_TypeCheck):
        (swig_type_info::SWIG_TypeCast):
        (swig_type_info::SWIG_TypeDynamicCast):
        (swig_type_info::SWIG_TypeName):
        (swig_type_info::SWIG_TypePrettyName):
        (swig_type_info::SWIG_TypeQueryTL):
        (swig_type_info::SWIG_TypeClientDataTL):
        (swig_type_info::SWIG_PackData):
        (swig_type_info::SWIG_UnpackData):
        (swig_type_info::SWIG_PropagateClientDataTL):
        (swig_type_info::SWIG_PackVoidPtr):
        (swig_type_info::SWIG_UnpackVoidPtr):
        (swig_type_info::SWIG_PackDataName):
        (swig_type_info::SWIG_UnpackDataName):
        * DumpRenderTree/mac/PerlSupport/Makefile: Updated to build on
        Tiger using pre-generated files.

2009-08-18  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Kilzer.

        run-webkit-tests hangs when WebCore tries to log too much
        https://bugs.webkit.org/show_bug.cgi?id=15743

        Read stdout and stderr in parallel.

        * Scripts/run-webkit-tests:

2009-08-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Oliver Hunt.

        Add a new build configuration that checks for leaks during the layout tests,
        and hook a new machine up to it.

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

2009-08-18  Aaron Boodman  <aa@chromium.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=28412: Leak of WebCore::XMLHttpRequest object during layout tests.

        No new tests: Already covered by existing tests.

        * Scripts/check-for-global-initializers: Allow global initialization of WTF::RefCountedLeakCounter for XMLHttpRequest.

2009-08-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        Bump waitToDumpWatchdogInterval to 15 seconds to match the time-out used by run-webkit-tests.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:

2009-08-18  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Adam Roben.

        Changed use of CComBSTR in exceededDatabaseQuota to BSTRs, and free them,
        and removed include to fix building on VC++ Express.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::exceededDatabaseQuota):

2009-08-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Oliver Hunt.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28326> DRT on Windows doesn't support 
        LayoutTestController::setQuota or print a callback on UIDelegate::exceededDatabaseQuota.
        
        Implemenent setDatabaseQuota and added a new function to the IWebDatabaseManager interface.
        Also added a console output on UIDelegate::exceededDatabaseQuota to match the mac.

        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setDatabaseQuota):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::exceededDatabaseQuota):

2009-08-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28415
        Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
        have it.

        * record-memory-win/record-memory-win.vcproj:
        * WinLauncher/WinLauncher.vcproj:
        * WebKitLauncherWin/WebKitLauncherWin.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * FindSafari/FindSafari.vcproj:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads
        https://bugs.webkit.org/show_bug.cgi?id=28292

        Added layoutTestController.workerThreadCount, and implementations on various platforms that call into WebKit.

        * DumpRenderTree/LayoutTestController.cpp:
        (getWorkerThreadCountCallback):
        (LayoutTestController::staticValues):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::workerThreadCount):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::workerThreadCount):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::workerThreadCount):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::workerThreadCount):

2009-08-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Initialize x and y in the GtkAllocation structure to shut up
        valgrind.

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

2009-08-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Some HTMLs are modified by make-script-test-wrappers
        https://bugs.webkit.org/show_bug.cgi?id=28213

        Add fast/js/const.js and fast/canvas/canvas-2d-imageData-create-nonfinite.js into
        the exclude list, modified fast/dom/Geolocation/resources/TEMPLATE.html, and
        re-generated wml/* and Geolocation/* .

        * Scripts/make-script-test-wrappers:

2009-08-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        -webkit-box-orient:horizontal doesn't work on <button> tag
        https://bugs.webkit.org/show_bug.cgi?id=34445

        Make a flexible button's anonymous child flexible and pass the
        parent's box-orient to the anonymous child.

        Also, added a renderName for anonymous flexible boxes.

        * Scripts/make-script-test-wrappers:

2009-08-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Can no longer --reset-results of a layout test directory
        https://bugs.webkit.org/show_bug.cgi?id=28336

        --reset-results and --exit-after-n-failures are incompatible.

        * Scripts/run-webkit-tests:

2009-08-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/26920> bugzilla-tool dumps too much junk the the commit comment from git

        Reviewed by Adam Roben.

        New commit message:
            Committed r12345: <http://trac.webkit.org/changeset/12345>

        * Scripts/bugzilla-tool:
        (bug_comment_from_commit_text): Print out a compact,
        standardized commit message for both git and svn.

2009-08-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2009-08-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28393> check-webkit-style: add check for use of std::max()/std::min() instead of MAX()/MIN()

        Reviewed by David Levin.

        * Scripts/modules/cpp_style.py:
        (_ERROR_CATEGORIES): Added 'runtime/max_min_macros'.
        (check_max_min_macros): Added.  Returns level 4 error when MAX()
        and MIN() macros are used in header files and C++ source files.
        (check_style): Added call to check_max_min_macros().
        * Scripts/modules/cpp_style_unittest.py: Added unit tests.
        (test_max_macro): Added.
        (test_min_macro): Added.

2009-08-13  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Move adjustLineToPixelBoundaries overlapping function to GraphicsContext.cpp
        and remove from GraphicsContextCairo.cpp and GraphicsContextQt.cpp.

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

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::adjustLineToPixelBoundaries):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:

2009-08-10  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Style fixes for DumpRenderTree/qt/jsobjects.cpp based on cpp_style.py and
        WebKit style guide.

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

        * DumpRenderTree/qt/jsobjects.cpp:
        (findFrameNamed):
        (LoadItem::invoke):
        (LayoutTestController::provisionalLoad):
        (LayoutTestController::timerEvent):
        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
        (LayoutTestController::numberOfActiveAnimations):
        (EventSender::keyDown):
        (EventSender::frameUnderMouse):
        (TextInputController::doCommand):

2009-08-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28370> check-webkit-style: add check for 'using std::foo;' statements

        Reviewed by David Levin.

        In <http://webkit.org/b/28355#c1>, it was noted that new source
        files use 'using namespace std;' instead of individual
        'using std::foo;' statements.  This adds a level 4 check for
        such statements.

        * Scripts/modules/cpp_style.py:
        (_ERROR_CATEGORIES): Added 'build/using_std'.
        (check_using_std): Added.
        (check_style): Added call to check_using_std().
        * Scripts/modules/cpp_style_unittest.py:
        (WebKitStyleTest.test_using_std): Added unit test.

2009-08-16  David Kilzer  <ddkilzer@apple.com>

        Backed out r47343 which was mistakenly committed

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-08-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28367> bugzilla.py: replace ScriptError class with BugzillaError class

        Reviewed by David Levin.

        The ScriptError class doesn't exist in bugzilla.py, so any
        errors print error messages about ScriptError instead of the
        actual error:

            NameError: global name 'ScriptError' is not defined

        * Scripts/modules/bugzilla.py:
        (BugzillaError): Added class.  Modeled after ScriptError class
        in scm.py.
        (Bugzilla.authenticate): Changed to use BugzillaError instead of
        ScriptError.
        (Bugzilla._check_create_bug_response): Ditto.

2009-08-14  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Sam Weinig.

        Added EventSource to the build script (default on).
        https://bugs.webkit.org/show_bug.cgi?id=14997 

        * Scripts/build-webkit:

2009-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-08-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix layout test failures after r47312.

        Reviewed by Cameron Zwarich.

        * DumpRenderTree/AccessibilityController.h:
        Replaced logFocusEvents() with setLogFocusEvents(), which takes a
        boolean argument to turn logging of focus events on or off.
        Added a function to reset the AccessibilityController to a consistent
        state.

        * DumpRenderTree/AccessibilityController.cpp:
        (logFocusEventsCallback):
        Call setLogFocusEvents() to enable logging.
        (AccessibilityController::resetToConsistentState):
        Call setLogFocusEvents() to disable logging.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::setLogFocusEvents):
        Update stub.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::setLogFocusEvents):
        Update stub.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        Call the FrameLoadDelegate's resetToConsistentState method.

        * DumpRenderTree/mac/FrameLoadDelegate.h:
        Declare the resetToConsistentState method.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate resetToConsistentState]):
        Call the AccessibilityController's resetToConsistentState() function.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::~AccessibilityController):
        Turn off focus event logging when the controller is destroyed.
        (AccessibilityController::setLogFocusEvents):
        If the caller passes false, unhook the focus event, and clear
        m_focusEventHook.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        Call the FrameLoadDelegate's resetToConsistentState function.

        * DumpRenderTree/win/FrameLoadDelegate.h:
        Declare the resetToConsistentState() function.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::resetToConsistentState):
        Call the AccessibilityController's resetToConsistentState() function.


2009-08-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a mechanism for logging MSAA focus events.

        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
        nightly (20866)

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

        Reviewed by Oliver Hunt.

        * DumpRenderTree/AccessibilityController.cpp:
        (logFocusEventsCallback):
        Call the AccessibilityController's logFocusEvents() function.
        (AccessibilityController::getJSClass):
        Add a "logFocusEvents" function to the AccessibilityController's JS
        class definition.

        * DumpRenderTree/AccessibilityController.h:
        On Windows, include windows.h, and add a member variable to hold the
        handle to the event hook for focus events. Add a declaration for a
        function that enables logging of focus events.

        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::logFocusEvents):
        Stubbed.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::logFocusEvents):
        Stubbed.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        If we hooked the focus event, unhook it.
        (logFocusEventProc):
        When we receive a focus event, get the accessible object for the event,
        and log its name to stdout.
        (AccessibilityController::logFocusEvents):
        Setup the focus event hook to listen for events in the current process.

2009-08-14  Eric Seidel  <eric@webkit.org>

        No review.  Fix 5-space indent to be 4-spaces.

        * Scripts/bugzilla-tool:

2009-08-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Public API to configure the storage path for HTML5 localStorage
        https://bugs.webkit.org/show_bug.cgi?id=28036

        Turn on LocalStorage support for Qt DumpRenderTree since
        LocalStorage is now disabled by defult for QtWebkit.

        * DumpRenderTree/qt/DumpRenderTree.cpp: 
        (WebCore::WebPage::WebPage):

2009-08-14  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Do not unref the main webview, it's owned by its parent
        container. Instead destroy the container, which should take care
        of everything (not terribly important since we exit right after
        that, but still).

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

2009-08-13  Eric Seidel  <eric@webkit.org>

        No review, correcting obvious python error seen in the commit queue.

        args can be a string or an array.  Assuming args is always an array results in
        double-spaced text in error logs.

        * Scripts/bugzilla-tool:

2009-08-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix. Include stdio.h for using stdout, stderr,
        and fprintf.

        * DumpRenderTree/LayoutTestController.cpp:

2009-08-13  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        rename make-js-test-wrappers to make-script-test-wrappers
        https://bugs.webkit.org/show_bug.cgi?id=28212

        * Scripts/make-script-test-wrappers: Renamed from WebKitTools/Scripts/make-js-test-wrappers.

2009-08-13  Drew Wilson <atwilson@chromium.org>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-08-13  John Sullivan  <sullivan@apple.com>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-08-13  Eric Seidel  <eric@webkit.org>

        Correct spelling error in file name.  No review.

        * Scripts/modules/committers_unittest.py: Renamed from WebKitTools/Scripts/modules/commiters_unittest.py.
        * Scripts/run-webkit-unittests:

2009-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION(r47175): error running run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=28261

        Fix "Use of uninitialized value in concatenation (.) or string at
        WebKitTools/Scripts/run-webkit-tests line 191." by setting
        $testsPerDumpTool to 1000 by default.

        * Scripts/run-webkit-tests:

2009-08-13  Nate Chapin  <japhet@chromium.org>

        Unreviewed.

        Add myself to list of committers.

        * Scripts/modules/committers.py:

2009-08-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed.

        Add 'Brent Fulgham' to the committers list.

        * Scripts/modules/committers.py:

2009-08-13  Adam Langley  <agl@chromium.org>

        Review not required.

        * Scripts/modules/committers.py:
          Adding myself to this list because Eric told me to.

2009-08-13  Greg Bolsinga  <bolsinga@apple.com>

        Unreviewed.

        Add 'Greg Bolsinga' to the committers list.

        * Scripts/modules/committers.py:

2009-08-13  Adam Roben  <aroben@apple.com>

        Fix off-by-one result comparisons in media tests on Windows Debug
        builds

        media/video-played.html seems always to time out in Windows Debug
        builds. A race condition between media/video-test.js's "hang" timer and
        DumpRenderTree's built-in "watchdog" timer was causing results for
        media/video-played.html to be printed twice, causing all future media
        tests to be compared to the previous test's results.

        The fix is to make the watchdog timer got through the same code path
        as calling notifyDone manually, so that the results will only get
        printed once. A subsequent patch will remove video-test.js's hang
        timer entirely, since it is redundant.

        Fixes <http://webkit.org/b/28265>.

        Reviewed by Mark Rowe.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::waitToDumpWatchdogTimerFired): Added. Code came
        from Gtk/Mac/Win's watchdog timer handlers, but we now call
        notifyDone() instead of dump() so that a subsequent call to
        notifyDone() won't print the results out again.

        * DumpRenderTree/LayoutTestController.h: Added
        waitToDumpWatchdogTimerFired.

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (waitToDumpWatchdogFired):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (waitUntilDoneWatchdogFired):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (waitUntilDoneWatchdogFired):
        Changed to call waitToDumpWatchdogTimerFired.

2009-08-13  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed.

        Added 'Eric Carlson' to the committers list.

        * Scripts/modules/committers.py:

2009-08-13  Dirk Schulze  <krit@webkit.org>

        Unreviewed.
        Added 'Dirk Schulze' to the committers list.

        * Scripts/modules/committers.py:

2009-08-13  Adam Roben  <aroben@apple.com>

        Enable running testapi in run-javascriptcore-tests on Windows

        Fixes <http://webkit.org/b/24856> run-javascriptcore-tests should run
        testapi on Windows

        Reviewed by Mark Rowe.

        * Scripts/run-javascriptcore-tests: Allow testapi to run if we're in
        the AppleWinWebKit configuration.

2009-08-13  Adam Roben  <aroben@apple.com>

        Re-enable testapi in run-javascriptcore-tests on Mac

        This seems to have been mistakenly disabled in r47089.

        Rubber-stamped by Mark Rowe.

        * Scripts/run-javascriptcore-tests: Removed comment markers that were
        preventing running testapi.

2009-08-12  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        Enable WCSS and XHTML-MP flags for build-webkit.

        * Scripts/build-webkit:

2009-08-12  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: document --nthly flag in help message

        Reviewed by Simon Fraser.

        * Scripts/run-webkit-tests: Added --nthly flag to $usage string.
        Also noted that -1|--singly implies --nthly 1.

2009-08-12  Eric Seidel  <eric@webkit.org>

        No review, just fixing mismerged ChangeLogs.

2009-08-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        run-webkit-tests needs a --exit-after-failures=N option
        https://bugs.webkit.org/show_bug.cgi?id=28192

        Added the option and deployed it to bugzilla-tool.

        * Scripts/bugzilla-tool:
        * Scripts/run-webkit-tests:

2009-08-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        bugzilla-tool : various improvements for running the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=28199

        Make run_and_throw_if_fail silence STDERR as well as STDIN.
        I also changed run_and_throw_if_fail to use the /dev/null trick instead of .communicate() to avoid ever buffering the output (per abarth's suggestion).
        Change a few "print" statements to "log" so they appear in the output.
        Changed all string + uses to use string formatting instead (this is less error prone as it will automatically convert non-string objects).
        Added a little more logging so that --quiet mode is easier to understand.
        Changed clear_attachment_review_flag to clear_attachment_flags and made it clear the commit-queue flag as well.
        Added the ability for bugzilla-tool to reject patches from the commit-queue when they fail to compile/apply/etc.
        Added _find_select_element_for_flag to make the code for finding flag <select> elements clearer.
        Made curl call (downloading patch files) quieter.

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-08-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Change pattern that strips all trailing whitespace to just remove EOL
        chars (\r, \n), to make it clear that varying EOL chars is the primary
        problem being solved.

        * Scripts/prepare-ChangeLog:
        * Scripts/resolve-ChangeLogs:
        * Scripts/svn-create-patch:
        * Scripts/update-webkit:

2009-08-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx waf build fix, add new directories to the build.

        * wx/build/settings.py:

2009-08-11  Adam Roben  <aroben@apple.com>

        Update DumpRenderTree for IWebUIDelegatePrivate changes

        Reviewed by Dave Hyatt.

        * DumpRenderTree/win/UIDelegate.h: Updated to match
        IWebUIDelegatePrivate.

2009-08-12  Adam Roben  <aroben@apple.com>

        Don't try to seek to the end of stdin on Cygwin

        Doing so seems to always cause an exception (for unknown reasons).

        Fixes <http://webkit.org/b/28159> create-bug throws an exception in
        Cygwin

        Reviewed by Dave Kilzer.

        * Scripts/bugzilla-tool:
        (CreateBug.prompt_for_bug_title_and_comments): Ignore IOErrors
        generated by calling sys.stdin.seek, since these seem to be generated
        for no good reason on Cygwin.

2009-08-12  Adam Roben  <aroben@apple.com>

        Don't raise an exception when --cc is not passed to create-bug

        Fixes <http://webkit.org/b/28158> create-bug throws an exception if
        --cc is not specified

        Reviewed by Dave Kilzer.

        * Scripts/modules/bugzilla.py:
        (Bugzilla.create_bug_with_patch): Only set the "cc" field if a CC
        string was specified. Otherwise we'll generate an exception about the
        "cc" variable not being a string.

2009-08-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool : various improvements for running the commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=28199

        Make run_and_throw_if_fail silence STDERR as well as STDIN.
        I also changed run_and_throw_if_fail to use the /dev/null trick instead of .communicate() to avoid ever buffering the out
        Change a few "print" statements to "log" so they appear in the output.
        Changed all string + uses to use string formatting instead (this is less error prone as it will automatically convert non
        Added a little more logging so that --quiet mode is easier to understand.
        Changed clear_attachment_review_flag to clear_attachment_flags and made it clear the commit-queue flag as well.
        Added the ability for bugzilla-tool to reject patches from the commit-queue when they fail to compile/apply/etc.
        Added _find_select_element_for_flag to make the code for finding flag <select> elements clearer.
        Made curl call (downloading patch files) quieter.

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-08-11  Eric Seidel  <eric@webkit.org>

        No review, script regression fix only.

        run-webkit-tests --quiet hangs
        https://bugs.webkit.org/show_bug.cgi?id=28202

        Do a huge dance to get open3 to pipe to /dev/null w/o blocking.
        This was what I came up with after discussions in #perl.

        * Scripts/run-webkit-tests:

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Switch DumpRenderTree to contain a WebUIDelegate2, which extends
        WebUIDelegate, so that the notifications tests will still work.
        https://bugs.webkit.org/show_bug.cgi?id=28198

        * DumpRenderTree/win/UIDelegate.h:

2009-08-11  Darin Adler  <darin@apple.com>

        Try to fix GTK build.

        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
        (AccessibilityUIElement::stringForRange): Added.

2009-08-10  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Add processing for string constants used by the tests to trigger
        common actions like up, down, left, right, etc. for the Qt
        implementation of DumpRenderTree.

        Note this allows fast/forms/textarea-arrow-navigation.html to pass
        correctly.

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

        * DumpRenderTree/qt/jsobjects.cpp:
        (EventSender::keyDown):

2009-08-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 28200 - ListMarker should be included as part of the text value to parse
        https://bugs.webkit.org/show_bug.cgi?id=28200

        Add the ability to retrieve a string given a plain NSRange.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (stringForRangeCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::valueDescription):
        (AccessibilityUIElement::stringForRange):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::stringForRange):

2009-08-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by NOBODY (Speculative fix for the layout test failure).

        Fix fast/dom/prototype-inheritance.html
        and fast/dom/prototype-inheritance-2.html
        broken on Windows by http://trac.webkit.org/changeset/47018

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): enable app cache in Windows DRT.

2009-08-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool: Re-factor shared landing logic into helper class to share more code
        https://bugs.webkit.org/show_bug.cgi?id=28193

        Added new WebKitLandingScripts class to hold this shared logic.
        Also added a view_source_url function to move more webkit-specific urls out of bugzilla-tool core.

        * Scripts/bugzilla-tool:

2009-08-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Fix the current failures on the buildbot.

        As Qt hooks up the maybeDump to loadFinished, we need to make
        sure that calling dump() will not call maybeDump on loadFinished.

        As dump is called my emitting done() which calls dump() and then
        setting m_isLoading to false. So in the case m_isLoading is false,
        do not dump again.

        The current code is confusing, and should be made more clear
        in another commit.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::maybeDump):
        (LayoutTestController::notifyDone):

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Add support for desktop notifications API to DumpRenderTree,
        and support for ENABLE_NOTIFICATIONS flag to build-webkit.

        * DumpRenderTree/LayoutTestController.cpp:
        (grantDesktopNotificationPermissionCallback):
        (LayoutTestController::staticFunctions):
        (LayoutTestController::grantDesktopNotificationPermission):
        (LayoutTestController::checkDesktopNotificationPermission):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp: Added.
        (DRTDesktopNotificationPresenter::DRTDesktopNotificationPresenter):
        (DRTDesktopNotificationPresenter::QueryInterface):
        (DRTDesktopNotificationPresenter::AddRef):
        (DRTDesktopNotificationPresenter::Release):
        (DRTDesktopNotificationPresenter::showDesktopNotification):
        (DRTDesktopNotificationPresenter::cancelDesktopNotification):
        (DRTDesktopNotificationPresenter::notificationDestroyed):
        (DRTDesktopNotificationPresenter::checkNotificationPermission):
        (DRTDesktopNotificationPresenter::requestNotificationPermission):
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h: Added.
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::UIDelegate):
        (UIDelegate::desktopNotificationsDelegate):
        * DumpRenderTree/win/UIDelegate.h:
        * Scripts/build-webkit:

2009-08-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Handle arbitrary line endings when manufacturing patches for additions
        with history.

        * Scripts/svn-create-patch:

2009-08-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28183
        Support VS2008 as well as VS2005 in a few scripts.

        * Scripts/pdevenv: Check both $VS80COMNTOOLS and $VS90COMNTOOLS.
        * Scripts/webkitdirs.pm: Use $VSINSTALLDIR if available instead of hardcoding the VS2005 dir.

2009-08-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        run-webkit-tests --quiet should not output build-dumprendertree output
        https://bugs.webkit.org/show_bug.cgi?id=28189

        * Scripts/run-webkit-tests:

2009-08-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Exception in land-patches
        https://bugs.webkit.org/show_bug.cgi?id=27962

        Use ("%s" % object) instead of ("" + object).
        Added unit tests for logging.py.

        * Scripts/modules/logging.py:
        * Scripts/modules/logging_unittest.py: Added.
        * Scripts/run-webkit-unittests:

2009-08-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by NOBODY (Windows layout tests fix).

        Fix for layout tests failures. Need to initialize some preferences early
        because WebView on Windows uses them during create time.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2009-08-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Adam Roben.

        Originally implemented by Glenn Wilson  <gwilson@chromium.org>.

        Added support for overriding default preferences per-test.
        See https://bugs.webkit.org/show_bug.cgi?id=20534

        * DumpRenderTree/LayoutTestController.cpp:
        (overridePreferenceCallback): add wiring for layoutTestController.overridePreference.
        (LayoutTestController::staticFunctions): same.
        * DumpRenderTree/LayoutTestController.h: same.
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::overridePreference): added empty overridePreference method.
        * DumpRenderTree/mac/DumpRenderTree.mm: implemented preference override.
        (resetDefaultsToConsistentValues): new method, resets preferences to same set of value before every test.
        (setDefaultsToConsistentValuesForTesting): new method, sets other details of testing environment, every time  DRT starts.
        (resetWebViewToConsistentStateBeforeTesting): move some preference setting from here to new resetDefaultsToConsistentValues().
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): new method, resets preferences to same set of value before every test.
        (resetWebViewToConsistentStateBeforeTesting): move some preference setting from here to new resetDefaultsToConsistentValues().
        (createWebViewAndOffscreenWindow): same.
        (main): same.
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::overridePreference):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::overridePreference):

2009-08-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        Added support for DRT to support arguments for eventSender.mouseDown and eventSender.mouseUp for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=28166.
        
        This is a step towards fixing fast/events/mouse-click-events.html on Windows.

        * DumpRenderTree/win/EventSender.cpp:
        (mouseDownCallback):
        (mouseUpCallback):
        (replaySavedEvents):

2009-08-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Build the TestNetscapePlugin on Qt/Mac

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:

2009-08-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by NOBODY (build fix).

        Attempt to fix the Windows test bot. Reverted r47015 caused one of the Windows
        bots that runs Layout Tests to save "JS disabled" and "default font 24pt"
        preferences permanently. Since these preferences are not initialized explicitly in DRT,
        almost all Layout tests are failing. Attempt to fix by explicit
        initialization of these into defaults (enabled, 16pt) at the beginning of the DRT.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):  see above.

2009-08-10  Steve Falkenburg  <sfalken@apple.com>

        Windows nightly fix.

        Reviewed by Ada Chan.

        * FindSafari/FindSafari.cpp:
        (_tmain): Copy Safari.dll if it exists.

2009-08-10  David Levin  <levin@chromium.org>

        Reviewed by David Kilzer.

        check-webkit-style doesn't catch braces around single line statements when followed by else.
        https://bugs.webkit.org/show_bug.cgi?id=28164

        * Scripts/modules/cpp_style.py: Added else to the regex that finds ending }'s when
          checking the no braces for "single lines" rule.
        * Scripts/modules/cpp_style_unittest.py: Added test case.

2009-08-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28163> bugzilla-tool: scm module should not import bugzilla module

        Reviewed by David Levin.

        * Scripts/bugzilla-tool:
        (parse_bug_id): Added.  Moved from CommitMessage.parse_bug_id()
        in scm module.
        * Scripts/modules/scm.py: Removed import of bugzilla module.
        (CommitMessage.parse_bug_id): Deleted.

2009-08-10  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=18599
        Work around apparent bug in abs2rel() with symlinked directories.

        * Scripts/resolve-ChangeLogs:

2009-08-10  Dan Bernstein  <mitz@apple.com>

        Build fix

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

2009-08-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix a bunch of build warnings in TestNetscapePlugin
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp:
        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:

2009-08-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Adam Roben.
        
        Allow TestNetscapePlugIn to fall back to the Carbon event model
        
        Previously the plugin would fail, even though the Carbon event
        model was available. The only way to get the Carbon event model
        was to pass the "forcecarbon" argument in the test markup, but no
        tests were using this.
        
        Now the plugin uses carbon either if it's forced, or if the Cocoa
        event model is not supported.
        
        This helps us run most of the plugin tests on Qt/Mac, which still
        does not support the Cocoa event model.
        
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):

2009-08-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool needs a --quiet option
        https://bugs.webkit.org/show_bug.cgi?id=28060

        A first pass at a --quiet option.  This doesn't do all the excting
        things we might want, but it addresses 80% of the use case.

        * Scripts/bugzilla-tool:

2009-08-08  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Enable accessibility in Gtk DRT
        https://bugs.webkit.org/show_bug.cgi?id=25989

        Add Accessibility support to the GTK DRT.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp: Added.
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp: Added.
        (AccessibilityUIElement::AccessibilityUIElement):
        (AccessibilityUIElement::~AccessibilityUIElement):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::childrenCount):
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::attributesOfLinkedUIElements):
        (AccessibilityUIElement::attributesOfDocumentLinks):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::parameterizedAttributeNames):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::valueDescription):
        (AccessibilityUIElement::isEnabled):
        (AccessibilityUIElement::insertionPointLineNumber):
        (AccessibilityUIElement::isActionSupported):
        (AccessibilityUIElement::isRequired):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::indexInTable):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::lineForIndex):
        (AccessibilityUIElement::boundsForRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::setSelectedTextRange):
        (AccessibilityUIElement::attributeValue):
        (AccessibilityUIElement::isAttributeSettable):
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared):
        (main):
        * GNUmakefile.am:

2009-08-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Unreviewed Gtk build fix.

        DRT needs internal WTF symbols so we link to libJavaScriptCore.la
        too. Also don't force Gtk to use USE_SYSTEM_MALLOC.

        * GNUmakefile.am:

2009-08-07  Darin Adler  <darin@apple.com>

        * Scripts/commit-log-editor: Fix unchecked access to environment
        variable that may not be there.

2009-08-07  Mark Rowe  <mrowe@apple.com>

        Handle the case where only a single test is missing results.

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

2009-08-07  George Wright  <george.wright@torchmobile.com>

        Reviewed by Adam Treat

        Fix DumpRenderTree for the Qt port to always dump the PNG data unless
        the expected and actual hashes match.

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

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::dump):

2009-08-07  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Eric Seidel.

        commit-log-editor does not produce a git commit log that is git friendly.
        https://bugs.webkit.org/show_bug.cgi?id=27754

        We make sure we end up with:
        - A first paragraph describing the bug. It is eventually prefixed by
        "WebKit: <line>" or "WebCore: <line>". This used to be
        "WebCore:\n\n<line>".
        - The Reviewed By line.
        - An eventual Patch By line if author and committer doesn't match.
        - The rest of the commit.

        * Scripts/commit-log-editor:

2009-08-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.  (Darin Adler indicated he'd prefer if we landed these
        kinds of changes unreviewed, like editing the WebKit Team wiki page.)

        Added Pierre d'Herbemont to list of committers.

        * Scripts/modules/committers.py:

2009-08-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adele Peterson.

        Cannot scroll for box-reflect:right
        https://bugs.webkit.org/show_bug.cgi?id=27979

        Update m_overflowLeft an m_overflowWidth for reflection just like
        m_overflowTop and m_overflowHeight.

        * Scripts/make-js-test-wrappers:  Added regexp to skip box-shadow-overflo
w-scroll.js

2009-08-06  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adam Barth.

        box-shadow's spread is ignored with <table>
        https://bugs.webkit.org/show_bug.cgi?id=28017

        Use RenderStyle::getBoxShadowExtent just like RenderBlock.

        * Scripts/make-js-test-wrappers: Added regexp to skip box-shadow-overflow-scroll.js

2009-08-06  Eric Seidel  <eric@webkit.org>

        No review, only changing make-js-test-wrappers.

        Fix make-js-test-wrappers to ignore a few more js tests
        with custom templates.

        * Scripts/make-js-test-wrappers:

2009-08-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Added ENABLE_3D_CANVAS flag to build, default to off

        * Scripts/build-webkit:

2009-08-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Win DRT's resource load delegate is missing didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=28033

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        Added:
        (FrameLoadDelegate::didReceiveServerRedirectForProvisionalLoadForFrame):
        (FrameLoadDelegate::willPerformClientRedirectToURL):
        (FrameLoadDelegate::didCancelClientRedirectForFrame):

        Minor style cleanup:
        (FrameLoadDelegate::didStartProvisionalLoadForFrame): 
        (FrameLoadDelegate::didReceiveTitle):
        (FrameLoadDelegate::didFinishLoadForFrame):
        (FrameLoadDelegate::willCloseFrame):
        (FrameLoadDelegate::didClearWindowObject):
        * DumpRenderTree/win/FrameLoadDelegate.h:

2009-08-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Win DRT's resource load delegate is missing didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=28033

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveResponse):
        * DumpRenderTree/win/ResourceLoadDelegate.h:

2009-08-05  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Add layoutTestController.dumpWillCacheResponse
        https://bugs.webkit.org/show_bug.cgi?id=28010

        willCacheResponse is only interesting for embedders of mainline WebKit on Mac.
        Splitting off a new dumpWillCacheResponse allows a number of existings tests
        to run across platforms.

        The test that was specifically verifying willCacheResponse now calls
        dumpWillCacheResponse.

        * DumpRenderTree/LayoutTestController.cpp: Add dumpWillCacheResponse
        (LayoutTestController::LayoutTestController):
        (dumpWillCacheResponseCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpWillCacheResponse):
        (LayoutTestController::setDumpWillCacheResponse):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Inspect dumpWillCacheResponse
        instead of dumpResourceLoadCallbacks.
        (-[ResourceLoadDelegate webView:resource:willCacheResponse:fromDataSource:]):

2009-08-05  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Add my name to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=28013

        Add my name to committers.py.

        * Scripts/modules/committers.py:

2009-08-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        A minor refactoring of the Qt DRT to be a bit more similar to
        the other DRTs, as well as more understandable.

        Splitting up resetJSObjects into a LayoutTestController->reset()
        plus a new closeRemainingWindows() method.

        Added a resetToConsistentStateBeforeTesting() method to keep
        the code in one place, making it easier to verify that we are
        doing things properly.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::closeRemainingWindows):
        * DumpRenderTree/qt/DumpRenderTree.h:

2009-08-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make the Qt DRT WorkQueue work similarily to the cross platform
        one. This means that all items return true if they started
        loading.

        This change paves the way for unforking the WorkQueue, if we [Qt]
        would like that.

        * DumpRenderTree/qt/WorkQueue.cpp:
        (WorkQueue::processWork):
        * DumpRenderTree/qt/WorkQueue.h:
        * DumpRenderTree/qt/WorkQueueItem.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LoadItem::invoke):
        (ReloadItem::invoke):
        (ScriptItem::invoke):
        (BackForwardItem::invoke):
        (LayoutTestController::processWork):
        (LayoutTestController::maybeDump):

2009-08-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        If load of a test fails, don't dump as it will be dumped
        in the preceding test, resulting in a invalid incorrect layout.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::maybeDump):

2009-08-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make the Qt DumpRenderTree more similar to the mac one.

        Changes include:
        1) Reset zoom factor before each test
        2) Only dump the backforward list when we got other dump result
        3) When we dump the render tree, and got zero result print out:
           [mainFrame renderTreeAsExternalRepresentation]
           and not:
           [frame renderTreeAsExternalRepresentation]

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):
        (WebCore::methodNameStringForFailedTest):
        (WebCore::DumpRenderTree::dump):

2009-08-05  chris fleizach  <cfleizach@apple.com>

        Fix Tiger build breakage.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27994 - WAI-ARIA: aria-valuetext needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=27994

        Expose valueDescription for accessibility. 

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getValueDescriptionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::valueDescription):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::valueDescription):

2009-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        REGRESSION: run-webkit-tests crashes if you have non-system perl in PATH
        https://bugs.webkit.org/show_bug.cgi?id=28006

        Hard-code perl to /usr/bin/perl and swig to /usr/bin/swig

        * DumpRenderTree/mac/PerlSupport/Makefile:

2009-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Add pkasting to bugzilla-tool as a committer
        https://bugs.webkit.org/show_bug.cgi?id=28002

        * Scripts/modules/committers.py:

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27993 - AXSliders are missing required attributes and actions
        https://bugs.webkit.org/show_bug.cgi?id=27993

        Add ability to check if any arbitrary action is supported.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (isActionSupportedCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isActionSupported):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isActionSupported):

2009-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool unit tests need a test harness
        https://bugs.webkit.org/show_bug.cgi?id=27977

        * Scripts/run-webkit-unittests: Added.

2009-08-04  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Gavin "Gavvy" Barraclough.

        Ensure that DumpRenderTreeSupport is regenerated when switching between OS versions
        by listing the DumpRenderTree binary as a dependency.  Xcode has the smarts to rebuild
        DumpRenderTree itself when switching OS versions so this dependency removes the need
        for any smarts in the Makefile.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2009-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool needs unit tests
        https://bugs.webkit.org/show_bug.cgi?id=26916

        Add some basic unit testing for scm.py.

        * Scripts/modules/scm.py:
        * Scripts/modules/scm_unittest.py: Added.

2009-08-04  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Fix --skipped=only mode to honor flags such as --no-http and platform ignored directories by checking
        to make sure the Skipped entries are not in the $ignoredDirectories array.  Directories commonly included
        are (http, media, compositing, wml, wcss).

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

        * Scripts/run-webkit-tests:

2009-08-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Jon Honeycutt.

        Bug 27958 - WAI-ARIA: Implement 'aria-required' attribute.
        https://bugs.webkit.org/show_bug.cgi?id=27958

        Exposed isRequired to DumpRenderTree for accessibility.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsRequiredCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isRequired):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isRequired):

2009-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool --commit-queue should validate commit-queue setter is a committer
        https://bugs.webkit.org/show_bug.cgi?id=27974

        With a test!

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/bugzilla_unittest.py:

2009-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(r46700): bugzilla-tool land-diff double-spaces ChangeLogs
        https://bugs.webkit.org/show_bug.cgi?id=27973

        The trailing comma (suppresses newlines) was lost in r46700.

        * Scripts/bugzilla-tool:

2009-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool has too many fatal errors
        https://bugs.webkit.org/show_bug.cgi?id=27969

        Replace several fatal errors with ScriptError exceptions.

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-08-04  Eric Seidel  <eric@webkit.org>

        No review, ChangeLog fix only.

        Fix a ChangeLog line-spacing disaster caused by:
        https://bugs.webkit.org/show_bug.cgi?id=27973

        Still unsure what the fix for bugzilla-tool will be.

2009-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool --commit-queue should only land commit-queue+ patches
        https://bugs.webkit.org/show_bug.cgi?id=27970

        commit-queue mode for bugzilla-tool
        https://bugs.webkit.org/show_bug.cgi?id=27918

        Make bugzilla tool smart enough to find the commit-queue+ flags and
        land those patches.
        When we call land-patches with --commit-queue, we should filter the
        patches we land to only those that have the commit-queue+ flag set.
        That way, when we call bugzilla-tool from a main commit queue process,
        we won't land the wrong patches.

        * Scripts/bugzilla-tool:

2009-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        committer logic should be split out of bugzilla.py into its own module

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

        I also added unit tests for the functionality I added.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/bugzilla_unittest.py: Added.
        * Scripts/modules/commiters_unittest.py: Added.
        * Scripts/modules/committers.py: Added.

2009-08-03  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Handle any kind of line endings in svn-apply and svn-unapply, instead
        of assuming LF.

        * Scripts/svn-apply:
        * Scripts/svn-unapply:

2009-08-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        bugzilla-tool land-patches needs --queue mode
        https://bugs.webkit.org/show_bug.cgi?id=27961

        Add a --commit-queue command line option to suppress user interaction.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-08-03  Mark Rowe  <mrowe@apple.com>

        Build fix.  Add installsrc, installhdrs and install targets.

        * DumpRenderTree/mac/PerlSupport/Makefile:

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        HTMLInputElement is not controllable by assistive technologies
        https://bugs.webkit.org/show_bug.cgi?id=27941

        Accessibility control of a slider required adding increment() and decrement()
        methods to AccessibilityObject, so expose thos methods on AccessibilityUIElement.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (incrementCallback): New, call UI element increment method.
        (decrementCallback): New, call UI element decrement method.
        (AccessibilityUIElement::getJSClass): Expose increment and decrement methods.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::increment): New, send NSAccessibilityIncrementAction to Mac wrapper.
        (AccessibilityUIElement::decrement): New, send NSAccessibilityDecrementAction to Mac wrapper.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::increment): New, do nothing.
        (AccessibilityUIElement::decrement): New, do nothing.

2009-08-02  David D. Kilzer  <ddkilzer@webkit.org>

        <http://webkit.org/b/27930> bugzilla-tool hates Tor Arne Vestbø

        Reviewed by Tor Arne Vestbø.

        * Scripts/bugzilla-tool:
        (set_reviewer_in_changelog): Made sure reviewer is properly
        encoded when calling replace().

2009-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by David Levin.

        Script for building the wxBrowser sample app for wx.
        https://bugs.webkit.org/show_bug.cgi?id=27619

        * wx/browser/wscript: Added.

2009-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Jan Alonzo.

        Scripts needed for the waf build.
        https://bugs.webkit.org/show_bug.cgi?id=27619

        * wx/build: Added.
        * wx/build/build_utils.py: Added.
        * wx/build/settings.py: Added.
        * wx/build/waf_extensions.py: Added.
        * wx/build/wxpresets.py: Added.

2009-08-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Make pixel test results more consistent across Mac OS X versions

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (createDifferenceImage): Avoid color correction when rendering the
            images into graphics contexts, so that the actual color values are
            compared, regardless of how the images are tagged.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Set the window’s color space to the
            main screen’s color space, even though the window is off-screen.

2009-08-01  Mark Rowe  <mrowe@apple.com>

        Try again to make the Qt build bot happy.

        * BuildSlaveSupport/test-result-archive: Create a placeholder file inside the newly-created
        directory to prevent 'zip' from failing due to the directory containing no files.

2009-08-01  Mark Rowe  <mrowe@apple.com>

        Try and make the Qt build bot happy.

        * BuildSlaveSupport/test-result-archive: Handle the case where run-webkit-tests generates
        no output files at all and thus does not create the layout-test-results directory.

2009-08-01  Mark Rowe  <mrowe@apple.com>

        Move the include of DumpRenderTreeSupport to after DumpRenderTree has been built.

        * Scripts/run-webkit-tests:

2009-08-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig and David D. Kilzer.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=27923>.
        Bug 27923: run-webkit-tests should not invoke "ps" repeatedly on Mac OS X

        run-webkit-tests invokes "ps" after each test on Mac OS X to determine whether DumpRenderTree is
        in the process of crashing.  We can do the same test more efficiently with a simple call to sysctl.
        I couldn't find any built-in way of doing this directly from perl, so we do it from a simple C module
        instead.  This speeds up run-webkit-tests by around 8%.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport.c: Added.
        (processIsCrashing):
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportTiger.pm: Added.  Tiger does not have the SWIG tool
        that is used to generate the Perl binding to the C code, so we fall back to the old implementation on Tiger.
        * DumpRenderTree/mac/PerlSupport/Makefile: Added.
        * Scripts/run-webkit-tests:

2009-08-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by David D. Kilzer.

        Display the reminder once rather than once per ChangeLog.

        * Scripts/prepare-ChangeLog:

2009-08-01  David Kilzer  <ddkilzer@apple.com>

        resolve-ChangeLogs: add error checking to git ls-files command on close()

        Reviewed by Eric Seidel.

        Item 2 of <https://bugs.webkit.org/show_bug.cgi?id=18599#c0>.

        * Scripts/resolve-ChangeLogs: Added error checking to close()
        after running git ls-files.  Added error checking to all
        system() calls by checking for a non-zero WEXITSTATUS($?).
        Changed "|| die;" expressions to "or die $!;".

2009-08-01  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/18599> resolve-ChangeLogs doesn't work with relative paths

        Reviewed by Eric Seidel.

        * Scripts/resolve-ChangeLogs: Used chdirReturningRelativePath()
        and determineVCSRoot() to change directories to the root of the
        project before running the command and to provide a path for
        removeChangeLogArguments() to make sure any ChangeLog arguments
        on the command line are still found.
        (canonicalRelativePath): Added.  Returns a canonical path (e.g.,
        stripping 'dir/../' from the path) relative to the current
        directory.
        (removeChangeLogArguments): Added argument which contains a
        relative path that must be prepended to any ChangeLog arguments.
        Used canonicalRelativePath() and File::Spec->catfile() to
        construct a normalized, relative path to each file.

2009-08-01  David Kilzer  <ddkilzer@apple.com>

        Implement VCSUtils::chdirReturningRelativePath()

        Reviewed by Eric Seidel.

        Step 2 to fix:
        <http://webkit.org/b/18599> resolve-ChangeLogs doesn't work with relative paths

        * Scripts/VCSUtils.pm:
        (VCSUtils::chdirReturningRelativePath): Moved here from
        chdirAndGetDifference() in svn-create-patch.
        * Scripts/svn-create-patch: Switched to use
        chdirReturningRelativePath() instead of chdirAndGetDifference().
        (chdirAndGetDifference): Removed.

2009-08-01  David Kilzer  <ddkilzer@apple.com>

        Implement VCSUtils::determineVCSRoot()

        Reviewed by Eric Seidel.

        Step 1 to fix:
        <http://webkit.org/b/18599> resolve-ChangeLogs doesn't work with relative paths

        * Scripts/VCSUtils.pm: Removed reference to webkitdirs module.
        (VCSUtils::EXPORT): Added &determineVCSRoot.  Realphabetized.
        (VCSUtils::determineGitRoot): Added.  Based on code in
        commit-log-editor.
        (VCSUtils::determineVCSRoot): Implemented using
        determineGitRoot() and determineSVNRoot().
        * Scripts/commit-log-editor: Replaced use of
        topLevelSourceDirectory() with determineVCSRoot().  Resorted
        use statements.
        (topLevelSourceDirectory): Removed.

2009-07-31  Daniel Bates  <dbates@intudata.com>

        Reviewed by Eric Seidel.
        
        https://bugs.webkit.org/show_bug.cgi?id=27757

        Resolves Perl redefinition warnings about functions tmpfile and tmpnam which are 
        defined in both File::Temp and POSIX.
        
        This stops the warnings by preventing the "import" method of File::Temp from being called,
        which would otherwise add these functions into the primary namespace. Note, "use POSIX" 
        will import these functions into the primary namespace anyway. We only need one instance
        of these functions in our namespace (or we get redefinition warnings), so lets use the 
        one's in the POSIX package.
        
        * Scripts/update-webkit-auxiliary-libs: Changed "use File::Temp" to "use File::Temp ()".
        * Scripts/update-webkit-support-libs: ditto

2009-07-31  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Add a top level build option to control datagrid support
        https://bugs.webkit.org/show_bug.cgi?id=27915

        * Scripts/build-webkit:

2009-07-31  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        check-webkit-style --git-commit has bugs if you select a commit in the past
        https://bugs.webkit.org/show_bug.cgi?id=27908

        * Scripts/check-webkit-style:
        (main): Made the git-commit command only select the first commit
        if a range is given (and print a warning).
        * Scripts/modules/scm.py:
        (SCM::create_patch_from_local_commit):
        (SCM::create_patch_since_local_commit):
        (SCM::commit_locally_with_message):
        (SCM::discard_local_commits):
        Added an error messages in case these aren't overriden.

        (Git::create_patch_since_local_commit):
        Added this command to allow doing a diff of everything after a given commit.

2009-07-31  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Speculative Qt build fix. Not reviewed.

        Add LayoutTestController::disableImageLoading() in jsobjects.h.

        * DumpRenderTree/qt/jsobjects.h:

2009-07-31  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6973106> and https://bugs.webkit.org/show_bug.cgi?id=27896
        Favicons are still loaded when automatic image loading is disabled.

        * DumpRenderTree/LayoutTestController.cpp:
        (disableImageLoadingCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::disableImageLoading):

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::disableImageLoading):

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::disableImageLoading): Stubbed for now.
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::disableImageLoading): Ditto.

2009-07-30  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        bugzilla-tool post-commits trunk..head errors out
        https://bugs.webkit.org/show_bug.cgi?id=27847

        Rename commit_ids_from_range_arguments to commit_ids_from_commitish_arguments
        and make it handle the new arguments format proposed in the bug.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-07-30  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        clean up build-webkit to use less copy/paste code and remove unneeded SVG warning
        https://bugs.webkit.org/show_bug.cgi?id=27857

        * Scripts/build-webkit:

2009-07-31  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27894> bugzilla-tool: Bugzilla.clear_attachment_review_flag() fails with ClientForm-0.2.10 and python-2.5

        Reviewed by Eric Seidel.

        * Scripts/modules/bugzilla.py:
        (Bugzilla.clear_attachment_review_flag): Specify which 'comment'
        form field to use when setting its value.

2009-07-31  Eric Seidel  <eric@webkit.org>

        Reviewed by David Kilzer.

        bugzilla-tool post-commits obsoletes its own work :(
        https://bugs.webkit.org/show_bug.cgi?id=27849

        Simple fix.  Use .add() instead of .update()

        * Scripts/bugzilla-tool:

2009-07-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Improve platform-detection in run-webkit-tests

        This prevents miss-detection of mac-* over Qt/Mac.

        * Scripts/run-webkit-tests:

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Cameron Zwarich.

        Teach buildbot to detect test cases that are missing results.

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

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Things work better when you create the correct directories.

        * Scripts/run-webkit-tests:

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Include some information about the error when we die.

        * Scripts/run-webkit-tests:

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Ensure that the path exists before writing results to it.
        Hopefully this will make the Windows build bot happy.

        * Scripts/run-webkit-tests:

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Treat and Jon Honeycutt.

        Teach run-webkit-tests to always store the actual results in the results directory for new tests.
        This allows us to give a working link to the results from the result summary page, even if we're
        not generating new results in to the tree.

        * Scripts/run-webkit-tests:

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Add a Qt Linux build bot.

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

2009-07-30  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

         Reviewed by Adam Roben.

         Add --minimal option to webkit-build.
         https://bugs.webkit.org/show_bug.cgi?id=27852

         This option disables all optional build features unless
         they are explicitly enabled.

         * Scripts/build-webkit:

2009-07-30  Jakub Wieczorek  <faw217@gmail.com>

        [Qt] Fix build with GCC 4.4.

        * DumpRenderTree/qt/ImageDiff.cpp:

2009-07-29  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

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

        [Qt] Support pixel tests in DumpRenderTree for the Qt port.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::open):
        (WebCore::DumpRenderTree::setDumpPixels):
        (WebCore::DumpRenderTree::dump):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/main.cpp:
        (main):

2009-07-29  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

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

        [Qt] Implement ImageDiff.

        * DumpRenderTree/qt/ImageDiff.cpp: Added.
        * DumpRenderTree/qt/ImageDiff.pro: Added.

2009-07-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        build-webkit: Reorder logic for determining the baseProductDir
        
        https://bugs.webkit.org/show_bug.cgi?id=27699

        We now do port-spesific probing for the product dir first, and then
        fall back to either the generic WEBKITOUTPUTDIR (which now also works
        on Mac), or WebKitBuild.
        
        Then we add the git branch if the git branch build option is enabled.
        
        Finally we massage the product dir based on the port. For example the
        Mac port will now always set the SYMROOT and OBJROOT configuration for
        XCode.
        
        Note that isAppleWinWebkit() and isCygwin() is not mutually exclusive,
        hence the normal if and not elsif in the last two blocks.

        * Scripts/webkitdirs.pm:

2009-07-29  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27082> bugzilla-tool: Add --no-close switch to land-patches

        Reviewed by David Levin.

        * Scripts/bugzilla-tool:
        (LandPatchesFromBugs.__init__): Added --no-close switch.
        (LandPatchesFromBugs.land_patches): Don't close the bug if the
        --no-close switch was used.  Always clear the review+ flag on
        every landed patch using the commit_text message when cleared.
        This prevents patches from showing up in the commit queue if
        reopened and provides consistency with all landed patches.
        * Scripts/modules/bugzilla.py:
        (Bugzilla.clear_attachment_review_flag): Added.

2009-07-29  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27815> bugzilla-tool: add -m/--description to post-commits command

        Reviewed by Eric Seidel.

        * Scripts/bugzilla-tool:
        (PostDiffAsPatchToBug.execute): Changed default patch name from
        "patch" to "Patch v1".
        (PostCommitsAsPatchesToBug.__init__): Added -m/--description
        switch.
        (PostCommitsAsPatchesToBug.execute): Use description provided by
        -m/--description switch first, else fall back to the commit
        message.

2009-07-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Levin.

        Make check-webkit-style support files as arguments.
        https://bugs.webkit.org/show_bug.cgi?id=27549

        * Scripts/check-webkit-style:
        Support files as argument. Change documentation and use basename
        on the binary name when used in the documentation. Also do not
        die when printing something containing non-ASCII characters.

2009-08-06  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Add validation for pointer and reference declaration as defined by webkit style guidelines to cpp_style.py.
        Add unit tests for validation and update existing c style cast test to be run explicitly as c validation.

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

        * Scripts/modules/cpp_style.py:
        * Scripts/modules/cpp_style_unittest.py:

2009-07-29  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27119> bugzilla-tool: Add create-bug command

        Reviewed by David Levin.

        Implement "create-bug" command for bugzilla-tool.

        * Scripts/bugzilla-tool: Added CreateBug class.
        (CreateBug.__init__): Added.
        (CreateBug.create_bug_from_commit): Added.
        (CreateBug.create_bug_from_patch): Added.
        (CreateBug.prompt_for_bug_title_and_comment): Added.
        (CreateBug.execute): Added.
        (BugzillaTool.__init__): Added create-bug command.
        * Scripts/modules/bugzilla.py:
        (Bugzilla.prompt_for_component): Added.
        (Bugzilla.check_create_bug_response_returning_bug_id_on_success): Added.
        (Bugzilla.create_bug_with_patch): Added.

2009-07-29  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel and Xan Lopez.

        [Gtk] Enable http/tests/appcache tests
        https://bugs.webkit.org/show_bug.cgi?id=27674

        Add support for testing http/tests/appcache tests.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAppCacheMaximumSize):

2009-07-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Prevent nightly builds of WebKit from launching against old Safari versions that we no longer work with.

        * WebKitLauncher/main.m:
        (checkSafariVersion): Add a minimum required Safari version of 4.0.  This matches the requirement on Windows.
        (main): If the minimum version requirement is not met, display an alert and bail out.

2009-07-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        cpplint* should be named cpp_style*
        https://bugs.webkit.org/show_bug.cgi?id=27752

        The files were renamed. A few renames were done:
          CppLint -> CppStyle
          cpplint -> cpp_style

        * Scripts/check-webkit-style:
        * Scripts/modules/cpp_style.py: Copied from cpplint.py and
          did name fix ups.
        * Scripts/modules/cpp_style_unittest.py: Copied from cpplint_unittest.py and
          did name fix ups.
        * Scripts/modules/cpplint.py: Removed.
        * Scripts/modules/cpplint_unittest.py: Removed.

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Holger Freyther.
        
        Add Steve Falkenburg to bugzilla-tools' reviewers list

        * Scripts/modules/bugzilla.py:

2009-07-28  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Implement test result archive support for the Qt port.

        * BuildSlaveSupport/test-result-archive:

2009-07-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=27755
        Layout tests that dump resource load delegate calls should dump the request method and the response status code.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[NSURLResponse _drt_descriptionSuitableForTestResult]):
        (-[NSURLRequest _drt_descriptionSuitableForTestResult]):

        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (descriptionSuitableForTestResult):

2009-07-27  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by David Levin.

        "bugzilla-tool post-commit head" doesn't work because it can't find the bug id from the commit load.
        https://bugs.webkit.org/show_bug.cgi?id=27747

        modules.bugzilla is not found because not included.

        * Scripts/modules/scm.py: Properly import modules.bugzilla.

2009-07-24  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by David Kilzer.

        commit-log-editor should allow git commit --amend to regenerate the commit log based on the modifed ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=27664

        * Scripts/commit-log-editor: Add --regenerate-log option.
        The user is asked if he wants to suppress previous ChangeLog and regenerate it,
        if this option is enabled.

2009-07-27  Gabor Rapcsanyi  <rapcsanyi.gabor@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Generating remote links causes a lot of unnecessary spew on Qt build bot too

        * Scripts/run-webkit-tests:

2009-07-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Windows build break due to warning C4819
        https://bugs.webkit.org/show_bug.cgi?id=27416

        Disable C4819 warning to fix build.

        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2009-07-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Add Kevin McCullough as reviewer in bugzilla.py

        * Scripts/modules/bugzilla.py:

2009-07-24  Eli Fidler  <eli.fidler@torchmobile.com>

        Reviewed by Adam Treat.

        Improve git workflow by populating commit messages with ChangeLog entries.
        https://bugs.webkit.org/show_bug.cgi?id=27605

        If the user doesn't manually modify the ChangeLog files, use
        prepare-ChangeLog to populate the git commit message. This behaviour
        can be disabled by the 'webkitGenerateCommitMessage' git configuration option.

        * Scripts/commit-log-editor:

2009-07-24  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        cpplint crash when there is a duplicate header followed by another header.
        https://bugs.webkit.org/show_bug.cgi?id=27625

        * Scripts/modules/cpplint.py: Ensure that include_state.header_types is updated even
          there is a duplicate header, which resulted in some code rearrangement.  Also,
          changed some if's in this function to return early.  This avoids having nearly the
          whole function content being indented.
        * Scripts/modules/cpplint_unittest.py: Added a test which would have exposed the crash.

2009-07-24  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

         Reviewed by Adam Treat.

         Filetype support changes for cpplint and check_webkit_style
         https://bugs.webkit.org/show_bug.cgi?id=27653

         Introduce .c support for check_webkit_style, and remove support for
         .cc files in favor of .cpp.

         * Scripts/check-webkit-style:
         * Scripts/modules/cpplint.py:
         * Scripts/modules/cpplint_unittest.py:

2009-07-24  Eli Fidler  <eli.fidler@torchmobile.com>

        Reviewed by David Levin.

        Improve git workflow by populating commit messages with ChangeLog entries.
        https://bugs.webkit.org/show_bug.cgi?id=27605

        add --[no-]write prepare-ChangeLog options to bash completion

        * Scripts/webkit-tools-completion.sh:

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        Adds a new method on the LayoutTestController that
        allows a JS unit test to configure the maximum size
        of the Application Cache.

        * DumpRenderTree/LayoutTestController.cpp:
        (setAppCacheMaximumSizeCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setAppCacheMaximumSize):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setAppCacheMaximumSize):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setAppCacheMaximumSize):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setAppCacheMaximumSize):

2009-07-24  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        Added andersca to list of reviewers.

        * Scripts/modules/bugzilla.py:

2009-07-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Xan Lopez.

        Fix dozens of "Deallocation of a pointer not malloced" messages seen while running
        layout tests on the build bot.

        Memory allocated via FastMalloc was being deleted via the system memory allocator
        due to an inconsistent including of FastMalloc.h.  We address this by including it
        from config.h and including config.h from every implementation file, as in our other
        projects.

        * DumpRenderTree/ForwardingHeaders/wtf/FastMalloc.h: Copied from JavaScriptGlue/ForwardingHeaders/wtf/FastMalloc.h.
        * DumpRenderTree/config.h:
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/CheckedMalloc.cpp:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.mm:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/GCControllerMac.mm:
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        * DumpRenderTree/mac/NavigationController.m:
        * DumpRenderTree/mac/ObjCController.m:
        * DumpRenderTree/mac/ObjCPlugin.m:
        * DumpRenderTree/mac/ObjCPluginFunction.m:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * DumpRenderTree/mac/PlainTextController.mm:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TextInputController.m:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/mac/WorkQueueItemMac.mm:

2009-07-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Hausmann.

        Add a command line option to run-javascriptcore-tests to explicitly opt out of attempting to rebuild JavaScriptCore.
        This is primarily useful to speed up the build bots where one machine builds JavaScriptCore and a second runs the tests,
        leading to situations where the build system unnecessarily feels that the need to recompile.

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

2009-07-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel.

        [Gtk] Add implementation of GCController for DRT
        https://bugs.webkit.org/show_bug.cgi?id=27636

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webViewWindowObjectCleared):
        (main):
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):

2009-07-23  Mark Rowe  <mrowe@apple.com>

        Update build.webkit.org config for new machine.

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

2009-07-23  Brady Eidson  <beidson@apple.com>

        Remove accidentally checked in code.

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (waitUntilDoneWatchdogFired):
        (LayoutTestController::setWaitToDump):

2009-07-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen.

        WebCore has a few places that don't gracefully handle a null request returned from willSendRequest.
        https://bugs.webkit.org/show_bug.cgi?id=27595

        Add the ability to tell the LayoutTestController to return a null request for willSendRequest
        redirect callbacks.
        
        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (setWillSendRequestReturnsNullOnRedirectCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::willSendRequestReturnsNullOnRedirect):
        (LayoutTestController::setWillSendRequestReturnsNullOnRedirect):

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::willSendRequest):

2009-07-23  Mark Rowe  <mrowe@apple.com>

        Reviewed Oliver Hunt.

        Fix DumpRenderTree to not fail an assertion on launch on a new machine.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Disable the XSS auditor.  It being enabled
        breaks all of the JavaScript tests within testStringByEvaluatingJavaScriptFromString,
        which causes us to exit due to an assertion failure.  It's not clear why the XSS auditor
        decides to interfere with these tests.

2009-07-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Update default state of the XSS auditor in GTK DumpRenderTree to match Mac and Windows
        in hopes of fixing some layout test failures seen on the build bot.

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

2009-07-23  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

         Reviewed by Adam Treat.

         Fix false positives for switch statement indentation check in cpplint.
         https://bugs.webkit.org/show_bug.cgi?id=27615

         Makes one-line case statements (e.g. "case foo: bar();") work.
         Also a few general improvements to the robustness and readability of
         the check, and more test cases.

         * Scripts/modules/cpplint.py:
         * Scripts/modules/cpplint_unittest.py:

2009-07-23  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

         Reviewed by Adam Treat.

         Add check for line-breaking rule #3 to cpplint.
         https://bugs.webkit.org/show_bug.cgi?id=27610

         "An else if statement should be written as an if statement when
         the prior if concludes with a return statement."

         Implemented by a multi-line (kind of back-tracking) algorithm.
         Comes with loads of unit tests. Fixes the check for label indentation
         to be not so overzealous, as it didn't allow for completely unindented
         goto labels (at the very start of a line).

         * Scripts/modules/cpplint.py:
         * Scripts/modules/cpplint_unittest.py:

2009-07-23  Eli Fidler  <eli.fidler@torchmobile.com>

         Reviewed by Adam Treat.

         Improve git workflow by populating commit messages with ChangeLog entries.
         https://bugs.webkit.org/show_bug.cgi?id=27605

         add --[no-]write option to optionally output new ChangeLog entries to
         stdout instead of modifying ChangeLog files

         fix Torch Mobile copyright

         * Scripts/prepare-ChangeLog:

2009-07-23  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by Adam Treat.

        Enable cpplint for .c files.
        https://bugs.webkit.org/show_bug.cgi?id=27604

        Also make sure that the check for NULL does not apply to .c files.

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-22  Steve Falkenburg  <sfalken@apple.com>

        Checkpoint new Windows nightly launcher.
        
        Reviewed by Mark Rowe.

        * WebKitLauncherWin: Added.
        * WebKitLauncherWin/Resource.h: Added.
        * WebKitLauncherWin/WebKitLauncherWin.cpp: Added.
        (getStringValue): Retrieve a string registry value.
        (applePathFromRegistry): Get an Apple-related path out of the registry.
        (copyEnvironmentVariable): Copy an environment variable.
        (safariInstallDir): Helper function to get the install directory for Safari.
        (safariBrowserExe): Helper function to get the full path of the Safari executable.
        (_tWinMain): Locate Safari and launch it after setting up an environment variable.
        * WebKitLauncherWin/WebKitLauncherWin.h: Added.
        * WebKitLauncherWin/WebKitLauncherWin.rc: Added.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj: Added.
        * WebKitLauncherWin/webkit.ico: Added.

2009-07-22  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        run-webkit-lint should be named check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=27568

        This name better reflects the fact that it is about checking the style of files.

        * Scripts/check-webkit-style: Renamed from WebKitTools/Scripts/run-webkit-lint.

2009-07-22  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Darin Adler.

        VC++ 2005 Express failed to build WebKit due to raw UTF-8 string in WebKit/win/WebCoreLocalizedStrings.cpp
        https://bugs.webkit.org/show_bug.cgi?id=26375

        Make it able to use hexadecimal escape sequences in .*UI_STRING(_KEY)? macros. Now,
        the extract-localizable-strings script unescapes hexadecimal escape sequences in string literals
        in the macros before writing out them into the file to update.

        By this fix, we can eliminate raw UTF-8 strings in source code while using raw UTF-16 big endian
        strings in the Localizable.strings file.

        Bonus: There's no longer extract-webkit-localizable-strings script. Fix usage message to guide
        users to update-webkit-localizable-strings.

        * Scripts/extract-localizable-strings:

2009-07-22  Shinichiro Hamaji  <hamaji@google.com>

        Reviewed by David Levin.

        Tiny typo fixes for cpplint.py
        https://bugs.webkit.org/show_bug.cgi?id=27530

        * Scripts/modules/cpplint.py:

2009-07-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        run-webkit-lint checks code which are not changed
        https://bugs.webkit.org/show_bug.cgi?id=27529

        Add check if the line is newly added.

        * Scripts/run-webkit-lint:

2009-07-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        run-webkit-lint should have --git-commit option
        https://bugs.webkit.org/show_bug.cgi?id=27528

        * Scripts/modules/cpplint.py:
        * Scripts/run-webkit-lint:

2009-07-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Factor svn-create-patch's "determineSvnRoot()" into a function in
        VCSUtils.pm so commit-log-editor can use it too.

        * Scripts/VCSUtils.pm: Add determineSVNRoot().
        * Scripts/commit-log-editor: Use determineSVNRoot() instead of old
          code (which didn't work as well).
        * Scripts/svn-create-patch: Remove determineSvnRoot() (moved).

2009-07-22  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by Adam Treat.

        Fix false positives in namespace indentation checks.
        https://bugs.webkit.org/show_bug.cgi?id=27567

        The regular expression detecting goto labels (in order
        to skip those) was too permissive, which caused other
        code like "Foo::Bar()" to be treated as a label too,
        thereby not stopping the processing loop as expected.

        Now comes with a stricter regexp, and more demanding
        test cases to check for these issues.

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-22  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by Adam Treat.

        Fix cpplint generating false positives for
        "primary" includes in headers.
        https://bugs.webkit.org/show_bug.cgi?id=27553

        Doing so by only flagging includes in header files
        as primary when the include filename exactly matches
        the header filename.

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-22  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by Adam Treat.

        cpplint generates false positives for primary includes
        https://bugs.webkit.org/show_bug.cgi?id=27544

        Fix false positives for instances when cpplint would
        normally classify multiple includes as primary: After
        the first primary include, classify subsequent ones as
        "other" includes even if they look like primary ones.

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-22  Gabor Rapcsanyi  <rapcsanyi.gabor@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Pass XAUTHORITY environment variable to $dumpTool as well.

        * Scripts/run-webkit-tests:

2009-07-21  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

         Reviewed by Adam Treat.

         Add check for correct wtf includes to cpplint.
         https://bugs.webkit.org/show_bug.cgi?id=27524

         * Scripts/modules/cpplint.py:
         * Scripts/modules/cpplint_unittest.py:

2009-07-21  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by David Levin.

        Add checks for multi-line boolean operator placement.
        https://bugs.webkit.org/show_bug.cgi?id=27496

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-21  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Levin.

        We can't match implementation file and primary header exactly
        since we have so many files in WebKit where the port suffix
        is appended to the filename.

        Example: FooQt.cpp and the primary header is Foo.h.

        * Scripts/modules/cpplint.py:

2009-07-21  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by David Levin.

        Add checks for switch statement indentation to cpplint.
        https://bugs.webkit.org/show_bug.cgi?id=27508

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Feature request: cpplint should check for braces - rule 2
        https://bugs.webkit.org/show_bug.cgi?id=27497

        Add the requested feature: Make sure { is on the same line
        as the foreach "keyword".

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-20  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by David Levin.

        Add checks for namespace indentation to cpplint.
        https://bugs.webkit.org/show_bug.cgi?id=27461

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-20  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Levin.

        Add cpplint check for proper include order
        https://bugs.webkit.org/show_bug.cgi?id=27462

        Add a new check to cpplint to flag cases where the include section of a file
        does not match the mandated include order and style of the Webkit coding style
        guidelines.

        Add associated tests.

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        Support lint for patches
        https://bugs.webkit.org/show_bug.cgi?id=27291

        Add run-webkit-lint script, which lints recent changes in local
        repository.  Also, modified cpplint.py so that we don't need to
        specify verbose level for process_file().

        * Scripts/modules/cpplint.py:
        * Scripts/run-webkit-lint: Added.

2009-07-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        diff_parser should accept lines without trailing \n
        https://bugs.webkit.org/show_bug.cgi?id=27483

        Normalize the input lines by removing a trailing newline.
        Also, add a case for unittest for newly added files.

        * Scripts/modules/diff_parser.py:
        * Scripts/modules/diff_parser_unittest.py:

2009-07-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        cpplint.py's process_file() should accept customized error function
        https://bugs.webkit.org/show_bug.cgi?id=27487

        * Scripts/modules/cpplint.py:

2009-07-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        cpplint.py should have an interface to get global error count
        https://bugs.webkit.org/show_bug.cgi?id=27486

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        cpplint's parse_argument should not exit even if no files are specified
        https://bugs.webkit.org/show_bug.cgi?id=27489

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        diff_parser: s/add_deleted_line/add_old_line/g
        https://bugs.webkit.org/show_bug.cgi?id=27484

        * Scripts/modules/diff_parser.py:

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        * Scripts/build-webkit: Added flag ENABLE_RUBY.

2009-07-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by David D. Kilzer.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=27482>.
        Bug 27482: svn-apply cannot apply patch generated by Windows SVN

        A regexp in svn-apply was treating everything prior to a \n as part of the
        file name.  The native Windows SVN client uses \r\n for line endings which
        meant that the \r was being included in the file name.  This defeated the
        special-case logic for ChangeLogs to apply them with an increased fuzz factor,
        meaning that the ChangeLog portions of such patches would fail to apply.

        Also updated two other regexps that look like they would hit similar problems
        with line-endings so that they will correctly handle patches from Windows SVN.

        * Scripts/svn-apply:

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27468
        Back out r46060, which caused problems for some Apple developers.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Use shorter, more correct code for determining the current directory,
        which works better with symbolic links on some systems.  Also switch
        from checking repository root to checking UUID, to match scm.py.

        * Scripts/svn-create-patch:

2009-07-20  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Work around <rdar://problem/7075373> by ensuring that the URL is absolute before handing it off to CoreText.

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

2009-07-20  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        Enable filename completion for run-webkit-test (added "-o default").

        * Scripts/webkit-tools-completion.sh:

2009-07-20  Simon Hausmann  <simon.hausmann@nokia.com>

        No review, just adding Gavin Barraclough as reviewer.

        * Scripts/modules/bugzilla.py:

2009-07-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by David Levin.

        Add support for Qt's foreach to cpplint 
        https://bugs.webkit.org/show_bug.cgi?id=27386

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        https://bugs.webkit.org/show_bug.cgi?id=27145
        [Gtk][REGRESSION] subframe-navigate-during-main-frame-load.html fails after r45615

        Reviewed by Gustavo Noronha.

        Normalize file URLs.

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

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Further improve non-Cygwin SVN support.

        * Scripts/prepare-ChangeLog: Harmless change to be consistent with other
          places that consume whitespace at the end of svn output.
        * Scripts/resolve-ChangeLogs: Add support for SVN 1.6.  Slightly
          optimize svn info parsing based on technique in svn-create-patch.
          Normalize paths and consume whitespace in the same way as
          prepare-ChangeLog, for Windows systems with a non-Cygwin SVN.  Force
          diff and patch to run in binary mode so that they won't
          "intelligently" screw up line endings.

2009-07-18  Simon Fraser  <simon.fraser@apple.com>

        Fix Tiger DRT build.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:

2009-07-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        DRT doesn't reliably snapshot composited layers
        https://bugs.webkit.org/show_bug.cgi?id=27399
        
        If we're doing an "onscreen" pixel capture, it means that we're snapshotting a view
        with composited content. In that case we need to force the view to display so that
        the composited layers are rendered to the screen.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

2009-07-17  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        bugzilla-tool does not understand nested SVN repos
        https://bugs.webkit.org/show_bug.cgi?id=27404

        Determine the root of the working copy by looking at SVN's UUIDs.

        * Scripts/modules/scm.py:

2009-07-17  David Levin  <levin@chromium.org>

        Reviewed by Mark Rowe.

        webkit-tools-completion.sh has two typos and sorting issues.
        https://bugs.webkit.org/show_bug.cgi?id=27401

        * Scripts/webkit-tools-completion.sh: Fix two typos "--dif" and "-clean".
          Also, sort all lists including items in the case statement and flags for
          the commands.

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Tweak some regexes for correctness.

        * Scripts/prepare-ChangeLog: Allow 1-character filenames (my previous
          change here didn't quite get things right).
        * Scripts/update-webkit: Detect conflicting ChangeLogs correctly by not
          including any trailing whitespace in the name "ChangeLog", and by
          normalizing paths before calling basename() to avoid confusing it.
          (normalizePath() copied from prepare-ChangeLog.)

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:
        * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj:

2009-07-17  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        WebKit should have a bash completion script to aid with common commands.
        https://bugs.webkit.org/show_bug.cgi?id=27374

        * Scripts/webkit-tools-completion.sh: The script which enables option completion
          for several WebKit command line scripts.

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Avoid error spew on Macs, and fix a few other tiny details.

        * Scripts/svn-create-patch:

2009-07-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27377
        This makes cpplint complain about this for instance:

            if (true)
            {
                int foo;
            }

        Add the appropriate unit tests.

        * Scripts/modules/cpplint.py:
        * Scripts/modules/cpplint_unittest.py:

2009-07-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27377
        Don't filter whitespace at the end of the line.  This is not
        explicitly a rule of webkit coding style, but there is no reason
        not to warn of this common style problem.

        Don't filter whitespace newline. Now, cpplint will complain
        about the following situation:

            if (true) {
                doSomething();
                doSomethingAgain();
            }
            else
                doSomething();

        Which is a webkit coding style rule violation.

        * Scripts/modules/cpplint.py:

2009-07-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27377
        Move this comment to where it belongs.

        * Scripts/modules/cpplint_unittest.py:

2009-07-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Correct crash in WinLauncher due to improper mixing of BSTR
        and TCHAR types.
        https://bugs.webkit.org/show_bug.cgi?id=27381

        * WinLauncher/WinLauncher.cpp:
        (loadURL): Perform SysReAllocString to update the BSTR with
          the contents of the TCHAR string.

2009-07-17  David Levin  <levin@chromium.org>

        Reviewed by Adam Treat.

        cpplint should flag usages of NULL.
        https://bugs.webkit.org/show_bug.cgi?id=27341

        * Scripts/modules/cpplint.py: Add the check for NULL test and call it.
          Make the collapse_strings method public.
        * Scripts/modules/cpplint_unittest.py: Add several tests to verify
          the check for NULL behavior. Adjust existing tests due to the
          new NULL check:
           1. Several had NULL removed (or were just removed completely).
           2. Two tests now do an assert that allows the caller to check
              that a particular error is one of several that was returned.

2009-07-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        Add a parser of patches for linter.
        https://bugs.webkit.org/show_bug.cgi?id=27363

        Adds a simple parser for unified diff format.

        * Scripts/modules/diff_parser.py: Added.
        * Scripts/modules/diff_parser_unittest.py: Added.

2009-06-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [GTK+] Remove check to be loadable in firefox
        https://bugs.webkit.org/show_bug.cgi?id=27345

        if (aMozillaVTable->size < sizeof (NPNetscapeFuncs))
        fails in firefox but no other example in the mozilla tree is
        doing that check. Remove and be happy.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (NP_Initialize):

2009-07-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon Hausmann.

        Something about having a single TAB in a style checking tool like this
        is equivalent to nails on a chalk board to me...

        * Scripts/modules/cpplint.py:

2009-07-17  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Overwrite the plugin directories for the DRT.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27215

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add --web-sockets flag.

        * Scripts/build-webkit: add --web-sockets flag.

2009-07-16  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Dave Levin.

        cpplint should check for one line control clauses that are surrounded
        by braces
        https://bugs.webkit.org/show_bug.cgi?id=27354

        * Scripts/modules/cpplint.py: Added the new lint check.
        * Scripts/modules/cpplint_unittest.py: Add tests for the new lint check
          and fix the other tests as they were not passing this new lint check.

2009-07-16  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Improve support for WebKit checkouts hosted inside other checkouts
        (possible for some ports, e.g. Chromium).

        * Scripts/svn-create-patch: Determine SVN root by looking for Repository
          Root string and aborting when it's missing or different than what
          we've already seen.

2009-07-16  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Improve support for non-Cygwin SVNs on Windows.

        * Scripts/commit-log-editor: Modify regex so that trailing whitespace
          (e.g. \r) isn't included in filenames.
        * Scripts/prepare-ChangeLog: Fix a case of adding "\n" to the ChangeLog
          without normalizing.  Normalize file paths early instead of late so
          all stages of the script work.  Modify regexes so that trailing
          whitespace (e.g. \r) isn't included in filenames.
        * Scripts/svn-create-patch: Use a regex instead of chomp so we cut off
          line endings even if they don't match Perl's.

2009-07-16  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Darin Adler.

        WebKitTools/Scripts/svn-create-patch is broken
        https://bugs.webkit.org/show_bug.cgi?id=27328

        * Scripts/svn-create-patch: one line fix for unusual perl behavior

2009-07-16  David Levin  <levin@chromium.org>

        Reviewed by David Kilzer.

        cpplint should check for equality comparisons to 0/true/false
        https://bugs.webkit.org/show_bug.cgi?id=27333

        * Scripts/modules/cpplint.py: Added the new lint check.
        * Scripts/modules/cpplint_unittest.py: Add tests for the new lint check
          and fix a regex that in another unit test that caused it to fail when
          you have a directory with a number in it (like WebKit-2)

2009-07-16  David D. Kilzer  <ddkilzer@webkit.org>

        <http://webkit.org/b/27241> bugzilla-tool post-commits silently fails with bad args

        Reviewed by Eric Seidel.

        * Scripts/bugzilla-tool:
        (PostCommitsAsPatchesToBug.execute): Added more error checking
        when consuming arguments.

2009-07-16  David D. Kilzer  <ddkilzer@webkit.org>

        TOOL FIX: scm.py: CommitMessage.message is ambiguous

        Fixes this error when running bugzilla-tool apply-patches
        --local-commit:

        File "bugzilla-tool", line 188, in apply_patches
          scm.commit_locally_with_message(commit_message.message() or patch['name'])
        TypeError: 'list' object is not callable

        * Scripts/modules/scm.py: After r45940 (and r45971), rename
        CommitMessage.message attribute to CommitMessage.message_lines.
        (CommitMessage.__init__):
        (CommitMessage.body):
        (CommitMessage.description):
        (CommitMessage.message):
        (CommitMessage.parse_bug_id):

2009-07-16  David D. Kilzer  <ddkilzer@webkit.org>

        TOOL FIX: bugzilla-tool: import CommitMessage class

        * Scripts/bugzilla-tool: After r45940, the CommitMessage class
        needs to be imported for commit_message_for_this_commit().

2009-07-16  David Levin  <levin@chromium.org>

        Reviewed by Maciej Stachowiak.

        prepare-ChangeLog should display the --bug option in its help text.
        https://bugs.webkit.org/show_bug.cgi?id=27334

        * Scripts/prepare-ChangeLog: Added the help text.

2009-07-15  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: Check in the version used to
        rename parseURL to deprecatedParseURL.

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        bugzilla-tool: create CommitMessage class

        Reviewed by Eric Seidel.

        Create a CommitMessage class to encapsulate related code.

        * Scripts/bugzilla-tool:
         (bug_id_from_commit_message): Moved to
         CommitMessage.parse_bug_id().
         (commit_message_for_this_commit): Return a CommitMessage.
         (ApplyPatchesFromBug.apply_patches): Use CommitMessage.message().
         (LandPatchesFromBugs.build_and_commit): Ditto.
         (CommitMessageForCurrentDiff.execute): Ditto.
         (PostCommitsAsPatchesToBug.execute): Switched from
         Git.commit_message_for_commit() to
         Git.commit_message_for_local_commit().  Switched from
         bug_id_from_commit_message() to CommitMessage.parse_bug_id().

         * Scripts/modules/scm.py:
         (first_non_empty_line_after_index): Added.
         (CommitMessage.__init__): Added.
         (CommitMessage.body): Added.
         (CommitMessage.description): Added.
         (CommitMessage.message): Added.
         (CommitMessage.parse_bug_id): Added.  Moved from
         bug_id_from_commit_message() in bugzilla-tool.
         (Git.commit_message_for_local_commit): Renamed from
         commit_message_for_commit().  Return a CommitMessage.

2009-07-15  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by David Kilzer.

        bugzilla-tool/svn-apply can't handle patches made from a non-root directory
        https://bugs.webkit.org/show_bug.cgi?id=26999

        * Scripts/svn-create-patch:

2009-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        Move cpplint.py to module directory
        https://bugs.webkit.org/show_bug.cgi?id=27302

        * Scripts/modules/cpplint.py: Renamed from WebKitTools/Scripts/cpplint.py.
        * Scripts/modules/cpplint_unittest.py: Renamed from WebKitTools/Scripts/cpplint_unittest.py.

2009-07-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Adam Treat.

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

        Re-implement QWebPage::shouldInterruptJavaScript to disable
        js interruption and avoid showing a messagebox during Qt DRT
        runs when script execution takes a bit longer.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::shouldInterruptJavaScript): Return false
        in re-implemented slot.

2009-07-15  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Jan Alonzo.

        Fix the DumpRenderTree GTK+ build
        https://bugs.webkit.org/show_bug.cgi?id=27290

        Set USE_SYSTEM_MALLOC macro for the DumpRenderTree build to 
        disable using TCmalloc in DumpRenderTree.

        * GNUmakefile.am:

2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/ImageDiff.vcproj:

2009-07-14  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        WebKit needs a style linting tool
        https://bugs.webkit.org/show_bug.cgi?id=25884

        Modifies cpplint (http://google-styleguide.googlecode.com/svn/trunk/cpplint/)
        based on WebKit's style guide.

        * Scripts/cpplint.py: Added.
        * Scripts/cpplint_unittest.py: Added.

2009-07-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] DumpRenderTree no longer builds with Qt4.4
        https://bugs.webkit.org/show_bug.cgi?id=27257

        Flag Qt 4.5 dependency to allow building with Qt 4.4.

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

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Add new configuration flag for redistributable Windows build.
        https://bugs.webkit.org/show_bug.cgi=27087

        * DumpRenderTree/config.h: Check for presence of WIN_CAIRO and
          select appropriate configuration. Defaults to standard Apple build.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Add new WinCairo.vsprops
          to Debug_Cairo and Release_Cairo targets.

2009-07-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Always run the Qt DRT with the raster graphicssystem on X11, for
        increased stability in the image based tests, in particular canvas.

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

2009-07-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix test netscape plugin usage with the Qt DRT.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage): Enable plugins in the settings.
        * Scripts/run-webkit-tests: Set the QT_WEBKIT_PLUGIN path to the correct build
        directory to make Qt DRT find the test netscape plugin.

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Make sure to disable the fixed contents size when resetting the page/view
        state between test runs, to avoid side-effects.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open): Call setFixedContentsSize() with an invalid
        QSize to disable the fixed layout.

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        When creating new windows, don't forget to connect the new
        page's main frame. This ensures that for example the layoutTestController
        is also available there.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::createWindow):

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Added support for LayoutTestController.setPrivateBrowsingEnabled.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setPrivateBrowsingEnabled):
        * DumpRenderTree/qt/jsobjects.h:

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Added support for database callbacks, storage quota setting,
        and clearing of all databases.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree):
        (WebCore::DumpRenderTree::dumpDatabaseQuota):
        * DumpRenderTree/qt/DumpRenderTree.h:
        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::reset):
        (LayoutTestController::setDatabaseQuota):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/qt/jsobjects.h:
        (LayoutTestController::shouldDumpDatabaseCallbacks):
        (LayoutTestController::dumpDatabaseCallbacks):
        * DumpRenderTree/qt/main.cpp:
        (main):

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Setup the path in the Qt DRT for HTML 5 Databases, to enable some of
        the storage layout tests.

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

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Make the test output more robust by dumping only when the main
        frame finishes loading, instead of when _any_ frame finishes.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Connect to the
        main frame's loadFinished() signal instead of the page's one.

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Implement the GCController DRT interface.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Allocate the GCController.
        (WebCore::DumpRenderTree::initJSObjects): Register the interface with the JS engine.
        * DumpRenderTree/qt/DumpRenderTree.h: Declare m_gcController.
        * DumpRenderTree/qt/jsobjects.cpp: Implement GCController.
        (GCController::GCController):
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/qt/jsobjects.h: Declare GCController.

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Implement the GCController DRT interface in the Qt DRT.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::DumpRenderTree): Allocate the GCController.
        (WebCore::DumpRenderTree::initJSObjects): Register the interface with the JS engine.
        * DumpRenderTree/qt/DumpRenderTree.h: Declare m_gcController.
        * DumpRenderTree/qt/jsobjects.cpp: Implement GCController.
        (GCController::GCController):
        (GCController::collect):
        (GCController::collectOnAlternateThread):
        (GCController::getJSObjectCount):
        * DumpRenderTree/qt/jsobjects.h: Declare GCController.

2009-07-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        https://bugs.webkit.org/show_bug.cgi?id=26718 [Gtk] Add support for javascript windows for DRT

        Reviewed by Gustavo Noronha and Xan Lopez.

        Support running of tests that open and close JS windows automatically.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (dumpFramesAsText):
        (dumpBackForwardListForAllWebViews):
        (resetWebViewToConsistentStateBeforeTesting):
        (dump):
        (runTest):
        (webViewClose):
        (createWebView):
        (webViewCreate):
        (main):
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::windowCount):
        (LayoutTestController::setPopupBlockingEnabled):

2009-07-13  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Maciej Stachowiak.

        prepare-ChangeLog should decode HTML entities in short description
        https://bugs.webkit.org/show_bug.cgi?id=27122

        Decode the short description by adding a function which decodes HTML
        entities. It can decode &, <, >, ", and ' . They may be sufficient
        as the description seems to be encoded by xml_quote in
        http://mxr.mozilla.org/bugzilla/source/Bugzilla/Util.pm

        * Scripts/prepare-ChangeLog:

2009-07-13  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
        https://bugs.webkit.org/show_bug.cgi?id=26932

        Added support for --shared-workers (turned off by default)

        * Scripts/build-webkit:

2009-07-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=27196
        Update check-for-global-initializers for the renaming for bidi.cpp to
        RenderBlockLineLayout.cpp

        * Scripts/check-for-global-initializers:

2009-07-11  Simon Fraser  <simon.fraser@apple.com>

        Enable support for accelerated compositing and 3d transforms on Leopard.
        <https://bugs.webkit.org/show_bug.cgi?id=20166>
        <rdar://problem/6120614>

        Reviewed by Oliver Hunt.

        * Configurations/FeatureDefines.xcconfig:
        * wtf/Platform.h:

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27173> svn-apply: Fix typo in git command used to find deleted files

        Reviewed by Eric Seidel.

        * Scripts/svn-apply:
        (scmWillDeleteFile): Changed 'head' to 'HEAD'.

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27167> bugzilla-tool: hide help for unsupported commands

        Reviewed by Eric Seidel.

        When bugzilla-tool -h|--help is invoked in an svn working
        directory, don't print help for commands that are only supported
        on git working directories.

        * Scripts/bugzilla-tool:
        (Command.__init__): Added requires_local_commits argument with a
        default of False.  Set self.requires_local_commits attribute.
        (PostCommitsAsPatchesToBug.execute): Removed
        SCM.supports_local_commits() check since this is now handled by
        BugzillaTool.main().
        (PostCommitsAsPatchesToBug.__init__): Added
        requires_local_commits=True argument to Command.__init__().
        (BugzillaTool.commands_usage): Don't print help for commands if
        they require local commits and the current SCM doesn't support
        them.
        (BugzillaTool.main): If command_object requires local commits
        and the current SCM doesn't, exit with an error message.

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27117> bugzilla-tool: use Mac OS X keychain for authentication

        Reviewed by Eric Seidel.

        Try reading credentials from git config first, then keychain if
        running on Mac OS X, else prompt at the command-line.

        * Scripts/modules/bugzilla.py: Added "import platform".
        (credentials_from_git): Added.
        (credentials_from_keychain): Added.
        (is_mac_os_x): Added.
        (read_credentials): Added.
        (Bugzilla.__init__): Moved instance attribute bug_server to a
        static attribute named bug-server_url.
        (Bugzilla.bug_server_host): Added.  Extracted host name from
        bug_server_url.
        (Bugzilla.bug_server_regex): Updated to be created using
        bug_server_host.
        (Bugzilla.bug_server_url): Renamed from bug_server.
        (Bugzilla.bug_url_for_bug_id): Updated for renaming of
        bug_server to bug_server_url.
        (Bugzilla.attachment_url_for_id): Ditto.
        (Bugzilla.fetch_bug_ids_from_commit_queue): Ditto.
        (Bugzilla.authenticate): Ditto.  Updated to use
        read_credentials().
        (Bugzilla.add_patch_to_bug): Ditto.

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27115> bugzilla-tool: extract duplicate logging methods into a module

        Reviewed by Adam Roben.

        * Scripts/bugzilla-tool: Removed error() and log() methods and
        added import of new logging module.
        * Scripts/modules/bugzilla.py: Ditto.  Removed "import sys".
        * Scripts/modules/scm.py: Ditto.

        * Scripts/modules/logging.py: Added.
        (log): Added.
        (error): Added.  Prefix error messages with "ERROR: ".

2009-07-10  Adam Roben  <aroben@apple.com>

        Sort all our Xcode projects

        Accomplished using sort-Xcode-project-file.

        Requested by Dave Kilzer.

        * DrawTest/DrawTest.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:

2009-07-10  Adam Roben  <aroben@apple.com>

        Print prepare-ChangeLog's reminders to STDERR so they don't end up in
        the diff output

        Fixes REGRESSION (r45647): prepare-ChangeLog -d puts non-diff lines
        into the diff
        <https://bugs.webkit.org/show_bug.cgi?id=27150>

        Reviewed by Maciej Stachowiak.

        * Scripts/prepare-ChangeLog:

2009-07-08  Adam Roben  <aroben@apple.com>

        Use case-insensitive comparisons when sorting Xcode project files

        This matches the sorting used in Xcode's files list.

        Fixes Bug 27079: sort-Xcode-project-file should sort
        case-insensitively, to match Xcode's files list
        <https://bugs.webkit.org/show_bug.cgi?id=27079>

        Reviewed by Dave Kilzer.

        * Scripts/sort-Xcode-project-file:
        (sortChildrenByFileName):
        (sortFilesByFileName):
        Lowercase the strings before comparing them so that the comparison
        will be case-insensitive.

2009-07-08  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

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

        Fix side-effects in the Qt DRT with tests using application fonts.

        Detect if a test used application fonts and re-initialize the fontconfig
        application fontset accordingly.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open): call initializeFonts and remove all application fonts
        after running a testcase.
        (WebCore::DumpRenderTree::initializeFonts): Moved fontconfig initialization code
        here from main.
        * DumpRenderTree/qt/DumpRenderTree.h: Declare initializeFonts.
        * DumpRenderTree/qt/main.cpp:
        (main): Moved fontconfig initialization code to DRT::initializeFonts.

2009-07-10  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [QT] [ARM] Add pkg-config entry for FontConfig on DRT.pro
        https://bugs.webkit.org/show_bug.cgi?id=26990

        Missing pkg-config entry for FontConfig in DRT.pro causes some compilers to
        not link fine against FontConfig bits.

        * DumpRenderTree/qt/DumpRenderTree.pro:

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

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

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        can now be implemented for Web Workers and is reasonably stable.

        * Scripts/build-webkit:

2009-07-09  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/27114> bugzilla-tool: Parse short bug URL from commit log messages

        Reviewed by Adam Roben.

        * Scripts/bugzilla-tool:
        (bug_id_from_commit_message): Check for the short bug URL before
        checking for the longer bugs.webkit.org URL.

2009-07-08  David Kilzer  <ddkilzer@apple.com>

        Bug 27062: bugzilla-tool: post-commits should read bug id from commit log and actually work

        <https://bugs.webkit.org/show_bug.cgi?id=27062>

        Reviewed by Eric Seidel.

        Removed the required BUGID argument from the "post-commits"
        command and replaced it with a -b|--bug-id switch or parsing the
        commit log message for the bug URL.  Fixed a bug in the
        "post-commits" that would ignore the COMMITISH used and post a
        patch of local changes against HEAD.  Added --no-commit switch
        to disable using the bulk of the ChangeLog entry as the comment
        for the new patch.

        * Scripts/bugzilla-tool:
        (bug_id_from_commit_message): Added.  Returns a bug id from the
        commit log message, thus enforcing the need for a bug URL in the
        message.
        (PostCommitsAsPatchesToBug.__init__): Updated help description
        to match new behavior of pulling bug ids from commit log
        messages instead of from the command line.  Added -b|--bug-id
        switch and --no-comment switch.
        (PostCommitsAsPatchesToBug.execute): Updated to use
        bug_id_from_commit_message() to pull bug ids from commit log
        messages.  Also switched from SCM.create_patch() to use
        SCM.create_patch_from_local_commit() to fix a bug where local
        repository changes were posted as a patch instead of the
        specific COMMITISH.  Fall back to -b|--bug-id if no URL is found
        in the commit log message.  Don't specify a comment for the
        patch if --no-comment is used.  Set cherry_pick argument to True
        for Git.commit_ids_from_range_arguments() since we don't want
        implicit commit range behavior for this command.

        * Scripts/modules/bugzilla.py: Import datetime module.
        (timestamp): Added.  Returns a timestamp in the form of
        "YYYYMMDDhhmmss".
        (Bugzilla.bug_server_regex): Added static attribute.
        (Bugzilla.add_patch_to_bug): Construct a more meaningful patch
        file name using the bug_id and timestamp().

        * Scripts/modules/scm.py:
        (SCM.create_patch_from_local_commit): Added.
        (Git.create_patch_from_local_commit): Added.  Runs "git diff" to
        return a patch for the given commit_id.

2009-07-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Make prepare-ChangeLog less shouty
        https://bugs.webkit.org/show_bug.cgi?id=27098

        * Scripts/prepare-ChangeLog:

2009-07-08  David Kilzer  <ddkilzer@apple.com>

        Bug 27083: bugzilla.py: Clean up bug_server use

        <https://bugs.webkit.org/show_bug.cgi?id=27083>

        Reviewed by Darin Adler.

        * Scripts/modules/bugzilla.py:
        (Bugzilla.fetch_bug_ids_from_commit_queue): Use bug_server
        instead of hard-coding the URL.
        (Bugzilla.authenticate): Remove extra '/' before URL path.
        (Bugzilla.add_patch_to_bug): Ditto.

2009-07-08  Brent Fulgham  <bfulgham@webkit.org>

        Build fix for Windows Cairo.

        Cairo build was incorrectly #including the PixelDumpSupportCG.h
        instead of PixelDumpSupportCairo.h

        * DumpRenderTree/win/PixelDumpSupportWin.cpp: Correct #include

2009-07-08  David Faure  <faure@kde.org>

        Reviewed by Ariya Hidayat.

        Small documentation improvement for build-webkit --help

        * Scripts/build-webkit: mention --debug option

2009-07-07  Brady Eidson  <beidson@apple.com>

        Tiger build fix, work around missing NSString API.

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

2009-07-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27049 - In dumpBackForwardList() mode, DRT should normalize file urls.

        Make the dump of a history item agnostic to the layout of filesystem on the testing machine.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpHistoryItem):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem):

2009-07-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Correct git url of the Qt test-fonts.

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

2009-07-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Clear the main frame's name between loading pages, like in r36652. This
        reduces the side-effects between test cases.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):

2009-07-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Fix various layout tests with Qt's DRT.

        Remember to set the focus on the web page before
        loading.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::DumpRenderTree::open):

2009-07-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø and Holger Freyther.

        Fix timeout timer handling in Qt DRT.

        Use QBasicTimer instead of startTimer/killTimer, to fix the
        problem that starting the timeout timer did not stop a
        previously started timer, causing multiple emissions of timeout.
        The timerEvent() implementation now also checks the timer id, to
        protect against double timeouts.

        * DumpRenderTree/qt/jsobjects.cpp:
        (LayoutTestController::LayoutTestController):
        (LayoutTestController::reset):
        (LayoutTestController::waitUntilDone):
        (LayoutTestController::notifyDone):
        (LayoutTestController::timerEvent):
        * DumpRenderTree/qt/jsobjects.h:

2009-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        bugzilla-tool fails to close bugs with bugzilla 3.0
        https://bugs.webkit.org/show_bug.cgi?id=27008

        Update bugzilla.py to match changes in the bug page "changeform"
        Update scm.py to add bug_ids to attachments to make error reporting nicer.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-07-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric Seidel.

        bugzilla-tool forgot how to obsolete patches
        https://bugs.webkit.org/show_bug.cgi?id=26951

        * Scripts/modules/bugzilla.py:

2009-07-02  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix (Cairo this time) for DumpRenderTree.
        Put Cairo code back in, but use original include order
        for the CG stuff to avoid compile issues.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):

2009-07-02  Eric Seidel  <eric@webkit.org>

        Correct blatant typo (missing []), no review.

        * Scripts/modules/scm.py:

2009-07-02  Brent Fulgham  <bfulgham@webkit.org>

        Windows build fix, no review.


        Reverting PixelDumpSupportWin.cpp change to avoid strange
        error on the build-bot.
 
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):

2009-07-02  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, no review.

        * DumpRenderTree/config.h:

2009-07-02  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        bugzilla-tool needs to handle login failure
        https://bugs.webkit.org/show_bug.cgi?id=26913

        We now exit(1) on login failure.

        * Scripts/modules/bugzilla.py:

2009-06-30  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Add build support for a Windows Cairo version of
        DumpRenderTree.  Share as much logic between the
        CG and Cairo builds as possible.
        https://bugs.webkit.org/show_bug.cgi?id=26457

        * DumpRenderTree/PixelDumpSupport.cpp: Added.
        (dumpWebViewAsPixelsAndCompareWithExpected): Moved common logic
          from CG-specific file.
        (printPNG): Moved common logic from CG-specific file.
        * DumpRenderTree/PixelDumpSupport.h: Add declaration for new
          common printPNG function.
        * DumpRenderTree/cairo: Added.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp: Added.
          Implement cairo-specific logic for dealing with Cairo surfaces.
        (writeFunction):
        (printPNG): Cairo-specific PNG handling logic.
        (computeMD5HashStringForBitmapContext): New Cairo routine using
          the generic BitmapContext signature.
        (dumpBitmap): New function containing Cairo-specific portions of
          the dumping routine.
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h: Added.
          Provide Cairo version of the BitmapContext structure so that
          dumping routines can work on an abstract type.
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):
        (BitmapContext::cairoContext):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG): CG-specific PNG handling logic.
        (computeMD5HashStringForBitmapContext): Revised to use generic
          BitmapContext signature.
        (dumpBitmap): New function containing CG-specific portions of
          the dumping routine.
        * DumpRenderTree/cg/PixelDumpSupportCG.h: Add new signatures.
        * DumpRenderTree/win/DumpRenderTree.cpp: Disable CFNetwork logic
          when building the non-CFNetwork version.
        (main):
        * DumpRenderTree/win/DumpRenderTree.vcproj:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Provide parallel Cairo implementation
          of CG bitmap/context setup.

2009-07-02  Eric Seidel  <eric@webkit.org>

        No review, just adding Antti as a reviewer.

        * Scripts/modules/bugzilla.py:

2009-07-02  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

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

        [Qt] Set DRT's default fontsize to 13.

        * DumpRenderTree/qt/DumpRenderTree.cpp:
        (WebCore::WebPage::WebPage):

2009-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        bugzilla-tool fails for SVN users
        https://bugs.webkit.org/show_bug.cgi?id=26914

        To fix this I moved svn from -F - to using -m
        In order for -m to work I had to move us off of shell=True
        To move off of shell=True all call sites for run_command
        which take args, need to pass their args as an list instead of a string.

        In order for the final bug update to work correctly, I had to
        abstract the way that we parse out revision numbers from the commit text.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        prepare-ChangeLog should have a --bug= argument and use it for url autofill
        https://bugs.webkit.org/show_bug.cgi?id=26383

        prepare-ChangeLog now knows how to grab the bug title from bugs.webkit.org
        I also added a bit more template text in an effort to get better ChangeLogs
        from casual contributers.

        * Scripts/prepare-ChangeLog:

2009-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        prepare-ChangeLog should fail when EMAIL_ADDRESS or REAL_NAME are missing:
        https://bugs.webkit.org/show_bug.cgi?id=26692

        I also made prepare-ChangeLog sanity-check names and email addresses a little.
        Names must contain a space, and email addresses must contain '@'

        Also "fixed" $email_address to $emailAddress.  This script uses mixed variable name styles.

        * Scripts/prepare-ChangeLog:

2009-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 26900: AX: Manual spell check with Command-; does not bring up suggestions
        https://bugs.webkit.org/show_bug.cgi?id=26900

        Expose the ability to get the click point of an element through accessibility.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getClickPointXCallback):
        (getClickPointYCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):

2009-07-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Fraser.

        Change how WebKitNightlyEnabler.dylib lies about Safari's identity to LaunchServices.
        This makes WebKit.app behave as expected when set as the default web browser on a wider
        range of OS versions.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (poseAsWebKitApp):
        (enableWebKitNightlyBehaviour):

2009-07-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Simon Fraser.

        Shuffle some code around in preparation for a change to how poseAsWebKitApp works.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (systemVersion):
        (webKitLauncherBundle):
        (insideSafari4OnTigerTrampoline):

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26877
        [GTK] DRT fixes to pass new plugin test

        Silence compiler warnings.

        Newer GCC don't like using or returning a static string where a
        'char*' is expected. Ideally we'd change the function signatures
        to return or take 'const char*' I suppose, but since we can't do
        that just cast the strings to 'char*'.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_get_value):

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26877
        [GTK] DRT fixes to pass new plugin test

        Use the common pluginLog function instead of a local copy.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):
        (webkit_test_plugin_destroy_instance):
        (webkit_test_plugin_set_window):
        (webkit_test_plugin_handle_event):

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26877
        [GTK] DRT fixes to pass new plugin test

        Modify our DRT as done in bug #15457 to log logSrc as src in order
        to pass test plugins/netscape-plugin-map-data-to-src.html.

        * DumpRenderTree/gtk/TestNetscapePlugin/TestNetscapePlugin.cpp:
        (webkit_test_plugin_new_instance):

2009-06-30  Adrien Nader  <camaradetux@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] GtkLauncher depends on gtk+2-2.15 because of gtk_orientable_set_orientation()
        https://bugs.webkit.org/show_bug.cgi?id=26835

        * GtkLauncher/main.c:
        (create_toolbar):

2009-06-30  Eric Seidel  <eric@webkit.org>

        Typo fix only, no review.

        Fix typo causing failure during land-diff

        * Scripts/bugzilla-tool:

2009-06-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.
        
        Fix drawing of view background in pixel snapshots when using compositing.
        We still need to call -displayIfNeeded to ensure that the NSView drawing
        has happened.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

2009-06-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        createBitmapContextFromWebView() incorrectly used #ifdef BUILDING_ON_LEOPARD,
        and thus failed on SnowLeopard.
        
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):

2009-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Make bugzilla tool print a message explaining how to get help on failure:
        https://bugs.webkit.org/show_bug.cgi?id=26861

        % bugzilla-tool
        Usage: bugzilla-tool [options] command [command-options] [command-arguments]

        bugzilla-tool: error: No command specified

        Type 'bugzilla-tool --help' to see usage.

        * Scripts/bugzilla-tool:

2009-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Include a built copy of BeautifulSoup 3.1.0.1 so that
        bugzilla-tool users do not need to install it manually.
        https://bugs.webkit.org/show_bug.cgi?id=26833

        BeautifulSoup is BSD-licensed (thus WebKit compatible) and available from:
        http://www.crummy.com/software/BeautifulSoup

        * Scripts/bugzilla-tool: fixed a typo in a log message.
        * Scripts/modules/BeautifulSoup.py: Added.
        * Scripts/modules/bugzilla.py:

2009-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Hausmann.

        Fix our create_patch handling to not
        hang when creating large patches.
        https://bugs.webkit.org/show_bug.cgi?id=26834

        We're now using StringIO to make an in-memory buffer for the patch
        instead of piping from the patch command directly to the upload.
        The previous hang was caused by calling wait() when the process had already
        filed the stdout buffer.

        * Scripts/modules/scm.py:

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove more unused scons support.

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

2009-06-26  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Rename land-and-update to land-diff and make it awesome.
        https://bugs.webkit.org/show_bug.cgi?id=26734

        Renamed land-and-update to land-diff
        Made the BUGID argument optional.
        Added optional support for building and testing before landing.

        land-diff [options] [BUGID]    Lands the current working directory diff and updates the bug if provided.
          Options:
            -r REVIEWER, --reviewer=REVIEWER
                              Update ChangeLogs to say Reviewed by REVIEWER.
            --no-close        Leave bug open after landing.
            --no-build        Commit without building first, implies --no-test.
            --no-test         Commit without running run-webkit-tests.

        * Scripts/bugzilla-tool:

2009-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix - include stdarg.h for va_start/va_end.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:

2009-06-28  John Abd-El-Malek  <jam@chromium.org>

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

        Modify NPAPI test plugin to verify that "src" paramater is added when
        it's missing but "data" is present.

        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
        (pluginLog):
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
        (NPP_New):
        (NPP_Destroy):
        (NPP_SetWindow):
        (handleEventCarbon):
        (handleEventCocoa):
        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
        (NPP_New):

2009-06-27  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Don't use deprecated GTK+ symbols.
        https://bugs.webkit.org/show_bug.cgi?id=26583

        * GtkLauncher/main.c:
        (create_toolbar):

2009-06-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make SVN work (again?).

        * Scripts/modules/scm.py:

2009-06-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Add ability to query isEnabled

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsEnabledCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isEnabled):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isEnabled):

2009-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        Add a dumpResourceResponseMIMETypes() mode so the ResourceLoadDelegate will dump the mime type from
        the NSURLResponse.  Needed for the test for this bug fix.

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpResourceResponseMIMETypesCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpResourceResponseMIMETypes):
        (LayoutTestController::setDumpResourceResponseMIMETypes):

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):

2009-06-26  David Kilzer  <ddkilzer@apple.com>

        Update build-dumprendertree to use buildXCodeProject()

        Reviewed by Adam Roben.

        * Scripts/build-dumprendertree: Updated to use
        buildXCodeProject() when building for isAppleMacWebKit().  This
        provides additional command-line switch parsing for free.  Also
        added --clean and --help switches.  Updated copyright.

2009-06-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Remove non-sense --update option to land-patches
        and make land-patches update before every patch application.
        This makes it slightly less likely that multi-patch landings will fail.

        Also updated git diff command to include staged modifications.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Jan Alonzo.

        Fix obsolete_attachment to work when passed a comment.
        https://bugs.webkit.org/show_bug.cgi?id=26745

        * Scripts/modules/bugzilla.py:

2009-06-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        bugzilla-tool apply-patch throws exception in Linux
        https://bugs.webkit.org/show_bug.cgi?id=26738

        HEAD is case-sensitive in Linux. Convert uses of head to HEAD in
        the scm module.

        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Jan Alonzo.

        bugzilla-tool post-diff needs to obsolete old patches before posting
        https://bugs.webkit.org/show_bug.cgi?id=26740

        I've also added a --no-obsolete to disable this behavior.
        
        I also finally updated the bug page parsing to use XML. So much less code!

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Call WebKitTools/Scripts scripts by their absolute paths
        https://bugs.webkit.org/show_bug.cgi?id=26704

        bugzilla-tool used to use whatever build-webkit was in your path.
        That could end up building the wrong copy of WebKit.

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-06-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Dave Levin.

        Use unicode() instead of str when reading from bugzilla.
        Also add Simon Fraser as a reviewer.
        https://bugs.webkit.org/show_bug.cgi?id=26719

        * Scripts/modules/bugzilla.py:

2009-06-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Use Q_ASSERT in Qt's DumpRenderTree instead of JSC's ASSERT
        
        The WTFReportAssertionFailure function in JSC is not exported when
        building QtWebKit in both debug and release on Mac, so DRT fails to
        link.
        
        We can revert this patch once the Qt port builds JSC as a separate
        library, and we add the proper export macros to Assertions.cpp

        * DumpRenderTree/qt/WorkQueue.cpp:
        (WorkQueue::queue):
        (WorkQueue::dequeue):

2009-06-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Jan Alonzo.

        bugzilla-tool: Add Simon Hausmann as reviewer

        * Scripts/modules/bugzilla.py:

2009-06-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Levin.

        Support local commits during apply-patches
        and let land-patches take multiple bug ids.
        https://bugs.webkit.org/show_bug.cgi?id=26703

        I also restructured parts of land-patches into
        class methods and static methods in preparation
        for future code sharing with other commands.

        * Scripts/bugzilla-tool:
        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make svn-apply work with Git too
        https://bugs.webkit.org/show_bug.cgi?id=26299
        
        Add an --force option to svn-apply and otherwise make svn-apply
        exit non-zero when patch application fails.
        https://bugs.webkit.org/show_bug.cgi?id=26300

        I did not update svn-unapply, because it makes no sense in a Git world.
        You don't roll in and out patch files.  You make commits and deal with those.
        Git users can just git reset --hard to get the same functionality.

        * Scripts/svn-apply:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Remove use of os.system to fix reviewers with unicode chars in their names
        https://bugs.webkit.org/show_bug.cgi?id=26713

        Also change to latin1 encoding of ø to make python happy.

        * Scripts/modules/bugzilla.py:
        * Scripts/modules/scm.py:

2009-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Add Adam Roben and Tor Arne Vestbø to the reviewers list.

        * Scripts/modules/bugzilla.py:

2009-06-24  Chris Fleizach  <cfleizach@apple.com>

        Windows build fix.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::language):

2009-06-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26668: AX: need a way to retrieve the language for an element
        Support ability to retrieve AXLanguage for testing

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getLanguageCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::language):

2009-06-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.
        
        Spell Maciej's name right and add Brady Eidson.

        * Scripts/modules/bugzilla.py:

2009-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Levin.

        Fix missing comment message during land-patches and SVN.commit_with_message respecting --dry-run
        https://bugs.webkit.org/show_bug.cgi?id=26669

        * Scripts/bugzilla-tool:
        * Scripts/modules/scm.py:

2009-06-23  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Mark Rowe.

        Bug 26537: Builds from command-line fail if custom build product directory is set and ~/Library/Preferences/xcodebuild.plist exists
        https://bugs.webkit.org/show_bug.cgi?id=26537

        Let determineBaseProductDir subroutine remove
        ~/Library/Preferences/xcodebuild.plist. It can prevent xcodebuild from
        respecting global settings such as a custom build products directory
        (<rdar://problem/5585899>).

        * Scripts/webkitdirs.pm:

2009-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Levin.

        Make SCM.run_command smarter, and make all previous
        os.system and subprocess.popen use SCM.run_command instead.
        https://bugs.webkit.org/show_bug.cgi?id=26666

        This makes it easier to handle errors in a standard way throughout all the code.
        Since this new code raises by default when the exit_code != 0,
        we should prevent future problems of bugzilla-tool continuing after
        a git or svn command failed.

        * Scripts/modules/scm.py:

2009-06-23  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=26664
        * Scripts/prepare-ChangeLog: Added --git-index mode to list only the
        changes which are already staged in the index.  Useful to create an
        entry for what you're about to commit while ignoring unstaged changes.

2009-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.
        
        Update for WebKit changes.
        
        * DumpRenderTree/win/UIDelegate.h:
        (UIDelegate::willPerformDragSourceAction):

2009-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/modules/scm.py: Fix commit_with_message to return the commit output.

2009-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        * Scripts/modules/scm.py: Fix error seen when commiting r44979.

2009-06-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Levin.

        WebKit needs a script to interact with bugzilla and automate
        parts of the patch posting and commit processes.
        https://bugs.webkit.org/show_bug.cgi?id=26283

        This is really a first-draft tool.
        It's to the point where it's useful to more people than just me now though.
        Git support works.  SVN support is written, but mostly untested.

        This tool requires BeautifulSoup and mechanize python modules to run:
        sudo easy_install BeautifulSoup
        sudo easy_install mechanize

        More important than the tool itself are the Bugzilla, Git and SVN class abstractions
        which I hope will allow easy writing of future tools.

        The tool currently implements 10 commands, described below.

        Helpers for scripting dealing with the commit queue:
        bugs-to-commit                 Bugs in the commit queue
        patches-to-commit              Patches attached to bugs in the commit queue

        Dealing with bugzilla:
        reviewed-patches BUGID         r+'d patches on a bug
        apply-patches BUGID            Applies all patches on a bug to the local working directory without committing.
        land-and-update BUGID          Lands the current working directory diff and updates the bug.
        land-patches [options] BUGID   Lands all patches on a bug optionally testing them first
        obsolete-attachments BUGID     Marks all attachments on a bug as obsolete.
        commit-message                 Prints a commit message suitable for the uncommitted changes.

        These effectively replace git-send-bugzilla:
        post-diff BUGID                Attaches the current working directory diff to a bug as a patch file.
        post-commits BUGID COMMITISH   Attaches a range of local commits to a bug as patch files.

        post-diff works for SVN and Git, post-commits only works for SCMs with local-commit support (like Git)

        land-* commands in a Git environment only work with simple patches due to svn-apply bugs:
        https://bugs.webkit.org/show_bug.cgi?id=26299
        https://bugs.webkit.org/show_bug.cgi?id=26300

        This script follows python style (similar to how for Obj-C we follow AppKit style)
        http://www.python.org/doc/essays/styleguide.html
        The Python community has a strong style culture and the WebKit style guide is silent re: Python.

        I've filed a bug to update the WebKit style guide to mention python:
        https://bugs.webkit.org/show_bug.cgi?id=26524

        * Scripts/bugzilla-tool: Added.

2009-06-22  Steve Falkenburg  <sfalken@apple.com>

        Remove errant line of code mistakenly checked in.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2009-06-22  Steve Falkenburg  <sfalken@apple.com>

        Pass correct value to setShouldPaintNativeControls.
        
        Rubber stamped by Mark Rowe.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2009-06-22  Steve Falkenburg  <sfalken@apple.com>

        Fix last DumpRenderTree change to correctly set preferences flag without crashing.
        
        Reviewed by Mark Rowe.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2009-06-21  Steve Falkenburg  <sfalken@apple.com>

        Set up global native controls flag before creating the first WebView.
        
        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):

2009-06-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Set a sensible user agent string for the HTTP requests that Sparkle makes (checking for and downloading updates).

        * WebKitLauncher/WebKitNightlyEnablerSparkle.m:
        (userAgentStringForSparkle):
        (initializeSparkle):

2009-06-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Add a hook to the WebKit launcher application to allow a link on the nightly build start page to
        trigger an update via the built-in software update mechanism.

        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncherURLProtocol.h: Added.
        * WebKitLauncher/WebKitLauncherURLProtocol.m: Added.
        (+[WebKitLauncherURLProtocol load]):
        (+[WebKitLauncherURLProtocol canInitWithRequest:]): Only allow use of the x-webkit-launcher scheme from .webkit.org subdomains.
        (+[WebKitLauncherURLProtocol canonicalRequestForRequest:]):
        (-[WebKitLauncherURLProtocol startLoading]):
        (-[WebKitLauncherURLProtocol stopLoading]):
        (-[WebKitLauncherURLProtocol handleIsWebKitLauncherAvailableJS]): Return a brief JavaScript snippet that can be used to programatically
        determine whether the x-webkit-launcher is available and working.
        (-[WebKitLauncherURLProtocol handleCheckForUpdates]): Trigger a software update on the main thread.
        (-[WebKitLauncherURLProtocol resourceNotFound]): Fail with a generic "File does not exist" error.

2009-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha and Xan Lopez.

        [Gtk] Implement DRT XSS auditor support
        https://bugs.webkit.org/show_bug.cgi?id=26571

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setXSSAuditorEnabled):

2009-06-19  Darin Adler  <darin@apple.com>

        * Scripts/do-webcore-rename: More renaming ideas.

2009-06-15  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Tor Arne Vestbø.

        Only pass --makeargs along if an argument is given.

        * Scripts/build-webkit:

2009-06-19  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix Windows build.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setXSSAuditorEnabled):

2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Add support for testing the XSSAuditor.

        * DumpRenderTree/LayoutTestController.cpp:
        (setXSSAuditorEnabledCallback):
        (LayoutTestController::staticFunctions):
        * DumpRenderTree/LayoutTestController.h:
        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::setXSSAuditorEnabled):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::setXSSAuditorEnabled):
        (LayoutTestController::setPopupBlockingEnabled):
        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
        (LayoutTestController::setXSSAuditorEnabled):

2009-06-18  Darin Adler  <darin@apple.com>

        Rubber stamped by Mark Rowe.

        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]): Resolved crashes seen during regression
        tests. The close method can be called on a window that's already closed
        so we can't assert here.

2009-06-17  Steve Falkenburg  <sfalken@apple.com>

        Updated for consolidated WebKit COM interfaces.
        
        Reviewed by Adam Roben.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * WinLauncher/WinLauncher.h:

2009-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Make the commit-log-editor match the ambient line endings in commit
        messages.

        * Scripts/commit-log-editor:

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update GtkLauncher to recent API changes in the progress property,
        which now goes from 0.0 to 1.0.

        * GtkLauncher/main.c:

2009-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Teach prepare-ChangeLog to match the line ends that are already present
        in ChangeLog files.  This helps folks whose use cygwin perl with CR LF
        line endings on Windows.

        Also, teach prepare-ChangeLog to normalize backslashes in paths.  This
        helps folks who use Windows SVN prepare correct ChangeLogs.

        * Scripts/prepare-ChangeLog:

== Rolled over to ChangeLog-2009-06-16 ==
